Wed Apr 4 10:24:23 2018 UTC ()
doc/pkgsrc.*: regen


(leot)
diff -r1.249 -r1.250 pkgsrc/doc/pkgsrc.html
diff -r1.245 -r1.246 pkgsrc/doc/pkgsrc.txt

cvs diff -r1.249 -r1.250 pkgsrc/doc/pkgsrc.html (switch to unified diff)

--- pkgsrc/doc/pkgsrc.html 2017/11/27 11:52:49 1.249
+++ pkgsrc/doc/pkgsrc.html 2018/04/04 10:24:23 1.250
@@ -1,10354 +1,10354 @@ @@ -1,10354 +1,10354 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html> 2<html>
3<head> 3<head>
4<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 4<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
5<title>The pkgsrc guide</title> 5<title>The pkgsrc guide</title>
6<link rel="stylesheet" type="text/css" href="/global.css"> 6<link rel="stylesheet" type="text/css" href="/global.css">
7<meta name="generator" content="DocBook XSL Stylesheets VX.X.X"> 7<meta name="generator" content="DocBook XSL Stylesheets VX.X.X">
8<meta name="description" content="pkgsrc is a centralized package management system for Unix-like operating systems. This guide provides information for users and developers of pkgsrc. It covers installation of binary and source packages, creation of binary and source packages and a high-level overview about the infrastructure."> 8<meta name="description" content="pkgsrc is a centralized package management system for Unix-like operating systems. This guide provides information for users and developers of pkgsrc. It covers installation of binary and source packages, creation of binary and source packages and a high-level overview about the infrastructure.">
9</head> 9</head>
10<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book"> 10<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="book">
11<div class="titlepage"> 11<div class="titlepage">
12<div> 12<div>
13<div><h1 class="title"> 13<div><h1 class="title">
14<a name="the-pkgsrc-guide"></a>The pkgsrc guide</h1></div> 14<a name="the-pkgsrc-guide"></a>The pkgsrc guide</h1></div>
15<div><h2 class="subtitle">Documentation on the NetBSD packages system</h2></div> 15<div><h2 class="subtitle">Documentation on the NetBSD packages system</h2></div>
16<div><div class="authorgroup"> 16<div><div class="authorgroup">
17<div class="author"> 17<div class="author">
18<h3 class="author"> 18<h3 class="author">
19<span class="firstname">Alistair</span> <span class="surname">Crooks</span> 19<span class="firstname">Alistair</span> <span class="surname">Crooks</span>
20</h3> 20</h3>
21<div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:agc@NetBSD.org">agc@NetBSD.org</a>&gt;</code></p></div></div> 21<div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:agc@NetBSD.org">agc@NetBSD.org</a>&gt;</code></p></div></div>
22</div> 22</div>
23<div class="author"> 23<div class="author">
24<h3 class="author"> 24<h3 class="author">
25<span class="firstname">Hubert</span> <span class="surname">Feyrer</span> 25<span class="firstname">Hubert</span> <span class="surname">Feyrer</span>
26</h3> 26</h3>
27<div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:hubertf@NetBSD.org">hubertf@NetBSD.org</a>&gt;</code></p></div></div> 27<div class="affiliation"><div class="address"><p><code class="email">&lt;<a class="email" href="mailto:hubertf@NetBSD.org">hubertf@NetBSD.org</a>&gt;</code></p></div></div>
28</div> 28</div>
29<h3 class="corpauthor"> 29<h3 class="corpauthor">
30 The pkgsrc Developers 30 The pkgsrc Developers
31 </h3> 31 </h3>
32</div></div> 32</div></div>
33<div><p class="copyright">Copyright © 1994-2017 The NetBSD Foundation, Inc</p></div> 33<div><p class="copyright">Copyright © 1994-2018 The NetBSD Foundation, Inc</p></div>
34<div><p class="pubdate">$NetBSD: pkgsrc.xml,v 1.31 2017/07/30 22:07:39 jnemeth Exp $</p></div> 34<div><p class="pubdate">$NetBSD: pkgsrc.xml,v 1.32 2018/01/01 01:26:07 jakllsch Exp $</p></div>
35<div><div class="abstract"> 35<div><div class="abstract">
36<p class="title"><b>Abstract</b></p> 36<p class="title"><b>Abstract</b></p>
37<p>pkgsrc is a centralized package management system for 37<p>pkgsrc is a centralized package management system for
38 Unix-like operating systems. This guide provides information for 38 Unix-like operating systems. This guide provides information for
39 users and developers of pkgsrc. It covers installation of binary 39 users and developers of pkgsrc. It covers installation of binary
40 and source packages, creation of binary and source packages and 40 and source packages, creation of binary and source packages and
41 a high-level overview about the infrastructure.</p> 41 a high-level overview about the infrastructure.</p>
42</div></div> 42</div></div>
43</div> 43</div>
44<hr> 44<hr>
45</div> 45</div>
46<div class="toc"> 46<div class="toc">
47<p><b>Table of Contents</b></p> 47<p><b>Table of Contents</b></p>
48<dl class="toc"> 48<dl class="toc">
49<dt><span class="chapter"><a href="#introduction">1. What is pkgsrc?</a></span></dt> 49<dt><span class="chapter"><a href="#introduction">1. What is pkgsrc?</a></span></dt>
50<dd><dl> 50<dd><dl>
51<dt><span class="sect1"><a href="#introduction-section">1.1. Introduction</a></span></dt> 51<dt><span class="sect1"><a href="#introduction-section">1.1. Introduction</a></span></dt>
52<dd><dl> 52<dd><dl>
53<dt><span class="sect2"><a href="#why-pkgsrc">1.1.1. Why pkgsrc?</a></span></dt> 53<dt><span class="sect2"><a href="#why-pkgsrc">1.1.1. Why pkgsrc?</a></span></dt>
54<dt><span class="sect2"><a href="#intro.platforms">1.1.2. Supported platforms</a></span></dt> 54<dt><span class="sect2"><a href="#intro.platforms">1.1.2. Supported platforms</a></span></dt>
55</dl></dd> 55</dl></dd>
56<dt><span class="sect1"><a href="#overview">1.2. Overview</a></span></dt> 56<dt><span class="sect1"><a href="#overview">1.2. Overview</a></span></dt>
57<dt><span class="sect1"><a href="#terminology">1.3. Terminology</a></span></dt> 57<dt><span class="sect1"><a href="#terminology">1.3. Terminology</a></span></dt>
58<dd><dl><dt><span class="sect2"><a href="#term.roles">1.3.1. Roles involved in pkgsrc</a></span></dt></dl></dd> 58<dd><dl><dt><span class="sect2"><a href="#term.roles">1.3.1. Roles involved in pkgsrc</a></span></dt></dl></dd>
59<dt><span class="sect1"><a href="#typography">1.4. Typography</a></span></dt> 59<dt><span class="sect1"><a href="#typography">1.4. Typography</a></span></dt>
60</dl></dd> 60</dl></dd>
61<dt><span class="part"><a href="#users-guide">I. The pkgsrc user's guide</a></span></dt> 61<dt><span class="part"><a href="#users-guide">I. The pkgsrc user's guide</a></span></dt>
62<dd><dl> 62<dd><dl>
63<dt><span class="chapter"><a href="#getting">2. Where to get pkgsrc and how to keep it up-to-date</a></span></dt> 63<dt><span class="chapter"><a href="#getting">2. Where to get pkgsrc and how to keep it up-to-date</a></span></dt>
64<dd><dl> 64<dd><dl>
65<dt><span class="sect1"><a href="#getting-first">2.1. Getting pkgsrc for the first time</a></span></dt> 65<dt><span class="sect1"><a href="#getting-first">2.1. Getting pkgsrc for the first time</a></span></dt>
66<dd><dl> 66<dd><dl>
67<dt><span class="sect2"><a href="#getting-via-tar">2.1.1. As tar archive</a></span></dt> 67<dt><span class="sect2"><a href="#getting-via-tar">2.1.1. As tar archive</a></span></dt>
68<dt><span class="sect2"><a href="#getting-via-cvs">2.1.2. Via anonymous CVS</a></span></dt> 68<dt><span class="sect2"><a href="#getting-via-cvs">2.1.2. Via anonymous CVS</a></span></dt>
69</dl></dd> 69</dl></dd>
70<dt><span class="sect1"><a href="#uptodate">2.2. Keeping pkgsrc up-to-date</a></span></dt> 70<dt><span class="sect1"><a href="#uptodate">2.2. Keeping pkgsrc up-to-date</a></span></dt>
71<dd><dl> 71<dd><dl>
72<dt><span class="sect2"><a href="#uptodate-tar">2.2.1. Via tar files</a></span></dt> 72<dt><span class="sect2"><a href="#uptodate-tar">2.2.1. Via tar files</a></span></dt>
73<dt><span class="sect2"><a href="#uptodate-cvs">2.2.2. Via CVS</a></span></dt> 73<dt><span class="sect2"><a href="#uptodate-cvs">2.2.2. Via CVS</a></span></dt>
74</dl></dd> 74</dl></dd>
75</dl></dd> 75</dl></dd>
76<dt><span class="chapter"><a href="#platforms">3. Using pkgsrc on systems other than NetBSD</a></span></dt> 76<dt><span class="chapter"><a href="#platforms">3. Using pkgsrc on systems other than NetBSD</a></span></dt>
77<dd><dl> 77<dd><dl>
78<dt><span class="sect1"><a href="#binarydist">3.1. Binary distribution</a></span></dt> 78<dt><span class="sect1"><a href="#binarydist">3.1. Binary distribution</a></span></dt>
79<dt><span class="sect1"><a href="#bootstrapping-pkgsrc">3.2. Bootstrapping pkgsrc</a></span></dt> 79<dt><span class="sect1"><a href="#bootstrapping-pkgsrc">3.2. Bootstrapping pkgsrc</a></span></dt>
80</dl></dd> 80</dl></dd>
81<dt><span class="chapter"><a href="#using">4. Using pkgsrc</a></span></dt> 81<dt><span class="chapter"><a href="#using">4. Using pkgsrc</a></span></dt>
82<dd><dl> 82<dd><dl>
83<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt> 83<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt>
84<dd><dl> 84<dd><dl>
85<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt> 85<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt>
86<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt> 86<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt>
87<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt> 87<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt>
88<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt> 88<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt>
89<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt> 89<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt>
90<dt><span class="sect2"><a href="#pkg_versions">4.1.6. Finding if newer versions of your installed packages are in pkgsrc</a></span></dt> 90<dt><span class="sect2"><a href="#pkg_versions">4.1.6. Finding if newer versions of your installed packages are in pkgsrc</a></span></dt>
91<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt> 91<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt>
92</dl></dd> 92</dl></dd>
93<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt> 93<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt>
94<dd><dl> 94<dd><dl>
95<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt> 95<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt>
96<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt> 96<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt>
97<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt> 97<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt>
98</dl></dd> 98</dl></dd>
99</dl></dd> 99</dl></dd>
100<dt><span class="chapter"><a href="#configuring">5. Configuring pkgsrc</a></span></dt> 100<dt><span class="chapter"><a href="#configuring">5. Configuring pkgsrc</a></span></dt>
101<dd><dl> 101<dd><dl>
102<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt> 102<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt>
103<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt> 103<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt>
104<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt> 104<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt>
105<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt> 105<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt>
106<dd><dl> 106<dd><dl>
107<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt> 107<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt>
108<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt> 108<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt>
109<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt> 109<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt>
110</dl></dd> 110</dl></dd>
111<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt> 111<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt>
112<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt> 112<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt>
113</dl></dd> 113</dl></dd>
114<dt><span class="chapter"><a href="#binary">6. Creating binary packages</a></span></dt> 114<dt><span class="chapter"><a href="#binary">6. Creating binary packages</a></span></dt>
115<dd><dl> 115<dd><dl>
116<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt> 116<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt>
117<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt> 117<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt>
118</dl></dd> 118</dl></dd>
119<dt><span class="chapter"><a href="#bulk">7. Creating binary packages for everything in pkgsrc (bulk 119<dt><span class="chapter"><a href="#bulk">7. Creating binary packages for everything in pkgsrc (bulk
120builds)</a></span></dt> 120builds)</a></span></dt>
121<dd><dl> 121<dd><dl>
122<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt> 122<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt>
123<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt> 123<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt>
124<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd> 124<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd>
125<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt> 125<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt>
126<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt> 126<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt>
127<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd> 127<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd>
128</dl></dd> 128</dl></dd>
129<dt><span class="chapter"><a href="#files">8. Directory layout of the installed files</a></span></dt> 129<dt><span class="chapter"><a href="#files">8. Directory layout of the installed files</a></span></dt>
130<dd><dl> 130<dd><dl>
131<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt> 131<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt>
132<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt> 132<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt>
133</dl></dd> 133</dl></dd>
134<dt><span class="chapter"><a href="#faq">9. Frequently Asked Questions</a></span></dt> 134<dt><span class="chapter"><a href="#faq">9. Frequently Asked Questions</a></span></dt>
135<dd><dl> 135<dd><dl>
136<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt> 136<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt>
137<dt><span class="sect1"><a href="#faq-pkgtools">9.2. Utilities for package management (pkgtools)</a></span></dt> 137<dt><span class="sect1"><a href="#faq-pkgtools">9.2. Utilities for package management (pkgtools)</a></span></dt>
138<dt><span class="sect1"><a href="#non-root-pkgsrc">9.3. How to use pkgsrc as non-root</a></span></dt> 138<dt><span class="sect1"><a href="#non-root-pkgsrc">9.3. How to use pkgsrc as non-root</a></span></dt>
139<dt><span class="sect1"><a href="#resume-transfers">9.4. How to resume transfers when fetching distfiles?</a></span></dt> 139<dt><span class="sect1"><a href="#resume-transfers">9.4. How to resume transfers when fetching distfiles?</a></span></dt>
140<dt><span class="sect1"><a href="#x.org-from-pkgsrc">9.5. How can I install/use modular X.org from pkgsrc?</a></span></dt> 140<dt><span class="sect1"><a href="#x.org-from-pkgsrc">9.5. How can I install/use modular X.org from pkgsrc?</a></span></dt>
141<dt><span class="sect1"><a href="#fetch-behind-firewall">9.6. How to fetch files from behind a firewall</a></span></dt> 141<dt><span class="sect1"><a href="#fetch-behind-firewall">9.6. How to fetch files from behind a firewall</a></span></dt>
142<dt><span class="sect1"><a href="#fetch-https">9.7. How to fetch files from HTTPS sites</a></span></dt> 142<dt><span class="sect1"><a href="#fetch-https">9.7. How to fetch files from HTTPS sites</a></span></dt>
143<dt><span class="sect1"><a href="#passive-ftp">9.8. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</a></span></dt> 143<dt><span class="sect1"><a href="#passive-ftp">9.8. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</a></span></dt>
144<dt><span class="sect1"><a href="#fetching-all-distfiles">9.9. How to fetch all distfiles at once</a></span></dt> 144<dt><span class="sect1"><a href="#fetching-all-distfiles">9.9. How to fetch all distfiles at once</a></span></dt>
145<dt><span class="sect1"><a href="#tmac.andoc-missing">9.10. What does <span class="quote">&#8220;<span class="quote">Don't know how to make 145<dt><span class="sect1"><a href="#tmac.andoc-missing">9.10. What does <span class="quote">&#8220;<span class="quote">Don't know how to make
146/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt> 146/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt>
147<dt><span class="sect1"><a href="#bsd.own.mk-missing">9.11. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</a></span></dt> 147<dt><span class="sect1"><a href="#bsd.own.mk-missing">9.11. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</a></span></dt>
148<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.12. Using 'sudo' with pkgsrc</a></span></dt> 148<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.12. Using 'sudo' with pkgsrc</a></span></dt>
149<dt><span class="sect1"><a href="#faq.conf">9.13. How do I change the location of configuration files?</a></span></dt> 149<dt><span class="sect1"><a href="#faq.conf">9.13. How do I change the location of configuration files?</a></span></dt>
150<dt><span class="sect1"><a href="#audit-packages">9.14. Automated security checks</a></span></dt> 150<dt><span class="sect1"><a href="#audit-packages">9.14. Automated security checks</a></span></dt>
151<dt><span class="sect1"><a href="#ufaq-cflags">9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt> 151<dt><span class="sect1"><a href="#ufaq-cflags">9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt>
152<dt><span class="sect1"><a href="#ufaq-fail">9.16. A package does not build. What shall I do?</a></span></dt> 152<dt><span class="sect1"><a href="#ufaq-fail">9.16. A package does not build. What shall I do?</a></span></dt>
153<dt><span class="sect1"><a href="#faq.rcs-conflicts">9.17. What does <span class="quote">&#8220;<span class="quote">Makefile appears to contain unresolved cvs/rcs/??? merge conflicts</span>&#8221;</span> mean?</a></span></dt> 153<dt><span class="sect1"><a href="#faq.rcs-conflicts">9.17. What does <span class="quote">&#8220;<span class="quote">Makefile appears to contain unresolved cvs/rcs/??? merge conflicts</span>&#8221;</span> mean?</a></span></dt>
154</dl></dd> 154</dl></dd>
155</dl></dd> 155</dl></dd>
156<dt><span class="part"><a href="#developers-guide">II. The pkgsrc developer's guide</a></span></dt> 156<dt><span class="part"><a href="#developers-guide">II. The pkgsrc developer's guide</a></span></dt>
157<dd><dl> 157<dd><dl>
158<dt><span class="chapter"><a href="#creating">10. Creating a new pkgsrc package from scratch</a></span></dt> 158<dt><span class="chapter"><a href="#creating">10. Creating a new pkgsrc package from scratch</a></span></dt>
159<dd><dl> 159<dd><dl>
160<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt> 160<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt>
161<dd><dl> 161<dd><dl>
162<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt> 162<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt>
163<dt><span class="sect2"><a href="#creating.python-module">10.1.2. Python modules and programs</a></span></dt> 163<dt><span class="sect2"><a href="#creating.python-module">10.1.2. Python modules and programs</a></span></dt>
164</dl></dd> 164</dl></dd>
165<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt> 165<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt>
166<dd><dl><dt><span class="sect2"><a href="#creating.nvu">10.2.1. How the www/nvu package came into pkgsrc</a></span></dt></dl></dd> 166<dd><dl><dt><span class="sect2"><a href="#creating.nvu">10.2.1. How the www/nvu package came into pkgsrc</a></span></dt></dl></dd>
167</dl></dd> 167</dl></dd>
168<dt><span class="chapter"><a href="#components">11. Package components - files, directories and contents</a></span></dt> 168<dt><span class="chapter"><a href="#components">11. Package components - files, directories and contents</a></span></dt>
169<dd><dl> 169<dd><dl>
170<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt> 170<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt>
171<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt> 171<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt>
172<dt><span class="sect1"><a href="#components.patches">11.3. <code class="filename">patches/*</code></a></span></dt> 172<dt><span class="sect1"><a href="#components.patches">11.3. <code class="filename">patches/*</code></a></span></dt>
173<dd><dl> 173<dd><dl>
174<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt> 174<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt>
175<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt> 175<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt>
176<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt> 176<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt>
177<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt> 177<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt>
178<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt> 178<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt>
179</dl></dd> 179</dl></dd>
180<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt> 180<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt>
181<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt> 181<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt>
182<dd><dl> 182<dd><dl>
183<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt> 183<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt>
184<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt> 184<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt>
185<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt> 185<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt>
186</dl></dd> 186</dl></dd>
187<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt> 187<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt>
188<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt> 188<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt>
189</dl></dd> 189</dl></dd>
190<dt><span class="chapter"><a href="#makefile">12. Programming in <code class="filename">Makefile</code>s</a></span></dt> 190<dt><span class="chapter"><a href="#makefile">12. Programming in <code class="filename">Makefile</code>s</a></span></dt>
191<dd><dl> 191<dd><dl>
192<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt> 192<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt>
193<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt> 193<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt>
194<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd> 194<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd>
195<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt> 195<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt>
196<dd><dl> 196<dd><dl>
197<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt> 197<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt>
198<dt><span class="sect2"><a href="#echo-literal">12.3.2. Echoing a string exactly as-is</a></span></dt> 198<dt><span class="sect2"><a href="#echo-literal">12.3.2. Echoing a string exactly as-is</a></span></dt>
199<dt><span class="sect2"><a href="#cflags-gnu-configure">12.3.3. Passing <code class="varname">CFLAGS</code> to GNU configure scripts</a></span></dt> 199<dt><span class="sect2"><a href="#cflags-gnu-configure">12.3.3. Passing <code class="varname">CFLAGS</code> to GNU configure scripts</a></span></dt>
200<dt><span class="sect2"><a href="#empty-variables">12.3.4. Handling possibly empty variables</a></span></dt> 200<dt><span class="sect2"><a href="#empty-variables">12.3.4. Handling possibly empty variables</a></span></dt>
201</dl></dd> 201</dl></dd>
202</dl></dd> 202</dl></dd>
203<dt><span class="chapter"><a href="#plist">13. PLIST issues</a></span></dt> 203<dt><span class="chapter"><a href="#plist">13. PLIST issues</a></span></dt>
204<dd><dl> 204<dd><dl>
205<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt> 205<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt>
206<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt> 206<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt>
207<dt><span class="sect1"><a href="#print-PLIST">13.3. Tweaking output of <span class="command"><strong>make print-PLIST</strong></span></a></span></dt> 207<dt><span class="sect1"><a href="#print-PLIST">13.3. Tweaking output of <span class="command"><strong>make print-PLIST</strong></span></a></span></dt>
208<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt> 208<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt>
209<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt> 209<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt>
210<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt> 210<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt>
211<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt> 211<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt>
212<dt><span class="sect1"><a href="#build-plist">13.8. Build-specific PLISTs</a></span></dt> 212<dt><span class="sect1"><a href="#build-plist">13.8. Build-specific PLISTs</a></span></dt>
213<dt><span class="sect1"><a href="#faq.common-dirs">13.9. Sharing directories between packages</a></span></dt> 213<dt><span class="sect1"><a href="#faq.common-dirs">13.9. Sharing directories between packages</a></span></dt>
214</dl></dd> 214</dl></dd>
215<dt><span class="chapter"><a href="#buildlink">14. Buildlink methodology</a></span></dt> 215<dt><span class="chapter"><a href="#buildlink">14. Buildlink methodology</a></span></dt>
216<dd><dl> 216<dd><dl>
217<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt> 217<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt>
218<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt> 218<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt>
219<dd><dl> 219<dd><dl>
220<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt> 220<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt>
221<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating 221<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating
222 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 222 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
223 and 223 and
224 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 224 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
225 in <code class="filename">buildlink3.mk</code> files</a></span></dt> 225 in <code class="filename">buildlink3.mk</code> files</a></span></dt>
226</dl></dd> 226</dl></dd>
227<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt> 227<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt>
228<dd><dl> 228<dd><dl>
229<dt><span class="sect2"><a href="#anatomy-of-builtin.mk">14.3.1. Anatomy of a <code class="filename">builtin.mk</code> file</a></span></dt> 229<dt><span class="sect2"><a href="#anatomy-of-builtin.mk">14.3.1. Anatomy of a <code class="filename">builtin.mk</code> file</a></span></dt>
230<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt> 230<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt>
231</dl></dd> 231</dl></dd>
232</dl></dd> 232</dl></dd>
233<dt><span class="chapter"><a href="#pkginstall">15. The pkginstall framework</a></span></dt> 233<dt><span class="chapter"><a href="#pkginstall">15. The pkginstall framework</a></span></dt>
234<dd><dl> 234<dd><dl>
235<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt> 235<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt>
236<dd><dl> 236<dd><dl>
237<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt> 237<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt>
238<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt> 238<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt>
239</dl></dd> 239</dl></dd>
240<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt> 240<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt>
241<dd><dl> 241<dd><dl>
242<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt> 242<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt>
243<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt> 243<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt>
244<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt> 244<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt>
245<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt> 245<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt>
246</dl></dd> 246</dl></dd>
247<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt> 247<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt>
248<dd><dl><dt><span class="sect2"><a href="#rcd-scripts-disable">15.3.1. Disabling handling of system startup scripts</a></span></dt></dl></dd> 248<dd><dl><dt><span class="sect2"><a href="#rcd-scripts-disable">15.3.1. Disabling handling of system startup scripts</a></span></dt></dl></dd>
249<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt> 249<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt>
250<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt> 250<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt>
251<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd> 251<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd>
252<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt> 252<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt>
253<dd><dl><dt><span class="sect2"><a href="#fonts-disable">15.6.1. Disabling automatic update of the fonts databases</a></span></dt></dl></dd> 253<dd><dl><dt><span class="sect2"><a href="#fonts-disable">15.6.1. Disabling automatic update of the fonts databases</a></span></dt></dl></dd>
254</dl></dd> 254</dl></dd>
255<dt><span class="chapter"><a href="#options">16. Options handling</a></span></dt> 255<dt><span class="chapter"><a href="#options">16. Options handling</a></span></dt>
256<dd><dl> 256<dd><dl>
257<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt> 257<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt>
258<dt><span class="sect1"><a href="#converting-to-options">16.2. Converting packages to use <code class="filename">bsd.options.mk</code></a></span></dt> 258<dt><span class="sect1"><a href="#converting-to-options">16.2. Converting packages to use <code class="filename">bsd.options.mk</code></a></span></dt>
259<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt> 259<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt>
260<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt> 260<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt>
261</dl></dd> 261</dl></dd>
262<dt><span class="chapter"><a href="#build">17. The build process</a></span></dt> 262<dt><span class="chapter"><a href="#build">17. The build process</a></span></dt>
263<dd><dl> 263<dd><dl>
264<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt> 264<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt>
265<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt> 265<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt>
266<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt> 266<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt>
267<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt> 267<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt>
268<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 268<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
269<dd><dl> 269<dd><dl>
270<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt> 270<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt>
271<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt> 271<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt>
272</dl></dd> 272</dl></dd>
273<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt> 273<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt>
274<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt> 274<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt>
275<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt> 275<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt>
276<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt> 276<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt>
277<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt> 277<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt>
278<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 278<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
279<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 279<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
280<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt> 280<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt>
281<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 281<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
282<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt> 282<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt>
283<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt> 283<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt>
284<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt> 284<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt>
285</dl></dd> 285</dl></dd>
286<dt><span class="chapter"><a href="#tools">18. Tools needed for building or running</a></span></dt> 286<dt><span class="chapter"><a href="#tools">18. Tools needed for building or running</a></span></dt>
287<dd><dl> 287<dd><dl>
288<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt> 288<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt>
289<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt> 289<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt>
290<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt> 290<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt>
291</dl></dd> 291</dl></dd>
292<dt><span class="chapter"><a href="#fixes">19. Making your package work</a></span></dt> 292<dt><span class="chapter"><a href="#fixes">19. Making your package work</a></span></dt>
293<dd><dl> 293<dd><dl>
294<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt> 294<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt>
295<dd><dl> 295<dd><dl>
296<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.1. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt> 296<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.1. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt>
297<dt><span class="sect2"><a href="#user-interaction">19.1.2. User interaction</a></span></dt> 297<dt><span class="sect2"><a href="#user-interaction">19.1.2. User interaction</a></span></dt>
298<dt><span class="sect2"><a href="#handling-licenses">19.1.3. Handling licenses</a></span></dt> 298<dt><span class="sect2"><a href="#handling-licenses">19.1.3. Handling licenses</a></span></dt>
299<dt><span class="sect2"><a href="#restricted-packages">19.1.4. Restricted packages</a></span></dt> 299<dt><span class="sect2"><a href="#restricted-packages">19.1.4. Restricted packages</a></span></dt>
300<dt><span class="sect2"><a href="#dependencies">19.1.5. Handling dependencies</a></span></dt> 300<dt><span class="sect2"><a href="#dependencies">19.1.5. Handling dependencies</a></span></dt>
301<dt><span class="sect2"><a href="#conflicts">19.1.6. Handling conflicts with other packages</a></span></dt> 301<dt><span class="sect2"><a href="#conflicts">19.1.6. Handling conflicts with other packages</a></span></dt>
302<dt><span class="sect2"><a href="#not-building-packages">19.1.7. Packages that cannot or should not be built</a></span></dt> 302<dt><span class="sect2"><a href="#not-building-packages">19.1.7. Packages that cannot or should not be built</a></span></dt>
303<dt><span class="sect2"><a href="#undeletable-packages">19.1.8. Packages which should not be deleted, once installed</a></span></dt> 303<dt><span class="sect2"><a href="#undeletable-packages">19.1.8. Packages which should not be deleted, once installed</a></span></dt>
304<dt><span class="sect2"><a href="#security-handling">19.1.9. Handling packages with security problems</a></span></dt> 304<dt><span class="sect2"><a href="#security-handling">19.1.9. Handling packages with security problems</a></span></dt>
305<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.10. How to handle incrementing versions when fixing an existing package</a></span></dt> 305<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.10. How to handle incrementing versions when fixing an existing package</a></span></dt>
306<dt><span class="sect2"><a href="#fixes.subst">19.1.11. Substituting variable text in the package files (the SUBST framework)</a></span></dt> 306<dt><span class="sect2"><a href="#fixes.subst">19.1.11. Substituting variable text in the package files (the SUBST framework)</a></span></dt>
307</dl></dd> 307</dl></dd>
308<dt><span class="sect1"><a href="#fixes.fetch">19.2. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 308<dt><span class="sect1"><a href="#fixes.fetch">19.2. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
309<dd><dl> 309<dd><dl>
310<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt> 310<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt>
311<dt><span class="sect2"><a href="#modified-distfiles-same-name">19.2.2. How to handle modified distfiles with the 'old' name</a></span></dt> 311<dt><span class="sect2"><a href="#modified-distfiles-same-name">19.2.2. How to handle modified distfiles with the 'old' name</a></span></dt>
312<dt><span class="sect2"><a href="#build.fetch.github">19.2.3. Packages hosted on github.com</a></span></dt> 312<dt><span class="sect2"><a href="#build.fetch.github">19.2.3. Packages hosted on github.com</a></span></dt>
313</dl></dd> 313</dl></dd>
314<dt><span class="sect1"><a href="#fixes.configure">19.3. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 314<dt><span class="sect1"><a href="#fixes.configure">19.3. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
315<dd><dl> 315<dd><dl>
316<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt> 316<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt>
317<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt> 317<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt>
318<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt> 318<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt>
319</dl></dd> 319</dl></dd>
320<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt> 320<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt>
321<dd><dl> 321<dd><dl>
322<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt> 322<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt>
323<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt> 323<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt>
324<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt> 324<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt>
325<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt> 325<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt>
326<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt> 326<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt>
327</dl></dd> 327</dl></dd>
328<dt><span class="sect1"><a href="#fixes.build">19.5. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 328<dt><span class="sect1"><a href="#fixes.build">19.5. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
329<dd><dl> 329<dd><dl>
330<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt> 330<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt>
331<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt> 331<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt>
332<dt><span class="sect2"><a href="#undefined-reference">19.5.3. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span></a></span></dt> 332<dt><span class="sect2"><a href="#undefined-reference">19.5.3. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span></a></span></dt>
333<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt> 333<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt>
334</dl></dd> 334</dl></dd>
335<dt><span class="sect1"><a href="#fixes.install">19.6. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 335<dt><span class="sect1"><a href="#fixes.install">19.6. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
336<dd><dl> 336<dd><dl>
337<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt> 337<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt>
338<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt> 338<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt>
339<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt> 339<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt>
340<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt> 340<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt>
341<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt> 341<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt>
342<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt> 342<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt>
343<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt> 343<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt>
344<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt> 344<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt>
345<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt> 345<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt>
346<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt> 346<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt>
347<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt> 347<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt>
348<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt> 348<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt>
349<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt> 349<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt>
350<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt> 350<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt>
351<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt> 351<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt>
352<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt> 352<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt>
353<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt> 353<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt>
354<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in 354<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in
355 emulation</a></span></dt> 355 emulation</a></span></dt>
356<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt> 356<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt>
357<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt> 357<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt>
358</dl></dd> 358</dl></dd>
359<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt> 359<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt>
360</dl></dd> 360</dl></dd>
361<dt><span class="chapter"><a href="#debug">20. Debugging</a></span></dt> 361<dt><span class="chapter"><a href="#debug">20. Debugging</a></span></dt>
362<dt><span class="chapter"><a href="#submit">21. Submitting and Committing</a></span></dt> 362<dt><span class="chapter"><a href="#submit">21. Submitting and Committing</a></span></dt>
363<dd><dl> 363<dd><dl>
364<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt> 364<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt>
365<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt> 365<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt>
366<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt> 366<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt>
367<dt><span class="sect1"><a href="#commit-messages">21.4. Commit Messages</a></span></dt> 367<dt><span class="sect1"><a href="#commit-messages">21.4. Commit Messages</a></span></dt>
368<dt><span class="sect1"><a href="#committing-importing">21.5. Committing: Adding a package to CVS</a></span></dt> 368<dt><span class="sect1"><a href="#committing-importing">21.5. Committing: Adding a package to CVS</a></span></dt>
369<dt><span class="sect1"><a href="#updating-package">21.6. Updating a package to a newer version</a></span></dt> 369<dt><span class="sect1"><a href="#updating-package">21.6. Updating a package to a newer version</a></span></dt>
370<dt><span class="sect1"><a href="#renaming-package">21.7. Renaming a package in pkgsrc</a></span></dt> 370<dt><span class="sect1"><a href="#renaming-package">21.7. Renaming a package in pkgsrc</a></span></dt>
371<dt><span class="sect1"><a href="#moving-package">21.8. Moving a package in pkgsrc</a></span></dt> 371<dt><span class="sect1"><a href="#moving-package">21.8. Moving a package in pkgsrc</a></span></dt>
372</dl></dd> 372</dl></dd>
373<dt><span class="chapter"><a href="#devfaq">22. Frequently Asked Questions</a></span></dt> 373<dt><span class="chapter"><a href="#devfaq">22. Frequently Asked Questions</a></span></dt>
374<dt><span class="chapter"><a href="#gnome">23. GNOME packaging and porting</a></span></dt> 374<dt><span class="chapter"><a href="#gnome">23. GNOME packaging and porting</a></span></dt>
375<dd><dl> 375<dd><dl>
376<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt> 376<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt>
377<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt> 377<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt>
378<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt> 378<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt>
379<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt> 379<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt>
380</dl></dd> 380</dl></dd>
381</dl></dd> 381</dl></dd>
382<dt><span class="part"><a href="#infrastructure">III. The pkgsrc infrastructure internals</a></span></dt> 382<dt><span class="part"><a href="#infrastructure">III. The pkgsrc infrastructure internals</a></span></dt>
383<dd><dl> 383<dd><dl>
384<dt><span class="chapter"><a href="#infr.design">24. Design of the pkgsrc infrastructure</a></span></dt> 384<dt><span class="chapter"><a href="#infr.design">24. Design of the pkgsrc infrastructure</a></span></dt>
385<dd><dl> 385<dd><dl>
386<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt> 386<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt>
387<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt> 387<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt>
388<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt> 388<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt>
389<dd><dl> 389<dd><dl>
390<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt> 390<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt>
391<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt> 391<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt>
392</dl></dd> 392</dl></dd>
393<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt> 393<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt>
394<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt> 394<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt>
395<dd><dl> 395<dd><dl>
396<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt> 396<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt>
397<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt> 397<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt>
398</dl></dd> 398</dl></dd>
399<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt> 399<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt>
400<dd><dl> 400<dd><dl>
401<dt><span class="sect2"><a href="#infr.order.prefs">24.6.1. The order in <code class="filename">bsd.prefs.mk</code></a></span></dt> 401<dt><span class="sect2"><a href="#infr.order.prefs">24.6.1. The order in <code class="filename">bsd.prefs.mk</code></a></span></dt>
402<dt><span class="sect2"><a href="#infr.order.pkg">24.6.2. The order in <code class="filename">bsd.pkg.mk</code></a></span></dt> 402<dt><span class="sect2"><a href="#infr.order.pkg">24.6.2. The order in <code class="filename">bsd.pkg.mk</code></a></span></dt>
403</dl></dd> 403</dl></dd>
404</dl></dd> 404</dl></dd>
405<dt><span class="chapter"><a href="#regression">25. Regression tests</a></span></dt> 405<dt><span class="chapter"><a href="#regression">25. Regression tests</a></span></dt>
406<dd><dl> 406<dd><dl>
407<dt><span class="sect1"><a href="#regression.run">25.1. Running the regression tests</a></span></dt> 407<dt><span class="sect1"><a href="#regression.run">25.1. Running the regression tests</a></span></dt>
408<dt><span class="sect1"><a href="#regression.new">25.2. Adding a new regression test</a></span></dt> 408<dt><span class="sect1"><a href="#regression.new">25.2. Adding a new regression test</a></span></dt>
409<dd><dl> 409<dd><dl>
410<dt><span class="sect2"><a href="#regression.fun.override">25.2.1. Overridable functions</a></span></dt> 410<dt><span class="sect2"><a href="#regression.fun.override">25.2.1. Overridable functions</a></span></dt>
411<dt><span class="sect2"><a href="#regression.fun.helper">25.2.2. Helper functions</a></span></dt> 411<dt><span class="sect2"><a href="#regression.fun.helper">25.2.2. Helper functions</a></span></dt>
412</dl></dd> 412</dl></dd>
413</dl></dd> 413</dl></dd>
414<dt><span class="chapter"><a href="#porting">26. Porting pkgsrc</a></span></dt> 414<dt><span class="chapter"><a href="#porting">26. Porting pkgsrc</a></span></dt>
415<dd><dl><dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt></dl></dd> 415<dd><dl><dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt></dl></dd>
416</dl></dd> 416</dl></dd>
417<dt><span class="appendix"><a href="#examples">A. A simple example package: bison</a></span></dt> 417<dt><span class="appendix"><a href="#examples">A. A simple example package: bison</a></span></dt>
418<dd><dl> 418<dd><dl>
419<dt><span class="sect1"><a href="#example-files">A.1. files</a></span></dt> 419<dt><span class="sect1"><a href="#example-files">A.1. files</a></span></dt>
420<dd><dl> 420<dd><dl>
421<dt><span class="sect2"><a href="#example-Makefile">A.1.1. Makefile</a></span></dt> 421<dt><span class="sect2"><a href="#example-Makefile">A.1.1. Makefile</a></span></dt>
422<dt><span class="sect2"><a href="#example-descr">A.1.2. DESCR</a></span></dt> 422<dt><span class="sect2"><a href="#example-descr">A.1.2. DESCR</a></span></dt>
423<dt><span class="sect2"><a href="#example-plist">A.1.3. PLIST</a></span></dt> 423<dt><span class="sect2"><a href="#example-plist">A.1.3. PLIST</a></span></dt>
424<dt><span class="sect2"><a href="#checking-package-with-pkglint">A.1.4. Checking a package with <span class="command"><strong>pkglint</strong></span></a></span></dt> 424<dt><span class="sect2"><a href="#checking-package-with-pkglint">A.1.4. Checking a package with <span class="command"><strong>pkglint</strong></span></a></span></dt>
425</dl></dd> 425</dl></dd>
426<dt><span class="sect1"><a href="#steps-for-b-i-p">A.2. Steps for building, installing, packaging</a></span></dt> 426<dt><span class="sect1"><a href="#steps-for-b-i-p">A.2. Steps for building, installing, packaging</a></span></dt>
427</dl></dd> 427</dl></dd>
428<dt><span class="appendix"><a href="#logs">B. Build logs</a></span></dt> 428<dt><span class="appendix"><a href="#logs">B. Build logs</a></span></dt>
429<dd><dl> 429<dd><dl>
430<dt><span class="sect1"><a href="#logs.building">B.1. Building figlet</a></span></dt> 430<dt><span class="sect1"><a href="#logs.building">B.1. Building figlet</a></span></dt>
431<dt><span class="sect1"><a href="#logs.package">B.2. Packaging figlet</a></span></dt> 431<dt><span class="sect1"><a href="#logs.package">B.2. Packaging figlet</a></span></dt>
432</dl></dd> 432</dl></dd>
433<dt><span class="appendix"><a href="#ftp-layout">C. Directory layout of the pkgsrc FTP server</a></span></dt> 433<dt><span class="appendix"><a href="#ftp-layout">C. Directory layout of the pkgsrc FTP server</a></span></dt>
434<dd><dl> 434<dd><dl>
435<dt><span class="sect1"><a href="#ftp-distfiles">C.1. <code class="filename">distfiles</code>: The distributed source files</a></span></dt> 435<dt><span class="sect1"><a href="#ftp-distfiles">C.1. <code class="filename">distfiles</code>: The distributed source files</a></span></dt>
436<dt><span class="sect1"><a href="#ftp-misc">C.2. <code class="filename">misc</code>: Miscellaneous things</a></span></dt> 436<dt><span class="sect1"><a href="#ftp-misc">C.2. <code class="filename">misc</code>: Miscellaneous things</a></span></dt>
437<dt><span class="sect1"><a href="#ftp-packages">C.3. <code class="filename">packages</code>: Binary packages</a></span></dt> 437<dt><span class="sect1"><a href="#ftp-packages">C.3. <code class="filename">packages</code>: Binary packages</a></span></dt>
438<dt><span class="sect1"><a href="#ftp-reports">C.4. <code class="filename">reports</code>: Bulk build reports</a></span></dt> 438<dt><span class="sect1"><a href="#ftp-reports">C.4. <code class="filename">reports</code>: Bulk build reports</a></span></dt>
439<dt><span class="sect1"><a href="#ftp-source">C.5. <code class="filename">current</code>, 439<dt><span class="sect1"><a href="#ftp-source">C.5. <code class="filename">current</code>,
440<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>: 440<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>:
441source packages</a></span></dt> 441source packages</a></span></dt>
442</dl></dd> 442</dl></dd>
443<dt><span class="appendix"><a href="#editing">D. Editing guidelines for the pkgsrc guide</a></span></dt> 443<dt><span class="appendix"><a href="#editing">D. Editing guidelines for the pkgsrc guide</a></span></dt>
444<dd><dl> 444<dd><dl>
445<dt><span class="sect1"><a href="#targets">D.1. Make targets</a></span></dt> 445<dt><span class="sect1"><a href="#targets">D.1. Make targets</a></span></dt>
446<dt><span class="sect1"><a href="#procedure">D.2. Procedure</a></span></dt> 446<dt><span class="sect1"><a href="#procedure">D.2. Procedure</a></span></dt>
447</dl></dd> 447</dl></dd>
448</dl> 448</dl>
449</div> 449</div>
450<div class="list-of-tables"> 450<div class="list-of-tables">
451<p><b>List of Tables</b></p> 451<p><b>List of Tables</b></p>
452<dl> 452<dl>
453<dt>1.1. <a href="#supported-platforms">Platforms supported by pkgsrc</a> 453<dt>1.1. <a href="#supported-platforms">Platforms supported by pkgsrc</a>
454</dt> 454</dt>
455<dt>11.1. <a href="#patch-examples">Patching examples</a> 455<dt>11.1. <a href="#patch-examples">Patching examples</a>
456</dt> 456</dt>
457<dt>23.1. <a href="#plist-handling">PLIST handling for GNOME packages</a> 457<dt>23.1. <a href="#plist-handling">PLIST handling for GNOME packages</a>
458</dt> 458</dt>
459</dl> 459</dl>
460</div> 460</div>
461<div class="chapter"> 461<div class="chapter">
462<div class="titlepage"><div><div><h1 class="title"> 462<div class="titlepage"><div><div><h1 class="title">
463<a name="introduction"></a>Chapter 1. What is pkgsrc?</h1></div></div></div> 463<a name="introduction"></a>Chapter 1. What is pkgsrc?</h1></div></div></div>
464<div class="toc"> 464<div class="toc">
465<p><b>Table of Contents</b></p> 465<p><b>Table of Contents</b></p>
466<dl class="toc"> 466<dl class="toc">
467<dt><span class="sect1"><a href="#introduction-section">1.1. Introduction</a></span></dt> 467<dt><span class="sect1"><a href="#introduction-section">1.1. Introduction</a></span></dt>
468<dd><dl> 468<dd><dl>
469<dt><span class="sect2"><a href="#why-pkgsrc">1.1.1. Why pkgsrc?</a></span></dt> 469<dt><span class="sect2"><a href="#why-pkgsrc">1.1.1. Why pkgsrc?</a></span></dt>
470<dt><span class="sect2"><a href="#intro.platforms">1.1.2. Supported platforms</a></span></dt> 470<dt><span class="sect2"><a href="#intro.platforms">1.1.2. Supported platforms</a></span></dt>
471</dl></dd> 471</dl></dd>
472<dt><span class="sect1"><a href="#overview">1.2. Overview</a></span></dt> 472<dt><span class="sect1"><a href="#overview">1.2. Overview</a></span></dt>
473<dt><span class="sect1"><a href="#terminology">1.3. Terminology</a></span></dt> 473<dt><span class="sect1"><a href="#terminology">1.3. Terminology</a></span></dt>
474<dd><dl><dt><span class="sect2"><a href="#term.roles">1.3.1. Roles involved in pkgsrc</a></span></dt></dl></dd> 474<dd><dl><dt><span class="sect2"><a href="#term.roles">1.3.1. Roles involved in pkgsrc</a></span></dt></dl></dd>
475<dt><span class="sect1"><a href="#typography">1.4. Typography</a></span></dt> 475<dt><span class="sect1"><a href="#typography">1.4. Typography</a></span></dt>
476</dl> 476</dl>
477</div> 477</div>
478<div class="sect1"> 478<div class="sect1">
479<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 479<div class="titlepage"><div><div><h2 class="title" style="clear: both">
480<a name="introduction-section"></a>1.1. Introduction</h2></div></div></div> 480<a name="introduction-section"></a>1.1. Introduction</h2></div></div></div>
481<p>There is a lot of software freely available for Unix-based 481<p>There is a lot of software freely available for Unix-based
482systems, which is usually available in form of the source code. Before 482systems, which is usually available in form of the source code. Before
483such software can be used, it needs to be configured to the local 483such software can be used, it needs to be configured to the local
484system, compiled and installed, and this is exactly what The NetBSD 484system, compiled and installed, and this is exactly what The NetBSD
485Packages Collection (pkgsrc) does. pkgsrc also has some basic commands 485Packages Collection (pkgsrc) does. pkgsrc also has some basic commands
486to handle binary packages, so that not every user has to build the 486to handle binary packages, so that not every user has to build the
487packages for himself, which is a time-costly task.</p> 487packages for himself, which is a time-costly task.</p>
488<p>pkgsrc currently contains several thousand packages, 488<p>pkgsrc currently contains several thousand packages,
489 including:</p> 489 including:</p>
490<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 490<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
491<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/apache24/README.html" target="_top"><code class="filename">www/apache24</code></a> - The Apache 491<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/apache24/README.html" target="_top"><code class="filename">www/apache24</code></a> - The Apache
492 web server</p></li> 492 web server</p></li>
493<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a> - The Firefox 493<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a> - The Firefox
494 web browser</p></li> 494 web browser</p></li>
495<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome/README.html" target="_top"><code class="filename">meta-pkgs/gnome</code></a> - The GNOME 495<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome/README.html" target="_top"><code class="filename">meta-pkgs/gnome</code></a> - The GNOME
496 Desktop Environment</p></li> 496 Desktop Environment</p></li>
497<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/kde4/README.html" target="_top"><code class="filename">meta-pkgs/kde4</code></a> - The K 497<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/kde4/README.html" target="_top"><code class="filename">meta-pkgs/kde4</code></a> - The K
498 Desktop Environment</p></li> 498 Desktop Environment</p></li>
499</ul></div> 499</ul></div>
500<p>&#8230; just to name a few.</p> 500<p>&#8230; just to name a few.</p>
501<p>pkgsrc has built-in support for handling varying dependencies, 501<p>pkgsrc has built-in support for handling varying dependencies,
502 such as pthreads and X11, and extended features such as IPv6 support on 502 such as pthreads and X11, and extended features such as IPv6 support on
503 a range of platforms.</p> 503 a range of platforms.</p>
504<div class="sect2"> 504<div class="sect2">
505<div class="titlepage"><div><div><h3 class="title"> 505<div class="titlepage"><div><div><h3 class="title">
506<a name="why-pkgsrc"></a>1.1.1. Why pkgsrc?</h3></div></div></div> 506<a name="why-pkgsrc"></a>1.1.1. Why pkgsrc?</h3></div></div></div>
507<p> 507<p>
508pkgsrc provides the following key features: 508pkgsrc provides the following key features:
509</p> 509</p>
510<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 510<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
511<li class="listitem"><p>Easy building of software from source as well as the creation 511<li class="listitem"><p>Easy building of software from source as well as the creation
512 and installation of binary packages. The source and latest 512 and installation of binary packages. The source and latest
513 patches are retrieved from a master or mirror download site, checksum 513 patches are retrieved from a master or mirror download site, checksum
514 verified, then built on your system. Support for binary-only 514 verified, then built on your system. Support for binary-only
515 distributions is available for both native platforms and NetBSD 515 distributions is available for both native platforms and NetBSD
516 emulated platforms.</p></li> 516 emulated platforms.</p></li>
517<li class="listitem"><p>All packages are installed in a consistent directory tree, 517<li class="listitem"><p>All packages are installed in a consistent directory tree,
518 including binaries, libraries, man pages and other 518 including binaries, libraries, man pages and other
519 documentation.</p></li> 519 documentation.</p></li>
520<li class="listitem"><p>Tracking of package dependencies automatically, including when 520<li class="listitem"><p>Tracking of package dependencies automatically, including when
521 performing updates, to ensure required packages are installed. The 521 performing updates, to ensure required packages are installed. The
522 configuration files of various packages are handled automatically during 522 configuration files of various packages are handled automatically during
523 updates, so local changes are preserved.</p></li> 523 updates, so local changes are preserved.</p></li>
524<li class="listitem"><p>Like NetBSD, pkgsrc is designed with portability in mind and 524<li class="listitem"><p>Like NetBSD, pkgsrc is designed with portability in mind and
525 consists of highly portable code. This allows the greatest speed of 525 consists of highly portable code. This allows the greatest speed of
526 development when porting to a new platform. This portability also 526 development when porting to a new platform. This portability also
527 ensures that pkgsrc is <span class="emphasis"><em>consistent across all 527 ensures that pkgsrc is <span class="emphasis"><em>consistent across all
528 platforms</em></span>.</p></li> 528 platforms</em></span>.</p></li>
529<li class="listitem"><p>The installation prefix, acceptable software licenses, 529<li class="listitem"><p>The installation prefix, acceptable software licenses,
530 international encryption requirements and build-time options for a 530 international encryption requirements and build-time options for a
531 large number of packages are all set in a simple, central 531 large number of packages are all set in a simple, central
532 configuration file.</p></li> 532 configuration file.</p></li>
533<li class="listitem"><p>The entire source (not including the distribution files) is 533<li class="listitem"><p>The entire source (not including the distribution files) is
534 freely available under a BSD license, so you may extend and adapt 534 freely available under a BSD license, so you may extend and adapt
535 pkgsrc to your needs. Support for local packages and patches is 535 pkgsrc to your needs. Support for local packages and patches is
536 available right out of the box, so you can configure it specifically 536 available right out of the box, so you can configure it specifically
537 for your environment.</p></li> 537 for your environment.</p></li>
538</ul></div> 538</ul></div>
539<p>The following principles are basic to pkgsrc:</p> 539<p>The following principles are basic to pkgsrc:</p>
540<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 540<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
541<li class="listitem"><p><span class="quote">&#8220;<span class="quote">It should only work if it's right.</span>&#8221;</span> 541<li class="listitem"><p><span class="quote">&#8220;<span class="quote">It should only work if it's right.</span>&#8221;</span>
542&mdash; That means, if a package contains bugs, it's better to find 542&mdash; That means, if a package contains bugs, it's better to find
543them and to complain about them rather than to just install the package 543them and to complain about them rather than to just install the package
544and hope that it works. There are numerous checks in pkgsrc that try to 544and hope that it works. There are numerous checks in pkgsrc that try to
545find such bugs: Static analysis tools (<a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>), build-time checks (portability 545find such bugs: Static analysis tools (<a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>), build-time checks (portability
546of shell scripts), and post-installation checks (installed files, 546of shell scripts), and post-installation checks (installed files,
547references to shared libraries, script interpreters).</p></li> 547references to shared libraries, script interpreters).</p></li>
548<li class="listitem"><p><span class="quote">&#8220;<span class="quote">If it works, it should work everywhere</span>&#8221;</span> 548<li class="listitem"><p><span class="quote">&#8220;<span class="quote">If it works, it should work everywhere</span>&#8221;</span>
549&mdash; Like NetBSD has been ported to many hardware architectures, 549&mdash; Like NetBSD has been ported to many hardware architectures,
550pkgsrc has been ported to many operating systems. Care is taken that 550pkgsrc has been ported to many operating systems. Care is taken that
551packages behave the same on all platforms.</p></li> 551packages behave the same on all platforms.</p></li>
552</ul></div> 552</ul></div>
553</div> 553</div>
554<div class="sect2"> 554<div class="sect2">
555<div class="titlepage"><div><div><h3 class="title"> 555<div class="titlepage"><div><div><h3 class="title">
556<a name="intro.platforms"></a>1.1.2. Supported platforms</h3></div></div></div> 556<a name="intro.platforms"></a>1.1.2. Supported platforms</h3></div></div></div>
557<p>pkgsrc consists of both a source distribution and a binary 557<p>pkgsrc consists of both a source distribution and a binary
558distribution for these operating systems. After retrieving the required 558distribution for these operating systems. After retrieving the required
559source or binaries, you can be up and running with pkgsrc in just 559source or binaries, you can be up and running with pkgsrc in just
560minutes!</p> 560minutes!</p>
561<p>pkgsrc was derived from FreeBSD's ports system, and 561<p>pkgsrc was derived from FreeBSD's ports system, and
562 initially developed for NetBSD only. Since then, pkgsrc has 562 initially developed for NetBSD only. Since then, pkgsrc has
563 grown a lot, and now supports the following platforms:</p> 563 grown a lot, and now supports the following platforms:</p>
564<div class="table"> 564<div class="table">
565<a name="supported-platforms"></a><p class="title"><b>Table 1.1. Platforms supported by pkgsrc</b></p> 565<a name="supported-platforms"></a><p class="title"><b>Table 1.1. Platforms supported by pkgsrc</b></p>
566<div class="table-contents"><table class="table" summary="Platforms supported by pkgsrc" border="1"> 566<div class="table-contents"><table class="table" summary="Platforms supported by pkgsrc" border="1">
567<colgroup> 567<colgroup>
568<col> 568<col>
569<col> 569<col>
570<col> 570<col>
571</colgroup> 571</colgroup>
572<thead><tr> 572<thead><tr>
573<th>Platform</th> 573<th>Platform</th>
574<th>Date Support Added</th> 574<th>Date Support Added</th>
575<th>Notes</th> 575<th>Notes</th>
576</tr></thead> 576</tr></thead>
577<tbody> 577<tbody>
578<tr> 578<tr>
579<td><a class="ulink" href="http://www.NetBSD.org/" target="_top">NetBSD</a></td> 579<td><a class="ulink" href="http://www.NetBSD.org/" target="_top">NetBSD</a></td>
580<td align="center">Aug 1997</td> 580<td align="center">Aug 1997</td>
581<td class="auto-generated"> </td> 581<td class="auto-generated"> </td>
582</tr> 582</tr>
583<tr> 583<tr>
584<td><a class="ulink" href="http://wwws.sun.com/software/solaris/" target="_top">Solaris</a></td> 584<td><a class="ulink" href="http://wwws.sun.com/software/solaris/" target="_top">Solaris</a></td>
585<td align="center">Mar 1999</td> 585<td align="center">Mar 1999</td>
586<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Solaris" target="_top">README.Solaris</a></td> 586<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Solaris" target="_top">README.Solaris</a></td>
587</tr> 587</tr>
588<tr> 588<tr>
589<td><a class="ulink" href="http://www.kernel.org/" target="_top">Linux</a></td> 589<td><a class="ulink" href="http://www.kernel.org/" target="_top">Linux</a></td>
590<td align="center">Jun 1999</td> 590<td align="center">Jun 1999</td>
591<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Linux" target="_top">README.Linux</a></td> 591<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Linux" target="_top">README.Linux</a></td>
592</tr> 592</tr>
593<tr> 593<tr>
594<td> 594<td>
595 <a class="ulink" href="https://developer.apple.com/macos/" target="_top">Darwin / Mac OS X / OS X / macOS</a> 595 <a class="ulink" href="https://developer.apple.com/macos/" target="_top">Darwin / Mac OS X / OS X / macOS</a>
596 </td> 596 </td>
597<td align="center">Oct 2001</td> 597<td align="center">Oct 2001</td>
598<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.MacOSX" target="_top">README.MacOSX</a></td> 598<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.MacOSX" target="_top">README.MacOSX</a></td>
599</tr> 599</tr>
600<tr> 600<tr>
601<td><a class="ulink" href="http://www.freebsd.org/" target="_top">FreeBSD</a></td> 601<td><a class="ulink" href="http://www.freebsd.org/" target="_top">FreeBSD</a></td>
602<td align="center">Nov 2002</td> 602<td align="center">Nov 2002</td>
603<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.FreeBSD" target="_top">README.FreeBSD</a></td> 603<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.FreeBSD" target="_top">README.FreeBSD</a></td>
604</tr> 604</tr>
605<tr> 605<tr>
606<td><a class="ulink" href="http://www.openbsd.org/" target="_top">OpenBSD</a></td> 606<td><a class="ulink" href="http://www.openbsd.org/" target="_top">OpenBSD</a></td>
607<td align="center">Nov 2002</td> 607<td align="center">Nov 2002</td>
608<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.OpenBSD" target="_top">README.OpenBSD</a></td> 608<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.OpenBSD" target="_top">README.OpenBSD</a></td>
609</tr> 609</tr>
610<tr> 610<tr>
611<td><a class="ulink" href="http://www.sgi.com/software/irix/" target="_top">IRIX</a></td> 611<td><a class="ulink" href="http://www.sgi.com/software/irix/" target="_top">IRIX</a></td>
612<td align="center">Dec 2002</td> 612<td align="center">Dec 2002</td>
613<td> 613<td>
614 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.IRIX" target="_top">README.IRIX</a> 614 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.IRIX" target="_top">README.IRIX</a>
615 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.IRIX5.3" target="_top">README.IRIX5.3</a> 615 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.IRIX5.3" target="_top">README.IRIX5.3</a>
616 </td> 616 </td>
617</tr> 617</tr>
618<tr> 618<tr>
619<td>BSD/OS</td> 619<td>BSD/OS</td>
620<td align="center">Dec 2003</td> 620<td align="center">Dec 2003</td>
621<td class="auto-generated"> </td> 621<td class="auto-generated"> </td>
622</tr> 622</tr>
623<tr> 623<tr>
624<td><a class="ulink" href="http://www-1.ibm.com/servers/aix/" target="_top">AIX</a></td> 624<td><a class="ulink" href="http://www-1.ibm.com/servers/aix/" target="_top">AIX</a></td>
625<td align="center">Dec 2003</td> 625<td align="center">Dec 2003</td>
626<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.AIX" target="_top">README.AIX</a></td> 626<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.AIX" target="_top">README.AIX</a></td>
627</tr> 627</tr>
628<tr> 628<tr>
629<td> 629<td>
630 <a class="ulink" href="http://www.microsoft.com/windows/sfu/" target="_top">Interix</a> 630 <a class="ulink" href="http://www.microsoft.com/windows/sfu/" target="_top">Interix</a>
631 (Microsoft Windows Services for Unix) 631 (Microsoft Windows Services for Unix)
632 </td> 632 </td>
633<td align="center">Mar 2004</td> 633<td align="center">Mar 2004</td>
634<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Interix" target="_top">README.Interix</a></td> 634<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Interix" target="_top">README.Interix</a></td>
635</tr> 635</tr>
636<tr> 636<tr>
637<td><a class="ulink" href="http://www.dragonflybsd.org/" target="_top">DragonFlyBSD</a></td> 637<td><a class="ulink" href="http://www.dragonflybsd.org/" target="_top">DragonFlyBSD</a></td>
638<td align="center">Oct 2004</td> 638<td align="center">Oct 2004</td>
639<td class="auto-generated"> </td> 639<td class="auto-generated"> </td>
640</tr> 640</tr>
641<tr> 641<tr>
642<td><a class="ulink" href="http://www.tru64.org/" target="_top">OSF/1</a></td> 642<td><a class="ulink" href="http://www.tru64.org/" target="_top">OSF/1</a></td>
643<td align="center">Nov 2004</td> 643<td align="center">Nov 2004</td>
644<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.OSF1" target="_top">README.OSF1</a></td> 644<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.OSF1" target="_top">README.OSF1</a></td>
645</tr> 645</tr>
646<tr> 646<tr>
647<td><a class="ulink" href="http://www.hp.com/products1/unix/" target="_top">HP-UX</a></td> 647<td><a class="ulink" href="http://www.hp.com/products1/unix/" target="_top">HP-UX</a></td>
648<td align="center">Apr 2007</td> 648<td align="center">Apr 2007</td>
649<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.HPUX" target="_top">README.HPUX</a></td> 649<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.HPUX" target="_top">README.HPUX</a></td>
650</tr> 650</tr>
651<tr> 651<tr>
652<td><a class="ulink" href="http://www.haiku-os.org/" target="_top">Haiku</a></td> 652<td><a class="ulink" href="http://www.haiku-os.org/" target="_top">Haiku</a></td>
653<td align="center">Sep 2010</td> 653<td align="center">Sep 2010</td>
654<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Haiku" target="_top">README.Haiku</a></td> 654<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Haiku" target="_top">README.Haiku</a></td>
655</tr> 655</tr>
656<tr> 656<tr>
657<td><a class="ulink" href="http://www.mirbsd.org/" target="_top">MirBSD</a></td> 657<td><a class="ulink" href="http://www.mirbsd.org/" target="_top">MirBSD</a></td>
658<td align="center">Jan 2011</td> 658<td align="center">Jan 2011</td>
659<td class="auto-generated"> </td> 659<td class="auto-generated"> </td>
660</tr> 660</tr>
661<tr> 661<tr>
662<td><a class="ulink" href="http://www.minix3.org/" target="_top">Minix3</a></td> 662<td><a class="ulink" href="http://www.minix3.org/" target="_top">Minix3</a></td>
663<td align="center">Nov 2011</td> 663<td align="center">Nov 2011</td>
664<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Minix3" target="_top">README.Minix3</a></td> 664<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Minix3" target="_top">README.Minix3</a></td>
665</tr> 665</tr>
666<tr> 666<tr>
667<td><a class="ulink" href="http://cygwin.com/" target="_top">Cygwin</a></td> 667<td><a class="ulink" href="http://cygwin.com/" target="_top">Cygwin</a></td>
668<td align="center">Mar 2013</td> 668<td align="center">Mar 2013</td>
669<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Cygwin" target="_top">README.Cygwin</a></td> 669<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Cygwin" target="_top">README.Cygwin</a></td>
670</tr> 670</tr>
671<tr> 671<tr>
672<td><a class="ulink" href="http://www.debian.org/ports/kfreebsd-gnu/" target="_top">GNU/kFreeBSD</a></td> 672<td><a class="ulink" href="http://www.debian.org/ports/kfreebsd-gnu/" target="_top">GNU/kFreeBSD</a></td>
673<td align="center">Jul 2013</td> 673<td align="center">Jul 2013</td>
674<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.GNUkFreeBSD" target="_top">README.GNUkFreeBSD</a></td> 674<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.GNUkFreeBSD" target="_top">README.GNUkFreeBSD</a></td>
675</tr> 675</tr>
676<tr> 676<tr>
677<td><a class="ulink" href="http://www.bitrig.org/" target="_top">Bitrig</a></td> 677<td><a class="ulink" href="http://www.bitrig.org/" target="_top">Bitrig</a></td>
678<td align="center">Jun 2014</td> 678<td align="center">Jun 2014</td>
679<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Bitrig" target="_top">README.Bitrig</a></td> 679<td><a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/bootstrap/README.Bitrig" target="_top">README.Bitrig</a></td>
680</tr> 680</tr>
681</tbody> 681</tbody>
682</table></div> 682</table></div>
683</div> 683</div>
684<br class="table-break"> 684<br class="table-break">
685</div> 685</div>
686</div> 686</div>
687<div class="sect1"> 687<div class="sect1">
688<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 688<div class="titlepage"><div><div><h2 class="title" style="clear: both">
689<a name="overview"></a>1.2. Overview</h2></div></div></div> 689<a name="overview"></a>1.2. Overview</h2></div></div></div>
690<p>This document is divided into three parts. The first, 690<p>This document is divided into three parts. The first,
691 <a class="link" href="#users-guide" title="Part I. The pkgsrc user's guide">The pkgsrc user's guide</a>, 691 <a class="link" href="#users-guide" title="Part I. The pkgsrc user's guide">The pkgsrc user's guide</a>,
692 describes how one can use one of the packages in the Package 692 describes how one can use one of the packages in the Package
693 Collection, either by installing a precompiled binary package, 693 Collection, either by installing a precompiled binary package,
694 or by building one's own copy using the NetBSD package system. 694 or by building one's own copy using the NetBSD package system.
695 The second part, <a class="link" href="#developers-guide" title="Part II. The pkgsrc developer's guide">The pkgsrc developer's guide</a>, explains how to prepare a 695 The second part, <a class="link" href="#developers-guide" title="Part II. The pkgsrc developer's guide">The pkgsrc developer's guide</a>, explains how to prepare a
696 package so it can be easily built by other NetBSD users without 696 package so it can be easily built by other NetBSD users without
697 knowing about the package's building details. The third part, 697 knowing about the package's building details. The third part,
698 <a class="link" href="#infrastructure" title="Part III. The pkgsrc infrastructure internals">The pkgsrc infrastructure internals</a> 698 <a class="link" href="#infrastructure" title="Part III. The pkgsrc infrastructure internals">The pkgsrc infrastructure internals</a>
699 is intended for those who want to understand how pkgsrc is 699 is intended for those who want to understand how pkgsrc is
700 implemented.</p> 700 implemented.</p>
701<p>This document is available in various formats: 701<p>This document is available in various formats:
702 <span class="simplelist"><a class="ulink" href="index.html" target="_top">HTML</a>, <a class="ulink" href="pkgsrc.pdf" target="_top">PDF</a>, <a class="ulink" href="pkgsrc.ps" target="_top">PS</a>, <a class="ulink" href="pkgsrc.txt" target="_top">TXT</a></span>.</p> 702 <span class="simplelist"><a class="ulink" href="index.html" target="_top">HTML</a>, <a class="ulink" href="pkgsrc.pdf" target="_top">PDF</a>, <a class="ulink" href="pkgsrc.ps" target="_top">PS</a>, <a class="ulink" href="pkgsrc.txt" target="_top">TXT</a></span>.</p>
703</div> 703</div>
704<div class="sect1"> 704<div class="sect1">
705<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 705<div class="titlepage"><div><div><h2 class="title" style="clear: both">
706<a name="terminology"></a>1.3. Terminology</h2></div></div></div> 706<a name="terminology"></a>1.3. Terminology</h2></div></div></div>
707<p>There has been a lot of talk about <span class="quote">&#8220;<span class="quote">ports</span>&#8221;</span>, 707<p>There has been a lot of talk about <span class="quote">&#8220;<span class="quote">ports</span>&#8221;</span>,
708 <span class="quote">&#8220;<span class="quote">packages</span>&#8221;</span>, etc. so far. Here is a description of all the 708 <span class="quote">&#8220;<span class="quote">packages</span>&#8221;</span>, etc. so far. Here is a description of all the
709 terminology used within this document.</p> 709 terminology used within this document.</p>
710<div class="variablelist"><dl class="variablelist"> 710<div class="variablelist"><dl class="variablelist">
711<dt><span class="term">Package</span></dt> 711<dt><span class="term">Package</span></dt>
712<dd><p>A set of files and building instructions 712<dd><p>A set of files and building instructions
713 that describe what's necessary 713 that describe what's necessary
714 to build a certain piece of software using 714 to build a certain piece of software using
715 pkgsrc. Packages are traditionally stored under 715 pkgsrc. Packages are traditionally stored under
716 <code class="filename">/usr/pkgsrc</code>, 716 <code class="filename">/usr/pkgsrc</code>,
717 but may be stored in any location, 717 but may be stored in any location,
718 referred to as <code class="varname">PKGSRCDIR</code>.</p></dd> 718 referred to as <code class="varname">PKGSRCDIR</code>.</p></dd>
719<dt><span class="term">The NetBSD package system</span></dt> 719<dt><span class="term">The NetBSD package system</span></dt>
720<dd><p>This is the former name of <span class="quote">&#8220;<span class="quote">pkgsrc</span>&#8221;</span>. It 720<dd><p>This is the former name of <span class="quote">&#8220;<span class="quote">pkgsrc</span>&#8221;</span>. It
721 is part of the NetBSD operating system and can be bootstrapped 721 is part of the NetBSD operating system and can be bootstrapped
722 to run on non-NetBSD operating systems as well. It handles 722 to run on non-NetBSD operating systems as well. It handles
723 building (compiling), installing, and removing of 723 building (compiling), installing, and removing of
724 packages.</p></dd> 724 packages.</p></dd>
725<dt><span class="term">Distfile</span></dt> 725<dt><span class="term">Distfile</span></dt>
726<dd><p>This term describes the file or files that are 726<dd><p>This term describes the file or files that are
727 provided by the author of the piece of software to 727 provided by the author of the piece of software to
728 distribute his work. All the changes necessary to build on 728 distribute his work. All the changes necessary to build on
729 NetBSD are reflected in the corresponding package. Usually 729 NetBSD are reflected in the corresponding package. Usually
730 the distfile is in the form of a compressed tar-archive, 730 the distfile is in the form of a compressed tar-archive,
731 but other types are possible, too. Distfiles are usually 731 but other types are possible, too. Distfiles are usually
732 stored below 732 stored below
733 <code class="filename">/usr/pkgsrc/distfiles</code>.</p></dd> 733 <code class="filename">/usr/pkgsrc/distfiles</code>.</p></dd>
734<dt><span class="term">Port</span></dt> 734<dt><span class="term">Port</span></dt>
735<dd><p>This is the term used by FreeBSD and OpenBSD people 735<dd><p>This is the term used by FreeBSD and OpenBSD people
736 for what we call a package. 736 for what we call a package.
737 In NetBSD terminology, <span class="quote">&#8220;<span class="quote">port</span>&#8221;</span> refers to a different 737 In NetBSD terminology, <span class="quote">&#8220;<span class="quote">port</span>&#8221;</span> refers to a different
738 architecture.</p></dd> 738 architecture.</p></dd>
739<dt><span class="term">Precompiled/binary package</span></dt> 739<dt><span class="term">Precompiled/binary package</span></dt>
740<dd> 740<dd>
741<p>A set of binaries built with pkgsrc from a distfile 741<p>A set of binaries built with pkgsrc from a distfile
742 and stuffed together in a single <code class="filename">.tgz</code> 742 and stuffed together in a single <code class="filename">.tgz</code>
743 file so it can be installed on machines of the same 743 file so it can be installed on machines of the same
744 machine architecture without the need to 744 machine architecture without the need to
745 recompile. Packages are usually generated in 745 recompile. Packages are usually generated in
746 <code class="filename">/usr/pkgsrc/packages</code>; there is also 746 <code class="filename">/usr/pkgsrc/packages</code>; there is also
747 an archive on <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/" target="_top">ftp.NetBSD.org</a>.</p> 747 an archive on <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/" target="_top">ftp.NetBSD.org</a>.</p>
748<p>Sometimes, this is referred to by the term <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> too, 748<p>Sometimes, this is referred to by the term <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> too,
749 especially in the context of precompiled packages.</p> 749 especially in the context of precompiled packages.</p>
750</dd> 750</dd>
751<dt><span class="term">Program</span></dt> 751<dt><span class="term">Program</span></dt>
752<dd><p>The piece of software to be installed which will be 752<dd><p>The piece of software to be installed which will be
753 constructed from all the files in the distfile by the 753 constructed from all the files in the distfile by the
754 actions defined in the corresponding package.</p></dd> 754 actions defined in the corresponding package.</p></dd>
755</dl></div> 755</dl></div>
756<div class="sect2"> 756<div class="sect2">
757<div class="titlepage"><div><div><h3 class="title"> 757<div class="titlepage"><div><div><h3 class="title">
758<a name="term.roles"></a>1.3.1. Roles involved in pkgsrc</h3></div></div></div> 758<a name="term.roles"></a>1.3.1. Roles involved in pkgsrc</h3></div></div></div>
759<div class="variablelist"><dl class="variablelist"> 759<div class="variablelist"><dl class="variablelist">
760<dt><span class="term">pkgsrc users</span></dt> 760<dt><span class="term">pkgsrc users</span></dt>
761<dd> 761<dd>
762<p>The 762<p>The
763 pkgsrc users are people who use the packages provided by pkgsrc. 763 pkgsrc users are people who use the packages provided by pkgsrc.
764 Typically they are system administrators. The people using the 764 Typically they are system administrators. The people using the
765 software that is inside the packages (maybe called <span class="quote">&#8220;<span class="quote">end 765 software that is inside the packages (maybe called <span class="quote">&#8220;<span class="quote">end
766 users</span>&#8221;</span>) are not covered by the pkgsrc guide.</p> 766 users</span>&#8221;</span>) are not covered by the pkgsrc guide.</p>
767<p>There are two kinds of pkgsrc users: Some only want to 767<p>There are two kinds of pkgsrc users: Some only want to
768 install pre-built binary packages. Others build the pkgsrc 768 install pre-built binary packages. Others build the pkgsrc
769 packages from source, either for installing them directly or for 769 packages from source, either for installing them directly or for
770 building binary packages themselves. For pkgsrc users <a class="xref" href="#users-guide" title="Part I. The pkgsrc user's guide">Part I, &#8220;The pkgsrc user's guide&#8221;</a> should provide all necessary 770 building binary packages themselves. For pkgsrc users <a class="xref" href="#users-guide" title="Part I. The pkgsrc user's guide">Part I, &#8220;The pkgsrc user's guide&#8221;</a> should provide all necessary
771 documentation.</p> 771 documentation.</p>
772</dd> 772</dd>
773<dt><span class="term">package maintainers</span></dt> 773<dt><span class="term">package maintainers</span></dt>
774<dd><p>A 774<dd><p>A
775 package maintainer creates packages as described in <a class="xref" href="#developers-guide" title="Part II. The pkgsrc developer's guide">Part II, &#8220;The pkgsrc developer's guide&#8221;</a>.</p></dd> 775 package maintainer creates packages as described in <a class="xref" href="#developers-guide" title="Part II. The pkgsrc developer's guide">Part II, &#8220;The pkgsrc developer's guide&#8221;</a>.</p></dd>
776<dt><span class="term">infrastructure developers</span></dt> 776<dt><span class="term">infrastructure developers</span></dt>
777<dd><p>These people are involved in all those files 777<dd><p>These people are involved in all those files
778 that live in the <code class="filename">mk/</code> directory and below. 778 that live in the <code class="filename">mk/</code> directory and below.
779 Only these people should need to read through <a class="xref" href="#infrastructure" title="Part III. The pkgsrc infrastructure internals">Part III, &#8220;The pkgsrc infrastructure internals&#8221;</a>, though others might be curious, 779 Only these people should need to read through <a class="xref" href="#infrastructure" title="Part III. The pkgsrc infrastructure internals">Part III, &#8220;The pkgsrc infrastructure internals&#8221;</a>, though others might be curious,
780 too.</p></dd> 780 too.</p></dd>
781</dl></div> 781</dl></div>
782</div> 782</div>
783</div> 783</div>
784<div class="sect1"> 784<div class="sect1">
785<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 785<div class="titlepage"><div><div><h2 class="title" style="clear: both">
786<a name="typography"></a>1.4. Typography</h2></div></div></div> 786<a name="typography"></a>1.4. Typography</h2></div></div></div>
787<p>When giving examples for commands, shell prompts are used to 787<p>When giving examples for commands, shell prompts are used to
788 show if the command should/can be issued as root, or if 788 show if the command should/can be issued as root, or if
789 <span class="quote">&#8220;<span class="quote">normal</span>&#8221;</span> user privileges are sufficient. We use a 789 <span class="quote">&#8220;<span class="quote">normal</span>&#8221;</span> user privileges are sufficient. We use a
790 <code class="prompt">#</code> for root's shell prompt, a <code class="prompt">%</code> for users' 790 <code class="prompt">#</code> for root's shell prompt, a <code class="prompt">%</code> for users'
791 shell prompt, assuming they use the C-shell or tcsh and a <code class="prompt">$</code> for 791 shell prompt, assuming they use the C-shell or tcsh and a <code class="prompt">$</code> for
792 bourne shell and derivatives.</p> 792 bourne shell and derivatives.</p>
793</div> 793</div>
794</div> 794</div>
795<div class="part"> 795<div class="part">
796<div class="titlepage"><div><div><h1 class="title"> 796<div class="titlepage"><div><div><h1 class="title">
797<a name="users-guide"></a>Part I. The pkgsrc user's guide</h1></div></div></div> 797<a name="users-guide"></a>Part I. The pkgsrc user's guide</h1></div></div></div>
798<div class="toc"> 798<div class="toc">
799<p><b>Table of Contents</b></p> 799<p><b>Table of Contents</b></p>
800<dl class="toc"> 800<dl class="toc">
801<dt><span class="chapter"><a href="#getting">2. Where to get pkgsrc and how to keep it up-to-date</a></span></dt> 801<dt><span class="chapter"><a href="#getting">2. Where to get pkgsrc and how to keep it up-to-date</a></span></dt>
802<dd><dl> 802<dd><dl>
803<dt><span class="sect1"><a href="#getting-first">2.1. Getting pkgsrc for the first time</a></span></dt> 803<dt><span class="sect1"><a href="#getting-first">2.1. Getting pkgsrc for the first time</a></span></dt>
804<dd><dl> 804<dd><dl>
805<dt><span class="sect2"><a href="#getting-via-tar">2.1.1. As tar archive</a></span></dt> 805<dt><span class="sect2"><a href="#getting-via-tar">2.1.1. As tar archive</a></span></dt>
806<dt><span class="sect2"><a href="#getting-via-cvs">2.1.2. Via anonymous CVS</a></span></dt> 806<dt><span class="sect2"><a href="#getting-via-cvs">2.1.2. Via anonymous CVS</a></span></dt>
807</dl></dd> 807</dl></dd>
808<dt><span class="sect1"><a href="#uptodate">2.2. Keeping pkgsrc up-to-date</a></span></dt> 808<dt><span class="sect1"><a href="#uptodate">2.2. Keeping pkgsrc up-to-date</a></span></dt>
809<dd><dl> 809<dd><dl>
810<dt><span class="sect2"><a href="#uptodate-tar">2.2.1. Via tar files</a></span></dt> 810<dt><span class="sect2"><a href="#uptodate-tar">2.2.1. Via tar files</a></span></dt>
811<dt><span class="sect2"><a href="#uptodate-cvs">2.2.2. Via CVS</a></span></dt> 811<dt><span class="sect2"><a href="#uptodate-cvs">2.2.2. Via CVS</a></span></dt>
812</dl></dd> 812</dl></dd>
813</dl></dd> 813</dl></dd>
814<dt><span class="chapter"><a href="#platforms">3. Using pkgsrc on systems other than NetBSD</a></span></dt> 814<dt><span class="chapter"><a href="#platforms">3. Using pkgsrc on systems other than NetBSD</a></span></dt>
815<dd><dl> 815<dd><dl>
816<dt><span class="sect1"><a href="#binarydist">3.1. Binary distribution</a></span></dt> 816<dt><span class="sect1"><a href="#binarydist">3.1. Binary distribution</a></span></dt>
817<dt><span class="sect1"><a href="#bootstrapping-pkgsrc">3.2. Bootstrapping pkgsrc</a></span></dt> 817<dt><span class="sect1"><a href="#bootstrapping-pkgsrc">3.2. Bootstrapping pkgsrc</a></span></dt>
818</dl></dd> 818</dl></dd>
819<dt><span class="chapter"><a href="#using">4. Using pkgsrc</a></span></dt> 819<dt><span class="chapter"><a href="#using">4. Using pkgsrc</a></span></dt>
820<dd><dl> 820<dd><dl>
821<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt> 821<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt>
822<dd><dl> 822<dd><dl>
823<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt> 823<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt>
824<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt> 824<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt>
825<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt> 825<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt>
826<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt> 826<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt>
827<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt> 827<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt>
828<dt><span class="sect2"><a href="#pkg_versions">4.1.6. Finding if newer versions of your installed packages are in pkgsrc</a></span></dt> 828<dt><span class="sect2"><a href="#pkg_versions">4.1.6. Finding if newer versions of your installed packages are in pkgsrc</a></span></dt>
829<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt> 829<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt>
830</dl></dd> 830</dl></dd>
831<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt> 831<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt>
832<dd><dl> 832<dd><dl>
833<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt> 833<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt>
834<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt> 834<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt>
835<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt> 835<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt>
836</dl></dd> 836</dl></dd>
837</dl></dd> 837</dl></dd>
838<dt><span class="chapter"><a href="#configuring">5. Configuring pkgsrc</a></span></dt> 838<dt><span class="chapter"><a href="#configuring">5. Configuring pkgsrc</a></span></dt>
839<dd><dl> 839<dd><dl>
840<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt> 840<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt>
841<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt> 841<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt>
842<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt> 842<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt>
843<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt> 843<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt>
844<dd><dl> 844<dd><dl>
845<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt> 845<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt>
846<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt> 846<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt>
847<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt> 847<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt>
848</dl></dd> 848</dl></dd>
849<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt> 849<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt>
850<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt> 850<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt>
851</dl></dd> 851</dl></dd>
852<dt><span class="chapter"><a href="#binary">6. Creating binary packages</a></span></dt> 852<dt><span class="chapter"><a href="#binary">6. Creating binary packages</a></span></dt>
853<dd><dl> 853<dd><dl>
854<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt> 854<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt>
855<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt> 855<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt>
856</dl></dd> 856</dl></dd>
857<dt><span class="chapter"><a href="#bulk">7. Creating binary packages for everything in pkgsrc (bulk 857<dt><span class="chapter"><a href="#bulk">7. Creating binary packages for everything in pkgsrc (bulk
858builds)</a></span></dt> 858builds)</a></span></dt>
859<dd><dl> 859<dd><dl>
860<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt> 860<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt>
861<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt> 861<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt>
862<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd> 862<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd>
863<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt> 863<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt>
864<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt> 864<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt>
865<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd> 865<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd>
866</dl></dd> 866</dl></dd>
867<dt><span class="chapter"><a href="#files">8. Directory layout of the installed files</a></span></dt> 867<dt><span class="chapter"><a href="#files">8. Directory layout of the installed files</a></span></dt>
868<dd><dl> 868<dd><dl>
869<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt> 869<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt>
870<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt> 870<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt>
871</dl></dd> 871</dl></dd>
872<dt><span class="chapter"><a href="#faq">9. Frequently Asked Questions</a></span></dt> 872<dt><span class="chapter"><a href="#faq">9. Frequently Asked Questions</a></span></dt>
873<dd><dl> 873<dd><dl>
874<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt> 874<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt>
875<dt><span class="sect1"><a href="#faq-pkgtools">9.2. Utilities for package management (pkgtools)</a></span></dt> 875<dt><span class="sect1"><a href="#faq-pkgtools">9.2. Utilities for package management (pkgtools)</a></span></dt>
876<dt><span class="sect1"><a href="#non-root-pkgsrc">9.3. How to use pkgsrc as non-root</a></span></dt> 876<dt><span class="sect1"><a href="#non-root-pkgsrc">9.3. How to use pkgsrc as non-root</a></span></dt>
877<dt><span class="sect1"><a href="#resume-transfers">9.4. How to resume transfers when fetching distfiles?</a></span></dt> 877<dt><span class="sect1"><a href="#resume-transfers">9.4. How to resume transfers when fetching distfiles?</a></span></dt>
878<dt><span class="sect1"><a href="#x.org-from-pkgsrc">9.5. How can I install/use modular X.org from pkgsrc?</a></span></dt> 878<dt><span class="sect1"><a href="#x.org-from-pkgsrc">9.5. How can I install/use modular X.org from pkgsrc?</a></span></dt>
879<dt><span class="sect1"><a href="#fetch-behind-firewall">9.6. How to fetch files from behind a firewall</a></span></dt> 879<dt><span class="sect1"><a href="#fetch-behind-firewall">9.6. How to fetch files from behind a firewall</a></span></dt>
880<dt><span class="sect1"><a href="#fetch-https">9.7. How to fetch files from HTTPS sites</a></span></dt> 880<dt><span class="sect1"><a href="#fetch-https">9.7. How to fetch files from HTTPS sites</a></span></dt>
881<dt><span class="sect1"><a href="#passive-ftp">9.8. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</a></span></dt> 881<dt><span class="sect1"><a href="#passive-ftp">9.8. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</a></span></dt>
882<dt><span class="sect1"><a href="#fetching-all-distfiles">9.9. How to fetch all distfiles at once</a></span></dt> 882<dt><span class="sect1"><a href="#fetching-all-distfiles">9.9. How to fetch all distfiles at once</a></span></dt>
883<dt><span class="sect1"><a href="#tmac.andoc-missing">9.10. What does <span class="quote">&#8220;<span class="quote">Don't know how to make 883<dt><span class="sect1"><a href="#tmac.andoc-missing">9.10. What does <span class="quote">&#8220;<span class="quote">Don't know how to make
884/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt> 884/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt>
885<dt><span class="sect1"><a href="#bsd.own.mk-missing">9.11. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</a></span></dt> 885<dt><span class="sect1"><a href="#bsd.own.mk-missing">9.11. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</a></span></dt>
886<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.12. Using 'sudo' with pkgsrc</a></span></dt> 886<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.12. Using 'sudo' with pkgsrc</a></span></dt>
887<dt><span class="sect1"><a href="#faq.conf">9.13. How do I change the location of configuration files?</a></span></dt> 887<dt><span class="sect1"><a href="#faq.conf">9.13. How do I change the location of configuration files?</a></span></dt>
888<dt><span class="sect1"><a href="#audit-packages">9.14. Automated security checks</a></span></dt> 888<dt><span class="sect1"><a href="#audit-packages">9.14. Automated security checks</a></span></dt>
889<dt><span class="sect1"><a href="#ufaq-cflags">9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt> 889<dt><span class="sect1"><a href="#ufaq-cflags">9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt>
890<dt><span class="sect1"><a href="#ufaq-fail">9.16. A package does not build. What shall I do?</a></span></dt> 890<dt><span class="sect1"><a href="#ufaq-fail">9.16. A package does not build. What shall I do?</a></span></dt>
891<dt><span class="sect1"><a href="#faq.rcs-conflicts">9.17. What does <span class="quote">&#8220;<span class="quote">Makefile appears to contain unresolved cvs/rcs/??? merge conflicts</span>&#8221;</span> mean?</a></span></dt> 891<dt><span class="sect1"><a href="#faq.rcs-conflicts">9.17. What does <span class="quote">&#8220;<span class="quote">Makefile appears to contain unresolved cvs/rcs/??? merge conflicts</span>&#8221;</span> mean?</a></span></dt>
892</dl></dd> 892</dl></dd>
893</dl> 893</dl>
894</div> 894</div>
895<div class="chapter"> 895<div class="chapter">
896<div class="titlepage"><div><div><h2 class="title"> 896<div class="titlepage"><div><div><h2 class="title">
897<a name="getting"></a>Chapter 2. Where to get pkgsrc and how to keep it up-to-date</h2></div></div></div> 897<a name="getting"></a>Chapter 2. Where to get pkgsrc and how to keep it up-to-date</h2></div></div></div>
898<div class="toc"> 898<div class="toc">
899<p><b>Table of Contents</b></p> 899<p><b>Table of Contents</b></p>
900<dl class="toc"> 900<dl class="toc">
901<dt><span class="sect1"><a href="#getting-first">2.1. Getting pkgsrc for the first time</a></span></dt> 901<dt><span class="sect1"><a href="#getting-first">2.1. Getting pkgsrc for the first time</a></span></dt>
902<dd><dl> 902<dd><dl>
903<dt><span class="sect2"><a href="#getting-via-tar">2.1.1. As tar archive</a></span></dt> 903<dt><span class="sect2"><a href="#getting-via-tar">2.1.1. As tar archive</a></span></dt>
904<dt><span class="sect2"><a href="#getting-via-cvs">2.1.2. Via anonymous CVS</a></span></dt> 904<dt><span class="sect2"><a href="#getting-via-cvs">2.1.2. Via anonymous CVS</a></span></dt>
905</dl></dd> 905</dl></dd>
906<dt><span class="sect1"><a href="#uptodate">2.2. Keeping pkgsrc up-to-date</a></span></dt> 906<dt><span class="sect1"><a href="#uptodate">2.2. Keeping pkgsrc up-to-date</a></span></dt>
907<dd><dl> 907<dd><dl>
908<dt><span class="sect2"><a href="#uptodate-tar">2.2.1. Via tar files</a></span></dt> 908<dt><span class="sect2"><a href="#uptodate-tar">2.2.1. Via tar files</a></span></dt>
909<dt><span class="sect2"><a href="#uptodate-cvs">2.2.2. Via CVS</a></span></dt> 909<dt><span class="sect2"><a href="#uptodate-cvs">2.2.2. Via CVS</a></span></dt>
910</dl></dd> 910</dl></dd>
911</dl> 911</dl>
912</div> 912</div>
913<p>Before you download and extract the files, you need to decide 913<p>Before you download and extract the files, you need to decide
914where you want to extract them. When using pkgsrc as root user, pkgsrc 914where you want to extract them. When using pkgsrc as root user, pkgsrc
915is usually installed in <code class="filename">/usr/pkgsrc</code>. You are though 915is usually installed in <code class="filename">/usr/pkgsrc</code>. You are though
916free to install the sources and binary packages wherever you want in 916free to install the sources and binary packages wherever you want in
917your filesystem, provided that the pathname does not contain white-space 917your filesystem, provided that the pathname does not contain white-space
918or other characters that are interpreted specially by the shell and some 918or other characters that are interpreted specially by the shell and some
919other programs. A safe bet is to use only letters, digits, underscores 919other programs. A safe bet is to use only letters, digits, underscores
920and dashes.</p> 920and dashes.</p>
921<div class="sect1"> 921<div class="sect1">
922<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 922<div class="titlepage"><div><div><h2 class="title" style="clear: both">
923<a name="getting-first"></a>2.1. Getting pkgsrc for the first time</h2></div></div></div> 923<a name="getting-first"></a>2.1. Getting pkgsrc for the first time</h2></div></div></div>
924<p>Before you download any pkgsrc files, you should decide 924<p>Before you download any pkgsrc files, you should decide
925 whether you want the <span class="emphasis"><em>current</em></span> branch or the 925 whether you want the <span class="emphasis"><em>current</em></span> branch or the
926 <span class="emphasis"><em>stable</em></span> branch. The latter is forked on a 926 <span class="emphasis"><em>stable</em></span> branch. The latter is forked on a
927 quarterly basis from the current branch and only gets modified 927 quarterly basis from the current branch and only gets modified
928 for security updates. The names of the stable branches are built 928 for security updates. The names of the stable branches are built
929 from the year and the quarter, for example 929 from the year and the quarter, for example
930 <code class="literal">2017Q3</code>.</p> 930 <code class="literal">2018Q1</code>.</p>
931<p>The second step is to decide <span class="emphasis"><em>how</em></span> you 931<p>The second step is to decide <span class="emphasis"><em>how</em></span> you
932 want to download pkgsrc. You can get it as a tar file or via CVS. 932 want to download pkgsrc. You can get it as a tar file or via CVS.
933 Both ways are described here.</p> 933 Both ways are described here.</p>
934<p>Note that tar archive contains CVS working copy. 934<p>Note that tar archive contains CVS working copy.
935 Thus you can switch to using CVS at any later time.</p> 935 Thus you can switch to using CVS at any later time.</p>
936<div class="sect2"> 936<div class="sect2">
937<div class="titlepage"><div><div><h3 class="title"> 937<div class="titlepage"><div><div><h3 class="title">
938<a name="getting-via-tar"></a>2.1.1. As tar archive</h3></div></div></div> 938<a name="getting-via-tar"></a>2.1.1. As tar archive</h3></div></div></div>
939<p>The primary download location for all pkgsrc files is 939<p>The primary download location for all pkgsrc files is
940 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/" target="_top">http://ftp.NetBSD.org/pub/pkgsrc/</a> or 940 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/" target="_top">http://ftp.NetBSD.org/pub/pkgsrc/</a> or
941 <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/" target="_top">ftp://ftp.NetBSD.org/pub/pkgsrc/</a> 941 <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/" target="_top">ftp://ftp.NetBSD.org/pub/pkgsrc/</a>
942 (it points to the same location). 942 (it points to the same location).
943 There are a number of subdirectories for different purposes, 943 There are a number of subdirectories for different purposes,
944 which are described in detail in <a class="xref" href="#ftp-layout" title="Appendix C. Directory layout of the pkgsrc FTP server">Appendix C, <i>Directory layout of the pkgsrc FTP server</i></a>.</p> 944 which are described in detail in <a class="xref" href="#ftp-layout" title="Appendix C. Directory layout of the pkgsrc FTP server">Appendix C, <i>Directory layout of the pkgsrc FTP server</i></a>.</p>
945<p>The tar archive for the current branch is in the directory 945<p>The tar archive for the current branch is in the directory
946 <code class="filename">current</code> and is called <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz" target="_top"><code class="filename">pkgsrc.tar.gz</code></a>. 946 <code class="filename">current</code> and is called <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz" target="_top"><code class="filename">pkgsrc.tar.gz</code></a>.
947 It is autogenerated weekly.</p> 947 It is autogenerated weekly.</p>
948<p>To save download time we provide bzip2- and 948<p>To save download time we provide bzip2- and
949 xz-compressed archives which are published at 949 xz-compressed archives which are published at
950 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.bz2" target="_top"><code class="filename">pkgsrc.tar.bz2</code></a> 950 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.bz2" target="_top"><code class="filename">pkgsrc.tar.bz2</code></a>
951 and 951 and
952 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.xz" target="_top"><code class="filename">pkgsrc.tar.xz</code></a> 952 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.xz" target="_top"><code class="filename">pkgsrc.tar.xz</code></a>
953 respectively. 953 respectively.
954 </p> 954 </p>
955<p>You can fetch the same files using FTP.</p> 955<p>You can fetch the same files using FTP.</p>
956<p>The tar file for the stable branch 2017Q3 is in the 956<p>The tar file for the stable branch 2018Q1 is in the
957 directory <code class="filename">pkgsrc-2017Q3</code> and is also called <a class="ulink" href="http://cdn.NetBSD.org/pub/pkgsrc/pkgsrc-2017Q3/pkgsrc.tar.gz" target="_top"><code class="filename">pkgsrc.tar.gz</code></a>.</p> 957 directory <code class="filename">pkgsrc-2018Q1</code> and is also called <a class="ulink" href="https://cdn.NetBSD.org/pub/pkgsrc/pkgsrc-2018Q1/pkgsrc.tar.gz" target="_top"><code class="filename">pkgsrc.tar.gz</code></a>.</p>
958<p>To download the latest pkgsrc stable tarball, run:</p> 958<p>To download the latest pkgsrc stable tarball, run:</p>
959<pre class="screen"> 959<pre class="screen">
960<code class="prompt">$</code> <strong class="userinput"><code>ftp ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-2017Q3/pkgsrc.tar.gz</code></strong></pre> 960<code class="prompt">$</code> <strong class="userinput"><code>ftp ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-2018Q1/pkgsrc.tar.gz</code></strong></pre>
961<p>If you prefer, you can also fetch it using "wget", "curl", 961<p>If you prefer, you can also fetch it using "wget", "curl",
962 or your web browser.</p> 962 or your web browser.</p>
963<p>Then, extract it with:</p> 963<p>Then, extract it with:</p>
964<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>tar -xzf pkgsrc.tar.gz -C /usr</code></strong></pre> 964<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>tar -xzf pkgsrc.tar.gz -C /usr</code></strong></pre>
965<p>This will create the directory <code class="filename">pkgsrc/</code> 965<p>This will create the directory <code class="filename">pkgsrc/</code>
966 in <code class="filename">/usr/</code> and all the package source will be  966 in <code class="filename">/usr/</code> and all the package source will be
967 stored under <code class="filename">/usr/pkgsrc/</code>.</p> 967 stored under <code class="filename">/usr/pkgsrc/</code>.</p>
968<p>To download pkgsrc-current, run:</p> 968<p>To download pkgsrc-current, run:</p>
969<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>ftp ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz</code></strong></pre> 969<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>ftp ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz</code></strong></pre>
970</div> 970</div>
971<div class="sect2"> 971<div class="sect2">
972<div class="titlepage"><div><div><h3 class="title"> 972<div class="titlepage"><div><div><h3 class="title">
973<a name="getting-via-cvs"></a>2.1.2. Via anonymous CVS</h3></div></div></div> 973<a name="getting-via-cvs"></a>2.1.2. Via anonymous CVS</h3></div></div></div>
974<p>To fetch a specific pkgsrc stable branch, run:</p> 974<p>To fetch a specific pkgsrc stable branch, run:</p>
975<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr &amp;&amp; cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -r pkgsrc-2017Q3 -P pkgsrc</code></strong> 975<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr &amp;&amp; cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -r pkgsrc-2018Q1 -P pkgsrc</code></strong>
976</pre> 976</pre>
977<p>This will create the directory <code class="filename">pkgsrc/</code>  977<p>This will create the directory <code class="filename">pkgsrc/</code>
978 in your <code class="filename">/usr/</code> directory and all the package source  978 in your <code class="filename">/usr/</code> directory and all the package source
979 will be stored under <code class="filename">/usr/pkgsrc/</code>.</p> 979 will be stored under <code class="filename">/usr/pkgsrc/</code>.</p>
980<p>To fetch the pkgsrc current branch, run:</p> 980<p>To fetch the pkgsrc current branch, run:</p>
981<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr &amp;&amp; cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc</code></strong> 981<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr &amp;&amp; cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc</code></strong>
982</pre> 982</pre>
983<p>Refer to the <a class="ulink" href="http://www.NetBSD.org/mirrors/#anoncvs" target="_top">list of available mirrors</a> to choose a faster CVS mirror, if needed.</p> 983<p>Refer to the <a class="ulink" href="http://www.NetBSD.org/mirrors/#anoncvs" target="_top">list of available mirrors</a> to choose a faster CVS mirror, if needed.</p>
984<p>If you get error messages from <code class="literal">rsh</code>, you need to set CVS_RSH variable. E.g.:</p> 984<p>If you get error messages from <code class="literal">rsh</code>, you need to set CVS_RSH variable. E.g.:</p>
985<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr &amp;&amp; env CVS_RSH=ssh cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc</code></strong> 985<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr &amp;&amp; env CVS_RSH=ssh cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc</code></strong>
986</pre> 986</pre>
987<p>Refer to documentation on your command shell how to set CVS_RSH=ssh permanently. 987<p>Refer to documentation on your command shell how to set CVS_RSH=ssh permanently.
988 For Bourne shells, you can set it in your <code class="filename">.profile</code> 988 For Bourne shells, you can set it in your <code class="filename">.profile</code>
989 or better globally in <code class="filename">/etc/profile</code>:</p> 989 or better globally in <code class="filename">/etc/profile</code>:</p>
990<pre class="programlisting"> 990<pre class="programlisting">
991# set CVS remote shell command 991# set CVS remote shell command
992CVS_RSH=ssh 992CVS_RSH=ssh
993export CVS_RSH 993export CVS_RSH
994</pre> 994</pre>
995<p>By default, CVS doesn't do things like most people would expect it to do. 995<p>By default, CVS doesn't do things like most people would expect it to do.
996 But there is a way to convince CVS, by creating a file called <code class="filename">.cvsrc</code> 996 But there is a way to convince CVS, by creating a file called <code class="filename">.cvsrc</code>
997 in your home directory and saving the following lines to it. 997 in your home directory and saving the following lines to it.
998 This file will save you lots of headache and some bug reports, so we strongly recommend it. 998 This file will save you lots of headache and some bug reports, so we strongly recommend it.
999 You can find an explanation of this file in the CVS documentation.</p> 999 You can find an explanation of this file in the CVS documentation.</p>
1000<pre class="programlisting"> 1000<pre class="programlisting">
1001# recommended CVS configuration file from the pkgsrc guide 1001# recommended CVS configuration file from the pkgsrc guide
1002cvs -q -z2 1002cvs -q -z2
1003checkout -P 1003checkout -P
1004update -dP 1004update -dP
1005diff -upN 1005diff -upN
1006rdiff -u 1006rdiff -u
1007release -d 1007release -d
1008</pre> 1008</pre>
1009</div> 1009</div>
1010</div> 1010</div>
1011<div class="sect1"> 1011<div class="sect1">
1012<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1012<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1013<a name="uptodate"></a>2.2. Keeping pkgsrc up-to-date</h2></div></div></div> 1013<a name="uptodate"></a>2.2. Keeping pkgsrc up-to-date</h2></div></div></div>
1014<p>The preferred way to keep pkgsrc up-to-date is via CVS 1014<p>The preferred way to keep pkgsrc up-to-date is via CVS
1015 (which also works if you have first installed it via a tar 1015 (which also works if you have first installed it via a tar
1016 file). It saves bandwidth and hard disk activity, compared to 1016 file). It saves bandwidth and hard disk activity, compared to
1017 downloading the tar file again.</p> 1017 downloading the tar file again.</p>
1018<div class="sect2"> 1018<div class="sect2">
1019<div class="titlepage"><div><div><h3 class="title"> 1019<div class="titlepage"><div><div><h3 class="title">
1020<a name="uptodate-tar"></a>2.2.1. Via tar files</h3></div></div></div> 1020<a name="uptodate-tar"></a>2.2.1. Via tar files</h3></div></div></div>
1021<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"> 1021<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
1022<h3 class="title">Warning</h3> 1022<h3 class="title">Warning</h3>
1023<p>When updating from a tar file, you first need to 1023<p>When updating from a tar file, you first need to
1024 completely remove the old pkgsrc directory. Otherwise those 1024 completely remove the old pkgsrc directory. Otherwise those
1025 files that have been removed from pkgsrc in the mean time will 1025 files that have been removed from pkgsrc in the mean time will
1026 not be removed on your local disk, resulting in inconsistencies. 1026 not be removed on your local disk, resulting in inconsistencies.
1027 When removing the old files, any changes that you have done to 1027 When removing the old files, any changes that you have done to
1028 the pkgsrc files will be lost after updating. Therefore updating 1028 the pkgsrc files will be lost after updating. Therefore updating
1029 via CVS is strongly recommended.</p> 1029 via CVS is strongly recommended.</p>
1030</div> 1030</div>
1031<p>Note that by default the distfiles and the binary packages 1031<p>Note that by default the distfiles and the binary packages
1032 are saved in the pkgsrc tree, so don't forget to rescue them 1032 are saved in the pkgsrc tree, so don't forget to rescue them
1033 before updating. You can also configure pkgsrc to store distfiles 1033 before updating. You can also configure pkgsrc to store distfiles
1034 and packages in directories outside the pkgsrc tree by setting the 1034 and packages in directories outside the pkgsrc tree by setting the
1035 <code class="varname">DISTDIR</code> and <code class="varname">PACKAGES</code> 1035 <code class="varname">DISTDIR</code> and <code class="varname">PACKAGES</code>
1036 variables. See <a class="xref" href="#configuring" title="Chapter 5. Configuring pkgsrc">Chapter 5, <i>Configuring pkgsrc</i></a> for the details.</p> 1036 variables. See <a class="xref" href="#configuring" title="Chapter 5. Configuring pkgsrc">Chapter 5, <i>Configuring pkgsrc</i></a> for the details.</p>
1037<p>To update pkgsrc from a tar file, download the tar file as 1037<p>To update pkgsrc from a tar file, download the tar file as
1038 explained above. Then, make sure that you have not made any 1038 explained above. Then, make sure that you have not made any
1039 changes to the files in the pkgsrc directory. Remove the pkgsrc 1039 changes to the files in the pkgsrc directory. Remove the pkgsrc
1040 directory and extract the new tar file. Done.</p> 1040 directory and extract the new tar file. Done.</p>
1041</div> 1041</div>
1042<div class="sect2"> 1042<div class="sect2">
1043<div class="titlepage"><div><div><h3 class="title"> 1043<div class="titlepage"><div><div><h3 class="title">
1044<a name="uptodate-cvs"></a>2.2.2. Via CVS</h3></div></div></div> 1044<a name="uptodate-cvs"></a>2.2.2. Via CVS</h3></div></div></div>
1045<p>To update pkgsrc via CVS, change to the <code class="filename">pkgsrc</code> directory and run cvs:</p> 1045<p>To update pkgsrc via CVS, change to the <code class="filename">pkgsrc</code> directory and run cvs:</p>
1046<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr/pkgsrc &amp;&amp; cvs update -dP</code></strong> 1046<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr/pkgsrc &amp;&amp; cvs update -dP</code></strong>
1047</pre> 1047</pre>
1048<p>If you get error messages from <code class="literal">rsh</code>, you need to set CVS_RSH variable as described above. E.g.:</p> 1048<p>If you get error messages from <code class="literal">rsh</code>, you need to set CVS_RSH variable as described above. E.g.:</p>
1049<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr/pkgsrc &amp;&amp; env CVS_RSH=ssh cvs up -dP</code></strong> 1049<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr/pkgsrc &amp;&amp; env CVS_RSH=ssh cvs up -dP</code></strong>
1050</pre> 1050</pre>
1051<div class="sect3"> 1051<div class="sect3">
1052<div class="titlepage"><div><div><h4 class="title"> 1052<div class="titlepage"><div><div><h4 class="title">
1053<a name="uptodate-cvs-switch"></a>2.2.2.1. Switching between different pkgsrc branches</h4></div></div></div> 1053<a name="uptodate-cvs-switch"></a>2.2.2.1. Switching between different pkgsrc branches</h4></div></div></div>
1054<p>When updating pkgsrc, the CVS program keeps track of the 1054<p>When updating pkgsrc, the CVS program keeps track of the
1055 branch you selected. But if you, for whatever reason, want to 1055 branch you selected. But if you, for whatever reason, want to
1056 switch from the stable branch to the current one, you can do it 1056 switch from the stable branch to the current one, you can do it
1057 by adding the option <span class="quote">&#8220;<span class="quote">-A</span>&#8221;</span> after the 1057 by adding the option <span class="quote">&#8220;<span class="quote">-A</span>&#8221;</span> after the
1058 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> keyword. To switch from the current branch 1058 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> keyword. To switch from the current branch
1059 back to the stable branch, add the 1059 back to the stable branch, add the
1060 <span class="quote">&#8220;<span class="quote">-rpkgsrc-2017Q3</span>&#8221;</span> option.</p> 1060 <span class="quote">&#8220;<span class="quote">-rpkgsrc-2018Q1</span>&#8221;</span> option.</p>
1061</div> 1061</div>
1062<div class="sect3"> 1062<div class="sect3">
1063<div class="titlepage"><div><div><h4 class="title"> 1063<div class="titlepage"><div><div><h4 class="title">
1064<a name="uptodate-cvs-changes"></a>2.2.2.2. What happens to my changes when updating?</h4></div></div></div> 1064<a name="uptodate-cvs-changes"></a>2.2.2.2. What happens to my changes when updating?</h4></div></div></div>
1065<p>When you update pkgsrc, the CVS program will only touch 1065<p>When you update pkgsrc, the CVS program will only touch
1066 those files that are registered in the CVS repository. That 1066 those files that are registered in the CVS repository. That
1067 means that any packages that you created on your own will stay 1067 means that any packages that you created on your own will stay
1068 unmodified. If you change files that are managed by CVS, later 1068 unmodified. If you change files that are managed by CVS, later
1069 updates will try to merge your changes with those that have been 1069 updates will try to merge your changes with those that have been
1070 done by others. See the CVS manual, chapter 1070 done by others. See the CVS manual, chapter
1071 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> for details.</p> 1071 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> for details.</p>
1072</div> 1072</div>
1073</div> 1073</div>
1074</div> 1074</div>
1075</div> 1075</div>
1076<div class="chapter"> 1076<div class="chapter">
1077<div class="titlepage"><div><div><h2 class="title"> 1077<div class="titlepage"><div><div><h2 class="title">
1078<a name="platforms"></a>Chapter 3. Using pkgsrc on systems other than NetBSD</h2></div></div></div> 1078<a name="platforms"></a>Chapter 3. Using pkgsrc on systems other than NetBSD</h2></div></div></div>
1079<div class="toc"> 1079<div class="toc">
1080<p><b>Table of Contents</b></p> 1080<p><b>Table of Contents</b></p>
1081<dl class="toc"> 1081<dl class="toc">
1082<dt><span class="sect1"><a href="#binarydist">3.1. Binary distribution</a></span></dt> 1082<dt><span class="sect1"><a href="#binarydist">3.1. Binary distribution</a></span></dt>
1083<dt><span class="sect1"><a href="#bootstrapping-pkgsrc">3.2. Bootstrapping pkgsrc</a></span></dt> 1083<dt><span class="sect1"><a href="#bootstrapping-pkgsrc">3.2. Bootstrapping pkgsrc</a></span></dt>
1084</dl> 1084</dl>
1085</div> 1085</div>
1086<div class="sect1"> 1086<div class="sect1">
1087<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1087<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1088<a name="binarydist"></a>3.1. Binary distribution</h2></div></div></div> 1088<a name="binarydist"></a>3.1. Binary distribution</h2></div></div></div>
1089<p>See <a class="xref" href="#using-pkg" title="4.1. Using binary packages">Section 4.1, &#8220;Using binary packages&#8221;</a>.</p> 1089<p>See <a class="xref" href="#using-pkg" title="4.1. Using binary packages">Section 4.1, &#8220;Using binary packages&#8221;</a>.</p>
1090</div> 1090</div>
1091<div class="sect1"> 1091<div class="sect1">
1092<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1092<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1093<a name="bootstrapping-pkgsrc"></a>3.2. Bootstrapping pkgsrc</h2></div></div></div> 1093<a name="bootstrapping-pkgsrc"></a>3.2. Bootstrapping pkgsrc</h2></div></div></div>
1094<p>pkgsrc can be bootstrapped for use in two different modes: 1094<p>pkgsrc can be bootstrapped for use in two different modes:
1095 privileged and unprivileged one. In unprivileged mode in contrast 1095 privileged and unprivileged one. In unprivileged mode in contrast
1096 to privileged one all programs are installed under one particular user 1096 to privileged one all programs are installed under one particular user
1097 and cannot utilise privileged operations (packages don't create 1097 and cannot utilise privileged operations (packages don't create
1098 special users and all special file permissions like setuid are ignored). 1098 special users and all special file permissions like setuid are ignored).
1099 </p> 1099 </p>
1100<p>Installing the bootstrap kit from source should be as simple as:</p> 1100<p>Installing the bootstrap kit from source should be as simple as:</p>
1101<pre class="screen"> 1101<pre class="screen">
1102<code class="prompt">#</code> <strong class="userinput"><code>env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc</code></strong> 1102<code class="prompt">#</code> <strong class="userinput"><code>env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc</code></strong>
1103<code class="prompt">#</code> <strong class="userinput"><code>cd pkgsrc/bootstrap</code></strong> 1103<code class="prompt">#</code> <strong class="userinput"><code>cd pkgsrc/bootstrap</code></strong>
1104<code class="prompt">#</code> <strong class="userinput"><code>./bootstrap</code></strong> 1104<code class="prompt">#</code> <strong class="userinput"><code>./bootstrap</code></strong>
1105 </pre> 1105 </pre>
1106<p>To bootstrap in unprivileged mode pass <span class="quote">&#8220;<span class="quote">--unprivileged</span>&#8221;</span> flag to <span class="command"><strong>bootstrap</strong></span></p> 1106<p>To bootstrap in unprivileged mode pass <span class="quote">&#8220;<span class="quote">--unprivileged</span>&#8221;</span> flag to <span class="command"><strong>bootstrap</strong></span></p>
1107<p>By default, in privileged mode pkgsrc uses 1107<p>By default, in privileged mode pkgsrc uses
1108 <code class="filename">/usr/pkg</code> for <span class="emphasis"><em>prefix</em></span> 1108 <code class="filename">/usr/pkg</code> for <span class="emphasis"><em>prefix</em></span>
1109 where programs will be installed in, 1109 where programs will be installed in,
1110 and <code class="filename">/usr/pkg/pkgdb</code> for the package database 1110 and <code class="filename">/usr/pkg/pkgdb</code> for the package database
1111 directory where pkgsrc will do its internal bookkeeping, 1111 directory where pkgsrc will do its internal bookkeeping,
1112 <code class="filename">/var</code> is used as <span class="emphasis"><em>varbase</em></span>, 1112 <code class="filename">/var</code> is used as <span class="emphasis"><em>varbase</em></span>,
1113 where packages install their persistent data. 1113 where packages install their persistent data.
1114 In unprivileged mode pkgsrc uses 1114 In unprivileged mode pkgsrc uses
1115 <code class="filename">~/pkg</code> for <span class="emphasis"><em>prefix</em></span>, 1115 <code class="filename">~/pkg</code> for <span class="emphasis"><em>prefix</em></span>,
1116 <code class="filename">~/pkg/pkgdb</code> for the package database, 1116 <code class="filename">~/pkg/pkgdb</code> for the package database,
1117 and <code class="filename">~/pkg/var</code> for <span class="emphasis"><em>varbase</em></span>. 1117 and <code class="filename">~/pkg/var</code> for <span class="emphasis"><em>varbase</em></span>.
1118 </p> 1118 </p>
1119<p>You can change default layout using command-line arguments. 1119<p>You can change default layout using command-line arguments.
1120 Run <span class="quote">&#8220;<span class="quote">./bootstrap --help</span>&#8221;</span> to get details. 1120 Run <span class="quote">&#8220;<span class="quote">./bootstrap --help</span>&#8221;</span> to get details.
1121 </p> 1121 </p>
1122<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 1122<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1123<h3 class="title">Note</h3> 1123<h3 class="title">Note</h3>
1124<p>The bootstrap installs a <span class="command"><strong>bmake</strong></span> tool. 1124<p>The bootstrap installs a <span class="command"><strong>bmake</strong></span> tool.
1125 Use this <span class="command"><strong>bmake</strong></span> when building via pkgsrc. 1125 Use this <span class="command"><strong>bmake</strong></span> when building via pkgsrc.
1126 For examples in this guide, use <span class="command"><strong>bmake</strong></span> 1126 For examples in this guide, use <span class="command"><strong>bmake</strong></span>
1127 instead of <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span>.</p> 1127 instead of <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span>.</p>
1128</div> 1128</div>
1129<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 1129<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1130<h3 class="title">Note</h3> 1130<h3 class="title">Note</h3>
1131<p>It is possible to bootstrap multiple instances of pkgsrc 1131<p>It is possible to bootstrap multiple instances of pkgsrc
1132 using non-intersecting directories. Use <span class="command"><strong>bmake</strong></span> 1132 using non-intersecting directories. Use <span class="command"><strong>bmake</strong></span>
1133 corresponding to the installation you're working with to build 1133 corresponding to the installation you're working with to build
1134 and install packages. 1134 and install packages.
1135 </p> 1135 </p>
1136</div> 1136</div>
1137</div> 1137</div>
1138</div> 1138</div>
1139<div class="chapter"> 1139<div class="chapter">
1140<div class="titlepage"><div><div><h2 class="title"> 1140<div class="titlepage"><div><div><h2 class="title">
1141<a name="using"></a>Chapter 4. Using pkgsrc</h2></div></div></div> 1141<a name="using"></a>Chapter 4. Using pkgsrc</h2></div></div></div>
1142<div class="toc"> 1142<div class="toc">
1143<p><b>Table of Contents</b></p> 1143<p><b>Table of Contents</b></p>
1144<dl class="toc"> 1144<dl class="toc">
1145<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt> 1145<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt>
1146<dd><dl> 1146<dd><dl>
1147<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt> 1147<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt>
1148<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt> 1148<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt>
1149<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt> 1149<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt>
1150<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt> 1150<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt>
1151<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt> 1151<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt>
1152<dt><span class="sect2"><a href="#pkg_versions">4.1.6. Finding if newer versions of your installed packages are in pkgsrc</a></span></dt> 1152<dt><span class="sect2"><a href="#pkg_versions">4.1.6. Finding if newer versions of your installed packages are in pkgsrc</a></span></dt>
1153<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt> 1153<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt>
1154</dl></dd> 1154</dl></dd>
1155<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt> 1155<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt>
1156<dd><dl> 1156<dd><dl>
1157<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt> 1157<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt>
1158<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt> 1158<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt>
1159<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt> 1159<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt>
1160</dl></dd> 1160</dl></dd>
1161</dl> 1161</dl>
1162</div> 1162</div>
1163<p>Basically, there are two ways of using pkgsrc. The first 1163<p>Basically, there are two ways of using pkgsrc. The first
1164is to only install the package tools and to use binary packages 1164is to only install the package tools and to use binary packages
1165that someone else has prepared. This is the <span class="quote">&#8220;<span class="quote">pkg</span>&#8221;</span> 1165that someone else has prepared. This is the <span class="quote">&#8220;<span class="quote">pkg</span>&#8221;</span>
1166in pkgsrc. The second way is to install the <span class="quote">&#8220;<span class="quote">src</span>&#8221;</span> 1166in pkgsrc. The second way is to install the <span class="quote">&#8220;<span class="quote">src</span>&#8221;</span>
1167of pkgsrc, too. Then you are able to build your own packages, 1167of pkgsrc, too. Then you are able to build your own packages,
1168and you can still use binary packages from someone else.</p> 1168and you can still use binary packages from someone else.</p>
1169<div class="sect1"> 1169<div class="sect1">
1170<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1170<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1171<a name="using-pkg"></a>4.1. Using binary packages</h2></div></div></div> 1171<a name="using-pkg"></a>4.1. Using binary packages</h2></div></div></div>
1172<p>On the <a class="ulink" href="ftp://ftp.NetBSD.org/" target="_top">ftp.NetBSD.org</a> 1172<p>On the <a class="ulink" href="ftp://ftp.NetBSD.org/" target="_top">ftp.NetBSD.org</a>
1173 server and its mirrors, there are collections of binary packages, 1173 server and its mirrors, there are collections of binary packages,
1174 ready to be installed. These binary packages have been built using the 1174 ready to be installed. These binary packages have been built using the
1175 default settings for the directories, that is:</p> 1175 default settings for the directories, that is:</p>
1176<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1176<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1177<li class="listitem"><p><code class="filename">/usr/pkg</code> for <code class="varname">LOCALBASE</code>, where most of the files are installed,</p></li> 1177<li class="listitem"><p><code class="filename">/usr/pkg</code> for <code class="varname">LOCALBASE</code>, where most of the files are installed,</p></li>
1178<li class="listitem"><p><code class="filename">/usr/pkg/etc</code> for configuration files,</p></li> 1178<li class="listitem"><p><code class="filename">/usr/pkg/etc</code> for configuration files,</p></li>
1179<li class="listitem"><p><code class="filename">/var</code> for <code class="varname">VARBASE</code>, where those files are installed that may change after installation.</p></li> 1179<li class="listitem"><p><code class="filename">/var</code> for <code class="varname">VARBASE</code>, where those files are installed that may change after installation.</p></li>
1180</ul></div> 1180</ul></div>
1181<p>If you cannot use these directories for whatever reasons (maybe 1181<p>If you cannot use these directories for whatever reasons (maybe
1182 because you're not root), you cannot use these binary packages, but 1182 because you're not root), you cannot use these binary packages, but
1183 have to build the packages yourself, which is explained in <a class="xref" href="#bootstrapping-pkgsrc" title="3.2. Bootstrapping pkgsrc">Section 3.2, &#8220;Bootstrapping pkgsrc&#8221;</a>.</p> 1183 have to build the packages yourself, which is explained in <a class="xref" href="#bootstrapping-pkgsrc" title="3.2. Bootstrapping pkgsrc">Section 3.2, &#8220;Bootstrapping pkgsrc&#8221;</a>.</p>
1184<div class="sect2"> 1184<div class="sect2">
1185<div class="titlepage"><div><div><h3 class="title"> 1185<div class="titlepage"><div><div><h3 class="title">
1186<a name="finding-binary-packages"></a>4.1.1. Finding binary packages</h3></div></div></div> 1186<a name="finding-binary-packages"></a>4.1.1. Finding binary packages</h3></div></div></div>
1187<p>To install binary packages, you first need to know from where 1187<p>To install binary packages, you first need to know from where
1188 to get them. The first place where you should look is on the main 1188 to get them. The first place where you should look is on the main
1189 pkgsrc FTP server in the directory <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/" target="_top"><code class="filename">/pub/pkgsrc/packages</code></a>.</p> 1189 pkgsrc FTP server in the directory <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/" target="_top"><code class="filename">/pub/pkgsrc/packages</code></a>.</p>
1190<p>This directory contains binary packages for multiple 1190<p>This directory contains binary packages for multiple
1191 platforms. First, select your operating system. (Ignore the 1191 platforms. First, select your operating system. (Ignore the
1192 directories with version numbers attached to it, they just exist for 1192 directories with version numbers attached to it, they just exist for
1193 legacy reasons.) Then, select your hardware architecture, and in the 1193 legacy reasons.) Then, select your hardware architecture, and in the
1194 third step, the OS version and the <span class="quote">&#8220;<span class="quote">version</span>&#8221;</span> of pkgsrc.</p> 1194 third step, the OS version and the <span class="quote">&#8220;<span class="quote">version</span>&#8221;</span> of pkgsrc.</p>
1195<p>In this directory, you often find a file called 1195<p>In this directory, you often find a file called
1196 <code class="filename">bootstrap.tar.gz</code> which contains the package 1196 <code class="filename">bootstrap.tar.gz</code> which contains the package
1197 management tools. If the file is missing, it is likely that your 1197 management tools. If the file is missing, it is likely that your
1198 operating system already provides those tools. Download the file and 1198 operating system already provides those tools. Download the file and
1199 extract it in the <code class="filename">/</code> directory. It will create 1199 extract it in the <code class="filename">/</code> directory. It will create
1200 the directories <code class="filename">/usr/pkg</code> (containing the tools 1200 the directories <code class="filename">/usr/pkg</code> (containing the tools
1201 for managing binary packages and the database of installed packages).</p> 1201 for managing binary packages and the database of installed packages).</p>
1202</div> 1202</div>
1203<div class="sect2"> 1203<div class="sect2">
1204<div class="titlepage"><div><div><h3 class="title"> 1204<div class="titlepage"><div><div><h3 class="title">
1205<a name="installing-binary-packages"></a>4.1.2. Installing binary packages</h3></div></div></div> 1205<a name="installing-binary-packages"></a>4.1.2. Installing binary packages</h3></div></div></div>
1206<p>In the directory from the last section, there is a 1206<p>In the directory from the last section, there is a
1207 subdirectory called <code class="filename">All/</code>, which contains all the 1207 subdirectory called <code class="filename">All/</code>, which contains all the
1208 binary packages that are available for the platform, excluding those 1208 binary packages that are available for the platform, excluding those
1209 that may not be distributed via FTP or CDROM (depending on which 1209 that may not be distributed via FTP or CDROM (depending on which
1210 medium you are using).</p> 1210 medium you are using).</p>
1211<p>To install packages directly from an FTP or HTTP server, run 1211<p>To install packages directly from an FTP or HTTP server, run
1212 the following commands in a Bourne-compatible shell (be sure to 1212 the following commands in a Bourne-compatible shell (be sure to
1213 <span class="command"><strong>su</strong></span> to root first):</p> 1213 <span class="command"><strong>su</strong></span> to root first):</p>
1214<pre class="screen"> 1214<pre class="screen">
1215<code class="prompt">#</code> <strong class="userinput"><code>PATH="/usr/pkg/sbin:$PATH"</code></strong> 1215<code class="prompt">#</code> <strong class="userinput"><code>PATH="/usr/pkg/sbin:$PATH"</code></strong>
1216<code class="prompt">#</code> <strong class="userinput"><code>PKG_PATH="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/<em class="replaceable"><code>OPSYS</code></em>/<em class="replaceable"><code>ARCH</code></em>/<em class="replaceable"><code>VERSIONS</code></em>/All/"</code></strong> 1216<code class="prompt">#</code> <strong class="userinput"><code>PKG_PATH="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/<em class="replaceable"><code>OPSYS</code></em>/<em class="replaceable"><code>ARCH</code></em>/<em class="replaceable"><code>VERSIONS</code></em>/All/"</code></strong>
1217<code class="prompt">#</code> <strong class="userinput"><code>export PATH PKG_PATH</code></strong> 1217<code class="prompt">#</code> <strong class="userinput"><code>export PATH PKG_PATH</code></strong>
1218</pre> 1218</pre>
1219<p>Instead of URLs, you can also use local paths, for example if 1219<p>Instead of URLs, you can also use local paths, for example if
1220 you are installing from a set of CDROMs, DVDs or an NFS-mounted 1220 you are installing from a set of CDROMs, DVDs or an NFS-mounted
1221 repository. If you want to install packages from multiple sources, 1221 repository. If you want to install packages from multiple sources,
1222 you can separate them by a semicolon in 1222 you can separate them by a semicolon in
1223 <code class="varname">PKG_PATH</code>.</p> 1223 <code class="varname">PKG_PATH</code>.</p>
1224<p>After these preparations, installing a package is very 1224<p>After these preparations, installing a package is very
1225 easy:</p> 1225 easy:</p>
1226<pre class="screen"> 1226<pre class="screen">
1227<code class="prompt">#</code> <strong class="userinput"><code>pkg_add libreoffice</code></strong> 1227<code class="prompt">#</code> <strong class="userinput"><code>pkg_add libreoffice</code></strong>
1228<code class="prompt">#</code> <strong class="userinput"><code>pkg_add ap24-php71-*</code></strong> 1228<code class="prompt">#</code> <strong class="userinput"><code>pkg_add ap24-php71-*</code></strong>
1229</pre> 1229</pre>
1230<p>Note that any prerequisite packages needed to run the 1230<p>Note that any prerequisite packages needed to run the
1231 package in question will be installed, too, assuming they are 1231 package in question will be installed, too, assuming they are
1232 present where you install from.</p> 1232 present where you install from.</p>
1233<p>Adding packages might install vulnerable packages. 1233<p>Adding packages might install vulnerable packages.
1234 Thus you should run <span class="command"><strong>pkg_admin audit</strong></span> 1234 Thus you should run <span class="command"><strong>pkg_admin audit</strong></span>
1235 regularly, especially after installing new packages, and verify 1235 regularly, especially after installing new packages, and verify
1236 that the vulnerabilities are acceptable for your configuration.</p> 1236 that the vulnerabilities are acceptable for your configuration.</p>
1237<p>After you've installed packages, be sure to have 1237<p>After you've installed packages, be sure to have
1238 <code class="filename">/usr/pkg/bin</code> and <code class="filename">/usr/pkg/sbin</code> in your 1238 <code class="filename">/usr/pkg/bin</code> and <code class="filename">/usr/pkg/sbin</code> in your
1239 <code class="varname">PATH</code> so you can actually start the just 1239 <code class="varname">PATH</code> so you can actually start the just
1240 installed program.</p> 1240 installed program.</p>
1241</div> 1241</div>
1242<div class="sect2"> 1242<div class="sect2">
1243<div class="titlepage"><div><div><h3 class="title"> 1243<div class="titlepage"><div><div><h3 class="title">
1244<a name="using.pkg_delete"></a>4.1.3. Deinstalling packages</h3></div></div></div> 1244<a name="using.pkg_delete"></a>4.1.3. Deinstalling packages</h3></div></div></div>
1245<p>To deinstall a package, it does not matter whether it was 1245<p>To deinstall a package, it does not matter whether it was
1246 installed from source code or from a binary package. The 1246 installed from source code or from a binary package. The
1247 <span class="command"><strong>pkg_delete</strong></span> command does not know it anyway. 1247 <span class="command"><strong>pkg_delete</strong></span> command does not know it anyway.
1248 To delete a package, you can just run <span class="command"><strong>pkg_delete 1248 To delete a package, you can just run <span class="command"><strong>pkg_delete
1249 <em class="replaceable"><code>package-name</code></em></strong></span>. The package 1249 <em class="replaceable"><code>package-name</code></em></strong></span>. The package
1250 name can be given with or without version number. Wildcards can 1250 name can be given with or without version number. Wildcards can
1251 also be used to deinstall a set of packages, for example 1251 also be used to deinstall a set of packages, for example
1252 <code class="literal">*emacs*</code>. Be sure to include them in quotes, 1252 <code class="literal">*emacs*</code>. Be sure to include them in quotes,
1253 so that the shell does not expand them before 1253 so that the shell does not expand them before
1254 <code class="literal">pkg_delete</code> sees them.</p> 1254 <code class="literal">pkg_delete</code> sees them.</p>
1255<p>The <code class="option">-r</code> option is very powerful: it 1255<p>The <code class="option">-r</code> option is very powerful: it
1256 removes all the packages that require the package in question 1256 removes all the packages that require the package in question
1257 and then removes the package itself. For example: 1257 and then removes the package itself. For example:
1258 1258
1259 </p> 1259 </p>
1260<pre class="screen"> 1260<pre class="screen">
1261<code class="prompt">#</code> <strong class="userinput"><code>pkg_delete -r jpeg</code></strong> 1261<code class="prompt">#</code> <strong class="userinput"><code>pkg_delete -r jpeg</code></strong>
1262 </pre> 1262 </pre>
1263<p> 1263<p>
1264 1264
1265 will remove jpeg and all the packages that used it; this allows 1265 will remove jpeg and all the packages that used it; this allows
1266 upgrading the jpeg package.</p> 1266 upgrading the jpeg package.</p>
1267</div> 1267</div>
1268<div class="sect2"> 1268<div class="sect2">
1269<div class="titlepage"><div><div><h3 class="title"> 1269<div class="titlepage"><div><div><h3 class="title">
1270<a name="using.pkg_info"></a>4.1.4. Getting information about installed packages</h3></div></div></div> 1270<a name="using.pkg_info"></a>4.1.4. Getting information about installed packages</h3></div></div></div>
1271<p>The <span class="command"><strong>pkg_info</strong></span> shows information about 1271<p>The <span class="command"><strong>pkg_info</strong></span> shows information about
1272 installed packages or binary package files.</p> 1272 installed packages or binary package files.</p>
1273</div> 1273</div>
1274<div class="sect2"> 1274<div class="sect2">
1275<div class="titlepage"><div><div><h3 class="title"> 1275<div class="titlepage"><div><div><h3 class="title">
1276<a name="vulnerabilities"></a>4.1.5. Checking for security vulnerabilities in installed packages</h3></div></div></div> 1276<a name="vulnerabilities"></a>4.1.5. Checking for security vulnerabilities in installed packages</h3></div></div></div>
1277<p> 1277<p>
1278 The NetBSD Security-Officer and Packages Groups maintain a list of 1278 The NetBSD Security-Officer and Packages Groups maintain a list of
1279 known security vulnerabilities to packages which are (or have been) 1279 known security vulnerabilities to packages which are (or have been)
1280 included in pkgsrc. The list is available from the NetBSD 1280 included in pkgsrc. The list is available from the NetBSD
1281 FTP site at <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/vulnerabilities" target="_top">ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/vulnerabilities</a>. 1281 FTP site at <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/vulnerabilities" target="_top">ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/vulnerabilities</a>.
1282 </p> 1282 </p>
1283<p> 1283<p>
1284 Through <span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>, 1284 Through <span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>,
1285 this list can be downloaded 1285 this list can be downloaded
1286 automatically, and a security audit of all packages installed on a system 1286 automatically, and a security audit of all packages installed on a system
1287 can take place. 1287 can take place.
1288 </p> 1288 </p>
1289<p> 1289<p>
1290 There are two components to auditing. The first 1290 There are two components to auditing. The first
1291 step, <span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>, 1291 step, <span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>,
1292 is for downloading 1292 is for downloading
1293 the list of vulnerabilities from the NetBSD FTP site. The second 1293 the list of vulnerabilities from the NetBSD FTP site. The second
1294 step, <span class="command"><strong>pkg_admin audit</strong></span>, checks to see if any of your 1294 step, <span class="command"><strong>pkg_admin audit</strong></span>, checks to see if any of your
1295 installed packages are vulnerable. If a package is vulnerable, you 1295 installed packages are vulnerable. If a package is vulnerable, you
1296 will see output similar to the following: 1296 will see output similar to the following:
1297 </p> 1297 </p>
1298<pre class="screen">Package samba-2.0.9 has a local-root-shell vulnerability, see 1298<pre class="screen">Package samba-2.0.9 has a local-root-shell vulnerability, see
1299 http://www.samba.org/samba/whatsnew/macroexploit.html</pre> 1299 http://www.samba.org/samba/whatsnew/macroexploit.html</pre>
1300<p> 1300<p>
1301 You may wish to have the 1301 You may wish to have the
1302 <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/vulnerabilities" target="_top">vulnerabilities</a> 1302 <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/vulnerabilities" target="_top">vulnerabilities</a>
1303 file downloaded daily so that 1303 file downloaded daily so that
1304 it remains current. This may be done by adding an appropriate entry 1304 it remains current. This may be done by adding an appropriate entry
1305 to the root users <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?crontab+5.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">crontab</span>(5)</span></a> entry. For example the entry 1305 to the root users <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?crontab+5.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">crontab</span>(5)</span></a> entry. For example the entry
1306 </p> 1306 </p>
1307<pre class="screen"> 1307<pre class="screen">
1308# Download vulnerabilities file 1308# Download vulnerabilities file
13090 3 * * * /usr/pkg/sbin/pkg_admin fetch-pkg-vulnerabilities &gt;/dev/null 2&gt;&amp;1 13090 3 * * * /usr/pkg/sbin/pkg_admin fetch-pkg-vulnerabilities &gt;/dev/null 2&gt;&amp;1
1310# Audit the installed packages and email results to root 1310# Audit the installed packages and email results to root
13119 3 * * * /usr/pkg/sbin/pkg_admin audit |mail -s "Installed package audit result" \ 13119 3 * * * /usr/pkg/sbin/pkg_admin audit |mail -s "Installed package audit result" \
1312 root &gt;/dev/null 2&gt;&amp;1 1312 root &gt;/dev/null 2&gt;&amp;1
1313 </pre> 1313 </pre>
1314<p> 1314<p>
1315 will update the vulnerability list every day at 3AM, followed by an audit 1315 will update the vulnerability list every day at 3AM, followed by an audit
1316 at 3:09AM. The result of the audit are then emailed to root. 1316 at 3:09AM. The result of the audit are then emailed to root.
1317 1317
1318 On NetBSD this may be accomplished instead by adding the following 1318 On NetBSD this may be accomplished instead by adding the following
1319 line to <code class="filename">/etc/daily.conf</code>: 1319 line to <code class="filename">/etc/daily.conf</code>:
1320 </p> 1320 </p>
1321<pre class="screen"> 1321<pre class="screen">
1322fetch_pkg_vulnerabilities=YES 1322fetch_pkg_vulnerabilities=YES
1323 </pre> 1323 </pre>
1324<p> 1324<p>
1325 to fetch the vulnerability list from the daily security script. The system 1325 to fetch the vulnerability list from the daily security script. The system
1326 is set to audit the packages by default but can be set explicitly, if 1326 is set to audit the packages by default but can be set explicitly, if
1327 desired (not required), by adding the following line to 1327 desired (not required), by adding the following line to
1328<code class="filename">/etc/security.conf</code>: 1328<code class="filename">/etc/security.conf</code>:
1329 </p> 1329 </p>
1330<pre class="screen"> 1330<pre class="screen">
1331check_pkg_vulnerabilities=YES 1331check_pkg_vulnerabilities=YES
1332 </pre> 1332 </pre>
1333<p> 1333<p>
1334 see <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?daily.conf+5.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">daily.conf</span>(5)</span></a> and <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?security.conf+5.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">security.conf</span>(5)</span></a> for more details. 1334 see <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?daily.conf+5.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">daily.conf</span>(5)</span></a> and <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?security.conf+5.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">security.conf</span>(5)</span></a> for more details.
1335 </p> 1335 </p>
1336</div> 1336</div>
1337<div class="sect2"> 1337<div class="sect2">
1338<div class="titlepage"><div><div><h3 class="title"> 1338<div class="titlepage"><div><div><h3 class="title">
1339<a name="pkg_versions"></a>4.1.6. Finding if newer versions of your installed packages are in pkgsrc</h3></div></div></div> 1339<a name="pkg_versions"></a>4.1.6. Finding if newer versions of your installed packages are in pkgsrc</h3></div></div></div>
1340<p> 1340<p>
1341 Install <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/lintpkgsrc/README.html" target="_top"><code class="filename">pkgtools/lintpkgsrc</code></a> and run 1341 Install <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/lintpkgsrc/README.html" target="_top"><code class="filename">pkgtools/lintpkgsrc</code></a> and run
1342 <span class="command"><strong>lintpkgsrc</strong></span> with the <span class="quote">&#8220;<span class="quote">-i</span>&#8221;</span> 1342 <span class="command"><strong>lintpkgsrc</strong></span> with the <span class="quote">&#8220;<span class="quote">-i</span>&#8221;</span>
1343 argument to check if your packages are up-to-date, e.g. 1343 argument to check if your packages are up-to-date, e.g.
1344 </p> 1344 </p>
1345<pre class="screen"> 1345<pre class="screen">
1346<code class="prompt">%</code> <strong class="userinput"><code>lintpkgsrc -i</code></strong> 1346<code class="prompt">%</code> <strong class="userinput"><code>lintpkgsrc -i</code></strong>
1347... 1347...
1348Version mismatch: 'tcsh' 6.09.00 vs 6.10.00 1348Version mismatch: 'tcsh' 6.09.00 vs 6.10.00
1349 </pre> 1349 </pre>
1350<p>You can then use <span class="command"><strong>make update</strong></span> to update the 1350<p>You can then use <span class="command"><strong>make update</strong></span> to update the
1351 package on your system and rebuild any dependencies. 1351 package on your system and rebuild any dependencies.
1352 </p> 1352 </p>
1353</div> 1353</div>
1354<div class="sect2"> 1354<div class="sect2">
1355<div class="titlepage"><div><div><h3 class="title"> 1355<div class="titlepage"><div><div><h3 class="title">
1356<a name="using.pkg_admin"></a>4.1.7. Other administrative functions</h3></div></div></div> 1356<a name="using.pkg_admin"></a>4.1.7. Other administrative functions</h3></div></div></div>
1357<p>The <span class="command"><strong>pkg_admin</strong></span> executes various 1357<p>The <span class="command"><strong>pkg_admin</strong></span> executes various
1358 administrative functions on the package system.</p> 1358 administrative functions on the package system.</p>
1359</div> 1359</div>
1360</div> 1360</div>
1361<div class="sect1"> 1361<div class="sect1">
1362<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1362<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1363<a name="building-packages-from-source"></a>4.2. Building packages from source</h2></div></div></div> 1363<a name="building-packages-from-source"></a>4.2. Building packages from source</h2></div></div></div>
1364<p>After obtaining pkgsrc, the <code class="filename">pkgsrc</code> 1364<p>After obtaining pkgsrc, the <code class="filename">pkgsrc</code>
1365 directory now contains a set of packages, organized into 1365 directory now contains a set of packages, organized into
1366 categories. You can browse the online index of packages, or run 1366 categories. You can browse the online index of packages, or run
1367 <span class="command"><strong>make readme</strong></span> from the <code class="filename">pkgsrc</code> 1367 <span class="command"><strong>make readme</strong></span> from the <code class="filename">pkgsrc</code>
1368 directory to build local <code class="filename">README.html</code> files for 1368 directory to build local <code class="filename">README.html</code> files for
1369 all packages, viewable with any web browser such as <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/lynx/README.html" target="_top"><code class="filename">www/lynx</code></a> or <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a>.</p> 1369 all packages, viewable with any web browser such as <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/lynx/README.html" target="_top"><code class="filename">www/lynx</code></a> or <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a>.</p>
1370<p>The default <span class="emphasis"><em>prefix</em></span> for installed packages 1370<p>The default <span class="emphasis"><em>prefix</em></span> for installed packages
1371 is <code class="filename">/usr/pkg</code>. If you wish to change this, you 1371 is <code class="filename">/usr/pkg</code>. If you wish to change this, you
1372 should do so by setting <code class="varname">LOCALBASE</code> in 1372 should do so by setting <code class="varname">LOCALBASE</code> in
1373 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. You should not try to use multiple 1373 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. You should not try to use multiple
1374 different <code class="varname">LOCALBASE</code> definitions on the same 1374 different <code class="varname">LOCALBASE</code> definitions on the same
1375 system (inside a chroot is an exception). </p> 1375 system (inside a chroot is an exception). </p>
1376<p>The rest of this chapter assumes that the package is already 1376<p>The rest of this chapter assumes that the package is already
1377 in pkgsrc. If it is not, see <a class="xref" href="#developers-guide" title="Part II. The pkgsrc developer's guide">Part II, &#8220;The pkgsrc developer's guide&#8221;</a> for 1377 in pkgsrc. If it is not, see <a class="xref" href="#developers-guide" title="Part II. The pkgsrc developer's guide">Part II, &#8220;The pkgsrc developer's guide&#8221;</a> for
1378 instructions how to create your own packages.</p> 1378 instructions how to create your own packages.</p>
1379<div class="sect2"> 1379<div class="sect2">
1380<div class="titlepage"><div><div><h3 class="title"> 1380<div class="titlepage"><div><div><h3 class="title">
1381<a name="requirements"></a>4.2.1. Requirements</h3></div></div></div> 1381<a name="requirements"></a>4.2.1. Requirements</h3></div></div></div>
1382<p>To build packages from source, you need a working C 1382<p>To build packages from source, you need a working C
1383 compiler. On NetBSD, you need to install the 1383 compiler. On NetBSD, you need to install the
1384 <span class="quote">&#8220;<span class="quote">comp</span>&#8221;</span> and the <span class="quote">&#8220;<span class="quote">text</span>&#8221;</span> distribution 1384 <span class="quote">&#8220;<span class="quote">comp</span>&#8221;</span> and the <span class="quote">&#8220;<span class="quote">text</span>&#8221;</span> distribution
1385 sets. If you want to build X11-related packages, the 1385 sets. If you want to build X11-related packages, the
1386 <span class="quote">&#8220;<span class="quote">xbase</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">xcomp</span>&#8221;</span> distribution 1386 <span class="quote">&#8220;<span class="quote">xbase</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">xcomp</span>&#8221;</span> distribution
1387 sets are required, too.</p> 1387 sets are required, too.</p>
1388</div> 1388</div>
1389<div class="sect2"> 1389<div class="sect2">
1390<div class="titlepage"><div><div><h3 class="title"> 1390<div class="titlepage"><div><div><h3 class="title">
1391<a name="fetching-distfiles"></a>4.2.2. Fetching distfiles</h3></div></div></div> 1391<a name="fetching-distfiles"></a>4.2.2. Fetching distfiles</h3></div></div></div>
1392<p>The first step for building a package is downloading the 1392<p>The first step for building a package is downloading the
1393 distfiles (i.e. the unmodified source). If they have not yet been 1393 distfiles (i.e. the unmodified source). If they have not yet been
1394 downloaded, pkgsrc will fetch them automatically.</p> 1394 downloaded, pkgsrc will fetch them automatically.</p>
1395<p>If you have all files that you need in the 1395<p>If you have all files that you need in the
1396 <code class="filename">distfiles</code> directory, 1396 <code class="filename">distfiles</code> directory,
1397 you don't need to connect. If the distfiles are on CD-ROM, you can 1397 you don't need to connect. If the distfiles are on CD-ROM, you can
1398 mount the CD-ROM on <code class="filename">/cdrom</code> and add: 1398 mount the CD-ROM on <code class="filename">/cdrom</code> and add:
1399 </p> 1399 </p>
1400<pre class="screen">DISTDIR=/cdrom/pkgsrc/distfiles</pre> 1400<pre class="screen">DISTDIR=/cdrom/pkgsrc/distfiles</pre>
1401<p> 1401<p>
1402 to your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p> 1402 to your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p>
1403<p>By default a list of distribution sites will be randomly 1403<p>By default a list of distribution sites will be randomly
1404 intermixed to prevent huge load on servers which holding popular 1404 intermixed to prevent huge load on servers which holding popular
1405 packages (for example, SourceForge.net mirrors). Thus, every 1405 packages (for example, SourceForge.net mirrors). Thus, every
1406 time when you need to fetch yet another distfile all the mirrors 1406 time when you need to fetch yet another distfile all the mirrors
1407 will be tried in new (random) order. You can turn this feature 1407 will be tried in new (random) order. You can turn this feature
1408 off by setting <code class="varname">MASTER_SORT_RANDOM=NO</code> (for 1408 off by setting <code class="varname">MASTER_SORT_RANDOM=NO</code> (for
1409 <code class="varname">PKG_DEVELOPER</code>s it's already disabled).</p> 1409 <code class="varname">PKG_DEVELOPER</code>s it's already disabled).</p>
1410<p>You can overwrite some of the major distribution sites to 1410<p>You can overwrite some of the major distribution sites to
1411 fit to sites that are close to your own. By setting one or two 1411 fit to sites that are close to your own. By setting one or two
1412 variables you can modify the order in which the master sites are 1412 variables you can modify the order in which the master sites are
1413 accessed. <code class="varname">MASTER_SORT</code> contains a whitespace 1413 accessed. <code class="varname">MASTER_SORT</code> contains a whitespace
1414 delimited list of domain suffixes. 1414 delimited list of domain suffixes.
1415 <code class="varname">MASTER_SORT_REGEX</code> is even more flexible, it 1415 <code class="varname">MASTER_SORT_REGEX</code> is even more flexible, it
1416 contains a whitespace delimited list of regular expressions. It 1416 contains a whitespace delimited list of regular expressions. It
1417 has higher priority than <code class="varname">MASTER_SORT</code>. Have a 1417 has higher priority than <code class="varname">MASTER_SORT</code>. Have a
1418 look at <code class="filename">pkgsrc/mk/defaults/mk.conf</code> to find 1418 look at <code class="filename">pkgsrc/mk/defaults/mk.conf</code> to find
1419 some examples. This may save some of your bandwidth and 1419 some examples. This may save some of your bandwidth and
1420 time.</p> 1420 time.</p>
1421<p>You can change these settings either in your shell's environment, or, 1421<p>You can change these settings either in your shell's environment, or,
1422 if you want to keep the settings, by editing the 1422 if you want to keep the settings, by editing the
1423 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file, 1423 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file,
1424 and adding the definitions there.</p> 1424 and adding the definitions there.</p>
1425<p> 1425<p>
1426 If a package depends on many other packages (such as 1426 If a package depends on many other packages (such as
1427 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/kde4/README.html" target="_top"><code class="filename">meta-pkgs/kde4</code></a>), the build process may 1427 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/kde4/README.html" target="_top"><code class="filename">meta-pkgs/kde4</code></a>), the build process may
1428 alternate between periods of 1428 alternate between periods of
1429 downloading source, and compiling. To ensure you have all the source 1429 downloading source, and compiling. To ensure you have all the source
1430 downloaded initially you can run the command: 1430 downloaded initially you can run the command:
1431 </p> 1431 </p>
1432<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make fetch-list | sh</code></strong></pre> 1432<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make fetch-list | sh</code></strong></pre>
1433<p> 1433<p>
1434 which will output and run a set of shell commands to fetch the 1434 which will output and run a set of shell commands to fetch the
1435 necessary files into the <code class="filename">distfiles</code> directory. You can 1435 necessary files into the <code class="filename">distfiles</code> directory. You can
1436 also choose to download the files manually. 1436 also choose to download the files manually.
1437 </p> 1437 </p>
1438</div> 1438</div>
1439<div class="sect2"> 1439<div class="sect2">
1440<div class="titlepage"><div><div><h3 class="title"> 1440<div class="titlepage"><div><div><h3 class="title">
1441<a name="how-to-build-and-install"></a>4.2.3. How to build and install</h3></div></div></div> 1441<a name="how-to-build-and-install"></a>4.2.3. How to build and install</h3></div></div></div>
1442<p> 1442<p>
1443 Once the software has downloaded, any patches will be applied, then it 1443 Once the software has downloaded, any patches will be applied, then it
1444 will be compiled for you. This may take some time depending on your 1444 will be compiled for you. This may take some time depending on your
1445 computer, and how many other packages the software depends on and their 1445 computer, and how many other packages the software depends on and their
1446 compile time. 1446 compile time.
1447 </p> 1447 </p>
1448<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 1448<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1449<h3 class="title">Note</h3> 1449<h3 class="title">Note</h3>
1450<p>If using bootstrap or pkgsrc on a non-NetBSD system, 1450<p>If using bootstrap or pkgsrc on a non-NetBSD system,
1451 use the pkgsrc <span class="command"><strong>bmake</strong></span> command instead of 1451 use the pkgsrc <span class="command"><strong>bmake</strong></span> command instead of
1452 <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span> in the examples in this guide.</p> 1452 <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span> in the examples in this guide.</p>
1453</div> 1453</div>
1454<p>For example, type</p> 1454<p>For example, type</p>
1455<pre class="screen"> 1455<pre class="screen">
1456<code class="prompt">%</code> <strong class="userinput"><code>cd misc/figlet</code></strong> 1456<code class="prompt">%</code> <strong class="userinput"><code>cd misc/figlet</code></strong>
1457<code class="prompt">%</code> <strong class="userinput"><code>make</code></strong> 1457<code class="prompt">%</code> <strong class="userinput"><code>make</code></strong>
1458 </pre> 1458 </pre>
1459<p>at the shell prompt to build the various components of the 1459<p>at the shell prompt to build the various components of the
1460 package.</p> 1460 package.</p>
1461<p>The next stage is to actually install the newly compiled 1461<p>The next stage is to actually install the newly compiled
1462 program onto your system. Do this by entering: 1462 program onto your system. Do this by entering:
1463 1463
1464 </p> 1464 </p>
1465<pre class="screen"> 1465<pre class="screen">
1466<code class="prompt">%</code> <strong class="userinput"><code>make install</code></strong> 1466<code class="prompt">%</code> <strong class="userinput"><code>make install</code></strong>
1467 </pre> 1467 </pre>
1468<p> 1468<p>
1469 1469
1470 while you are still in the directory for whatever package you 1470 while you are still in the directory for whatever package you
1471 are installing.</p> 1471 are installing.</p>
1472<p>Installing the package on your system may require you to 1472<p>Installing the package on your system may require you to
1473 be root. However, pkgsrc has a 1473 be root. However, pkgsrc has a
1474 <span class="emphasis"><em>just-in-time-su</em></span> feature, which allows you 1474 <span class="emphasis"><em>just-in-time-su</em></span> feature, which allows you
1475 to only become root for the actual installation step.</p> 1475 to only become root for the actual installation step.</p>
1476<p>That's it, the software should now be installed and setup for use. 1476<p>That's it, the software should now be installed and setup for use.
1477 You can now enter: 1477 You can now enter:
1478 1478
1479 </p> 1479 </p>
1480<pre class="screen"> 1480<pre class="screen">
1481<code class="prompt">%</code> <strong class="userinput"><code>make clean</code></strong> 1481<code class="prompt">%</code> <strong class="userinput"><code>make clean</code></strong>
1482 </pre> 1482 </pre>
1483<p> 1483<p>
1484 1484
1485 to remove the compiled files in the work directory, as you shouldn't need 1485 to remove the compiled files in the work directory, as you shouldn't need
1486 them any more. If other packages were also added to your system 1486 them any more. If other packages were also added to your system
1487 (dependencies) to allow your program to compile, you can tidy these up 1487 (dependencies) to allow your program to compile, you can tidy these up
1488 also with the command:</p> 1488 also with the command:</p>
1489<pre class="screen"> 1489<pre class="screen">
1490<code class="prompt">%</code> <strong class="userinput"><code>make clean-depends</code></strong> 1490<code class="prompt">%</code> <strong class="userinput"><code>make clean-depends</code></strong>
1491 </pre> 1491 </pre>
1492<p>Taking the figlet utility as an example, we can install it on our 1492<p>Taking the figlet utility as an example, we can install it on our
1493 system by building as shown in <a class="xref" href="#logs" title="Appendix B. Build logs">Appendix B, <i>Build logs</i></a>.</p> 1493 system by building as shown in <a class="xref" href="#logs" title="Appendix B. Build logs">Appendix B, <i>Build logs</i></a>.</p>
1494<p>The program is installed under the default root of the 1494<p>The program is installed under the default root of the
1495 packages tree - <code class="filename">/usr/pkg</code>. Should this not 1495 packages tree - <code class="filename">/usr/pkg</code>. Should this not
1496 conform to your tastes, set the <code class="varname">LOCALBASE</code> 1496 conform to your tastes, set the <code class="varname">LOCALBASE</code>
1497 variable in your environment, and it will use that value as the 1497 variable in your environment, and it will use that value as the
1498 root of your packages tree. So, to use 1498 root of your packages tree. So, to use
1499 <code class="filename">/usr/local</code>, set 1499 <code class="filename">/usr/local</code>, set
1500 <code class="varname">LOCALBASE=/usr/local</code> in your environment. 1500 <code class="varname">LOCALBASE=/usr/local</code> in your environment.
1501 Please note that you should use a directory which is dedicated to 1501 Please note that you should use a directory which is dedicated to
1502 packages and not shared with other programs (i.e., do not try and 1502 packages and not shared with other programs (i.e., do not try and
1503 use <code class="varname">LOCALBASE=/usr</code>). Also, you should not try 1503 use <code class="varname">LOCALBASE=/usr</code>). Also, you should not try
1504 to add any of your own files or directories (such as 1504 to add any of your own files or directories (such as
1505 <code class="filename">src/</code>, <code class="filename">obj/</code>, or 1505 <code class="filename">src/</code>, <code class="filename">obj/</code>, or
1506 <code class="filename">pkgsrc/</code>) below the 1506 <code class="filename">pkgsrc/</code>) below the
1507 <code class="varname">LOCALBASE</code> tree. This is to prevent possible 1507 <code class="varname">LOCALBASE</code> tree. This is to prevent possible
1508 conflicts between programs and other files installed by the 1508 conflicts between programs and other files installed by the
1509 package system and whatever else may have been installed 1509 package system and whatever else may have been installed
1510 there.</p> 1510 there.</p>
1511<p>Some packages look in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to 1511<p>Some packages look in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to
1512 alter some configuration options at build time. Have a look at 1512 alter some configuration options at build time. Have a look at
1513 <code class="filename">pkgsrc/mk/defaults/mk.conf</code> to get an overview 1513 <code class="filename">pkgsrc/mk/defaults/mk.conf</code> to get an overview
1514 of what will be set there by default. Environment variables such 1514 of what will be set there by default. Environment variables such
1515 as <code class="varname">LOCALBASE</code> can be set in 1515 as <code class="varname">LOCALBASE</code> can be set in
1516 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to save having to remember to 1516 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to save having to remember to
1517 set them each time you want to use pkgsrc.</p> 1517 set them each time you want to use pkgsrc.</p>
1518<p>Occasionally, people want to <span class="quote">&#8220;<span class="quote">look under the 1518<p>Occasionally, people want to <span class="quote">&#8220;<span class="quote">look under the
1519 covers</span>&#8221;</span> to see what is going on when a package is building 1519 covers</span>&#8221;</span> to see what is going on when a package is building
1520 or being installed. This may be for debugging purposes, or out of 1520 or being installed. This may be for debugging purposes, or out of
1521 simple curiosity. A number of utility values have been added to 1521 simple curiosity. A number of utility values have been added to
1522 help with this.</p> 1522 help with this.</p>
1523<div class="orderedlist"><ol class="orderedlist" type="1"> 1523<div class="orderedlist"><ol class="orderedlist" type="1">
1524<li class="listitem"> 1524<li class="listitem">
1525<p>If you invoke the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> command with 1525<p>If you invoke the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> command with
1526 <code class="varname">PKG_DEBUG_LEVEL=2</code>, then a huge amount of 1526 <code class="varname">PKG_DEBUG_LEVEL=2</code>, then a huge amount of
1527 information will be displayed. For example,</p> 1527 information will be displayed. For example,</p>
1528<pre class="screen"><strong class="userinput"><code>make patch PKG_DEBUG_LEVEL=2</code></strong></pre> 1528<pre class="screen"><strong class="userinput"><code>make patch PKG_DEBUG_LEVEL=2</code></strong></pre>
1529<p>will show all the commands that are invoked, up to and 1529<p>will show all the commands that are invoked, up to and
1530 including the <span class="quote">&#8220;<span class="quote">patch</span>&#8221;</span> stage.</p> 1530 including the <span class="quote">&#8220;<span class="quote">patch</span>&#8221;</span> stage.</p>
1531</li> 1531</li>
1532<li class="listitem"> 1532<li class="listitem">
1533<p>If you want to know the value of a certain <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> 1533<p>If you want to know the value of a certain <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>
1534 definition, then the <code class="varname">VARNAME</code> definition 1534 definition, then the <code class="varname">VARNAME</code> definition
1535 should be used, in conjunction with the show-var 1535 should be used, in conjunction with the show-var
1536 target. e.g. to show the expansion of the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> 1536 target. e.g. to show the expansion of the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>
1537 variable <code class="varname">LOCALBASE</code>:</p> 1537 variable <code class="varname">LOCALBASE</code>:</p>
1538<pre class="screen"> 1538<pre class="screen">
1539<code class="prompt">%</code> <strong class="userinput"><code>make show-var VARNAME=LOCALBASE</code></strong> 1539<code class="prompt">%</code> <strong class="userinput"><code>make show-var VARNAME=LOCALBASE</code></strong>
1540/usr/pkg 1540/usr/pkg
1541<code class="prompt">%</code> 1541<code class="prompt">%</code>
1542 </pre> 1542 </pre>
1543</li> 1543</li>
1544</ol></div> 1544</ol></div>
1545<p>If you want to install a binary package that you've either 1545<p>If you want to install a binary package that you've either
1546 created yourself (see next section), that you put into 1546 created yourself (see next section), that you put into
1547 pkgsrc/packages manually or that is located on a remote FTP 1547 pkgsrc/packages manually or that is located on a remote FTP
1548 server, you can use the "bin-install" target. This target will 1548 server, you can use the "bin-install" target. This target will
1549 install a binary package - if available - via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>, 1549 install a binary package - if available - via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>,
1550 else do a <span class="command"><strong>make package</strong></span>. The list of remote FTP 1550 else do a <span class="command"><strong>make package</strong></span>. The list of remote FTP
1551 sites searched is kept in the variable 1551 sites searched is kept in the variable
1552 <code class="varname">BINPKG_SITES</code>, which defaults to 1552 <code class="varname">BINPKG_SITES</code>, which defaults to
1553 ftp.NetBSD.org. Any flags that should be added to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> 1553 ftp.NetBSD.org. Any flags that should be added to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>
1554 can be put into <code class="varname">BIN_INSTALL_FLAGS</code>. See 1554 can be put into <code class="varname">BIN_INSTALL_FLAGS</code>. See
1555 <code class="filename">pkgsrc/mk/defaults/mk.conf</code> for more 1555 <code class="filename">pkgsrc/mk/defaults/mk.conf</code> for more
1556 details.</p> 1556 details.</p>
1557<p>A final word of warning: If you set up a system that has a 1557<p>A final word of warning: If you set up a system that has a
1558 non-standard setting for <code class="varname">LOCALBASE</code>, be sure to 1558 non-standard setting for <code class="varname">LOCALBASE</code>, be sure to
1559 set that before any packages are installed, as you cannot use 1559 set that before any packages are installed, as you cannot use
1560 several directories for the same purpose. Doing so will result in 1560 several directories for the same purpose. Doing so will result in
1561 pkgsrc not being able to properly detect your installed packages, 1561 pkgsrc not being able to properly detect your installed packages,
1562 and fail miserably. Note also that precompiled binary packages are 1562 and fail miserably. Note also that precompiled binary packages are
1563 usually built with the default <code class="varname">LOCALBASE</code> of 1563 usually built with the default <code class="varname">LOCALBASE</code> of
1564 <code class="filename">/usr/pkg</code>, and that you should 1564 <code class="filename">/usr/pkg</code>, and that you should
1565 <span class="emphasis"><em>not</em></span> install any if you use a non-standard 1565 <span class="emphasis"><em>not</em></span> install any if you use a non-standard
1566 <code class="varname">LOCALBASE</code>.</p> 1566 <code class="varname">LOCALBASE</code>.</p>
1567</div> 1567</div>
1568</div> 1568</div>
1569</div> 1569</div>
1570<div class="chapter"> 1570<div class="chapter">
1571<div class="titlepage"><div><div><h2 class="title"> 1571<div class="titlepage"><div><div><h2 class="title">
1572<a name="configuring"></a>Chapter 5. Configuring pkgsrc</h2></div></div></div> 1572<a name="configuring"></a>Chapter 5. Configuring pkgsrc</h2></div></div></div>
1573<div class="toc"> 1573<div class="toc">
1574<p><b>Table of Contents</b></p> 1574<p><b>Table of Contents</b></p>
1575<dl class="toc"> 1575<dl class="toc">
1576<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt> 1576<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt>
1577<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt> 1577<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt>
1578<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt> 1578<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt>
1579<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt> 1579<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt>
1580<dd><dl> 1580<dd><dl>
1581<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt> 1581<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt>
1582<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt> 1582<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt>
1583<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt> 1583<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt>
1584</dl></dd> 1584</dl></dd>
1585<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt> 1585<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt>
1586<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt> 1586<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt>
1587</dl> 1587</dl>
1588</div> 1588</div>
1589<a name="mk.conf"></a><p>The whole pkgsrc system is configured in a single file, usually 1589<a name="mk.conf"></a><p>The whole pkgsrc system is configured in a single file, usually
1590called <code class="filename">mk.conf</code>. In which directory pkgsrc looks for 1590called <code class="filename">mk.conf</code>. In which directory pkgsrc looks for
1591that file depends on the installation. On NetBSD, when you use 1591that file depends on the installation. On NetBSD, when you use
1592<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> from the base system, it is in the directory 1592<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> from the base system, it is in the directory
1593<code class="filename">/etc/</code>. In all other cases the default location is 1593<code class="filename">/etc/</code>. In all other cases the default location is
1594<code class="literal">${PREFIX}/etc/</code>, depending on where you told the 1594<code class="literal">${PREFIX}/etc/</code>, depending on where you told the
1595bootstrap program to install the binary packages.</p> 1595bootstrap program to install the binary packages.</p>
1596<p>The format of the configuration file is that of the usual 1596<p>The format of the configuration file is that of the usual
1597BSD-style <code class="filename">Makefile</code>s. The whole pkgsrc configuration 1597BSD-style <code class="filename">Makefile</code>s. The whole pkgsrc configuration
1598is done by setting variables in this file. Note that you can define all 1598is done by setting variables in this file. Note that you can define all
1599kinds of variables, and no special error checking (for example for 1599kinds of variables, and no special error checking (for example for
1600spelling mistakes) takes place.</p> 1600spelling mistakes) takes place.</p>
1601<div class="sect1"> 1601<div class="sect1">
1602<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1602<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1603<a name="general-configuration"></a>5.1. General configuration</h2></div></div></div> 1603<a name="general-configuration"></a>5.1. General configuration</h2></div></div></div>
1604<p>The following variables apply to all 1604<p>The following variables apply to all
1605 pkgsrc packages. A complete list of the variables that can be 1605 pkgsrc packages. A complete list of the variables that can be
1606 configured by the user is available in 1606 configured by the user is available in
1607 <code class="filename">mk/defaults/mk.conf</code>, together with some 1607 <code class="filename">mk/defaults/mk.conf</code>, together with some
1608 comments that describe each variable's intent.</p> 1608 comments that describe each variable's intent.</p>
1609<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1609<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1610<li class="listitem"><p><code class="varname">LOCALBASE</code>: Where 1610<li class="listitem"><p><code class="varname">LOCALBASE</code>: Where
1611 packages will be installed. The default is 1611 packages will be installed. The default is
1612 <code class="filename">/usr/pkg</code>. Do not mix binary packages 1612 <code class="filename">/usr/pkg</code>. Do not mix binary packages
1613 with different <code class="varname">LOCALBASE</code>s!</p></li> 1613 with different <code class="varname">LOCALBASE</code>s!</p></li>
1614<li class="listitem"><p><code class="varname">CROSSBASE</code>: Where 1614<li class="listitem"><p><code class="varname">CROSSBASE</code>: Where
1615 <span class="quote">&#8220;<span class="quote">cross</span>&#8221;</span> category packages will be 1615 <span class="quote">&#8220;<span class="quote">cross</span>&#8221;</span> category packages will be
1616 installed. The default is 1616 installed. The default is
1617 <code class="filename">${LOCALBASE}/cross</code>.</p></li> 1617 <code class="filename">${LOCALBASE}/cross</code>.</p></li>
1618<li class="listitem"><p><code class="varname">X11BASE</code>: Where 1618<li class="listitem"><p><code class="varname">X11BASE</code>: Where
1619 X11 is installed on the system. The default is 1619 X11 is installed on the system. The default is
1620 <code class="filename">/usr/X11R7</code>.</p></li> 1620 <code class="filename">/usr/X11R7</code>.</p></li>
1621<li class="listitem"><p><code class="varname">DISTDIR</code>: Where to store the 1621<li class="listitem"><p><code class="varname">DISTDIR</code>: Where to store the
1622 downloaded copies of the original source distributions used 1622 downloaded copies of the original source distributions used
1623 for building pkgsrc packages. The default is 1623 for building pkgsrc packages. The default is
1624 <code class="filename">${PKGSRCDIR}/distfiles</code>.</p></li> 1624 <code class="filename">${PKGSRCDIR}/distfiles</code>.</p></li>
1625<li class="listitem"><p><code class="varname">PKG_DBDIR</code>: Where the 1625<li class="listitem"><p><code class="varname">PKG_DBDIR</code>: Where the
1626 database about installed packages is stored. The default is 1626 database about installed packages is stored. The default is
1627 <code class="filename">/usr/pkg/pkgdb</code>.</p></li> 1627 <code class="filename">/usr/pkg/pkgdb</code>.</p></li>
1628<li class="listitem"><p><code class="varname">MASTER_SITE_OVERRIDE</code>: 1628<li class="listitem"><p><code class="varname">MASTER_SITE_OVERRIDE</code>:
1629 If set, override the packages' 1629 If set, override the packages'
1630 <code class="varname">MASTER_SITES</code> with this value.</p></li> 1630 <code class="varname">MASTER_SITES</code> with this value.</p></li>
1631<li class="listitem"><p><code class="varname">MASTER_SITE_BACKUP</code>: 1631<li class="listitem"><p><code class="varname">MASTER_SITE_BACKUP</code>:
1632 Backup location(s) for distribution files and patch files 1632 Backup location(s) for distribution files and patch files
1633 if not found locally or in 1633 if not found locally or in
1634 <code class="filename">${MASTER_SITES}</code> or 1634 <code class="filename">${MASTER_SITES}</code> or
1635 <code class="filename">${PATCH_SITES}</code> respectively. 1635 <code class="filename">${PATCH_SITES}</code> respectively.
1636 The defaults is 1636 The defaults is
1637 <code class="filename">ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/${DIST_SUBDIR}/</code>.</p></li> 1637 <code class="filename">ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/${DIST_SUBDIR}/</code>.</p></li>
1638<li class="listitem"><p><code class="varname">BINPKG_SITES</code>: 1638<li class="listitem"><p><code class="varname">BINPKG_SITES</code>:
1639 List of sites carrying binary pkgs. <em class="replaceable"><code>rel</code></em> and 1639 List of sites carrying binary pkgs. <em class="replaceable"><code>rel</code></em> and
1640 <em class="replaceable"><code>arch</code></em> are replaced with OS 1640 <em class="replaceable"><code>arch</code></em> are replaced with OS
1641 release (<span class="quote">&#8220;<span class="quote">2.0</span>&#8221;</span>, etc.) and architecture 1641 release (<span class="quote">&#8220;<span class="quote">2.0</span>&#8221;</span>, etc.) and architecture
1642 (<span class="quote">&#8220;<span class="quote">mipsel</span>&#8221;</span>, etc.).</p></li> 1642 (<span class="quote">&#8220;<span class="quote">mipsel</span>&#8221;</span>, etc.).</p></li>
1643<li class="listitem"><p><code class="varname">ACCEPTABLE_LICENSES</code>: 1643<li class="listitem"><p><code class="varname">ACCEPTABLE_LICENSES</code>:
1644 List of acceptable licenses. License names are case-sensitive. 1644 List of acceptable licenses. License names are case-sensitive.
1645 Whenever you try to build a package whose license is not in this 1645 Whenever you try to build a package whose license is not in this
1646 list, you will get an error message. If the license condition is 1646 list, you will get an error message. If the license condition is
1647 simple enough, the error message will include specific 1647 simple enough, the error message will include specific
1648 instructions on how to change this variable.</p></li> 1648 instructions on how to change this variable.</p></li>
1649</ul></div> 1649</ul></div>
1650</div> 1650</div>
1651<div class="sect1"> 1651<div class="sect1">
1652<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1652<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1653<a name="variables-affecting-build"></a>5.2. Variables affecting the build process</h2></div></div></div> 1653<a name="variables-affecting-build"></a>5.2. Variables affecting the build process</h2></div></div></div>
1654<p> 1654<p>
1655 </p> 1655 </p>
1656<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1656<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1657<li class="listitem"><p><code class="varname">PACKAGES</code>: The top level 1657<li class="listitem"><p><code class="varname">PACKAGES</code>: The top level
1658 directory for the binary packages. The default is 1658 directory for the binary packages. The default is
1659 <code class="filename">${PKGSRCDIR}/packages</code>.</p></li> 1659 <code class="filename">${PKGSRCDIR}/packages</code>.</p></li>
1660<li class="listitem"><p><code class="varname">WRKOBJDIR</code>: 1660<li class="listitem"><p><code class="varname">WRKOBJDIR</code>:
1661 The top level directory where, if defined, the separate 1661 The top level directory where, if defined, the separate
1662 working directories will get created, and symbolically 1662 working directories will get created, and symbolically
1663 linked to from <code class="filename">${WRKDIR}</code> (see below). 1663 linked to from <code class="filename">${WRKDIR}</code> (see below).
1664 This is useful for building packages on several 1664 This is useful for building packages on several
1665 architectures, then <code class="filename">${PKGSRCDIR}</code> 1665 architectures, then <code class="filename">${PKGSRCDIR}</code>
1666 can be NFS-mounted while <code class="filename">${WRKOBJDIR}</code> 1666 can be NFS-mounted while <code class="filename">${WRKOBJDIR}</code>
1667 is local to every architecture. (It should be noted that 1667 is local to every architecture. (It should be noted that
1668 <code class="varname">PKGSRCDIR</code> should not be set by the user 1668 <code class="varname">PKGSRCDIR</code> should not be set by the user
1669 &mdash; it is an internal definition which refers to the 1669 &mdash; it is an internal definition which refers to the
1670 root of the pkgsrc tree. It is possible to have many 1670 root of the pkgsrc tree. It is possible to have many
1671 pkgsrc tree instances.)</p></li> 1671 pkgsrc tree instances.)</p></li>
1672<li class="listitem"><p><code class="varname">LOCALPATCHES</code>: 1672<li class="listitem"><p><code class="varname">LOCALPATCHES</code>:
1673 Directory for local patches that aren't part of pkgsrc. 1673 Directory for local patches that aren't part of pkgsrc.
1674 See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;<code class="filename">patches/*</code>&#8221;</a> for more 1674 See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;<code class="filename">patches/*</code>&#8221;</a> for more
1675 information.</p></li> 1675 information.</p></li>
1676<li class="listitem"><p><code class="varname">PKGMAKECONF</code>: Location of 1676<li class="listitem"><p><code class="varname">PKGMAKECONF</code>: Location of
1677 the <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file used by a package's 1677 the <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file used by a package's
1678 BSD-style Makefile. If this is not set, 1678 BSD-style Makefile. If this is not set,
1679 <code class="varname">MAKECONF</code> is set to 1679 <code class="varname">MAKECONF</code> is set to
1680 <code class="filename">/dev/null</code> to avoid picking up 1680 <code class="filename">/dev/null</code> to avoid picking up
1681 settings used by builds in <code class="filename">/usr/src</code>.</p></li> 1681 settings used by builds in <code class="filename">/usr/src</code>.</p></li>
1682<li class="listitem"><p><code class="varname">DEPENDS_TARGET</code>: 1682<li class="listitem"><p><code class="varname">DEPENDS_TARGET</code>:
1683 By default, dependencies are only installed, and no binary 1683 By default, dependencies are only installed, and no binary
1684 package is created for them. You can set this variable to 1684 package is created for them. You can set this variable to
1685 <code class="literal">package-install</code> to automatically create binary 1685 <code class="literal">package-install</code> to automatically create binary
1686 packages after installing dependencies. Please note that the 1686 packages after installing dependencies. Please note that the
1687 <code class="varname">PKGSRC_KEEP_BIN_PKGS</code> can be set to 1687 <code class="varname">PKGSRC_KEEP_BIN_PKGS</code> can be set to
1688 <code class="literal">yes</code> to preserve binary packages when 1688 <code class="literal">yes</code> to preserve binary packages when
1689 using the <code class="literal">install</code> as well.</p></li> 1689 using the <code class="literal">install</code> as well.</p></li>
1690</ul></div> 1690</ul></div>
1691</div> 1691</div>
1692<div class="sect1"> 1692<div class="sect1">
1693<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1693<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1694<a name="variables-affecting-installation"></a>5.3. Variables affecting the installation process</h2></div></div></div> 1694<a name="variables-affecting-installation"></a>5.3. Variables affecting the installation process</h2></div></div></div>
1695<p>Packages have to support installation into a 1695<p>Packages have to support installation into a
1696 subdirectory of <code class="varname">WRKDIR</code>. This allows a package 1696 subdirectory of <code class="varname">WRKDIR</code>. This allows a package
1697 to be built, before the actual filesystem is touched. DESTDIR 1697 to be built, before the actual filesystem is touched. DESTDIR
1698 support exists in two variations:</p> 1698 support exists in two variations:</p>
1699<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1699<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1700<li class="listitem"><p>Basic DESTDIR support means that the package 1700<li class="listitem"><p>Basic DESTDIR support means that the package
1701 installation and packaging is still run as root.</p></li> 1701 installation and packaging is still run as root.</p></li>
1702<li class="listitem"><p>Full DESTDIR support can run the complete 1702<li class="listitem"><p>Full DESTDIR support can run the complete
1703 build, installation and packaging as normal user. Root 1703 build, installation and packaging as normal user. Root
1704 privileges are only needed to add packages.</p></li> 1704 privileges are only needed to add packages.</p></li>
1705</ul></div> 1705</ul></div>
1706<p>With basic DESTDIR support, <strong class="userinput"><code>make 1706<p>With basic DESTDIR support, <strong class="userinput"><code>make
1707 clean</code></strong> needs to be run as root.</p> 1707 clean</code></strong> needs to be run as root.</p>
1708<p>Considering the <code class="filename">foo/bar</code> package, 1708<p>Considering the <code class="filename">foo/bar</code> package,
1709 DESTDIR full support can be tested using the following commands 1709 DESTDIR full support can be tested using the following commands
1710 1710
1711</p> 1711</p>
1712<pre class="programlisting"> 1712<pre class="programlisting">
1713<code class="prompt">$</code> id 1713<code class="prompt">$</code> id
1714uid=1000(myusername) gid=100(users) groups=100(users),0(wheel) 1714uid=1000(myusername) gid=100(users) groups=100(users),0(wheel)
1715<code class="prompt">$</code> mkdir $HOME/packages 1715<code class="prompt">$</code> mkdir $HOME/packages
1716<code class="prompt">$</code> cd $PKGSRCDIR/foo/bar 1716<code class="prompt">$</code> cd $PKGSRCDIR/foo/bar
1717</pre> 1717</pre>
1718<p> 1718<p>
1719 1719
1720 Verify <code class="varname">DESTDIR</code> full support, no root privileges 1720 Verify <code class="varname">DESTDIR</code> full support, no root privileges
1721 should be needed 1721 should be needed
1722 1722
1723</p> 1723</p>
1724<pre class="programlisting"> 1724<pre class="programlisting">
1725<code class="prompt">$</code> make stage-install 1725<code class="prompt">$</code> make stage-install
1726</pre> 1726</pre>
1727<p> 1727<p>
1728 1728
1729 Create a package without root privileges 1729 Create a package without root privileges
1730 1730
1731</p> 1731</p>
1732<pre class="programlisting"> 1732<pre class="programlisting">
1733<code class="prompt">$</code> make PACKAGES=$HOME/packages package 1733<code class="prompt">$</code> make PACKAGES=$HOME/packages package
1734</pre> 1734</pre>
1735<p> 1735<p>
1736 1736
1737 For the following command, you must be able to gain root 1737 For the following command, you must be able to gain root
1738 privileges using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?su+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">su</span>(1)</span></a> 1738 privileges using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?su+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">su</span>(1)</span></a>
1739 1739
1740</p> 1740</p>
1741<pre class="programlisting"> 1741<pre class="programlisting">
1742<code class="prompt">$</code> make PACKAGES=$HOME/packages install 1742<code class="prompt">$</code> make PACKAGES=$HOME/packages install
1743</pre> 1743</pre>
1744<p> 1744<p>
1745 1745
1746 Then, as a simple user 1746 Then, as a simple user
1747 1747
1748</p> 1748</p>
1749<pre class="programlisting"> 1749<pre class="programlisting">
1750<code class="prompt">$</code> make clean 1750<code class="prompt">$</code> make clean
1751</pre> 1751</pre>
1752<p> 1752<p>
1753 1753
1754 </p> 1754 </p>
1755</div> 1755</div>
1756<div class="sect1"> 1756<div class="sect1">
1757<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1757<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1758<a name="conf.compiler"></a>5.4. Selecting and configuring the compiler</h2></div></div></div> 1758<a name="conf.compiler"></a>5.4. Selecting and configuring the compiler</h2></div></div></div>
1759<div class="sect2"> 1759<div class="sect2">
1760<div class="titlepage"><div><div><h3 class="title"> 1760<div class="titlepage"><div><div><h3 class="title">
1761<a name="selecting-the-compiler"></a>5.4.1. Selecting the compiler</h3></div></div></div> 1761<a name="selecting-the-compiler"></a>5.4.1. Selecting the compiler</h3></div></div></div>
1762<p>By default, pkgsrc will use GCC to build packages. This may be 1762<p>By default, pkgsrc will use GCC to build packages. This may be
1763 overridden by setting the following variables in /etc/mk.conf:</p> 1763 overridden by setting the following variables in /etc/mk.conf:</p>
1764<div class="variablelist"><dl class="variablelist"> 1764<div class="variablelist"><dl class="variablelist">
1765<dt><span class="term"><code class="varname">PKGSRC_COMPILER</code>:</span></dt> 1765<dt><span class="term"><code class="varname">PKGSRC_COMPILER</code>:</span></dt>
1766<dd> 1766<dd>
1767<p>This is a list of values specifying the chain of 1767<p>This is a list of values specifying the chain of
1768 compilers to invoke when building packages. Valid values 1768 compilers to invoke when building packages. Valid values
1769 are:</p> 1769 are:</p>
1770<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1770<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1771<li class="listitem"><p><code class="varname">ccc</code>: 1771<li class="listitem"><p><code class="varname">ccc</code>:
1772 Compaq C Compilers (Tru64)</p></li> 1772 Compaq C Compilers (Tru64)</p></li>
1773<li class="listitem"><p><code class="varname">ccache</code>: 1773<li class="listitem"><p><code class="varname">ccache</code>:
1774 compiler cache (chainable)</p></li> 1774 compiler cache (chainable)</p></li>
1775<li class="listitem"><p><code class="varname">clang</code>: 1775<li class="listitem"><p><code class="varname">clang</code>:
1776 Clang C and Objective-C compiler</p></li> 1776 Clang C and Objective-C compiler</p></li>
1777<li class="listitem"><p><code class="varname">distcc</code>: 1777<li class="listitem"><p><code class="varname">distcc</code>:
1778 distributed C/C++ (chainable)</p></li> 1778 distributed C/C++ (chainable)</p></li>
1779<li class="listitem"><p><code class="varname">f2c</code>: 1779<li class="listitem"><p><code class="varname">f2c</code>:
1780 Fortran 77 to C compiler (chainable)</p></li> 1780 Fortran 77 to C compiler (chainable)</p></li>
1781<li class="listitem"><p><code class="varname">icc</code>: 1781<li class="listitem"><p><code class="varname">icc</code>:
1782 Intel C++ Compiler (Linux)</p></li> 1782 Intel C++ Compiler (Linux)</p></li>
1783<li class="listitem"><p><code class="varname">ido</code>: 1783<li class="listitem"><p><code class="varname">ido</code>:
1784 SGI IRIS Development Option cc (IRIX 5)</p></li> 1784 SGI IRIS Development Option cc (IRIX 5)</p></li>
1785<li class="listitem"><p><code class="varname">gcc</code>: 1785<li class="listitem"><p><code class="varname">gcc</code>:
1786 GNU C/C++ Compiler</p></li> 1786 GNU C/C++ Compiler</p></li>
1787<li class="listitem"><p><code class="varname">hp</code>: 1787<li class="listitem"><p><code class="varname">hp</code>:
1788 HP-UX C/aC++ compilers</p></li> 1788 HP-UX C/aC++ compilers</p></li>
1789<li class="listitem"><p><code class="varname">mipspro</code>: 1789<li class="listitem"><p><code class="varname">mipspro</code>:
1790 Silicon Graphics, Inc. MIPSpro (n32/n64)</p></li> 1790 Silicon Graphics, Inc. MIPSpro (n32/n64)</p></li>
1791<li class="listitem"><p><code class="varname">mipspro-ucode</code>: 1791<li class="listitem"><p><code class="varname">mipspro-ucode</code>:
1792 Silicon Graphics, Inc. MIPSpro (o32)</p></li> 1792 Silicon Graphics, Inc. MIPSpro (o32)</p></li>
1793<li class="listitem"><p><code class="varname">sunpro</code>: 1793<li class="listitem"><p><code class="varname">sunpro</code>:
1794 Sun Microsystems, Inc. WorkShip/Forte/Sun ONE Studio</p></li> 1794 Sun Microsystems, Inc. WorkShip/Forte/Sun ONE Studio</p></li>
1795<li class="listitem"><p><code class="varname">xlc</code>: 1795<li class="listitem"><p><code class="varname">xlc</code>:
1796 IBM's XL C/C++ compiler suite</p></li> 1796 IBM's XL C/C++ compiler suite</p></li>
1797</ul></div> 1797</ul></div>
1798<p>The default is 1798<p>The default is
1799 <span class="quote">&#8220;<span class="quote"><code class="varname">gcc</code></span>&#8221;</span>. You can use 1799 <span class="quote">&#8220;<span class="quote"><code class="varname">gcc</code></span>&#8221;</span>. You can use
1800 <code class="varname">ccache</code> and/or 1800 <code class="varname">ccache</code> and/or
1801 <code class="varname">distcc</code> with an appropriate 1801 <code class="varname">distcc</code> with an appropriate
1802 <code class="varname">PKGSRC_COMPILER</code> setting, 1802 <code class="varname">PKGSRC_COMPILER</code> setting,
1803 e.g. <span class="quote">&#8220;<span class="quote"><code class="varname">ccache gcc</code></span>&#8221;</span>. This 1803 e.g. <span class="quote">&#8220;<span class="quote"><code class="varname">ccache gcc</code></span>&#8221;</span>. This
1804 variable should always be terminated with a value for 1804 variable should always be terminated with a value for
1805 a real compiler. Note that only one real compiler 1805 a real compiler. Note that only one real compiler
1806 should be listed (e.g. <span class="quote">&#8220;<span class="quote"><code class="varname">sunpro gcc</code></span>&#8221;</span> 1806 should be listed (e.g. <span class="quote">&#8220;<span class="quote"><code class="varname">sunpro gcc</code></span>&#8221;</span>
1807 is not allowed).</p> 1807 is not allowed).</p>
1808</dd> 1808</dd>
1809<dt><span class="term"><code class="varname">GCC_REQD</code>:</span></dt> 1809<dt><span class="term"><code class="varname">GCC_REQD</code>:</span></dt>
1810<dd><p>This specifies the minimum version of GCC to use 1810<dd><p>This specifies the minimum version of GCC to use
1811 when building packages. If the system GCC doesn't 1811 when building packages. If the system GCC doesn't
1812 satisfy this requirement, then pkgsrc will build and 1812 satisfy this requirement, then pkgsrc will build and
1813 install one of the GCC packages to use instead.</p></dd> 1813 install one of the GCC packages to use instead.</p></dd>
1814<dt><span class="term"><code class="varname">PYTHON_DEFAULT_VERSION</code>:</span></dt> 1814<dt><span class="term"><code class="varname">PYTHON_DEFAULT_VERSION</code>:</span></dt>
1815<dd><p>Specifies which version of python to use when several 1815<dd><p>Specifies which version of python to use when several
1816 options are available.</p></dd> 1816 options are available.</p></dd>
1817<dt><span class="term"><code class="varname">PKGSRC_FORTRAN</code>:</span></dt> 1817<dt><span class="term"><code class="varname">PKGSRC_FORTRAN</code>:</span></dt>
1818<dd><p>Specifies the fortran compiler to use. 1818<dd><p>Specifies the fortran compiler to use.
1819 The default is <code class="varname">g95</code>, and 1819 The default is <code class="varname">g95</code>, and
1820 <code class="varname">gfortran</code> is an alternative.</p></dd> 1820 <code class="varname">gfortran</code> is an alternative.</p></dd>
1821<dt><span class="term"><code class="varname">GFORTRAN_VERSION</code>:</span></dt> 1821<dt><span class="term"><code class="varname">GFORTRAN_VERSION</code>:</span></dt>
1822<dd><p>If <code class="varname">PKGSRC_FORTRAN</code><code class="literal">=</code> 1822<dd><p>If <code class="varname">PKGSRC_FORTRAN</code><code class="literal">=</code>
1823 <code class="varname">gfortran</code> is used, this option specifies which 1823 <code class="varname">gfortran</code> is used, this option specifies which
1824 version to use.</p></dd> 1824 version to use.</p></dd>
1825</dl></div> 1825</dl></div>
1826</div> 1826</div>
1827<div class="sect2"> 1827<div class="sect2">
1828<div class="titlepage"><div><div><h3 class="title"> 1828<div class="titlepage"><div><div><h3 class="title">
1829<a name="conf.cflags"></a>5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</h3></div></div></div> 1829<a name="conf.cflags"></a>5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</h3></div></div></div>
1830<p>If you wish to set the <code class="varname">CFLAGS</code> variable, 1830<p>If you wish to set the <code class="varname">CFLAGS</code> variable,
1831 please make sure to use the <code class="literal">+=</code> operator 1831 please make sure to use the <code class="literal">+=</code> operator
1832 instead of the <code class="literal">=</code> operator:</p> 1832 instead of the <code class="literal">=</code> operator:</p>
1833<pre class="programlisting"> 1833<pre class="programlisting">
1834CFLAGS+= -your -flags 1834CFLAGS+= -your -flags
1835</pre> 1835</pre>
1836<p>Using <code class="varname">CFLAGS=</code> (i.e. without the 1836<p>Using <code class="varname">CFLAGS=</code> (i.e. without the
1837 <span class="quote">&#8220;<span class="quote">+</span>&#8221;</span>) may lead to problems with packages that 1837 <span class="quote">&#8220;<span class="quote">+</span>&#8221;</span>) may lead to problems with packages that
1838 need to add their own flags. You may want to take a look 1838 need to add their own flags. You may want to take a look
1839 at the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/cpuflags/README.html" target="_top"><code class="filename">devel/cpuflags</code></a> 1839 at the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/cpuflags/README.html" target="_top"><code class="filename">devel/cpuflags</code></a>
1840 package if you're interested in optimization specifically 1840 package if you're interested in optimization specifically
1841 for the current CPU. </p> 1841 for the current CPU. </p>
1842</div> 1842</div>
1843<div class="sect2"> 1843<div class="sect2">
1844<div class="titlepage"><div><div><h3 class="title"> 1844<div class="titlepage"><div><div><h3 class="title">
1845<a name="conf.ldflags"></a>5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</h3></div></div></div> 1845<a name="conf.ldflags"></a>5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</h3></div></div></div>
1846<p>If you want to pass flags to the linker, both in the configure 1846<p>If you want to pass flags to the linker, both in the configure
1847step and the build step, you can do this in two ways. Either set 1847step and the build step, you can do this in two ways. Either set
1848<code class="varname">LDFLAGS</code> or <code class="varname">LIBS</code>. The difference 1848<code class="varname">LDFLAGS</code> or <code class="varname">LIBS</code>. The difference
1849between the two is that <code class="varname">LIBS</code> will be appended to 1849between the two is that <code class="varname">LIBS</code> will be appended to
1850the command line, while <code class="varname">LDFLAGS</code> come earlier. 1850the command line, while <code class="varname">LDFLAGS</code> come earlier.
1851<code class="varname">LDFLAGS</code> is pre-loaded with rpath settings for ELF 1851<code class="varname">LDFLAGS</code> is pre-loaded with rpath settings for ELF
1852machines depending on the setting of <code class="varname">USE_IMAKE</code> or 1852machines depending on the setting of <code class="varname">USE_IMAKE</code> or
1853the inclusion of <code class="filename">mk/x11.buildlink3.mk</code>. As with 1853the inclusion of <code class="filename">mk/x11.buildlink3.mk</code>. As with
1854<code class="varname">CFLAGS</code>, if you do not wish to override these 1854<code class="varname">CFLAGS</code>, if you do not wish to override these
1855settings, use the <code class="literal">+=</code> operator:</p> 1855settings, use the <code class="literal">+=</code> operator:</p>
1856<pre class="programlisting"> 1856<pre class="programlisting">
1857LDFLAGS+= -your -linkerflags 1857LDFLAGS+= -your -linkerflags
1858</pre> 1858</pre>
1859</div> 1859</div>
1860</div> 1860</div>
1861<div class="sect1"> 1861<div class="sect1">
1862<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1862<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1863<a name="developer-advanced-settings"></a>5.5. Developer/advanced settings</h2></div></div></div> 1863<a name="developer-advanced-settings"></a>5.5. Developer/advanced settings</h2></div></div></div>
1864<p> 1864<p>
1865 </p> 1865 </p>
1866<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1866<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1867<li class="listitem"> 1867<li class="listitem">
1868<p><code class="varname">PKG_DEVELOPER</code>: 1868<p><code class="varname">PKG_DEVELOPER</code>:
1869 Run some sanity checks that package developers want: 1869 Run some sanity checks that package developers want:
1870 </p> 1870 </p>
1871<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "> 1871<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
1872<li class="listitem"><p>make sure patches apply with zero 1872<li class="listitem"><p>make sure patches apply with zero
1873 fuzz</p></li> 1873 fuzz</p></li>
1874<li class="listitem"><p>run check-shlibs to see that all 1874<li class="listitem"><p>run check-shlibs to see that all
1875 binaries will find their shared libs.</p></li> 1875 binaries will find their shared libs.</p></li>
1876</ul></div> 1876</ul></div>
1877<p> 1877<p>
1878 </p> 1878 </p>
1879</li> 1879</li>
1880<li class="listitem"><p><code class="varname">PKG_DEBUG_LEVEL</code>: The level 1880<li class="listitem"><p><code class="varname">PKG_DEBUG_LEVEL</code>: The level
1881 of debugging output which is displayed whilst making and 1881 of debugging output which is displayed whilst making and
1882 installing the package. The default value for this is 0, 1882 installing the package. The default value for this is 0,
1883 which will not display the commands as they are executed 1883 which will not display the commands as they are executed
1884 (normal, default, quiet operation); the value 1 will display 1884 (normal, default, quiet operation); the value 1 will display
1885 all shell commands before their invocation, and the value 2 1885 all shell commands before their invocation, and the value 2
1886 will display both the shell commands before their invocation, 1886 will display both the shell commands before their invocation,
1887 as well as their actual execution progress with <span class="command"><strong>set 1887 as well as their actual execution progress with <span class="command"><strong>set
1888 -x</strong></span>.</p></li> 1888 -x</strong></span>.</p></li>
1889</ul></div> 1889</ul></div>
1890<p> 1890<p>
1891 </p> 1891 </p>
1892</div> 1892</div>
1893<div class="sect1"> 1893<div class="sect1">
1894<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1894<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1895<a name="selecting-build-options"></a>5.6. Selecting Build Options</h2></div></div></div> 1895<a name="selecting-build-options"></a>5.6. Selecting Build Options</h2></div></div></div>
1896<p>Some packages have build time options, usually to select 1896<p>Some packages have build time options, usually to select
1897 between different dependencies, enable optional support for big 1897 between different dependencies, enable optional support for big
1898 dependencies or enable experimental features.</p> 1898 dependencies or enable experimental features.</p>
1899<p>To see which options, if any, a package supports, and which 1899<p>To see which options, if any, a package supports, and which
1900 options are mutually exclusive, run <span class="command"><strong>make 1900 options are mutually exclusive, run <span class="command"><strong>make
1901 show-options</strong></span>, for example:</p> 1901 show-options</strong></span>, for example:</p>
1902<pre class="programlisting"> 1902<pre class="programlisting">
1903 The following options are supported by this package: 1903 The following options are supported by this package:
1904 ssl Enable SSL support. 1904 ssl Enable SSL support.
1905 Exactly one of the following gecko options is required: 1905 Exactly one of the following gecko options is required:
1906 firefox Use firefox as gecko rendering engine. 1906 firefox Use firefox as gecko rendering engine.
1907 mozilla Use mozilla as gecko rendering engine. 1907 mozilla Use mozilla as gecko rendering engine.
1908 At most one of the following database options may be selected: 1908 At most one of the following database options may be selected:
1909 mysql Enable support for MySQL database. 1909 mysql Enable support for MySQL database.
1910 pgsql Enable support for PostgreSQL database. 1910 pgsql Enable support for PostgreSQL database.
1911 1911
1912 These options are enabled by default: firefox 1912 These options are enabled by default: firefox
1913 These options are currently enabled: mozilla ssl 1913 These options are currently enabled: mozilla ssl
1914</pre> 1914</pre>
1915<p>The following variables can be defined in 1915<p>The following variables can be defined in
1916 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to select which options to 1916 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to select which options to
1917 enable for a package: <code class="varname">PKG_DEFAULT_OPTIONS</code>, 1917 enable for a package: <code class="varname">PKG_DEFAULT_OPTIONS</code>,
1918 which can be used to select or disable options for all packages 1918 which can be used to select or disable options for all packages
1919 that support them, and 1919 that support them, and
1920 <code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code>, 1920 <code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code>,
1921 which can be used to select or disable options specifically for 1921 which can be used to select or disable options specifically for
1922 package <em class="replaceable"><code>pkgbase</code></em>. Options listed in 1922 package <em class="replaceable"><code>pkgbase</code></em>. Options listed in
1923 these variables are selected, options preceded by <span class="quote">&#8220;<span class="quote">-</span>&#8221;</span> 1923 these variables are selected, options preceded by <span class="quote">&#8220;<span class="quote">-</span>&#8221;</span>
1924 are disabled. A few examples:</p> 1924 are disabled. A few examples:</p>
1925<pre class="screen"> 1925<pre class="screen">
1926<code class="prompt">$</code> <span class="command"><strong>grep "PKG.*OPTION" <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a></strong></span> 1926<code class="prompt">$</code> <span class="command"><strong>grep "PKG.*OPTION" <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a></strong></span>
1927PKG_DEFAULT_OPTIONS= -arts -dvdread -esound 1927PKG_DEFAULT_OPTIONS= -arts -dvdread -esound
1928PKG_OPTIONS.kdebase= debug -sasl 1928PKG_OPTIONS.kdebase= debug -sasl
1929PKG_OPTIONS.apache= suexec </pre> 1929PKG_OPTIONS.apache= suexec </pre>
1930<p>It is important to note that options that were specifically 1930<p>It is important to note that options that were specifically
1931 suggested by the package maintainer must be explicitly removed if 1931 suggested by the package maintainer must be explicitly removed if
1932 you do not wish to include the option. If you are unsure you can view 1932 you do not wish to include the option. If you are unsure you can view
1933 the current state with <span class="command"><strong>make show-options</strong></span>.</p> 1933 the current state with <span class="command"><strong>make show-options</strong></span>.</p>
1934<p>The following settings are consulted in the order given, and 1934<p>The following settings are consulted in the order given, and
1935 the last setting that selects or disables an option is 1935 the last setting that selects or disables an option is
1936 used:</p> 1936 used:</p>
1937<div class="orderedlist"><ol class="orderedlist" type="1"> 1937<div class="orderedlist"><ol class="orderedlist" type="1">
1938<li class="listitem"><p>the default options as suggested by the package 1938<li class="listitem"><p>the default options as suggested by the package
1939 maintainer</p></li> 1939 maintainer</p></li>
1940<li class="listitem"><p>the options implied by the settings of legacy 1940<li class="listitem"><p>the options implied by the settings of legacy
1941 variables (see below)</p></li> 1941 variables (see below)</p></li>
1942<li class="listitem"><p><code class="varname">PKG_DEFAULT_OPTIONS</code></p></li> 1942<li class="listitem"><p><code class="varname">PKG_DEFAULT_OPTIONS</code></p></li>
1943<li class="listitem"><p><code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code></p></li> 1943<li class="listitem"><p><code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code></p></li>
1944</ol></div> 1944</ol></div>
1945<p>For groups of mutually exclusive options, the last option 1945<p>For groups of mutually exclusive options, the last option
1946 selected is used, all others are automatically disabled. If an 1946 selected is used, all others are automatically disabled. If an
1947 option of the group is explicitly disabled, the previously 1947 option of the group is explicitly disabled, the previously
1948 selected option, if any, is used. It is an error if no option 1948 selected option, if any, is used. It is an error if no option
1949 from a required group of options is selected, and building the 1949 from a required group of options is selected, and building the
1950 package will fail.</p> 1950 package will fail.</p>
1951<p>Before the options framework was introduced, build options 1951<p>Before the options framework was introduced, build options
1952 were selected by setting a variable (often named 1952 were selected by setting a variable (often named
1953 <code class="varname">USE_<em class="replaceable"><code>FOO</code></em></code>) in 1953 <code class="varname">USE_<em class="replaceable"><code>FOO</code></em></code>) in
1954 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> for each option. To ease 1954 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> for each option. To ease
1955 transition to the options framework for the user, these legacy 1955 transition to the options framework for the user, these legacy
1956 variables are converted to the appropriate options setting 1956 variables are converted to the appropriate options setting
1957 (<code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code>) 1957 (<code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code>)
1958 automatically. A warning is issued to prompt the user to update 1958 automatically. A warning is issued to prompt the user to update
1959 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to use the options framework 1959 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to use the options framework
1960 directly. Support for the legacy variables will be removed 1960 directly. Support for the legacy variables will be removed
1961 eventually.</p> 1961 eventually.</p>
1962</div> 1962</div>
1963</div> 1963</div>
1964<div class="chapter"> 1964<div class="chapter">
1965<div class="titlepage"><div><div><h2 class="title"> 1965<div class="titlepage"><div><div><h2 class="title">
1966<a name="binary"></a>Chapter 6. Creating binary packages</h2></div></div></div> 1966<a name="binary"></a>Chapter 6. Creating binary packages</h2></div></div></div>
1967<div class="toc"> 1967<div class="toc">
1968<p><b>Table of Contents</b></p> 1968<p><b>Table of Contents</b></p>
1969<dl class="toc"> 1969<dl class="toc">
1970<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt> 1970<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt>
1971<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt> 1971<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt>
1972</dl> 1972</dl>
1973</div> 1973</div>
1974<div class="sect1"> 1974<div class="sect1">
1975<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1975<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1976<a name="building-a-single-binary-package"></a>6.1. Building a single binary package</h2></div></div></div> 1976<a name="building-a-single-binary-package"></a>6.1. Building a single binary package</h2></div></div></div>
1977<p>Once you have built and installed a package, you can create 1977<p>Once you have built and installed a package, you can create
1978 a <span class="emphasis"><em>binary package</em></span> which can be installed on 1978 a <span class="emphasis"><em>binary package</em></span> which can be installed on
1979 another system with <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. This saves having to build 1979 another system with <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. This saves having to build
1980 the same package on a group of hosts and wasting CPU time. It also 1980 the same package on a group of hosts and wasting CPU time. It also
1981 provides a simple means for others to install your package, should 1981 provides a simple means for others to install your package, should
1982 you distribute it.</p> 1982 you distribute it.</p>
1983<p>To create a binary package, change into the appropriate 1983<p>To create a binary package, change into the appropriate
1984 directory in pkgsrc, and run <span class="command"><strong>make 1984 directory in pkgsrc, and run <span class="command"><strong>make
1985 package</strong></span>:</p> 1985 package</strong></span>:</p>
1986<pre class="screen"> 1986<pre class="screen">
1987<code class="prompt">$</code> <strong class="userinput"><code>cd misc/figlet</code></strong> 1987<code class="prompt">$</code> <strong class="userinput"><code>cd misc/figlet</code></strong>
1988<code class="prompt">$</code> <strong class="userinput"><code>make package</code></strong> 1988<code class="prompt">$</code> <strong class="userinput"><code>make package</code></strong>
1989</pre> 1989</pre>
1990<p>This will build and install your package (if not already done), 1990<p>This will build and install your package (if not already done),
1991 and then build a binary package from what was installed. You can 1991 and then build a binary package from what was installed. You can
1992 then use the <span class="command"><strong>pkg_*</strong></span> tools to manipulate 1992 then use the <span class="command"><strong>pkg_*</strong></span> tools to manipulate
1993 it. Binary packages are created by default in 1993 it. Binary packages are created by default in
1994 <code class="filename">/usr/pkgsrc/packages</code>, in the form of a 1994 <code class="filename">/usr/pkgsrc/packages</code>, in the form of a
1995 gzipped tar file. See <a class="xref" href="#logs.package" title="B.2. Packaging figlet">Section B.2, &#8220;Packaging figlet&#8221;</a> for a 1995 gzipped tar file. See <a class="xref" href="#logs.package" title="B.2. Packaging figlet">Section B.2, &#8220;Packaging figlet&#8221;</a> for a
1996 continuation of the above <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/misc/figlet/README.html" target="_top"><code class="filename">misc/figlet</code></a> example.</p> 1996 continuation of the above <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/misc/figlet/README.html" target="_top"><code class="filename">misc/figlet</code></a> example.</p>
1997<p>See <a class="xref" href="#submit" title="Chapter 21. Submitting and Committing">Chapter 21, <i>Submitting and Committing</i></a> for information on how to submit 1997<p>See <a class="xref" href="#submit" title="Chapter 21. Submitting and Committing">Chapter 21, <i>Submitting and Committing</i></a> for information on how to submit
1998 such a binary package.</p> 1998 such a binary package.</p>
1999</div> 1999</div>
2000<div class="sect1"> 2000<div class="sect1">
2001<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2001<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2002<a name="settings-for-creationg-of-binary-packages"></a>6.2. Settings for creation of binary packages</h2></div></div></div> 2002<a name="settings-for-creationg-of-binary-packages"></a>6.2. Settings for creation of binary packages</h2></div></div></div>
2003<p>See <a class="xref" href="#build.helpful-targets" title="17.17. Other helpful targets">Section 17.17, &#8220;Other helpful targets&#8221;</a>.</p> 2003<p>See <a class="xref" href="#build.helpful-targets" title="17.17. Other helpful targets">Section 17.17, &#8220;Other helpful targets&#8221;</a>.</p>
2004</div> 2004</div>
2005</div> 2005</div>
2006<div class="chapter"> 2006<div class="chapter">
2007<div class="titlepage"><div><div><h2 class="title"> 2007<div class="titlepage"><div><div><h2 class="title">
2008<a name="bulk"></a>Chapter 7. Creating binary packages for everything in pkgsrc (bulk 2008<a name="bulk"></a>Chapter 7. Creating binary packages for everything in pkgsrc (bulk
2009builds)</h2></div></div></div> 2009builds)</h2></div></div></div>
2010<div class="toc"> 2010<div class="toc">
2011<p><b>Table of Contents</b></p> 2011<p><b>Table of Contents</b></p>
2012<dl class="toc"> 2012<dl class="toc">
2013<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt> 2013<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt>
2014<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt> 2014<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt>
2015<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd> 2015<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd>
2016<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt> 2016<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt>
2017<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt> 2017<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt>
2018<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd> 2018<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd>
2019</dl> 2019</dl>
2020</div> 2020</div>
2021<p>For a number of reasons you may want to build binary packages 2021<p>For a number of reasons you may want to build binary packages
2022for a large selected set of packages in pkgsrc or even for all pkgsrc packages. 2022for a large selected set of packages in pkgsrc or even for all pkgsrc packages.
2023For instance, when you have multiple machines that should run the same software, 2023For instance, when you have multiple machines that should run the same software,
2024it is wasted time if they all build their packages themselves from source. 2024it is wasted time if they all build their packages themselves from source.
2025Or you may want to build a list of packages you want and check them before 2025Or you may want to build a list of packages you want and check them before
2026deploying onto production system. 2026deploying onto production system.
2027There is a way of getting a set of binary packages: 2027There is a way of getting a set of binary packages:
2028The bulk build system, or pbulk ("p" stands for "parallel"). 2028The bulk build system, or pbulk ("p" stands for "parallel").
2029This chapter describes how to set it up.</p> 2029This chapter describes how to set it up.</p>
2030<div class="sect1"> 2030<div class="sect1">
2031<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2031<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2032<a name="bulk.pre"></a>7.1. Preparations</h2></div></div></div> 2032<a name="bulk.pre"></a>7.1. Preparations</h2></div></div></div>
2033<p>First of all, you have to decide whether you build all packages 2033<p>First of all, you have to decide whether you build all packages
2034or a limited set of them. Full bulk builds usually consume a lot more resources, 2034or a limited set of them. Full bulk builds usually consume a lot more resources,
2035both space and time, than builds for some practical sets of packages. 2035both space and time, than builds for some practical sets of packages.
2036There exists a number of particularly heavy packages that are not actually 2036There exists a number of particularly heavy packages that are not actually
2037interesting to a wide audience. 2037interesting to a wide audience.
2038 2038
2039For a limited bulk builds you need to make a list of packages you want to build. 2039For a limited bulk builds you need to make a list of packages you want to build.
2040Note that all their dependencies will be built, so you don't need to track them manually. 2040Note that all their dependencies will be built, so you don't need to track them manually.
2041</p> 2041</p>
2042<p>During bulk builds various packages are installed and deinstalled 2042<p>During bulk builds various packages are installed and deinstalled
2043in <code class="filename">/usr/pkg</code> (or whatever <code class="filename">LOCALBASE</code> is), 2043in <code class="filename">/usr/pkg</code> (or whatever <code class="filename">LOCALBASE</code> is),
2044so make sure that you don't need any package during the builds. 2044so make sure that you don't need any package during the builds.
2045Essentially, you should provide a fresh system, either a chroot environment 2045Essentially, you should provide a fresh system, either a chroot environment
2046or something even more restrictive, depending on what the operating system provides, 2046or something even more restrictive, depending on what the operating system provides,
2047or dedicate the whole physical machine. 2047or dedicate the whole physical machine.
2048As a useful side effect this makes sure that bulk builds cannot 2048As a useful side effect this makes sure that bulk builds cannot
2049break anything in your system. There have been numerous cases where 2049break anything in your system. There have been numerous cases where
2050certain packages tried to install files outside the 2050certain packages tried to install files outside the
2051<code class="filename">LOCALBASE</code> or wanted to edit some files in 2051<code class="filename">LOCALBASE</code> or wanted to edit some files in
2052<code class="filename">/etc</code>. 2052<code class="filename">/etc</code>.
2053</p> 2053</p>
2054</div> 2054</div>
2055<div class="sect1"> 2055<div class="sect1">
2056<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2056<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2057<a name="bulk.pbulk"></a>7.2. Running a pbulk-style bulk build</h2></div></div></div> 2057<a name="bulk.pbulk"></a>7.2. Running a pbulk-style bulk build</h2></div></div></div>
2058<p>Running a pbulk-style bulk build works roughly as follows:</p> 2058<p>Running a pbulk-style bulk build works roughly as follows:</p>
2059<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2059<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2060<li class="listitem"><p>First, build the pbulk infrastructure in a fresh pkgsrc location.</p></li> 2060<li class="listitem"><p>First, build the pbulk infrastructure in a fresh pkgsrc location.</p></li>
2061<li class="listitem"><p>Then, build each of the packages from a clean installation directory using the infrastructure.</p></li> 2061<li class="listitem"><p>Then, build each of the packages from a clean installation directory using the infrastructure.</p></li>
2062</ul></div> 2062</ul></div>
2063<div class="sect2"> 2063<div class="sect2">
2064<div class="titlepage"><div><div><h3 class="title"> 2064<div class="titlepage"><div><div><h3 class="title">
2065<a name="bulk.pbulk.conf"></a>7.2.1. Configuration</h3></div></div></div> 2065<a name="bulk.pbulk.conf"></a>7.2.1. Configuration</h3></div></div></div>
2066<p>To simplify configuration, we provide the helper script <code class="filename">mk/pbulk/pbulk.sh</code>.</p> 2066<p>To simplify configuration, we provide the helper script <code class="filename">mk/pbulk/pbulk.sh</code>.</p>
2067<p>In order to use it, prepare a clear system (real one, chroot environment, jail, zone, virtual machine). 2067<p>In order to use it, prepare a clear system (real one, chroot environment, jail, zone, virtual machine).
2068Configure network access to fetch distribution files. 2068Configure network access to fetch distribution files.
2069Create a user with name "pbulk".</p> 2069Create a user with name "pbulk".</p>
2070<p>Fetch and extract pkgsrc. Use a command like one of these:</p> 2070<p>Fetch and extract pkgsrc. Use a command like one of these:</p>
2071<pre class="screen"> 2071<pre class="screen">
2072<code class="prompt">#</code> <strong class="userinput"><code>(cd /usr &amp;&amp; ftp -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-)</code></strong> 2072<code class="prompt">#</code> <strong class="userinput"><code>(cd /usr &amp;&amp; ftp -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-)</code></strong>
2073<code class="prompt">#</code> <strong class="userinput"><code>(cd /usr &amp;&amp; fetch -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-)</code></strong> 2073<code class="prompt">#</code> <strong class="userinput"><code>(cd /usr &amp;&amp; fetch -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-)</code></strong>
2074<code class="prompt">#</code> <strong class="userinput"><code>(cd /usr &amp;&amp; cvs -Q -z3 -d anoncvs@anoncvs.NetBSD.org:/cvsroot get -P pkgsrc)</code></strong> 2074<code class="prompt">#</code> <strong class="userinput"><code>(cd /usr &amp;&amp; cvs -Q -z3 -d anoncvs@anoncvs.NetBSD.org:/cvsroot get -P pkgsrc)</code></strong>
2075</pre> 2075</pre>
2076<p>Or any other way that fits (e.g., curl, wget).</p> 2076<p>Or any other way that fits (e.g., curl, wget).</p>
2077<p>Deploy and configure pbulk tools, e.g.:</p> 2077<p>Deploy and configure pbulk tools, e.g.:</p>
2078<pre class="screen"> 2078<pre class="screen">
2079<code class="prompt">#</code> <strong class="userinput"><code>sh pbulk.sh -n # use native make, no bootstrap kit needed (for use on NetBSD)</code></strong> 2079<code class="prompt">#</code> <strong class="userinput"><code>sh pbulk.sh -n # use native make, no bootstrap kit needed (for use on NetBSD)</code></strong>
2080<code class="prompt">#</code> <strong class="userinput"><code>sh pbulk.sh -n -c mk.conf.frag # native, apply settings from given mk.conf fragment</code></strong> 2080<code class="prompt">#</code> <strong class="userinput"><code>sh pbulk.sh -n -c mk.conf.frag # native, apply settings from given mk.conf fragment</code></strong>
2081<code class="prompt">#</code> <strong class="userinput"><code>sh pbulk.sh -nlc mk.conf.frag # native, apply settings, configure for limited build</code></strong> 2081<code class="prompt">#</code> <strong class="userinput"><code>sh pbulk.sh -nlc mk.conf.frag # native, apply settings, configure for limited build</code></strong>
2082</pre> 2082</pre>
2083<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 2083<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2084<h3 class="title">Note</h3> 2084<h3 class="title">Note</h3>
2085<p><code class="filename">mk.conf.frag</code> is a fragment of 2085<p><code class="filename">mk.conf.frag</code> is a fragment of
2086<code class="filename">mk.conf</code> that contains settings you want to 2086<code class="filename">mk.conf</code> that contains settings you want to
2087apply to packages you build. For instance,</p> 2087apply to packages you build. For instance,</p>
2088<pre class="programlisting"> 2088<pre class="programlisting">
2089PKG_DEVELOPER= yes # perform more checks 2089PKG_DEVELOPER= yes # perform more checks
2090X11_TYPE= modular # use pkgsrc X11 2090X11_TYPE= modular # use pkgsrc X11
2091SKIP_LICENSE_CHECK= yes # accept all licences (useful 2091SKIP_LICENSE_CHECK= yes # accept all licences (useful
2092 # when building all packages) 2092 # when building all packages)
2093</pre> 2093</pre>
2094</div> 2094</div>
2095<p>If configured for limited list, replace the list in <code class="filename">/usr/pbulk/etc/pbulk.list</code> 2095<p>If configured for limited list, replace the list in <code class="filename">/usr/pbulk/etc/pbulk.list</code>
2096with your list of packages, one per line without empty lines or comments. E.g.:</p> 2096with your list of packages, one per line without empty lines or comments. E.g.:</p>
2097<pre class="programlisting"> 2097<pre class="programlisting">
2098www/firefox 2098www/firefox
2099mail/thunderbird 2099mail/thunderbird
2100misc/libreoffice4 2100misc/libreoffice4
2101</pre> 2101</pre>
2102<p>At this point you can also review configuration in <code class="filename">/usr/pbulk/etc</code> 2102<p>At this point you can also review configuration in <code class="filename">/usr/pbulk/etc</code>
2103and make final amendments, if wanted.</p> 2103and make final amendments, if wanted.</p>
2104<p>Start it:</p> 2104<p>Start it:</p>
2105<pre class="screen"> 2105<pre class="screen">
2106<code class="prompt">#</code> <strong class="userinput"><code>/usr/pbulk/bin/bulkbuild</code></strong> 2106<code class="prompt">#</code> <strong class="userinput"><code>/usr/pbulk/bin/bulkbuild</code></strong>
2107</pre> 2107</pre>
2108<p>After it finishes, you'll have <code class="filename">/mnt</code> filled with distribution files, binary packages, and reports, 2108<p>After it finishes, you'll have <code class="filename">/mnt</code> filled with distribution files, binary packages, and reports,
2109plain text summary in <code class="filename">/mnt/bulklog/meta/report.txt</code> 2109plain text summary in <code class="filename">/mnt/bulklog/meta/report.txt</code>
2110</p> 2110</p>
2111<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 2111<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2112<h3 class="title">Note</h3> 2112<h3 class="title">Note</h3>
2113<p>The <code class="filename">pbulk.sh</code> script does not cover all possible use cases. 2113<p>The <code class="filename">pbulk.sh</code> script does not cover all possible use cases.
2114While being ready to run, it serves as a good starting point to understand and build more complex setups. 2114While being ready to run, it serves as a good starting point to understand and build more complex setups.
2115The script is kept small enough for better understanding.</p> 2115The script is kept small enough for better understanding.</p>
2116</div> 2116</div>
2117<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 2117<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2118<h3 class="title">Note</h3> 2118<h3 class="title">Note</h3>
2119<p>The <code class="filename">pbulk.sh</code> script supports running 2119<p>The <code class="filename">pbulk.sh</code> script supports running
2120unprivileged bulk build and helps configuring distributed bulk builds.</p> 2120unprivileged bulk build and helps configuring distributed bulk builds.</p>
2121</div> 2121</div>
2122</div> 2122</div>
2123</div> 2123</div>
2124<div class="sect1"> 2124<div class="sect1">
2125<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2125<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2126<a name="bulk.req"></a>7.3. Requirements of a full bulk build</h2></div></div></div> 2126<a name="bulk.req"></a>7.3. Requirements of a full bulk build</h2></div></div></div>
2127<p>A complete bulk build requires lots of disk space. Some of the 2127<p>A complete bulk build requires lots of disk space. Some of the
2128disk space can be read-only, some other must be writable. Some can be on 2128disk space can be read-only, some other must be writable. Some can be on
2129remote filesystems (such as NFS) and some should be local. Some can be 2129remote filesystems (such as NFS) and some should be local. Some can be
2130temporary filesystems, others must survive a sudden reboot.</p> 2130temporary filesystems, others must survive a sudden reboot.</p>
2131<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2131<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2132<li class="listitem"><p>40 GB for the distfiles (read-write, remote, temporary)</p></li> 2132<li class="listitem"><p>40 GB for the distfiles (read-write, remote, temporary)</p></li>
2133<li class="listitem"><p>30 GB for the binary packages (read-write, remote, permanent)</p></li> 2133<li class="listitem"><p>30 GB for the binary packages (read-write, remote, permanent)</p></li>
2134<li class="listitem"><p>1 GB for the pkgsrc tree (read-only, remote, permanent)</p></li> 2134<li class="listitem"><p>1 GB for the pkgsrc tree (read-only, remote, permanent)</p></li>
2135<li class="listitem"><p>5 GB for <code class="filename">LOCALBASE</code> (read-write, local, temporary)</p></li> 2135<li class="listitem"><p>5 GB for <code class="filename">LOCALBASE</code> (read-write, local, temporary)</p></li>
2136<li class="listitem"><p>10 GB for the log files (read-write, remote, permanent)</p></li> 2136<li class="listitem"><p>10 GB for the log files (read-write, remote, permanent)</p></li>
2137<li class="listitem"><p>5 GB for temporary files (read-write, local, temporary)</p></li> 2137<li class="listitem"><p>5 GB for temporary files (read-write, local, temporary)</p></li>
2138</ul></div> 2138</ul></div>
2139</div> 2139</div>
2140<div class="sect1"> 2140<div class="sect1">
2141<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2141<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2142<a name="creating-cdroms"></a>7.4. Creating a multiple CD-ROM packages collection</h2></div></div></div> 2142<a name="creating-cdroms"></a>7.4. Creating a multiple CD-ROM packages collection</h2></div></div></div>
2143<p>After your pkgsrc bulk-build has completed, you may wish to 2143<p>After your pkgsrc bulk-build has completed, you may wish to
2144 create a CD-ROM set of the resulting binary packages to assist 2144 create a CD-ROM set of the resulting binary packages to assist
2145 in installing packages on other machines. The 2145 in installing packages on other machines. The
2146 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/cdpack/README.html" target="_top"><code class="filename">pkgtools/cdpack</code></a> package provides 2146 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/cdpack/README.html" target="_top"><code class="filename">pkgtools/cdpack</code></a> package provides
2147 a simple tool for creating the ISO 9660 images. 2147 a simple tool for creating the ISO 9660 images.
2148 <span class="command"><strong>cdpack</strong></span> arranges the packages on the CD-ROMs in a 2148 <span class="command"><strong>cdpack</strong></span> arranges the packages on the CD-ROMs in a
2149 way that keeps all the dependencies for a given package on the same 2149 way that keeps all the dependencies for a given package on the same
2150 CD as that package.</p> 2150 CD as that package.</p>
2151<div class="sect2"> 2151<div class="sect2">
2152<div class="titlepage"><div><div><h3 class="title"> 2152<div class="titlepage"><div><div><h3 class="title">
2153<a name="cdpack-example"></a>7.4.1. Example of cdpack</h3></div></div></div> 2153<a name="cdpack-example"></a>7.4.1. Example of cdpack</h3></div></div></div>
2154<p>Complete documentation for cdpack is found in the cdpack(1) 2154<p>Complete documentation for cdpack is found in the cdpack(1)
2155 man page. The following short example assumes that the binary 2155 man page. The following short example assumes that the binary
2156 packages are left in 2156 packages are left in
2157 <code class="filename">/usr/pkgsrc/packages/All</code> and that 2157 <code class="filename">/usr/pkgsrc/packages/All</code> and that
2158 sufficient disk space exists in <code class="filename">/u2</code> to 2158 sufficient disk space exists in <code class="filename">/u2</code> to
2159 hold the ISO 9660 images.</p> 2159 hold the ISO 9660 images.</p>
2160<pre class="screen"> 2160<pre class="screen">
2161<code class="prompt">#</code> <strong class="userinput"><code>mkdir /u2/images</code></strong> 2161<code class="prompt">#</code> <strong class="userinput"><code>mkdir /u2/images</code></strong>
2162<code class="prompt">#</code> <strong class="userinput"><code>pkg_add /usr/pkgsrc/packages/All/cdpack</code></strong> 2162<code class="prompt">#</code> <strong class="userinput"><code>pkg_add /usr/pkgsrc/packages/All/cdpack</code></strong>
2163<code class="prompt">#</code> <strong class="userinput"><code>cdpack /usr/pkgsrc/packages/All /u2/images</code></strong> 2163<code class="prompt">#</code> <strong class="userinput"><code>cdpack /usr/pkgsrc/packages/All /u2/images</code></strong>
2164 </pre> 2164 </pre>
2165<p>If you wish to include a common set of files 2165<p>If you wish to include a common set of files
2166 (<code class="filename">COPYRIGHT</code>, <code class="filename">README</code>, 2166 (<code class="filename">COPYRIGHT</code>, <code class="filename">README</code>,
2167 etc.) on each CD in the collection, then you need to create a 2167 etc.) on each CD in the collection, then you need to create a
2168 directory which contains these files. e.g.</p> 2168 directory which contains these files. e.g.</p>
2169<pre class="screen"> 2169<pre class="screen">
2170<code class="prompt">#</code> <strong class="userinput"><code>mkdir /tmp/common</code></strong> 2170<code class="prompt">#</code> <strong class="userinput"><code>mkdir /tmp/common</code></strong>
2171<code class="prompt">#</code> <strong class="userinput"><code>echo "This is a README" &gt; /tmp/common/README</code></strong> 2171<code class="prompt">#</code> <strong class="userinput"><code>echo "This is a README" &gt; /tmp/common/README</code></strong>
2172<code class="prompt">#</code> <strong class="userinput"><code>echo "Another file" &gt; /tmp/common/COPYING</code></strong> 2172<code class="prompt">#</code> <strong class="userinput"><code>echo "Another file" &gt; /tmp/common/COPYING</code></strong>
2173<code class="prompt">#</code> <strong class="userinput"><code>mkdir /tmp/common/bin</code></strong> 2173<code class="prompt">#</code> <strong class="userinput"><code>mkdir /tmp/common/bin</code></strong>
2174<code class="prompt">#</code> <strong class="userinput"><code>echo "#!/bin/sh" &gt; /tmp/common/bin/myscript</code></strong> 2174<code class="prompt">#</code> <strong class="userinput"><code>echo "#!/bin/sh" &gt; /tmp/common/bin/myscript</code></strong>
2175<code class="prompt">#</code> <strong class="userinput"><code>echo "echo Hello world" &gt;&gt; /tmp/common/bin/myscript</code></strong> 2175<code class="prompt">#</code> <strong class="userinput"><code>echo "echo Hello world" &gt;&gt; /tmp/common/bin/myscript</code></strong>
2176<code class="prompt">#</code> <strong class="userinput"><code>chmod 755 /tmp/common/bin/myscript</code></strong> 2176<code class="prompt">#</code> <strong class="userinput"><code>chmod 755 /tmp/common/bin/myscript</code></strong>
2177 </pre> 2177 </pre>
2178<p>Now create the images:</p> 2178<p>Now create the images:</p>
2179<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cdpack -x /tmp/common /usr/pkgsrc/packages/All /u2/images</code></strong></pre> 2179<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cdpack -x /tmp/common /usr/pkgsrc/packages/All /u2/images</code></strong></pre>
2180<p>Each image will contain <code class="filename">README</code>, 2180<p>Each image will contain <code class="filename">README</code>,
2181 <code class="filename">COPYING</code>, and <code class="filename">bin/myscript</code> 2181 <code class="filename">COPYING</code>, and <code class="filename">bin/myscript</code>
2182 in their root directories.</p> 2182 in their root directories.</p>
2183</div> 2183</div>
2184</div> 2184</div>
2185</div> 2185</div>
2186<div class="chapter"> 2186<div class="chapter">
2187<div class="titlepage"><div><div><h2 class="title"> 2187<div class="titlepage"><div><div><h2 class="title">
2188<a name="files"></a>Chapter 8. Directory layout of the installed files</h2></div></div></div> 2188<a name="files"></a>Chapter 8. Directory layout of the installed files</h2></div></div></div>
2189<div class="toc"> 2189<div class="toc">
2190<p><b>Table of Contents</b></p> 2190<p><b>Table of Contents</b></p>
2191<dl class="toc"> 2191<dl class="toc">
2192<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt> 2192<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt>
2193<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt> 2193<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt>
2194</dl> 2194</dl>
2195</div> 2195</div>
2196<p>The files that are installed by pkgsrc are organized in a way that 2196<p>The files that are installed by pkgsrc are organized in a way that
2197is similar to what you find in the <code class="filename">/usr</code> directory 2197is similar to what you find in the <code class="filename">/usr</code> directory
2198of the base system. But some details are different. This is because 2198of the base system. But some details are different. This is because
2199pkgsrc initially came from FreeBSD and had adopted its file system 2199pkgsrc initially came from FreeBSD and had adopted its file system
2200hierarchy. Later it was largely influenced by NetBSD. But no matter 2200hierarchy. Later it was largely influenced by NetBSD. But no matter
2201which operating system you are using pkgsrc with, you can expect the 2201which operating system you are using pkgsrc with, you can expect the
2202same layout for pkgsrc.</p> 2202same layout for pkgsrc.</p>
2203<p>There are mainly four root directories for pkgsrc, which are all 2203<p>There are mainly four root directories for pkgsrc, which are all
2204configurable in the <code class="filename">bootstrap/bootstrap</code> script. 2204configurable in the <code class="filename">bootstrap/bootstrap</code> script.
2205When pkgsrc has been installed as root, the default locations 2205When pkgsrc has been installed as root, the default locations
2206are:</p> 2206are:</p>
2207<pre class="programlisting"> 2207<pre class="programlisting">
2208LOCALBASE= /usr/pkg 2208LOCALBASE= /usr/pkg
2209PKG_SYSCONFBASE= /usr/pkg/etc 2209PKG_SYSCONFBASE= /usr/pkg/etc
2210VARBASE= /var 2210VARBASE= /var
2211PKG_DBDIR= /usr/pkg/pkgdb 2211PKG_DBDIR= /usr/pkg/pkgdb
2212</pre> 2212</pre>
2213<p>In unprivileged mode (when pkgsrc has been installed as any other 2213<p>In unprivileged mode (when pkgsrc has been installed as any other
2214user), the default locations are:</p> 2214user), the default locations are:</p>
2215<pre class="programlisting"> 2215<pre class="programlisting">
2216LOCALBASE= ${HOME}/pkg 2216LOCALBASE= ${HOME}/pkg
2217PKG_SYSCONFBASE= ${HOME}/pkg/etc 2217PKG_SYSCONFBASE= ${HOME}/pkg/etc
2218VARBASE= ${HOME}/pkg/var 2218VARBASE= ${HOME}/pkg/var
2219PKG_DBDIR= ${HOME}/pkg/pkgdb 2219PKG_DBDIR= ${HOME}/pkg/pkgdb
2220</pre> 2220</pre>
2221<p>What these four directories are for, and what they look like is 2221<p>What these four directories are for, and what they look like is
2222explained below.</p> 2222explained below.</p>
2223<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2223<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2224<li class="listitem"><p><code class="varname">LOCALBASE</code> corresponds to the 2224<li class="listitem"><p><code class="varname">LOCALBASE</code> corresponds to the
2225<code class="filename">/usr</code> directory in the base system. It is the 2225<code class="filename">/usr</code> directory in the base system. It is the
2226<span class="quote">&#8220;<span class="quote">main</span>&#8221;</span> directory where the files are installed and contains 2226<span class="quote">&#8220;<span class="quote">main</span>&#8221;</span> directory where the files are installed and contains
2227the well-known subdirectories like <code class="filename">bin</code>, 2227the well-known subdirectories like <code class="filename">bin</code>,
2228<code class="filename">include</code>, <code class="filename">lib</code>, 2228<code class="filename">include</code>, <code class="filename">lib</code>,
2229<code class="filename">share</code> and 2229<code class="filename">share</code> and
2230<code class="filename">sbin</code>.</p></li> 2230<code class="filename">sbin</code>.</p></li>
2231<li class="listitem"><p><code class="varname">VARBASE</code> corresponds to 2231<li class="listitem"><p><code class="varname">VARBASE</code> corresponds to
2232<code class="filename">/var</code> in the base system. Some programs (especially 2232<code class="filename">/var</code> in the base system. Some programs (especially
2233games, network daemons) need write access to it during normal 2233games, network daemons) need write access to it during normal
2234operation.</p></li> 2234operation.</p></li>
2235<li class="listitem"><p><code class="varname">PKG_SYSCONFDIR</code> corresponds to 2235<li class="listitem"><p><code class="varname">PKG_SYSCONFDIR</code> corresponds to
2236<code class="filename">/etc</code> in the base system. It contains configuration 2236<code class="filename">/etc</code> in the base system. It contains configuration
2237files of the packages, as well as pkgsrc's <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> 2237files of the packages, as well as pkgsrc's <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>
2238itself.</p></li> 2238itself.</p></li>
2239</ul></div> 2239</ul></div>
2240<div class="sect1"> 2240<div class="sect1">
2241<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2241<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2242<a name="files.localbase"></a>8.1. File system layout in <code class="literal">${LOCALBASE}</code> 2242<a name="files.localbase"></a>8.1. File system layout in <code class="literal">${LOCALBASE}</code>
2243</h2></div></div></div> 2243</h2></div></div></div>
2244<p>The following directories exist in a typical pkgsrc installation 2244<p>The following directories exist in a typical pkgsrc installation
2245in <code class="filename">${LOCALBASE}</code>.</p> 2245in <code class="filename">${LOCALBASE}</code>.</p>
2246<div class="variablelist"><dl class="variablelist"> 2246<div class="variablelist"><dl class="variablelist">
2247<dt><span class="term"><code class="filename">bin</code></span></dt> 2247<dt><span class="term"><code class="filename">bin</code></span></dt>
2248<dd><p>Contains executable programs that are intended to be 2248<dd><p>Contains executable programs that are intended to be
2249directly used by the end user.</p></dd> 2249directly used by the end user.</p></dd>
2250<dt><span class="term"><code class="filename">emul</code></span></dt> 2250<dt><span class="term"><code class="filename">emul</code></span></dt>
2251<dd><p>Contains files for the emulation layers of various other 2251<dd><p>Contains files for the emulation layers of various other
2252operating systems, especially for 2252operating systems, especially for
2253NetBSD.</p></dd> 2253NetBSD.</p></dd>
2254<dt><span class="term"><code class="filename">etc</code> (the usual location of 2254<dt><span class="term"><code class="filename">etc</code> (the usual location of
2255<code class="filename">${PKG_SYSCONFDIR}</code>)</span></dt> 2255<code class="filename">${PKG_SYSCONFDIR}</code>)</span></dt>
2256<dd><p>Contains 2256<dd><p>Contains
2257the configuration files.</p></dd> 2257the configuration files.</p></dd>
2258<dt><span class="term"><code class="filename">include</code></span></dt> 2258<dt><span class="term"><code class="filename">include</code></span></dt>
2259<dd><p>Contains headers for the C and C++ programming 2259<dd><p>Contains headers for the C and C++ programming
2260languages.</p></dd> 2260languages.</p></dd>
2261<dt><span class="term"><code class="filename">info</code></span></dt> 2261<dt><span class="term"><code class="filename">info</code></span></dt>
2262<dd><p>Contains GNU info files of various 2262<dd><p>Contains GNU info files of various
2263packages.</p></dd> 2263packages.</p></dd>
2264<dt><span class="term"><code class="filename">lib</code></span></dt> 2264<dt><span class="term"><code class="filename">lib</code></span></dt>
2265<dd><p>Contains shared and static 2265<dd><p>Contains shared and static
2266libraries.</p></dd> 2266libraries.</p></dd>
2267<dt><span class="term"><code class="filename">libdata</code></span></dt> 2267<dt><span class="term"><code class="filename">libdata</code></span></dt>
2268<dd><p>Contains data files that don't change after 2268<dd><p>Contains data files that don't change after
2269installation. Other data files belong into 2269installation. Other data files belong into
2270<code class="filename">${VARBASE}</code>.</p></dd> 2270<code class="filename">${VARBASE}</code>.</p></dd>
2271<dt><span class="term"><code class="filename">libexec</code></span></dt> 2271<dt><span class="term"><code class="filename">libexec</code></span></dt>
2272<dd><p>Contains programs that are not intended to be used by 2272<dd><p>Contains programs that are not intended to be used by
2273end users, such as helper programs or network 2273end users, such as helper programs or network
2274daemons.</p></dd> 2274daemons.</p></dd>
2275<dt><span class="term"><code class="filename">libexec/cgi-bin</code></span></dt> 2275<dt><span class="term"><code class="filename">libexec/cgi-bin</code></span></dt>
2276<dd><p>Contains programs that are intended to be executed as 2276<dd><p>Contains programs that are intended to be executed as
2277CGI scripts by a web server.</p></dd> 2277CGI scripts by a web server.</p></dd>
2278<dt><span class="term"><code class="filename">man</code> (the usual value of 2278<dt><span class="term"><code class="filename">man</code> (the usual value of
2279<code class="filename">${PKGMANDIR}</code>)</span></dt> 2279<code class="filename">${PKGMANDIR}</code>)</span></dt>
2280<dd><p>Contains brief 2280<dd><p>Contains brief
2281documentation in form of manual pages.</p></dd> 2281documentation in form of manual pages.</p></dd>
2282<dt><span class="term"><code class="filename">sbin</code></span></dt> 2282<dt><span class="term"><code class="filename">sbin</code></span></dt>
2283<dd><p>Contains programs that are intended to be used only by 2283<dd><p>Contains programs that are intended to be used only by
2284the super-user.</p></dd> 2284the super-user.</p></dd>
2285<dt><span class="term"><code class="filename">share</code></span></dt> 2285<dt><span class="term"><code class="filename">share</code></span></dt>
2286<dd><p>Contains platform-independent data files that don't 2286<dd><p>Contains platform-independent data files that don't
2287change after installation.</p></dd> 2287change after installation.</p></dd>
2288<dt><span class="term"><code class="filename">share/doc</code></span></dt> 2288<dt><span class="term"><code class="filename">share/doc</code></span></dt>
2289<dd><p>Contains documentation files provided by the 2289<dd><p>Contains documentation files provided by the
2290packages.</p></dd> 2290packages.</p></dd>
2291<dt><span class="term"><code class="filename">share/examples</code></span></dt> 2291<dt><span class="term"><code class="filename">share/examples</code></span></dt>
2292<dd><p>Contains example files provided by the packages. Among 2292<dd><p>Contains example files provided by the packages. Among
2293others, the original configuration files are saved here and copied to 2293others, the original configuration files are saved here and copied to
2294<code class="filename">${PKG_SYSCONFDIR}</code> during 2294<code class="filename">${PKG_SYSCONFDIR}</code> during
2295installation.</p></dd> 2295installation.</p></dd>
2296<dt><span class="term"><code class="filename">share/examples/rc.d</code></span></dt> 2296<dt><span class="term"><code class="filename">share/examples/rc.d</code></span></dt>
2297<dd><p>Contains the original files for rc.d 2297<dd><p>Contains the original files for rc.d
2298scripts.</p></dd> 2298scripts.</p></dd>
2299<dt><span class="term"><code class="filename">var</code> (the usual location of 2299<dt><span class="term"><code class="filename">var</code> (the usual location of
2300<code class="filename">${VARBASE}</code>)</span></dt> 2300<code class="filename">${VARBASE}</code>)</span></dt>
2301<dd><p>Contains files 2301<dd><p>Contains files
2302that may be modified after 2302that may be modified after
2303installation.</p></dd> 2303installation.</p></dd>
2304</dl></div> 2304</dl></div>
2305</div> 2305</div>
2306<div class="sect1"> 2306<div class="sect1">
2307<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2307<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2308<a name="files.varbase"></a>8.2. File system layout in <code class="literal">${VARBASE}</code> 2308<a name="files.varbase"></a>8.2. File system layout in <code class="literal">${VARBASE}</code>
2309</h2></div></div></div> 2309</h2></div></div></div>
2310<div class="variablelist"><dl class="variablelist"> 2310<div class="variablelist"><dl class="variablelist">
2311<dt><span class="term"><code class="filename">db/pkg</code> (the usual location of 2311<dt><span class="term"><code class="filename">db/pkg</code> (the usual location of
2312<code class="filename">${PKG_DBDIR}</code>)</span></dt> 2312<code class="filename">${PKG_DBDIR}</code>)</span></dt>
2313<dd><p>Contains 2313<dd><p>Contains
2314information about the currently installed 2314information about the currently installed
2315packages.</p></dd> 2315packages.</p></dd>
2316<dt><span class="term"><code class="filename">games</code></span></dt> 2316<dt><span class="term"><code class="filename">games</code></span></dt>
2317<dd><p>Contains highscore 2317<dd><p>Contains highscore
2318files.</p></dd> 2318files.</p></dd>
2319<dt><span class="term"><code class="filename">log</code></span></dt> 2319<dt><span class="term"><code class="filename">log</code></span></dt>
2320<dd><p>Contains log files.</p></dd> 2320<dd><p>Contains log files.</p></dd>
2321<dt><span class="term"><code class="filename">run</code></span></dt> 2321<dt><span class="term"><code class="filename">run</code></span></dt>
2322<dd><p>Contains informational files about daemons that are 2322<dd><p>Contains informational files about daemons that are
2323currently running.</p></dd> 2323currently running.</p></dd>
2324</dl></div> 2324</dl></div>
2325</div> 2325</div>
2326</div> 2326</div>
2327<div class="chapter"> 2327<div class="chapter">
2328<div class="titlepage"><div><div><h2 class="title"> 2328<div class="titlepage"><div><div><h2 class="title">
2329<a name="faq"></a>Chapter 9. Frequently Asked Questions</h2></div></div></div> 2329<a name="faq"></a>Chapter 9. Frequently Asked Questions</h2></div></div></div>
2330<div class="toc"> 2330<div class="toc">
2331<p><b>Table of Contents</b></p> 2331<p><b>Table of Contents</b></p>
2332<dl class="toc"> 2332<dl class="toc">
2333<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt> 2333<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt>
2334<dt><span class="sect1"><a href="#faq-pkgtools">9.2. Utilities for package management (pkgtools)</a></span></dt> 2334<dt><span class="sect1"><a href="#faq-pkgtools">9.2. Utilities for package management (pkgtools)</a></span></dt>
2335<dt><span class="sect1"><a href="#non-root-pkgsrc">9.3. How to use pkgsrc as non-root</a></span></dt> 2335<dt><span class="sect1"><a href="#non-root-pkgsrc">9.3. How to use pkgsrc as non-root</a></span></dt>
2336<dt><span class="sect1"><a href="#resume-transfers">9.4. How to resume transfers when fetching distfiles?</a></span></dt> 2336<dt><span class="sect1"><a href="#resume-transfers">9.4. How to resume transfers when fetching distfiles?</a></span></dt>
2337<dt><span class="sect1"><a href="#x.org-from-pkgsrc">9.5. How can I install/use modular X.org from pkgsrc?</a></span></dt> 2337<dt><span class="sect1"><a href="#x.org-from-pkgsrc">9.5. How can I install/use modular X.org from pkgsrc?</a></span></dt>
2338<dt><span class="sect1"><a href="#fetch-behind-firewall">9.6. How to fetch files from behind a firewall</a></span></dt> 2338<dt><span class="sect1"><a href="#fetch-behind-firewall">9.6. How to fetch files from behind a firewall</a></span></dt>
2339<dt><span class="sect1"><a href="#fetch-https">9.7. How to fetch files from HTTPS sites</a></span></dt> 2339<dt><span class="sect1"><a href="#fetch-https">9.7. How to fetch files from HTTPS sites</a></span></dt>
2340<dt><span class="sect1"><a href="#passive-ftp">9.8. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</a></span></dt> 2340<dt><span class="sect1"><a href="#passive-ftp">9.8. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</a></span></dt>
2341<dt><span class="sect1"><a href="#fetching-all-distfiles">9.9. How to fetch all distfiles at once</a></span></dt> 2341<dt><span class="sect1"><a href="#fetching-all-distfiles">9.9. How to fetch all distfiles at once</a></span></dt>
2342<dt><span class="sect1"><a href="#tmac.andoc-missing">9.10. What does <span class="quote">&#8220;<span class="quote">Don't know how to make 2342<dt><span class="sect1"><a href="#tmac.andoc-missing">9.10. What does <span class="quote">&#8220;<span class="quote">Don't know how to make
2343/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt> 2343/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt>
2344<dt><span class="sect1"><a href="#bsd.own.mk-missing">9.11. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</a></span></dt> 2344<dt><span class="sect1"><a href="#bsd.own.mk-missing">9.11. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</a></span></dt>
2345<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.12. Using 'sudo' with pkgsrc</a></span></dt> 2345<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.12. Using 'sudo' with pkgsrc</a></span></dt>
2346<dt><span class="sect1"><a href="#faq.conf">9.13. How do I change the location of configuration files?</a></span></dt> 2346<dt><span class="sect1"><a href="#faq.conf">9.13. How do I change the location of configuration files?</a></span></dt>
2347<dt><span class="sect1"><a href="#audit-packages">9.14. Automated security checks</a></span></dt> 2347<dt><span class="sect1"><a href="#audit-packages">9.14. Automated security checks</a></span></dt>
2348<dt><span class="sect1"><a href="#ufaq-cflags">9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt> 2348<dt><span class="sect1"><a href="#ufaq-cflags">9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt>
2349<dt><span class="sect1"><a href="#ufaq-fail">9.16. A package does not build. What shall I do?</a></span></dt> 2349<dt><span class="sect1"><a href="#ufaq-fail">9.16. A package does not build. What shall I do?</a></span></dt>
2350<dt><span class="sect1"><a href="#faq.rcs-conflicts">9.17. What does <span class="quote">&#8220;<span class="quote">Makefile appears to contain unresolved cvs/rcs/??? merge conflicts</span>&#8221;</span> mean?</a></span></dt> 2350<dt><span class="sect1"><a href="#faq.rcs-conflicts">9.17. What does <span class="quote">&#8220;<span class="quote">Makefile appears to contain unresolved cvs/rcs/??? merge conflicts</span>&#8221;</span> mean?</a></span></dt>
2351</dl> 2351</dl>
2352</div> 2352</div>
2353<p>This section contains hints, tips &amp; tricks on special things in 2353<p>This section contains hints, tips &amp; tricks on special things in
2354pkgsrc that we didn't find a better place for in the previous chapters, and 2354pkgsrc that we didn't find a better place for in the previous chapters, and
2355it contains items for both pkgsrc users and developers.</p> 2355it contains items for both pkgsrc users and developers.</p>
2356<div class="sect1"> 2356<div class="sect1">
2357<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2357<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2358<a name="mailing-list-pointers"></a>9.1. Are there any mailing lists for pkg-related discussion?</h2></div></div></div> 2358<a name="mailing-list-pointers"></a>9.1. Are there any mailing lists for pkg-related discussion?</h2></div></div></div>
2359<p>The following mailing lists may be of interest to pkgsrc users:</p> 2359<p>The following mailing lists may be of interest to pkgsrc users:</p>
2360<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2360<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2361<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-users" target="_top">pkgsrc-users</a>: 2361<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-users" target="_top">pkgsrc-users</a>:
2362 This is a general purpose list for most issues regarding 2362 This is a general purpose list for most issues regarding
2363 pkgsrc, regardless of platform, e.g. soliciting user help 2363 pkgsrc, regardless of platform, e.g. soliciting user help
2364 for pkgsrc configuration, unexpected build failures, using 2364 for pkgsrc configuration, unexpected build failures, using
2365 particular packages, upgrading pkgsrc installations, 2365 particular packages, upgrading pkgsrc installations,
2366 questions regarding the pkgsrc release branches, etc. General announcements or 2366 questions regarding the pkgsrc release branches, etc. General announcements or
2367 proposals for changes that impact the pkgsrc user community, 2367 proposals for changes that impact the pkgsrc user community,
2368 e.g. major infrastructure changes, new features, package 2368 e.g. major infrastructure changes, new features, package
2369 removals, etc., may also be posted.</p></li> 2369 removals, etc., may also be posted.</p></li>
2370<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-bulk" target="_top">pkgsrc-bulk</a>: 2370<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-bulk" target="_top">pkgsrc-bulk</a>:
2371 A list where the results of pkgsrc bulk builds are sent and 2371 A list where the results of pkgsrc bulk builds are sent and
2372 discussed.</p></li> 2372 discussed.</p></li>
2373<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-changes" target="_top">pkgsrc-changes</a>: 2373<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-changes" target="_top">pkgsrc-changes</a>:
2374 This list is for those who are interested in getting a 2374 This list is for those who are interested in getting a
2375 commit message for every change committed to pkgsrc. It is 2375 commit message for every change committed to pkgsrc. It is
2376 also available in digest form, meaning one daily message 2376 also available in digest form, meaning one daily message
2377 containing all commit messages for changes to the package 2377 containing all commit messages for changes to the package
2378 source tree in that 24 hour period.</p></li> 2378 source tree in that 24 hour period.</p></li>
2379</ul></div> 2379</ul></div>
2380<p>To subscribe, do:</p> 2380<p>To subscribe, do:</p>
2381<pre class="programlisting"> 2381<pre class="programlisting">
2382<code class="prompt">%</code> echo subscribe <em class="replaceable"><code>listname</code></em> | mail majordomo@NetBSD.org 2382<code class="prompt">%</code> echo subscribe <em class="replaceable"><code>listname</code></em> | mail majordomo@NetBSD.org
2383</pre> 2383</pre>
2384<p>Archives for all these mailing lists are available from 2384<p>Archives for all these mailing lists are available from
2385<a class="ulink" href="http://mail-index.NetBSD.org/" target="_top">http://mail-index.NetBSD.org/</a>.</p> 2385<a class="ulink" href="http://mail-index.NetBSD.org/" target="_top">http://mail-index.NetBSD.org/</a>.</p>
2386</div> 2386</div>
2387<div class="sect1"> 2387<div class="sect1">
2388<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2388<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2389<a name="faq-pkgtools"></a>9.2. Utilities for package management (pkgtools)</h2></div></div></div> 2389<a name="faq-pkgtools"></a>9.2. Utilities for package management (pkgtools)</h2></div></div></div>
2390<p>The directory <code class="filename">pkgsrc/pkgtools</code> contains 2390<p>The directory <code class="filename">pkgsrc/pkgtools</code> contains
2391a number of useful utilities for both users and developers of pkgsrc. This 2391a number of useful utilities for both users and developers of pkgsrc. This
2392section attempts only to make the reader aware of some of the utilities and when 2392section attempts only to make the reader aware of some of the utilities and when
2393they might be useful, and not to duplicate the documentation that comes 2393they might be useful, and not to duplicate the documentation that comes
2394with each package.</p> 2394with each package.</p>
2395<p>Utilities used by pkgsrc (automatically installed when needed):</p> 2395<p>Utilities used by pkgsrc (automatically installed when needed):</p>
2396<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/x11-links/README.html" target="_top"><code class="filename">pkgtools/x11-links</code></a>: 2396<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/x11-links/README.html" target="_top"><code class="filename">pkgtools/x11-links</code></a>:
2397 Symlinks for use by buildlink.</p></li></ul></div> 2397 Symlinks for use by buildlink.</p></li></ul></div>
2398<p>OS tool augmentation (automatically installed when needed):</p> 2398<p>OS tool augmentation (automatically installed when needed):</p>
2399<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2399<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2400<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/digest/README.html" target="_top"><code class="filename">pkgtools/digest</code></a>: 2400<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/digest/README.html" target="_top"><code class="filename">pkgtools/digest</code></a>:
2401 Calculates various kinds of checksums (including SHA3).</p></li> 2401 Calculates various kinds of checksums (including SHA3).</p></li>
2402<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/libnbcompat/README.html" target="_top"><code class="filename">pkgtools/libnbcompat</code></a>: 2402<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/libnbcompat/README.html" target="_top"><code class="filename">pkgtools/libnbcompat</code></a>:
2403 Compatibility library for pkgsrc tools.</p></li> 2403 Compatibility library for pkgsrc tools.</p></li>
2404<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/mtree/README.html" target="_top"><code class="filename">pkgtools/mtree</code></a>: Installed on 2404<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/mtree/README.html" target="_top"><code class="filename">pkgtools/mtree</code></a>: Installed on
2405 non-BSD systems due to lack of native mtree.</p></li> 2405 non-BSD systems due to lack of native mtree.</p></li>
2406<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a>: 2406<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a>:
2407 Up-to-date replacement for 2407 Up-to-date replacement for
2408 <code class="filename">/usr/sbin/pkg_install</code>, or for use on operating 2408 <code class="filename">/usr/sbin/pkg_install</code>, or for use on operating
2409 systems where pkg_install is not present.</p></li> 2409 systems where pkg_install is not present.</p></li>
2410</ul></div> 2410</ul></div>
2411<p>Utilities used by pkgsrc (not automatically installed):</p> 2411<p>Utilities used by pkgsrc (not automatically installed):</p>
2412<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2412<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2413<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_tarup/README.html" target="_top"><code class="filename">pkgtools/pkg_tarup</code></a>: 2413<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_tarup/README.html" target="_top"><code class="filename">pkgtools/pkg_tarup</code></a>:
2414 Create a binary package from an 2414 Create a binary package from an
2415 already-installed package. Used by <span class="command"><strong>make replace</strong></span> to 2415 already-installed package. Used by <span class="command"><strong>make replace</strong></span> to
2416 save the old package.</p></li> 2416 save the old package.</p></li>
2417<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/dfdisk/README.html" target="_top"><code class="filename">pkgtools/dfdisk</code></a>: 2417<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/dfdisk/README.html" target="_top"><code class="filename">pkgtools/dfdisk</code></a>:
2418 Adds extra functionality to pkgsrc, allowing it to fetch distfiles 2418 Adds extra functionality to pkgsrc, allowing it to fetch distfiles
2419 from multiple locations. It currently supports the following 2419 from multiple locations. It currently supports the following
2420 methods: multiple CD-ROMs and network FTP/HTTP connections.</p></li> 2420 methods: multiple CD-ROMs and network FTP/HTTP connections.</p></li>
2421<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/cpuflags/README.html" target="_top"><code class="filename">devel/cpuflags</code></a>: Determine 2421<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/cpuflags/README.html" target="_top"><code class="filename">devel/cpuflags</code></a>: Determine
2422 the best compiler flags to optimise code for your current 2422 the best compiler flags to optimise code for your current
2423 CPU and compiler. </p></li> 2423 CPU and compiler. </p></li>
2424</ul></div> 2424</ul></div>
2425<p>Utilities for keeping track of installed packages, being up to date, 2425<p>Utilities for keeping track of installed packages, being up to date,
2426etc:</p> 2426etc:</p>
2427<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2427<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2428<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgin/README.html" target="_top"><code class="filename">pkgtools/pkgin</code></a>: A package 2428<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgin/README.html" target="_top"><code class="filename">pkgtools/pkgin</code></a>: A package
2429 update tool similar to apt(1). Download, install, and upgrade 2429 update tool similar to apt(1). Download, install, and upgrade
2430 binary packages easily.</p></li> 2430 binary packages easily.</p></li>
2431<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_chk/README.html" target="_top"><code class="filename">pkgtools/pkg_chk</code></a>: Reports on 2431<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_chk/README.html" target="_top"><code class="filename">pkgtools/pkg_chk</code></a>: Reports on
2432 packages whose installed versions do not match the latest pkgsrc 2432 packages whose installed versions do not match the latest pkgsrc
2433 entries.</p></li> 2433 entries.</p></li>
2434<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdep/README.html" target="_top"><code class="filename">pkgtools/pkgdep</code></a>: Makes 2434<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdep/README.html" target="_top"><code class="filename">pkgtools/pkgdep</code></a>: Makes
2435 dependency graphs of packages, to aid in choosing a strategy for 2435 dependency graphs of packages, to aid in choosing a strategy for
2436 updating.</p></li> 2436 updating.</p></li>
2437<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdepgraph/README.html" target="_top"><code class="filename">pkgtools/pkgdepgraph</code></a>: Makes 2437<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdepgraph/README.html" target="_top"><code class="filename">pkgtools/pkgdepgraph</code></a>: Makes
2438 graphs from the output of <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdep/README.html" target="_top"><code class="filename">pkgtools/pkgdep</code></a> (uses graphviz).</p></li> 2438 graphs from the output of <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdep/README.html" target="_top"><code class="filename">pkgtools/pkgdep</code></a> (uses graphviz).</p></li>
2439<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>: The 2439<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>: The
2440 pkglint(1) program checks a pkgsrc entry for errors.</p></li> 2440 pkglint(1) program checks a pkgsrc entry for errors.</p></li>
2441<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/lintpkgsrc/README.html" target="_top"><code class="filename">pkgtools/lintpkgsrc</code></a>: The lintpkgsrc(1) program 2441<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/lintpkgsrc/README.html" target="_top"><code class="filename">pkgtools/lintpkgsrc</code></a>: The lintpkgsrc(1) program
2442 does various checks on the complete pkgsrc system.</p></li> 2442 does various checks on the complete pkgsrc system.</p></li>
2443<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgsurvey/README.html" target="_top"><code class="filename">pkgtools/pkgsurvey</code></a>: Report what 2443<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgsurvey/README.html" target="_top"><code class="filename">pkgtools/pkgsurvey</code></a>: Report what
2444 packages you have installed.</p></li> 2444 packages you have installed.</p></li>
2445</ul></div> 2445</ul></div>
2446<p>Utilities for people maintaining or creating individual packages:</p> 2446<p>Utilities for people maintaining or creating individual packages:</p>
2447<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2447<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2448<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a>: Automate 2448<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a>: Automate
2449 making and maintaining patches for a package (includes pkgdiff, 2449 making and maintaining patches for a package (includes pkgdiff,
2450 pkgvi, mkpatches, etc.).</p></li> 2450 pkgvi, mkpatches, etc.).</p></li>
2451<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a>: Aids in 2451<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a>: Aids in
2452 converting to pkgsrc.</p></li> 2452 converting to pkgsrc.</p></li>
2453</ul></div> 2453</ul></div>
2454<p>Utilities for people maintaining pkgsrc (or: more obscure pkg 2454<p>Utilities for people maintaining pkgsrc (or: more obscure pkg
2455utilities)</p> 2455utilities)</p>
2456<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2456<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2457<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_comp/README.html" target="_top"><code class="filename">pkgtools/pkg_comp</code></a>: Build 2457<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_comp/README.html" target="_top"><code class="filename">pkgtools/pkg_comp</code></a>: Build
2458 packages in a chrooted area.</p></li> 2458 packages in a chrooted area.</p></li>
2459<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/libkver/README.html" target="_top"><code class="filename">pkgtools/libkver</code></a>: Spoof 2459<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/libkver/README.html" target="_top"><code class="filename">pkgtools/libkver</code></a>: Spoof
2460 kernel version for chrooted cross builds.</p></li> 2460 kernel version for chrooted cross builds.</p></li>
2461</ul></div> 2461</ul></div>
2462</div> 2462</div>
2463<div class="sect1"> 2463<div class="sect1">
2464<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2464<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2465<a name="non-root-pkgsrc"></a>9.3. How to use pkgsrc as non-root</h2></div></div></div> 2465<a name="non-root-pkgsrc"></a>9.3. How to use pkgsrc as non-root</h2></div></div></div>
2466<p>To install packages from source as a non-root user, download 2466<p>To install packages from source as a non-root user, download
2467pkgsrc as described in <a class="xref" href="#getting" title="Chapter 2. Where to get pkgsrc and how to keep it up-to-date">Chapter 2, <i>Where to get pkgsrc and how to keep it up-to-date</i></a>, cd into that 2467pkgsrc as described in <a class="xref" href="#getting" title="Chapter 2. Where to get pkgsrc and how to keep it up-to-date">Chapter 2, <i>Where to get pkgsrc and how to keep it up-to-date</i></a>, cd into that
2468directory and run the command <span class="command"><strong>./bootstrap/bootstrap 2468directory and run the command <span class="command"><strong>./bootstrap/bootstrap
2469--unprivileged</strong></span>.</p> 2469--unprivileged</strong></span>.</p>
2470<p>This will install the binary part of pkgsrc to 2470<p>This will install the binary part of pkgsrc to
2471<code class="filename">~/pkg</code> and put the pkgsrc configuration <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> 2471<code class="filename">~/pkg</code> and put the pkgsrc configuration <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>
2472into <code class="filename">~/pkg/etc</code>.</p> 2472into <code class="filename">~/pkg/etc</code>.</p>
2473<p>For more details, see <code class="filename">mk/unprivileged.mk</code>.</p> 2473<p>For more details, see <code class="filename">mk/unprivileged.mk</code>.</p>
2474</div> 2474</div>
2475<div class="sect1"> 2475<div class="sect1">
2476<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2476<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2477<a name="resume-transfers"></a>9.4. How to resume transfers when fetching distfiles?</h2></div></div></div> 2477<a name="resume-transfers"></a>9.4. How to resume transfers when fetching distfiles?</h2></div></div></div>
2478<p>By default, resuming transfers in pkgsrc is disabled, but you can 2478<p>By default, resuming transfers in pkgsrc is disabled, but you can
2479enable this feature by adding the option 2479enable this feature by adding the option
2480<code class="varname">PKG_RESUME_TRANSFERS=YES</code> into 2480<code class="varname">PKG_RESUME_TRANSFERS=YES</code> into
2481<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. If, during a fetch step, an incomplete 2481<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. If, during a fetch step, an incomplete
2482distfile is found, pkgsrc will try to resume it.</p> 2482distfile is found, pkgsrc will try to resume it.</p>
2483<p>You can also 2483<p>You can also
2484use a different program than the platform default program by changing the 2484use a different program than the platform default program by changing the
2485<code class="varname">FETCH_USING</code> variable. You can specify the program by 2485<code class="varname">FETCH_USING</code> variable. You can specify the program by
2486using of ftp, fetch, wget or curl. Alternatively, fetching can be disabled 2486using of ftp, fetch, wget or curl. Alternatively, fetching can be disabled
2487by using the value manual. A value of custom disables the system defaults 2487by using the value manual. A value of custom disables the system defaults
2488and dependency tracking for the fetch program. In that case you have to 2488and dependency tracking for the fetch program. In that case you have to
2489provide <code class="varname">FETCH_CMD</code>, <code class="varname">FETCH_BEFORE_ARGS</code>, 2489provide <code class="varname">FETCH_CMD</code>, <code class="varname">FETCH_BEFORE_ARGS</code>,
2490<code class="varname">FETCH_RESUME_ARGS</code>, <code class="varname">FETCH_OUTPUT_ARGS</code>, 2490<code class="varname">FETCH_RESUME_ARGS</code>, <code class="varname">FETCH_OUTPUT_ARGS</code>,
2491<code class="varname">FETCH_AFTER_ARGS</code>.</p> 2491<code class="varname">FETCH_AFTER_ARGS</code>.</p>
2492<p>For example, if you want to use 2492<p>For example, if you want to use
2493<code class="filename">wget</code> to download, you'll have to use something 2493<code class="filename">wget</code> to download, you'll have to use something
2494like:</p> 2494like:</p>
2495<pre class="programlisting"> 2495<pre class="programlisting">
2496FETCH_USING= wget 2496FETCH_USING= wget
2497</pre> 2497</pre>
2498</div> 2498</div>
2499<div class="sect1"> 2499<div class="sect1">
2500<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2500<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2501<a name="x.org-from-pkgsrc"></a>9.5. How can I install/use modular X.org from pkgsrc?</h2></div></div></div> 2501<a name="x.org-from-pkgsrc"></a>9.5. How can I install/use modular X.org from pkgsrc?</h2></div></div></div>
2502<p>If you want to use modular X.org from pkgsrc instead of your system's own X11 2502<p>If you want to use modular X.org from pkgsrc instead of your system's own X11
2503(<code class="filename">/usr/X11R6</code>, <code class="filename">/usr/openwin</code>, ...) 2503(<code class="filename">/usr/X11R6</code>, <code class="filename">/usr/openwin</code>, ...)
2504you will have to add the following line into 2504you will have to add the following line into
2505<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>:</p> 2505<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>:</p>
2506<pre class="programlisting"> 2506<pre class="programlisting">
2507X11_TYPE=modular 2507X11_TYPE=modular
2508</pre> 2508</pre>
2509</div> 2509</div>
2510<div class="sect1"> 2510<div class="sect1">
2511<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2511<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2512<a name="fetch-behind-firewall"></a>9.6. How to fetch files from behind a firewall</h2></div></div></div> 2512<a name="fetch-behind-firewall"></a>9.6. How to fetch files from behind a firewall</h2></div></div></div>
2513<p>If you are sitting behind a firewall which does not allow direct 2513<p>If you are sitting behind a firewall which does not allow direct
2514connections to Internet hosts (i.e. non-NAT), you may specify the 2514connections to Internet hosts (i.e. non-NAT), you may specify the
2515relevant proxy hosts. This is done using an environment variable in the 2515relevant proxy hosts. This is done using an environment variable in the
2516form of a URL, e.g. in Amdahl, the machine 2516form of a URL, e.g. in Amdahl, the machine
2517<span class="quote">&#8220;<span class="quote">orpheus.amdahl.com</span>&#8221;</span> is one of the firewalls, and it uses 2517<span class="quote">&#8220;<span class="quote">orpheus.amdahl.com</span>&#8221;</span> is one of the firewalls, and it uses
2518port 80 as the proxy port number. So the proxy environment variables 2518port 80 as the proxy port number. So the proxy environment variables
2519are:</p> 2519are:</p>
2520<pre class="programlisting"> 2520<pre class="programlisting">
2521ftp_proxy=ftp://orpheus.amdahl.com:80/ 2521ftp_proxy=ftp://orpheus.amdahl.com:80/
2522http_proxy=http://orpheus.amdahl.com:80/ 2522http_proxy=http://orpheus.amdahl.com:80/
2523</pre> 2523</pre>
2524</div> 2524</div>
2525<div class="sect1"> 2525<div class="sect1">
2526<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2526<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2527<a name="fetch-https"></a>9.7. How to fetch files from HTTPS sites</h2></div></div></div> 2527<a name="fetch-https"></a>9.7. How to fetch files from HTTPS sites</h2></div></div></div>
2528<p>Some fetch tools are not prepared to support HTTPS by default 2528<p>Some fetch tools are not prepared to support HTTPS by default
2529(for example, the one in NetBSD 6.0), or the one installed by the 2529(for example, the one in NetBSD 6.0), or the one installed by the
2530pkgsrc bootstrap (to avoid an openssl dependency that low in the 2530pkgsrc bootstrap (to avoid an openssl dependency that low in the
2531dependency graph).</p> 2531dependency graph).</p>
2532<p>Usually you won't notice, because distribution files are 2532<p>Usually you won't notice, because distribution files are
2533mirrored weekly to <span class="quote">&#8220;<span class="quote">ftp.NetBSD.org</span>&#8221;</span>, but that might not 2533mirrored weekly to <span class="quote">&#8220;<span class="quote">ftp.NetBSD.org</span>&#8221;</span>, but that might not
2534be often enough if you are following pkgsrc-current. In that case, set 2534be often enough if you are following pkgsrc-current. In that case, set
2535<code class="varname">FETCH_USING</code> in your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file to 2535<code class="varname">FETCH_USING</code> in your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file to
2536<span class="quote">&#8220;<span class="quote">curl</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">wget</span>&#8221;</span>, which are both compiled 2536<span class="quote">&#8220;<span class="quote">curl</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">wget</span>&#8221;</span>, which are both compiled
2537with HTTPS support by default. Of course, these tools need to be 2537with HTTPS support by default. Of course, these tools need to be
2538installed before you can use them this way.</p> 2538installed before you can use them this way.</p>
2539</div> 2539</div>
2540<div class="sect1"> 2540<div class="sect1">
2541<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2541<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2542<a name="passive-ftp"></a>9.8. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</h2></div></div></div> 2542<a name="passive-ftp"></a>9.8. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</h2></div></div></div>
2543<p>This depends on which utility is used to retrieve distfiles. From 2543<p>This depends on which utility is used to retrieve distfiles. From
2544<code class="filename">bsd.pkg.mk</code>, <code class="varname">FETCH_CMD</code> is assigned 2544<code class="filename">bsd.pkg.mk</code>, <code class="varname">FETCH_CMD</code> is assigned
2545the first available command from the following list:</p> 2545the first available command from the following list:</p>
2546<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2546<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2547<li class="listitem"><p><code class="filename">${LOCALBASE}/bin/ftp</code></p></li> 2547<li class="listitem"><p><code class="filename">${LOCALBASE}/bin/ftp</code></p></li>
2548<li class="listitem"><p><code class="filename">/usr/bin/ftp</code></p></li> 2548<li class="listitem"><p><code class="filename">/usr/bin/ftp</code></p></li>
2549</ul></div> 2549</ul></div>
2550<p>On a default NetBSD installation, this will be 2550<p>On a default NetBSD installation, this will be
2551<code class="filename">/usr/bin/ftp</code>, which automatically tries passive 2551<code class="filename">/usr/bin/ftp</code>, which automatically tries passive
2552connections first, and falls back to active connections if the server 2552connections first, and falls back to active connections if the server
2553refuses to do passive. For the other tools, add the following to your 2553refuses to do passive. For the other tools, add the following to your
2554<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file: 2554<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file:
2555<code class="varname">PASSIVE_FETCH=1</code>.</p> 2555<code class="varname">PASSIVE_FETCH=1</code>.</p>
2556<p>Having that option present will prevent 2556<p>Having that option present will prevent
2557<code class="filename">/usr/bin/ftp</code> from falling back to active 2557<code class="filename">/usr/bin/ftp</code> from falling back to active
2558transfers.</p> 2558transfers.</p>
2559</div> 2559</div>
2560<div class="sect1"> 2560<div class="sect1">
2561<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2561<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2562<a name="fetching-all-distfiles"></a>9.9. How to fetch all distfiles at once</h2></div></div></div> 2562<a name="fetching-all-distfiles"></a>9.9. How to fetch all distfiles at once</h2></div></div></div>
2563<p>You would like to download all the distfiles in a single batch 2563<p>You would like to download all the distfiles in a single batch
2564from work or university, where you can't run a <span class="command"><strong>make 2564from work or university, where you can't run a <span class="command"><strong>make
2565fetch</strong></span>. There is an archive of distfiles on <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/" target="_top">ftp.NetBSD.org</a>, 2565fetch</strong></span>. There is an archive of distfiles on <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/" target="_top">ftp.NetBSD.org</a>,
2566but downloading the entire directory may not be appropriate.</p> 2566but downloading the entire directory may not be appropriate.</p>
2567<p>The answer here is to do a <span class="command"><strong>make fetch-list</strong></span> in 2567<p>The answer here is to do a <span class="command"><strong>make fetch-list</strong></span> in
2568<code class="filename">/usr/pkgsrc</code> or one of its subdirectories, carry the 2568<code class="filename">/usr/pkgsrc</code> or one of its subdirectories, carry the
2569resulting list to your machine at work/school and use it there. If you 2569resulting list to your machine at work/school and use it there. If you
2570don't have a NetBSD-compatible <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ftp+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">ftp</span>(1)</span></a> (like tnftp) at work, don't 2570don't have a NetBSD-compatible <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ftp+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">ftp</span>(1)</span></a> (like tnftp) at work, don't
2571forget to set <code class="varname">FETCH_CMD</code> to something that fetches a 2571forget to set <code class="varname">FETCH_CMD</code> to something that fetches a
2572URL:</p> 2572URL:</p>
2573<p>At home:</p> 2573<p>At home:</p>
2574<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cd /usr/pkgsrc</code></strong> 2574<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cd /usr/pkgsrc</code></strong>
2575<code class="prompt">%</code> <strong class="userinput"><code>make fetch-list FETCH_CMD=wget DISTDIR=/tmp/distfiles &gt;/tmp/fetch.sh</code></strong> 2575<code class="prompt">%</code> <strong class="userinput"><code>make fetch-list FETCH_CMD=wget DISTDIR=/tmp/distfiles &gt;/tmp/fetch.sh</code></strong>
2576<code class="prompt">%</code> <strong class="userinput"><code>scp /tmp/fetch.sh work:/tmp</code></strong></pre> 2576<code class="prompt">%</code> <strong class="userinput"><code>scp /tmp/fetch.sh work:/tmp</code></strong></pre>
2577<p>At work:</p> 2577<p>At work:</p>
2578<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>sh /tmp/fetch.sh</code></strong></pre> 2578<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>sh /tmp/fetch.sh</code></strong></pre>
2579<p>then tar up <code class="filename">/tmp/distfiles</code> and take it 2579<p>then tar up <code class="filename">/tmp/distfiles</code> and take it
2580home.</p> 2580home.</p>
2581<p>If you have a machine running NetBSD, and you want to get 2581<p>If you have a machine running NetBSD, and you want to get
2582<span class="emphasis"><em>all</em></span> distfiles (even ones that aren't for your 2582<span class="emphasis"><em>all</em></span> distfiles (even ones that aren't for your
2583machine architecture), you can do so by using the above-mentioned 2583machine architecture), you can do so by using the above-mentioned
2584<span class="command"><strong>make fetch-list</strong></span> approach, or fetch the distfiles 2584<span class="command"><strong>make fetch-list</strong></span> approach, or fetch the distfiles
2585directly by running:</p> 2585directly by running:</p>
2586<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make mirror-distfiles</code></strong></pre> 2586<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make mirror-distfiles</code></strong></pre>
2587<p>If you even decide to ignore 2587<p>If you even decide to ignore
2588<code class="varname">NO_{SRC,BIN}_ON_{FTP,CDROM}</code>, then you can get everything 2588<code class="varname">NO_{SRC,BIN}_ON_{FTP,CDROM}</code>, then you can get everything
2589by running:</p> 2589by running:</p>
2590<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make fetch NO_SKIP=yes</code></strong></pre> 2590<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make fetch NO_SKIP=yes</code></strong></pre>
2591</div> 2591</div>
2592<div class="sect1"> 2592<div class="sect1">
2593<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2593<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2594<a name="tmac.andoc-missing"></a>9.10. What does <span class="quote">&#8220;<span class="quote">Don't know how to make 2594<a name="tmac.andoc-missing"></a>9.10. What does <span class="quote">&#8220;<span class="quote">Don't know how to make
2595/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</h2></div></div></div> 2595/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</h2></div></div></div>
2596<p>When compiling the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a> 2596<p>When compiling the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a>
2597package, you get the error from make that it doesn't know how to make 2597package, you get the error from make that it doesn't know how to make
2598<code class="filename">/usr/share/tmac/tmac.andoc</code>? This indicates that 2598<code class="filename">/usr/share/tmac/tmac.andoc</code>? This indicates that
2599you don't have installed the <span class="quote">&#8220;<span class="quote">text</span>&#8221;</span> set (nroff, ...) from 2599you don't have installed the <span class="quote">&#8220;<span class="quote">text</span>&#8221;</span> set (nroff, ...) from
2600the NetBSD base distribution on your machine. It is recommended to do 2600the NetBSD base distribution on your machine. It is recommended to do
2601that to format man pages.</p> 2601that to format man pages.</p>
2602<p>In the case of the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a> package, you 2602<p>In the case of the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a> package, you
2603can get away with setting <code class="varname">NOMAN=YES</code> either in the 2603can get away with setting <code class="varname">NOMAN=YES</code> either in the
2604environment or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p> 2604environment or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p>
2605</div> 2605</div>
2606<div class="sect1"> 2606<div class="sect1">
2607<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2607<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2608<a name="bsd.own.mk-missing"></a>9.11. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</h2></div></div></div> 2608<a name="bsd.own.mk-missing"></a>9.11. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</h2></div></div></div>
2609<p>You didn't install the compiler set, <code class="filename">comp.tgz</code>, 2609<p>You didn't install the compiler set, <code class="filename">comp.tgz</code>,
2610when you installed your NetBSD machine. Please get and install it, by 2610when you installed your NetBSD machine. Please get and install it, by
2611extracting it in <code class="filename">/</code>:</p> 2611extracting it in <code class="filename">/</code>:</p>
2612<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cd /</code></strong> 2612<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cd /</code></strong>
2613<code class="prompt">#</code> <strong class="userinput"><code>tar --unlink -zxvpf .../comp.tgz</code></strong></pre> 2613<code class="prompt">#</code> <strong class="userinput"><code>tar --unlink -zxvpf .../comp.tgz</code></strong></pre>
2614<p><code class="filename">comp.tgz</code> is part of every NetBSD release. Get 2614<p><code class="filename">comp.tgz</code> is part of every NetBSD release. Get
2615the one that corresponds to your release (determine via <span class="command"><strong>uname 2615the one that corresponds to your release (determine via <span class="command"><strong>uname
2616-r</strong></span>).</p> 2616-r</strong></span>).</p>
2617</div> 2617</div>
2618<div class="sect1"> 2618<div class="sect1">
2619<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2619<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2620<a name="using-sudo-with-pkgsrc"></a>9.12. Using 'sudo' with pkgsrc</h2></div></div></div> 2620<a name="using-sudo-with-pkgsrc"></a>9.12. Using 'sudo' with pkgsrc</h2></div></div></div>
2621<p>When installing packages as non-root user and using the just-in-time 2621<p>When installing packages as non-root user and using the just-in-time
2622<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?su+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">su</span>(1)</span></a> feature of pkgsrc, it can become annoying to type in the root 2622<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?su+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">su</span>(1)</span></a> feature of pkgsrc, it can become annoying to type in the root
2623password for each required package installed. To avoid this, the sudo 2623password for each required package installed. To avoid this, the sudo
2624package can be used, which does password caching over a limited time. To 2624package can be used, which does password caching over a limited time. To
2625use it, install sudo (either as binary package or from 2625use it, install sudo (either as binary package or from
2626<a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/security/sudo/README.html" target="_top"><code class="filename">security/sudo</code></a>) and then put the 2626<a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/security/sudo/README.html" target="_top"><code class="filename">security/sudo</code></a>) and then put the
2627following into your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, somewhere 2627following into your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, somewhere
2628<span class="emphasis"><em>after</em></span> the definition of the 2628<span class="emphasis"><em>after</em></span> the definition of the
2629<code class="varname">LOCALBASE</code> variable:</p> 2629<code class="varname">LOCALBASE</code> variable:</p>
2630<pre class="programlisting"> 2630<pre class="programlisting">
2631.if exists(${LOCALBASE}/bin/sudo) 2631.if exists(${LOCALBASE}/bin/sudo)
2632SU_CMD= ${LOCALBASE}/bin/sudo /bin/sh -c 2632SU_CMD= ${LOCALBASE}/bin/sudo /bin/sh -c
2633.endif 2633.endif
2634</pre> 2634</pre>
2635</div> 2635</div>
2636<div class="sect1"> 2636<div class="sect1">
2637<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2637<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2638<a name="faq.conf"></a>9.13. How do I change the location of configuration files?</h2></div></div></div> 2638<a name="faq.conf"></a>9.13. How do I change the location of configuration files?</h2></div></div></div>
2639<p>As the system administrator, you can choose where configuration files 2639<p>As the system administrator, you can choose where configuration files
2640are installed. The default settings make all these files go into 2640are installed. The default settings make all these files go into
2641<code class="filename">${PREFIX}/etc</code> or some of its subdirectories; this may 2641<code class="filename">${PREFIX}/etc</code> or some of its subdirectories; this may
2642be suboptimal depending on your expectations (e.g., a read-only, 2642be suboptimal depending on your expectations (e.g., a read-only,
2643NFS-exported <code class="varname">PREFIX</code> with a need of per-machine 2643NFS-exported <code class="varname">PREFIX</code> with a need of per-machine
2644configuration of the provided packages).</p> 2644configuration of the provided packages).</p>
2645<p>In order to change the defaults, you can modify the 2645<p>In order to change the defaults, you can modify the
2646<code class="varname">PKG_SYSCONFBASE</code> variable (in 2646<code class="varname">PKG_SYSCONFBASE</code> variable (in
2647<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>) to point to your preferred configuration 2647<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>) to point to your preferred configuration
2648directory; some common examples include <code class="filename">/etc</code> or 2648directory; some common examples include <code class="filename">/etc</code> or
2649<code class="filename">/etc/pkg</code>.</p> 2649<code class="filename">/etc/pkg</code>.</p>
2650<p>Furthermore, you can change this value on a per-package basis by 2650<p>Furthermore, you can change this value on a per-package basis by
2651setting the <code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code> variable. 2651setting the <code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code> variable.
2652<code class="varname">PKG_SYSCONFVAR</code>'s value usually matches the name of the 2652<code class="varname">PKG_SYSCONFVAR</code>'s value usually matches the name of the
2653package you would like to modify, that is, the contents of 2653package you would like to modify, that is, the contents of
2654<code class="varname">PKGBASE</code>.</p> 2654<code class="varname">PKGBASE</code>.</p>
2655<p>Note that after changing these settings, you must rebuild and 2655<p>Note that after changing these settings, you must rebuild and
2656reinstall any affected packages.</p> 2656reinstall any affected packages.</p>
2657</div> 2657</div>
2658<div class="sect1"> 2658<div class="sect1">
2659<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2659<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2660<a name="audit-packages"></a>9.14. Automated security checks</h2></div></div></div> 2660<a name="audit-packages"></a>9.14. Automated security checks</h2></div></div></div>
2661<p>Please be aware that there can often be bugs in third-party software, 2661<p>Please be aware that there can often be bugs in third-party software,
2662and some of these bugs can leave a machine vulnerable to exploitation by 2662and some of these bugs can leave a machine vulnerable to exploitation by
2663attackers. In an effort to lessen the exposure, the NetBSD packages team 2663attackers. In an effort to lessen the exposure, the NetBSD packages team
2664maintains a database of known-exploits to packages which have at one time 2664maintains a database of known-exploits to packages which have at one time
2665been included in pkgsrc. The database can be downloaded automatically, and 2665been included in pkgsrc. The database can be downloaded automatically, and
2666a security audit of all packages installed on a system can take place. To 2666a security audit of all packages installed on a system can take place. To
2667do this, refer to the following two tools (installed as part of the 2667do this, refer to the following two tools (installed as part of the
2668<a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a> package):</p> 2668<a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a> package):</p>
2669<div class="orderedlist"><ol class="orderedlist" type="1"> 2669<div class="orderedlist"><ol class="orderedlist" type="1">
2670<li class="listitem"> 2670<li class="listitem">
2671<p><span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>, an easy way to 2671<p><span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>, an easy way to
2672 download a list of the security vulnerabilities information. This list 2672 download a list of the security vulnerabilities information. This list
2673 is kept up to date by the pkgsrc security team, and is distributed 2673 is kept up to date by the pkgsrc security team, and is distributed
2674 from the NetBSD ftp server:</p> 2674 from the NetBSD ftp server:</p>
2675<p><a class="ulink" href="ftp://ftp.NetBSD.org/pkgsrc/distfiles/pkg-vulnerabilities" target="_top">ftp://ftp.NetBSD.org/pkgsrc/distfiles/pkg-vulnerabilities</a></p> 2675<p><a class="ulink" href="ftp://ftp.NetBSD.org/pkgsrc/distfiles/pkg-vulnerabilities" target="_top">ftp://ftp.NetBSD.org/pkgsrc/distfiles/pkg-vulnerabilities</a></p>
2676</li> 2676</li>
2677<li class="listitem"><p><span class="command"><strong>pkg_admin audit</strong></span>, an easy way to audit the 2677<li class="listitem"><p><span class="command"><strong>pkg_admin audit</strong></span>, an easy way to audit the
2678 current machine, checking each known vulnerability. If a 2678 current machine, checking each known vulnerability. If a
2679 vulnerable package is installed, it will be shown by output to stdout, 2679 vulnerable package is installed, it will be shown by output to stdout,
2680 including a description of the type of vulnerability, and a URL 2680 including a description of the type of vulnerability, and a URL
2681 containing more information.</p></li> 2681 containing more information.</p></li>
2682</ol></div> 2682</ol></div>
2683<p>Use of these tools is strongly recommended! 2683<p>Use of these tools is strongly recommended!
2684See <a class="xref" href="#vulnerabilities" title="4.1.5. Checking for security vulnerabilities in installed packages">Section 4.1.5, &#8220;Checking for security vulnerabilities in installed packages&#8221;</a> for instructions on how to automate checking and 2684See <a class="xref" href="#vulnerabilities" title="4.1.5. Checking for security vulnerabilities in installed packages">Section 4.1.5, &#8220;Checking for security vulnerabilities in installed packages&#8221;</a> for instructions on how to automate checking and
2685reporting.</p> 2685reporting.</p>
2686<p>If this database is installed, pkgsrc builds will use it to 2686<p>If this database is installed, pkgsrc builds will use it to
2687perform a security check before building any package.</p> 2687perform a security check before building any package.</p>
2688</div> 2688</div>
2689<div class="sect1"> 2689<div class="sect1">
2690<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2690<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2691<a name="ufaq-cflags"></a>9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</h2></div></div></div> 2691<a name="ufaq-cflags"></a>9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</h2></div></div></div>
2692<p>When you add your own preferences to the 2692<p>When you add your own preferences to the
2693 <code class="varname">CFLAGS</code> variable in your 2693 <code class="varname">CFLAGS</code> variable in your
2694 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, these flags are passed in 2694 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, these flags are passed in
2695 environment variables to the <code class="filename">./configure</code> 2695 environment variables to the <code class="filename">./configure</code>
2696 scripts and to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>. Some package authors ignore the 2696 scripts and to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>. Some package authors ignore the
2697 <code class="varname">CFLAGS</code> from the environment variable by 2697 <code class="varname">CFLAGS</code> from the environment variable by
2698 overriding them in the <code class="filename">Makefile</code>s of their 2698 overriding them in the <code class="filename">Makefile</code>s of their
2699 package.</p> 2699 package.</p>
2700<p>Currently there is no solution to this problem. If you 2700<p>Currently there is no solution to this problem. If you
2701 really need the package to use your <code class="varname">CFLAGS</code> 2701 really need the package to use your <code class="varname">CFLAGS</code>
2702 you should run <span class="command"><strong>make patch</strong></span> in the package 2702 you should run <span class="command"><strong>make patch</strong></span> in the package
2703 directory and then inspect any <code class="filename">Makefile</code> and 2703 directory and then inspect any <code class="filename">Makefile</code> and
2704 <code class="filename">Makefile.in</code> for whether they define 2704 <code class="filename">Makefile.in</code> for whether they define
2705 <code class="varname">CFLAGS</code> explicitly. Usually you can remove 2705 <code class="varname">CFLAGS</code> explicitly. Usually you can remove
2706 these lines. But be aware that some <span class="quote">&#8220;<span class="quote">smart</span>&#8221;</span> 2706 these lines. But be aware that some <span class="quote">&#8220;<span class="quote">smart</span>&#8221;</span>
2707 programmers write so bad code that it only works for the 2707 programmers write so bad code that it only works for the
2708 specific combination of <code class="varname">CFLAGS</code> they have 2708 specific combination of <code class="varname">CFLAGS</code> they have
2709 chosen.</p> 2709 chosen.</p>
2710</div> 2710</div>
2711<div class="sect1"> 2711<div class="sect1">
2712<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2712<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2713<a name="ufaq-fail"></a>9.16. A package does not build. What shall I do?</h2></div></div></div> 2713<a name="ufaq-fail"></a>9.16. A package does not build. What shall I do?</h2></div></div></div>
2714<div class="procedure"><ol class="procedure" type="1"> 2714<div class="procedure"><ol class="procedure" type="1">
2715<li class="step"><p>Make sure that your copy of pkgsrc is consistent. A 2715<li class="step"><p>Make sure that your copy of pkgsrc is consistent. A
2716 case that occurs often is that people only update pkgsrc in 2716 case that occurs often is that people only update pkgsrc in
2717 parts, because of performance reasons. Since pkgsrc is one large 2717 parts, because of performance reasons. Since pkgsrc is one large
2718 system, not a collection of many small systems, there are 2718 system, not a collection of many small systems, there are
2719 sometimes changes that only work when the whole pkgsrc tree is 2719 sometimes changes that only work when the whole pkgsrc tree is
2720 updated.</p></li> 2720 updated.</p></li>
2721<li class="step"><p>Make sure that you don't have any CVS conflicts. 2721<li class="step"><p>Make sure that you don't have any CVS conflicts.
2722 Search for <span class="quote">&#8220;<span class="quote">&lt;&lt;&lt;&lt;&lt;&lt;</span>&#8221;</span> or 2722 Search for <span class="quote">&#8220;<span class="quote">&lt;&lt;&lt;&lt;&lt;&lt;</span>&#8221;</span> or
2723 <span class="quote">&#8220;<span class="quote">&gt;&gt;&gt;&gt;&gt;&gt;</span>&#8221;</span> in all your pkgsrc 2723 <span class="quote">&#8220;<span class="quote">&gt;&gt;&gt;&gt;&gt;&gt;</span>&#8221;</span> in all your pkgsrc
2724 files.</p></li> 2724 files.</p></li>
2725<li class="step"><p>Make sure that you don't have old copies of the packages 2725<li class="step"><p>Make sure that you don't have old copies of the packages
2726 extracted. Run <span class="command"><strong>make clean clean-depends</strong></span> to 2726 extracted. Run <span class="command"><strong>make clean clean-depends</strong></span> to
2727 verify this.</p></li> 2727 verify this.</p></li>
2728<li class="step"><p>If you are a package developer who wants to invest 2728<li class="step"><p>If you are a package developer who wants to invest
2729 some work, have a look at <a class="xref" href="#fixes" title="Chapter 19. Making your package work">Chapter 19, <i>Making your package work</i></a>.</p></li> 2729 some work, have a look at <a class="xref" href="#fixes" title="Chapter 19. Making your package work">Chapter 19, <i>Making your package work</i></a>.</p></li>
2730<li class="step"><p>If the problem still exists, write a mail to the 2730<li class="step"><p>If the problem still exists, write a mail to the
2731 <code class="literal">pkgsrc-users</code> mailing list.</p></li> 2731 <code class="literal">pkgsrc-users</code> mailing list.</p></li>
2732</ol></div> 2732</ol></div>
2733</div> 2733</div>
2734<div class="sect1"> 2734<div class="sect1">
2735<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2735<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2736<a name="faq.rcs-conflicts"></a>9.17. What does <span class="quote">&#8220;<span class="quote">Makefile appears to contain unresolved cvs/rcs/??? merge conflicts</span>&#8221;</span> mean?</h2></div></div></div> 2736<a name="faq.rcs-conflicts"></a>9.17. What does <span class="quote">&#8220;<span class="quote">Makefile appears to contain unresolved cvs/rcs/??? merge conflicts</span>&#8221;</span> mean?</h2></div></div></div>
2737<p>You have modified a file from pkgsrc, and someone else has 2737<p>You have modified a file from pkgsrc, and someone else has
2738modified that same file afterwards in the CVS repository. Both changes 2738modified that same file afterwards in the CVS repository. Both changes
2739are in the same region of the file, so when you updated pkgsrc, the 2739are in the same region of the file, so when you updated pkgsrc, the
2740<code class="literal">cvs</code> command marked the conflicting changes in the 2740<code class="literal">cvs</code> command marked the conflicting changes in the
2741file. Because of these markers, the file is no longer a valid 2741file. Because of these markers, the file is no longer a valid
2742<code class="filename">Makefile</code>.</p> 2742<code class="filename">Makefile</code>.</p>
2743<p>Have a look at that file, and if you don't need your local changes 2743<p>Have a look at that file, and if you don't need your local changes
2744anymore, you can remove that file and run <span class="command"><strong>cvs -q update 2744anymore, you can remove that file and run <span class="command"><strong>cvs -q update
2745-dP</strong></span> in that directory to download the current version.</p> 2745-dP</strong></span> in that directory to download the current version.</p>
2746</div> 2746</div>
2747</div> 2747</div>
2748</div> 2748</div>
2749<div class="part"> 2749<div class="part">
2750<div class="titlepage"><div><div><h1 class="title"> 2750<div class="titlepage"><div><div><h1 class="title">
2751<a name="developers-guide"></a>Part II. The pkgsrc developer's guide</h1></div></div></div> 2751<a name="developers-guide"></a>Part II. The pkgsrc developer's guide</h1></div></div></div>
2752<div class="partintro"> 2752<div class="partintro">
2753<div></div> 2753<div></div>
2754<p>This part of the book deals with creating and 2754<p>This part of the book deals with creating and
2755 modifying packages. It starts with a <span class="quote">&#8220;<span class="quote">HOWTO</span>&#8221;</span>-like 2755 modifying packages. It starts with a <span class="quote">&#8220;<span class="quote">HOWTO</span>&#8221;</span>-like
2756 guide on creating a new package. The remaining chapters are more 2756 guide on creating a new package. The remaining chapters are more
2757 like a reference manual for pkgsrc.</p> 2757 like a reference manual for pkgsrc.</p>
2758<div class="toc"> 2758<div class="toc">
2759<p><b>Table of Contents</b></p> 2759<p><b>Table of Contents</b></p>
2760<dl class="toc"> 2760<dl class="toc">
2761<dt><span class="chapter"><a href="#creating">10. Creating a new pkgsrc package from scratch</a></span></dt> 2761<dt><span class="chapter"><a href="#creating">10. Creating a new pkgsrc package from scratch</a></span></dt>
2762<dd><dl> 2762<dd><dl>
2763<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt> 2763<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt>
2764<dd><dl> 2764<dd><dl>
2765<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt> 2765<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt>
2766<dt><span class="sect2"><a href="#creating.python-module">10.1.2. Python modules and programs</a></span></dt> 2766<dt><span class="sect2"><a href="#creating.python-module">10.1.2. Python modules and programs</a></span></dt>
2767</dl></dd> 2767</dl></dd>
2768<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt> 2768<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt>
2769<dd><dl><dt><span class="sect2"><a href="#creating.nvu">10.2.1. How the www/nvu package came into pkgsrc</a></span></dt></dl></dd> 2769<dd><dl><dt><span class="sect2"><a href="#creating.nvu">10.2.1. How the www/nvu package came into pkgsrc</a></span></dt></dl></dd>
2770</dl></dd> 2770</dl></dd>
2771<dt><span class="chapter"><a href="#components">11. Package components - files, directories and contents</a></span></dt> 2771<dt><span class="chapter"><a href="#components">11. Package components - files, directories and contents</a></span></dt>
2772<dd><dl> 2772<dd><dl>
2773<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt> 2773<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt>
2774<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt> 2774<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt>
2775<dt><span class="sect1"><a href="#components.patches">11.3. <code class="filename">patches/*</code></a></span></dt> 2775<dt><span class="sect1"><a href="#components.patches">11.3. <code class="filename">patches/*</code></a></span></dt>
2776<dd><dl> 2776<dd><dl>
2777<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt> 2777<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt>
2778<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt> 2778<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt>
2779<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt> 2779<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt>
2780<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt> 2780<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt>
2781<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt> 2781<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt>
2782</dl></dd> 2782</dl></dd>
2783<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt> 2783<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt>
2784<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt> 2784<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt>
2785<dd><dl> 2785<dd><dl>
2786<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt> 2786<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt>
2787<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt> 2787<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt>
2788<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt> 2788<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt>
2789</dl></dd> 2789</dl></dd>
2790<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt> 2790<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt>
2791<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt> 2791<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt>
2792</dl></dd> 2792</dl></dd>
2793<dt><span class="chapter"><a href="#makefile">12. Programming in <code class="filename">Makefile</code>s</a></span></dt> 2793<dt><span class="chapter"><a href="#makefile">12. Programming in <code class="filename">Makefile</code>s</a></span></dt>
2794<dd><dl> 2794<dd><dl>
2795<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt> 2795<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt>
2796<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt> 2796<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt>
2797<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd> 2797<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd>
2798<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt> 2798<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt>
2799<dd><dl> 2799<dd><dl>
2800<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt> 2800<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt>
2801<dt><span class="sect2"><a href="#echo-literal">12.3.2. Echoing a string exactly as-is</a></span></dt> 2801<dt><span class="sect2"><a href="#echo-literal">12.3.2. Echoing a string exactly as-is</a></span></dt>
2802<dt><span class="sect2"><a href="#cflags-gnu-configure">12.3.3. Passing <code class="varname">CFLAGS</code> to GNU configure scripts</a></span></dt> 2802<dt><span class="sect2"><a href="#cflags-gnu-configure">12.3.3. Passing <code class="varname">CFLAGS</code> to GNU configure scripts</a></span></dt>
2803<dt><span class="sect2"><a href="#empty-variables">12.3.4. Handling possibly empty variables</a></span></dt> 2803<dt><span class="sect2"><a href="#empty-variables">12.3.4. Handling possibly empty variables</a></span></dt>
2804</dl></dd> 2804</dl></dd>
2805</dl></dd> 2805</dl></dd>
2806<dt><span class="chapter"><a href="#plist">13. PLIST issues</a></span></dt> 2806<dt><span class="chapter"><a href="#plist">13. PLIST issues</a></span></dt>
2807<dd><dl> 2807<dd><dl>
2808<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt> 2808<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt>
2809<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt> 2809<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt>
2810<dt><span class="sect1"><a href="#print-PLIST">13.3. Tweaking output of <span class="command"><strong>make print-PLIST</strong></span></a></span></dt> 2810<dt><span class="sect1"><a href="#print-PLIST">13.3. Tweaking output of <span class="command"><strong>make print-PLIST</strong></span></a></span></dt>
2811<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt> 2811<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt>
2812<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt> 2812<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt>
2813<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt> 2813<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt>
2814<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt> 2814<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt>
2815<dt><span class="sect1"><a href="#build-plist">13.8. Build-specific PLISTs</a></span></dt> 2815<dt><span class="sect1"><a href="#build-plist">13.8. Build-specific PLISTs</a></span></dt>
2816<dt><span class="sect1"><a href="#faq.common-dirs">13.9. Sharing directories between packages</a></span></dt> 2816<dt><span class="sect1"><a href="#faq.common-dirs">13.9. Sharing directories between packages</a></span></dt>
2817</dl></dd> 2817</dl></dd>
2818<dt><span class="chapter"><a href="#buildlink">14. Buildlink methodology</a></span></dt> 2818<dt><span class="chapter"><a href="#buildlink">14. Buildlink methodology</a></span></dt>
2819<dd><dl> 2819<dd><dl>
2820<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt> 2820<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt>
2821<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt> 2821<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt>
2822<dd><dl> 2822<dd><dl>
2823<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt> 2823<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt>
2824<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating 2824<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating
2825 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 2825 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
2826 and 2826 and
2827 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 2827 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
2828 in <code class="filename">buildlink3.mk</code> files</a></span></dt> 2828 in <code class="filename">buildlink3.mk</code> files</a></span></dt>
2829</dl></dd> 2829</dl></dd>
2830<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt> 2830<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt>
2831<dd><dl> 2831<dd><dl>
2832<dt><span class="sect2"><a href="#anatomy-of-builtin.mk">14.3.1. Anatomy of a <code class="filename">builtin.mk</code> file</a></span></dt> 2832<dt><span class="sect2"><a href="#anatomy-of-builtin.mk">14.3.1. Anatomy of a <code class="filename">builtin.mk</code> file</a></span></dt>
2833<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt> 2833<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt>
2834</dl></dd> 2834</dl></dd>
2835</dl></dd> 2835</dl></dd>
2836<dt><span class="chapter"><a href="#pkginstall">15. The pkginstall framework</a></span></dt> 2836<dt><span class="chapter"><a href="#pkginstall">15. The pkginstall framework</a></span></dt>
2837<dd><dl> 2837<dd><dl>
2838<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt> 2838<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt>
2839<dd><dl> 2839<dd><dl>
2840<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt> 2840<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt>
2841<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt> 2841<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt>
2842</dl></dd> 2842</dl></dd>
2843<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt> 2843<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt>
2844<dd><dl> 2844<dd><dl>
2845<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt> 2845<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt>
2846<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt> 2846<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt>
2847<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt> 2847<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt>
2848<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt> 2848<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt>
2849</dl></dd> 2849</dl></dd>
2850<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt> 2850<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt>
2851<dd><dl><dt><span class="sect2"><a href="#rcd-scripts-disable">15.3.1. Disabling handling of system startup scripts</a></span></dt></dl></dd> 2851<dd><dl><dt><span class="sect2"><a href="#rcd-scripts-disable">15.3.1. Disabling handling of system startup scripts</a></span></dt></dl></dd>
2852<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt> 2852<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt>
2853<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt> 2853<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt>
2854<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd> 2854<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd>
2855<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt> 2855<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt>
2856<dd><dl><dt><span class="sect2"><a href="#fonts-disable">15.6.1. Disabling automatic update of the fonts databases</a></span></dt></dl></dd> 2856<dd><dl><dt><span class="sect2"><a href="#fonts-disable">15.6.1. Disabling automatic update of the fonts databases</a></span></dt></dl></dd>
2857</dl></dd> 2857</dl></dd>
2858<dt><span class="chapter"><a href="#options">16. Options handling</a></span></dt> 2858<dt><span class="chapter"><a href="#options">16. Options handling</a></span></dt>
2859<dd><dl> 2859<dd><dl>
2860<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt> 2860<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt>
2861<dt><span class="sect1"><a href="#converting-to-options">16.2. Converting packages to use <code class="filename">bsd.options.mk</code></a></span></dt> 2861<dt><span class="sect1"><a href="#converting-to-options">16.2. Converting packages to use <code class="filename">bsd.options.mk</code></a></span></dt>
2862<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt> 2862<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt>
2863<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt> 2863<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt>
2864</dl></dd> 2864</dl></dd>
2865<dt><span class="chapter"><a href="#build">17. The build process</a></span></dt> 2865<dt><span class="chapter"><a href="#build">17. The build process</a></span></dt>
2866<dd><dl> 2866<dd><dl>
2867<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt> 2867<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt>
2868<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt> 2868<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt>
2869<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt> 2869<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt>
2870<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt> 2870<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt>
2871<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 2871<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
2872<dd><dl> 2872<dd><dl>
2873<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt> 2873<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt>
2874<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt> 2874<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt>
2875</dl></dd> 2875</dl></dd>
2876<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt> 2876<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt>
2877<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt> 2877<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt>
2878<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt> 2878<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt>
2879<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt> 2879<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt>
2880<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt> 2880<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt>
2881<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 2881<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
2882<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 2882<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
2883<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt> 2883<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt>
2884<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 2884<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
2885<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt> 2885<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt>
2886<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt> 2886<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt>
2887<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt> 2887<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt>
2888</dl></dd> 2888</dl></dd>
2889<dt><span class="chapter"><a href="#tools">18. Tools needed for building or running</a></span></dt> 2889<dt><span class="chapter"><a href="#tools">18. Tools needed for building or running</a></span></dt>
2890<dd><dl> 2890<dd><dl>
2891<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt> 2891<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt>
2892<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt> 2892<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt>
2893<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt> 2893<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt>
2894</dl></dd> 2894</dl></dd>
2895<dt><span class="chapter"><a href="#fixes">19. Making your package work</a></span></dt> 2895<dt><span class="chapter"><a href="#fixes">19. Making your package work</a></span></dt>
2896<dd><dl> 2896<dd><dl>
2897<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt> 2897<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt>
2898<dd><dl> 2898<dd><dl>
2899<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.1. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt> 2899<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.1. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt>
2900<dt><span class="sect2"><a href="#user-interaction">19.1.2. User interaction</a></span></dt> 2900<dt><span class="sect2"><a href="#user-interaction">19.1.2. User interaction</a></span></dt>
2901<dt><span class="sect2"><a href="#handling-licenses">19.1.3. Handling licenses</a></span></dt> 2901<dt><span class="sect2"><a href="#handling-licenses">19.1.3. Handling licenses</a></span></dt>
2902<dt><span class="sect2"><a href="#restricted-packages">19.1.4. Restricted packages</a></span></dt> 2902<dt><span class="sect2"><a href="#restricted-packages">19.1.4. Restricted packages</a></span></dt>
2903<dt><span class="sect2"><a href="#dependencies">19.1.5. Handling dependencies</a></span></dt> 2903<dt><span class="sect2"><a href="#dependencies">19.1.5. Handling dependencies</a></span></dt>
2904<dt><span class="sect2"><a href="#conflicts">19.1.6. Handling conflicts with other packages</a></span></dt> 2904<dt><span class="sect2"><a href="#conflicts">19.1.6. Handling conflicts with other packages</a></span></dt>
2905<dt><span class="sect2"><a href="#not-building-packages">19.1.7. Packages that cannot or should not be built</a></span></dt> 2905<dt><span class="sect2"><a href="#not-building-packages">19.1.7. Packages that cannot or should not be built</a></span></dt>
2906<dt><span class="sect2"><a href="#undeletable-packages">19.1.8. Packages which should not be deleted, once installed</a></span></dt> 2906<dt><span class="sect2"><a href="#undeletable-packages">19.1.8. Packages which should not be deleted, once installed</a></span></dt>
2907<dt><span class="sect2"><a href="#security-handling">19.1.9. Handling packages with security problems</a></span></dt> 2907<dt><span class="sect2"><a href="#security-handling">19.1.9. Handling packages with security problems</a></span></dt>
2908<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.10. How to handle incrementing versions when fixing an existing package</a></span></dt> 2908<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.10. How to handle incrementing versions when fixing an existing package</a></span></dt>
2909<dt><span class="sect2"><a href="#fixes.subst">19.1.11. Substituting variable text in the package files (the SUBST framework)</a></span></dt> 2909<dt><span class="sect2"><a href="#fixes.subst">19.1.11. Substituting variable text in the package files (the SUBST framework)</a></span></dt>
2910</dl></dd> 2910</dl></dd>
2911<dt><span class="sect1"><a href="#fixes.fetch">19.2. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 2911<dt><span class="sect1"><a href="#fixes.fetch">19.2. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
2912<dd><dl> 2912<dd><dl>
2913<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt> 2913<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt>
2914<dt><span class="sect2"><a href="#modified-distfiles-same-name">19.2.2. How to handle modified distfiles with the 'old' name</a></span></dt> 2914<dt><span class="sect2"><a href="#modified-distfiles-same-name">19.2.2. How to handle modified distfiles with the 'old' name</a></span></dt>
2915<dt><span class="sect2"><a href="#build.fetch.github">19.2.3. Packages hosted on github.com</a></span></dt> 2915<dt><span class="sect2"><a href="#build.fetch.github">19.2.3. Packages hosted on github.com</a></span></dt>
2916</dl></dd> 2916</dl></dd>
2917<dt><span class="sect1"><a href="#fixes.configure">19.3. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 2917<dt><span class="sect1"><a href="#fixes.configure">19.3. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
2918<dd><dl> 2918<dd><dl>
2919<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt> 2919<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt>
2920<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt> 2920<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt>
2921<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt> 2921<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt>
2922</dl></dd> 2922</dl></dd>
2923<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt> 2923<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt>
2924<dd><dl> 2924<dd><dl>
2925<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt> 2925<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt>
2926<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt> 2926<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt>
2927<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt> 2927<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt>
2928<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt> 2928<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt>
2929<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt> 2929<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt>
2930</dl></dd> 2930</dl></dd>
2931<dt><span class="sect1"><a href="#fixes.build">19.5. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 2931<dt><span class="sect1"><a href="#fixes.build">19.5. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
2932<dd><dl> 2932<dd><dl>
2933<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt> 2933<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt>
2934<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt> 2934<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt>
2935<dt><span class="sect2"><a href="#undefined-reference">19.5.3. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span></a></span></dt> 2935<dt><span class="sect2"><a href="#undefined-reference">19.5.3. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span></a></span></dt>
2936<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt> 2936<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt>
2937</dl></dd> 2937</dl></dd>
2938<dt><span class="sect1"><a href="#fixes.install">19.6. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 2938<dt><span class="sect1"><a href="#fixes.install">19.6. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
2939<dd><dl> 2939<dd><dl>
2940<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt> 2940<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt>
2941<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt> 2941<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt>
2942<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt> 2942<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt>
2943<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt> 2943<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt>
2944<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt> 2944<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt>
2945<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt> 2945<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt>
2946<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt> 2946<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt>
2947<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt> 2947<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt>
2948<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt> 2948<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt>
2949<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt> 2949<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt>
2950<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt> 2950<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt>
2951<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt> 2951<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt>
2952<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt> 2952<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt>
2953<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt> 2953<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt>
2954<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt> 2954<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt>
2955<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt> 2955<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt>
2956<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt> 2956<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt>
2957<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in 2957<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in
2958 emulation</a></span></dt> 2958 emulation</a></span></dt>
2959<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt> 2959<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt>
2960<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt> 2960<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt>
2961</dl></dd> 2961</dl></dd>
2962<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt> 2962<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt>
2963</dl></dd> 2963</dl></dd>
2964<dt><span class="chapter"><a href="#debug">20. Debugging</a></span></dt> 2964<dt><span class="chapter"><a href="#debug">20. Debugging</a></span></dt>
2965<dt><span class="chapter"><a href="#submit">21. Submitting and Committing</a></span></dt> 2965<dt><span class="chapter"><a href="#submit">21. Submitting and Committing</a></span></dt>
2966<dd><dl> 2966<dd><dl>
2967<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt> 2967<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt>
2968<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt> 2968<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt>
2969<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt> 2969<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt>
2970<dt><span class="sect1"><a href="#commit-messages">21.4. Commit Messages</a></span></dt> 2970<dt><span class="sect1"><a href="#commit-messages">21.4. Commit Messages</a></span></dt>
2971<dt><span class="sect1"><a href="#committing-importing">21.5. Committing: Adding a package to CVS</a></span></dt> 2971<dt><span class="sect1"><a href="#committing-importing">21.5. Committing: Adding a package to CVS</a></span></dt>
2972<dt><span class="sect1"><a href="#updating-package">21.6. Updating a package to a newer version</a></span></dt> 2972<dt><span class="sect1"><a href="#updating-package">21.6. Updating a package to a newer version</a></span></dt>
2973<dt><span class="sect1"><a href="#renaming-package">21.7. Renaming a package in pkgsrc</a></span></dt> 2973<dt><span class="sect1"><a href="#renaming-package">21.7. Renaming a package in pkgsrc</a></span></dt>
2974<dt><span class="sect1"><a href="#moving-package">21.8. Moving a package in pkgsrc</a></span></dt> 2974<dt><span class="sect1"><a href="#moving-package">21.8. Moving a package in pkgsrc</a></span></dt>
2975</dl></dd> 2975</dl></dd>
2976<dt><span class="chapter"><a href="#devfaq">22. Frequently Asked Questions</a></span></dt> 2976<dt><span class="chapter"><a href="#devfaq">22. Frequently Asked Questions</a></span></dt>
2977<dt><span class="chapter"><a href="#gnome">23. GNOME packaging and porting</a></span></dt> 2977<dt><span class="chapter"><a href="#gnome">23. GNOME packaging and porting</a></span></dt>
2978<dd><dl> 2978<dd><dl>
2979<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt> 2979<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt>
2980<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt> 2980<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt>
2981<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt> 2981<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt>
2982<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt> 2982<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt>
2983</dl></dd> 2983</dl></dd>
2984</dl> 2984</dl>
2985</div> 2985</div>
2986</div> 2986</div>
2987<div class="chapter"> 2987<div class="chapter">
2988<div class="titlepage"><div><div><h2 class="title"> 2988<div class="titlepage"><div><div><h2 class="title">
2989<a name="creating"></a>Chapter 10. Creating a new pkgsrc package from scratch</h2></div></div></div> 2989<a name="creating"></a>Chapter 10. Creating a new pkgsrc package from scratch</h2></div></div></div>
2990<div class="toc"> 2990<div class="toc">
2991<p><b>Table of Contents</b></p> 2991<p><b>Table of Contents</b></p>
2992<dl class="toc"> 2992<dl class="toc">
2993<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt> 2993<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt>
2994<dd><dl> 2994<dd><dl>
2995<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt> 2995<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt>
2996<dt><span class="sect2"><a href="#creating.python-module">10.1.2. Python modules and programs</a></span></dt> 2996<dt><span class="sect2"><a href="#creating.python-module">10.1.2. Python modules and programs</a></span></dt>
2997</dl></dd> 2997</dl></dd>
2998<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt> 2998<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt>
2999<dd><dl><dt><span class="sect2"><a href="#creating.nvu">10.2.1. How the www/nvu package came into pkgsrc</a></span></dt></dl></dd> 2999<dd><dl><dt><span class="sect2"><a href="#creating.nvu">10.2.1. How the www/nvu package came into pkgsrc</a></span></dt></dl></dd>
3000</dl> 3000</dl>
3001</div> 3001</div>
3002<p>When you find a package that is not yet in pkgsrc, you 3002<p>When you find a package that is not yet in pkgsrc, you
3003most likely have a URL from where you can download the source 3003most likely have a URL from where you can download the source
3004code. Starting with this URL, creating a package involves only a 3004code. Starting with this URL, creating a package involves only a
3005few steps.</p> 3005few steps.</p>
3006<div class="procedure"><ol class="procedure" type="1"> 3006<div class="procedure"><ol class="procedure" type="1">
3007<li class="step"><p>First, install the packages <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a> and <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>.</p></li> 3007<li class="step"><p>First, install the packages <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a> and <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>.</p></li>
3008<li class="step"><p>Then, choose one of the top-level directories as the 3008<li class="step"><p>Then, choose one of the top-level directories as the
3009category in which you want to place your package. You can also create a 3009category in which you want to place your package. You can also create a
3010directory of your own (maybe called <code class="filename">local</code>). In that 3010directory of your own (maybe called <code class="filename">local</code>). In that
3011category directory, create another directory for your package and change 3011category directory, create another directory for your package and change
3012into it.</p></li> 3012into it.</p></li>
3013<li class="step"><p>Run the program <span class="command"><strong>url2pkg</strong></span>, which will ask 3013<li class="step"><p>Run the program <span class="command"><strong>url2pkg</strong></span>, which will ask
3014you for a URL. Enter the URL of the distribution file (in most cases a 3014you for a URL. Enter the URL of the distribution file (in most cases a
3015<code class="filename">.tar.gz</code> file) and watch how the basic ingredients 3015<code class="filename">.tar.gz</code> file) and watch how the basic ingredients
3016of your package are created automatically. The distribution file is 3016of your package are created automatically. The distribution file is
3017extracted automatically to fill in some details in the 3017extracted automatically to fill in some details in the
3018<code class="filename">Makefile</code> that would otherwise have to be done 3018<code class="filename">Makefile</code> that would otherwise have to be done
3019manually.</p></li> 3019manually.</p></li>
3020<li class="step"> 3020<li class="step">
3021<p>Examine the extracted files to determine the dependencies of 3021<p>Examine the extracted files to determine the dependencies of
3022your package. Ideally, this is mentioned in some 3022your package. Ideally, this is mentioned in some
3023<code class="filename">README</code> file, but things may differ. For each of 3023<code class="filename">README</code> file, but things may differ. For each of
3024these dependencies, look where it exists in pkgsrc, and if there is a 3024these dependencies, look where it exists in pkgsrc, and if there is a
3025file called <code class="filename">buildlink3.mk</code> in that directory, add a 3025file called <code class="filename">buildlink3.mk</code> in that directory, add a
3026line to your package <code class="filename">Makefile</code> which includes that 3026line to your package <code class="filename">Makefile</code> which includes that
3027file just before the last line. If the 3027file just before the last line. If the
3028<code class="filename">buildlink3.mk</code> file does not exist, it must be 3028<code class="filename">buildlink3.mk</code> file does not exist, it must be
3029created first. The <code class="filename">buildlink3.mk</code> file makes sure that the package's include files and libraries are provided.</p> 3029created first. The <code class="filename">buildlink3.mk</code> file makes sure that the package's include files and libraries are provided.</p>
3030<p>If you just need binaries from a package, add a 3030<p>If you just need binaries from a package, add a
3031<code class="varname">DEPENDS</code> line to the Makefile, which specifies the 3031<code class="varname">DEPENDS</code> line to the Makefile, which specifies the
3032version of the dependency and where it can be found in pkgsrc. This line 3032version of the dependency and where it can be found in pkgsrc. This line
3033should be placed in the third paragraph. If the dependency is only 3033should be placed in the third paragraph. If the dependency is only
3034needed for building the package, but not when using it, use 3034needed for building the package, but not when using it, use
3035<code class="varname">BUILD_DEPENDS</code> instead of <code class="varname">DEPENDS</code>. 3035<code class="varname">BUILD_DEPENDS</code> instead of <code class="varname">DEPENDS</code>.
3036Your package may then look like this:</p> 3036Your package may then look like this:</p>
3037<pre class="programlisting"> 3037<pre class="programlisting">
3038[...] 3038[...]
3039 3039
3040BUILD_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt 3040BUILD_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt
3041DEPENDS+= screen-[0-9]*:../../misc/screen 3041DEPENDS+= screen-[0-9]*:../../misc/screen
3042DEPENDS+= screen&gt;=4.0:../../misc/screen 3042DEPENDS+= screen&gt;=4.0:../../misc/screen
3043 3043
3044[...] 3044[...]
3045 3045
3046.include "../../<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>package</code></em>/buildlink3.mk" 3046.include "../../<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>package</code></em>/buildlink3.mk"
3047.include "../../devel/glib2/buildlink3.mk" 3047.include "../../devel/glib2/buildlink3.mk"
3048.include "../../mk/bsd.pkg.mk" 3048.include "../../mk/bsd.pkg.mk"
3049</pre> 3049</pre>
3050</li> 3050</li>
3051<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> to see what things still need 3051<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> to see what things still need
3052to be done to make your package a <span class="quote">&#8220;<span class="quote">good</span>&#8221;</span> one. If you don't 3052to be done to make your package a <span class="quote">&#8220;<span class="quote">good</span>&#8221;</span> one. If you don't
3053know what pkglint's warnings want to tell you, try <span class="command"><strong>pkglint 3053know what pkglint's warnings want to tell you, try <span class="command"><strong>pkglint
3054--explain</strong></span> or <span class="command"><strong>pkglint 3054--explain</strong></span> or <span class="command"><strong>pkglint
3055-e</strong></span>, which outputs additional 3055-e</strong></span>, which outputs additional
3056explanations.</p></li> 3056explanations.</p></li>
3057<li class="step"><p>In many cases the package is not yet ready to build. You can 3057<li class="step"><p>In many cases the package is not yet ready to build. You can
3058find instructions for the most common cases in the next section, <a class="xref" href="#creating.common" title="10.1. Common types of packages">Section 10.1, &#8220;Common types of packages&#8221;</a>. After you have followed the instructions 3058find instructions for the most common cases in the next section, <a class="xref" href="#creating.common" title="10.1. Common types of packages">Section 10.1, &#8220;Common types of packages&#8221;</a>. After you have followed the instructions
3059over there, you can hopefully continue here.</p></li> 3059over there, you can hopefully continue here.</p></li>
3060<li class="step"><p>Run <span class="command"><strong>bmake clean</strong></span> to clean the working 3060<li class="step"><p>Run <span class="command"><strong>bmake clean</strong></span> to clean the working
3061directory from the extracted files. Besides these files, a lot of cache 3061directory from the extracted files. Besides these files, a lot of cache
3062files and other system information has been saved in the working 3062files and other system information has been saved in the working
3063directory, which may become wrong after you edited the 3063directory, which may become wrong after you edited the
3064<code class="filename">Makefile</code>.</p></li> 3064<code class="filename">Makefile</code>.</p></li>
3065<li class="step"><p>Now, run <span class="command"><strong>bmake</strong></span> to build the package. For 3065<li class="step"><p>Now, run <span class="command"><strong>bmake</strong></span> to build the package. For
3066the various things that can go wrong in this phase, consult <a class="xref" href="#fixes" title="Chapter 19. Making your package work">Chapter 19, <i>Making your package work</i></a>.</p></li> 3066the various things that can go wrong in this phase, consult <a class="xref" href="#fixes" title="Chapter 19. Making your package work">Chapter 19, <i>Making your package work</i></a>.</p></li>
3067<li class="step"><p>When the package builds fine, the next step is to install 3067<li class="step"><p>When the package builds fine, the next step is to install
3068the package. Run <span class="command"><strong>bmake install</strong></span> and hope that 3068the package. Run <span class="command"><strong>bmake install</strong></span> and hope that
3069everything works.</p></li> 3069everything works.</p></li>
3070<li class="step"><p>Up to now, the file <code class="filename">PLIST</code>, which 3070<li class="step"><p>Up to now, the file <code class="filename">PLIST</code>, which
3071contains a list of the files that are installed by the package, is 3071contains a list of the files that are installed by the package, is
3072nearly empty. Run <span class="command"><strong>bmake print-PLIST 3072nearly empty. Run <span class="command"><strong>bmake print-PLIST
3073&gt;PLIST</strong></span> to generate a probably correct list. Check 3073&gt;PLIST</strong></span> to generate a probably correct list. Check
3074the file using your preferred text editor to see if the list of 3074the file using your preferred text editor to see if the list of
3075files looks plausible.</p></li> 3075files looks plausible.</p></li>
3076<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> again to see if the generated 3076<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> again to see if the generated
3077<code class="filename">PLIST</code> contains garbage or not.</p></li> 3077<code class="filename">PLIST</code> contains garbage or not.</p></li>
3078<li class="step"><p>When you ran <span class="command"><strong>bmake install</strong></span>, the package 3078<li class="step"><p>When you ran <span class="command"><strong>bmake install</strong></span>, the package
3079has been registered in the database of installed files, but with an 3079has been registered in the database of installed files, but with an
3080empty list of files. To fix this, run <span class="command"><strong>bmake deinstall</strong></span> 3080empty list of files. To fix this, run <span class="command"><strong>bmake deinstall</strong></span>
3081and <span class="command"><strong>bmake install</strong></span> again. Now the package is 3081and <span class="command"><strong>bmake install</strong></span> again. Now the package is
3082registered with the list of files from 3082registered with the list of files from
3083<code class="filename">PLIST</code>.</p></li> 3083<code class="filename">PLIST</code>.</p></li>
3084<li class="step"><p>Run <span class="command"><strong>bmake package</strong></span> to create a binary 3084<li class="step"><p>Run <span class="command"><strong>bmake package</strong></span> to create a binary
3085package from the set of installed files.</p></li> 3085package from the set of installed files.</p></li>
3086</ol></div> 3086</ol></div>
3087<div class="sect1"> 3087<div class="sect1">
3088<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3088<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3089<a name="creating.common"></a>10.1. Common types of packages</h2></div></div></div> 3089<a name="creating.common"></a>10.1. Common types of packages</h2></div></div></div>
3090<div class="sect2"> 3090<div class="sect2">
3091<div class="titlepage"><div><div><h3 class="title"> 3091<div class="titlepage"><div><div><h3 class="title">
3092<a name="creating.perl-module"></a>10.1.1. Perl modules</h3></div></div></div> 3092<a name="creating.perl-module"></a>10.1.1. Perl modules</h3></div></div></div>
3093<p>Simple Perl modules are handled automatically by 3093<p>Simple Perl modules are handled automatically by
3094<span class="command"><strong>url2pkg</strong></span>, including dependencies.</p> 3094<span class="command"><strong>url2pkg</strong></span>, including dependencies.</p>
3095</div> 3095</div>
3096<div class="sect2"> 3096<div class="sect2">
3097<div class="titlepage"><div><div><h3 class="title"> 3097<div class="titlepage"><div><div><h3 class="title">
3098<a name="creating.python-module"></a>10.1.2. Python modules and programs</h3></div></div></div> 3098<a name="creating.python-module"></a>10.1.2. Python modules and programs</h3></div></div></div>
3099<p>Python modules and programs packages are easily created using a 3099<p>Python modules and programs packages are easily created using a
3100set of predefined variables.</p> 3100set of predefined variables.</p>
3101<p> 3101<p>
3102If some Python versions are not supported by the software, set the 3102If some Python versions are not supported by the software, set the
3103<code class="varname">PYTHON_VERSIONS_INCOMPATIBLE</code> variable to the Python versions 3103<code class="varname">PYTHON_VERSIONS_INCOMPATIBLE</code> variable to the Python versions
3104that are not supported, e.g. 3104that are not supported, e.g.
3105</p> 3105</p>
3106<pre class="programlisting"> 3106<pre class="programlisting">
3107PYTHON_VERSIONS_INCOMPATIBLE= 27 3107PYTHON_VERSIONS_INCOMPATIBLE= 27
3108</pre> 3108</pre>
3109<p> 3109<p>
3110If the packaged software is a Python module, include one of 3110If the packaged software is a Python module, include one of
3111<code class="filename">../../lang/python/egg.mk</code>, 3111<code class="filename">../../lang/python/egg.mk</code>,
3112<code class="filename">../../lang/python/distutils.mk</code>, or 3112<code class="filename">../../lang/python/distutils.mk</code>, or
3113<code class="filename">../../lang/python/extension.mk</code>.</p> 3113<code class="filename">../../lang/python/extension.mk</code>.</p>
3114<p>Most Python packages use either <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> or 3114<p>Most Python packages use either <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> or
3115easy-setup/setuptools (<span class="quote">&#8220;<span class="quote">eggs</span>&#8221;</span>). 3115easy-setup/setuptools (<span class="quote">&#8220;<span class="quote">eggs</span>&#8221;</span>).
3116if the packaged software is using setuptools, you only need 3116if the packaged software is using setuptools, you only need
3117to include <span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/egg.mk</code></span>&#8221;</span>. 3117to include <span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/egg.mk</code></span>&#8221;</span>.
3118Otherwise, if the software uses <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span>, include  3118Otherwise, if the software uses <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span>, include
3119<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/distutils.mk</code></span>&#8221;</span>. 3119<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/distutils.mk</code></span>&#8221;</span>.
3120so pkgsrc will use this framework. 3120so pkgsrc will use this framework.
3121<span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> uses a script called <code class="filename">setup.py</code>, 3121<span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> uses a script called <code class="filename">setup.py</code>,
3122if the <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> driver is not called 3122if the <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> driver is not called
3123<code class="filename">setup.py</code>, set the <code class="varname">PYSETUP</code> variable 3123<code class="filename">setup.py</code>, set the <code class="varname">PYSETUP</code> variable
3124to the name of the script.</p> 3124to the name of the script.</p>
3125<p>Either way, the package directory should be called 3125<p>Either way, the package directory should be called
3126<span class="quote">&#8220;<span class="quote">py-software</span>&#8221;</span> and <code class="varname">PKGNAME</code> should be set to 3126<span class="quote">&#8220;<span class="quote">py-software</span>&#8221;</span> and <code class="varname">PKGNAME</code> should be set to
3127<span class="quote">&#8220;<span class="quote">${PYPKGPREFIX}-${DISTNAME}</span>&#8221;</span>, e.g. 3127<span class="quote">&#8220;<span class="quote">${PYPKGPREFIX}-${DISTNAME}</span>&#8221;</span>, e.g.
3128</p> 3128</p>
3129<pre class="programlisting"> 3129<pre class="programlisting">
3130DISTNAME= foopymodule-1.2.10 3130DISTNAME= foopymodule-1.2.10
3131PKGNAME= ${PYPKGPREFIX}-${DISTNAME} 3131PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
3132</pre> 3132</pre>
3133<p>If it is an application, include 3133<p>If it is an application, include
3134<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/application.mk</code></span>&#8221;</span>. 3134<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/application.mk</code></span>&#8221;</span>.
3135In order to correctly set the path to the Python interpreter, use the 3135In order to correctly set the path to the Python interpreter, use the
3136<code class="varname">REPLACE_PYTHON</code> variable and set it to the list of files 3136<code class="varname">REPLACE_PYTHON</code> variable and set it to the list of files
3137(paths relative to <code class="varname">WRKSRC</code>) that must be corrected. 3137(paths relative to <code class="varname">WRKSRC</code>) that must be corrected.
3138For example: 3138For example:
3139</p> 3139</p>
3140<pre class="programlisting"> 3140<pre class="programlisting">
3141REPLACE_PYTHON= *.py 3141REPLACE_PYTHON= *.py
3142</pre> 3142</pre>
3143<p>Some Python modules have separate distributions for Python-2.x 3143<p>Some Python modules have separate distributions for Python-2.x
3144and Python-3.x support. In pkgsrc this is handled by the 3144and Python-3.x support. In pkgsrc this is handled by the
3145<code class="filename">versioned_dependencies.mk</code> file. Set 3145<code class="filename">versioned_dependencies.mk</code> file. Set
3146<code class="varname">PYTHON_VERSIONED_DEPENDENCIES</code> to the list of 3146<code class="varname">PYTHON_VERSIONED_DEPENDENCIES</code> to the list of
3147packages that should be depended upon and include 3147packages that should be depended upon and include
3148<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/versioned_dependencies.mk</code></span>&#8221;</span>, 3148<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/versioned_dependencies.mk</code></span>&#8221;</span>,
3149then the pkgsrc infrastructure will depend on the appropriate package 3149then the pkgsrc infrastructure will depend on the appropriate package
3150version. For example: 3150version. For example:
3151</p> 3151</p>
3152<pre class="programlisting"> 3152<pre class="programlisting">
3153PYTHON_VERSIONED_DEPENDENCIES=dialog 3153PYTHON_VERSIONED_DEPENDENCIES=dialog
3154</pre> 3154</pre>
3155<p> 3155<p>
3156Look inside <code class="filename">versioned_dependencies.mk</code> for a list 3156Look inside <code class="filename">versioned_dependencies.mk</code> for a list
3157of supported packages.</p> 3157of supported packages.</p>
3158</div> 3158</div>
3159</div> 3159</div>
3160<div class="sect1"> 3160<div class="sect1">
3161<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3161<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3162<a name="creating.examples"></a>10.2. Examples</h2></div></div></div> 3162<a name="creating.examples"></a>10.2. Examples</h2></div></div></div>
3163<div class="sect2"> 3163<div class="sect2">
3164<div class="titlepage"><div><div><h3 class="title"> 3164<div class="titlepage"><div><div><h3 class="title">
3165<a name="creating.nvu"></a>10.2.1. How the www/nvu package came into pkgsrc</h3></div></div></div> 3165<a name="creating.nvu"></a>10.2.1. How the www/nvu package came into pkgsrc</h3></div></div></div>
3166<div class="sect3"> 3166<div class="sect3">
3167<div class="titlepage"><div><div><h4 class="title"> 3167<div class="titlepage"><div><div><h4 class="title">
3168<a name="creating.nvu.init"></a>10.2.1.1. The initial package</h4></div></div></div> 3168<a name="creating.nvu.init"></a>10.2.1.1. The initial package</h4></div></div></div>
3169<p>Looking at the file <code class="filename">pkgsrc/doc/TODO</code>, I saw 3169<p>Looking at the file <code class="filename">pkgsrc/doc/TODO</code>, I saw
3170that the <span class="quote">&#8220;<span class="quote">nvu</span>&#8221;</span> package has not yet been imported into 3170that the <span class="quote">&#8220;<span class="quote">nvu</span>&#8221;</span> package has not yet been imported into
3171pkgsrc. As the description says it has to do with the web, the obvious 3171pkgsrc. As the description says it has to do with the web, the obvious
3172choice for the category is <span class="quote">&#8220;<span class="quote">www</span>&#8221;</span>.</p> 3172choice for the category is <span class="quote">&#8220;<span class="quote">www</span>&#8221;</span>.</p>
3173<pre class="programlisting"> 3173<pre class="programlisting">
3174<code class="prompt">$</code> mkdir www/nvu 3174<code class="prompt">$</code> mkdir www/nvu
3175<code class="prompt">$</code> cd www/nvu 3175<code class="prompt">$</code> cd www/nvu
3176</pre> 3176</pre>
3177<p>The web site says that the sources are available as a tar file, so 3177<p>The web site says that the sources are available as a tar file, so
3178I fed that URL to the <span class="command"><strong>url2pkg</strong></span> program:</p> 3178I fed that URL to the <span class="command"><strong>url2pkg</strong></span> program:</p>
3179<pre class="programlisting"> 3179<pre class="programlisting">
3180<code class="prompt">$</code> url2pkg http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2 3180<code class="prompt">$</code> url2pkg http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2
3181</pre> 3181</pre>
3182<p>My editor popped up, and I added a <code class="varname">PKGNAME</code> line 3182<p>My editor popped up, and I added a <code class="varname">PKGNAME</code> line
3183below the <code class="varname">DISTNAME</code> line, as the package name should 3183below the <code class="varname">DISTNAME</code> line, as the package name should
3184not have the word <span class="quote">&#8220;<span class="quote">sources</span>&#8221;</span> in it. I also filled in the 3184not have the word <span class="quote">&#8220;<span class="quote">sources</span>&#8221;</span> in it. I also filled in the
3185<code class="varname">MAINTAINER</code>, <code class="varname">HOMEPAGE</code> and 3185<code class="varname">MAINTAINER</code>, <code class="varname">HOMEPAGE</code> and
3186<code class="varname">COMMENT</code> fields. Then the package 3186<code class="varname">COMMENT</code> fields. Then the package
3187<code class="filename">Makefile</code> looked like that:</p> 3187<code class="filename">Makefile</code> looked like that:</p>
3188<pre class="programlisting"> 3188<pre class="programlisting">
3189# $NetBSD $ 3189# $NetBSD $
3190# 3190#
3191 3191
3192DISTNAME= nvu-1.0-sources 3192DISTNAME= nvu-1.0-sources
3193PKGNAME= nvu-1.0 3193PKGNAME= nvu-1.0
3194CATEGORIES= www 3194CATEGORIES= www
3195MASTER_SITES= http://cvs.nvu.com/download/ 3195MASTER_SITES= http://cvs.nvu.com/download/
3196EXTRACT_SUFX= .tar.bz2 3196EXTRACT_SUFX= .tar.bz2
3197 3197
3198MAINTAINER= rillig@NetBSD.org 3198MAINTAINER= rillig@NetBSD.org
3199HOMEPAGE= http://cvs.nvu.com/ 3199HOMEPAGE= http://cvs.nvu.com/
3200COMMENT= Web Authoring System 3200COMMENT= Web Authoring System
3201 3201
3202# url2pkg-marker (please do not remove this line.) 3202# url2pkg-marker (please do not remove this line.)
3203.include "../../mk/bsd.pkg.mk" 3203.include "../../mk/bsd.pkg.mk"
3204</pre> 3204</pre>
3205<p>On the first line of output above, an artificial space has been added between NetBSD and $, 3205<p>On the first line of output above, an artificial space has been added between NetBSD and $,
3206this is a workaround to prevent CVS expanding to the filename of the 3206this is a workaround to prevent CVS expanding to the filename of the
3207guide.</p> 3207guide.</p>
3208<p>Then, I quit the editor and watched pkgsrc downloading a large 3208<p>Then, I quit the editor and watched pkgsrc downloading a large
3209source archive:</p> 3209source archive:</p>
3210<pre class="programlisting"> 3210<pre class="programlisting">
3211url2pkg&gt; Running "make makesum" ... 3211url2pkg&gt; Running "make makesum" ...
3212=&gt; Required installed package digest&gt;=20010302: digest-20060826 found 3212=&gt; Required installed package digest&gt;=20010302: digest-20060826 found
3213=&gt; Fetching nvu-1.0-sources.tar.bz2 3213=&gt; Fetching nvu-1.0-sources.tar.bz2
3214Requesting http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2 3214Requesting http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2
3215100% |*************************************| 28992 KB 150.77 KB/s00:00 ETA 3215100% |*************************************| 28992 KB 150.77 KB/s00:00 ETA
321629687976 bytes retrieved in 03:12 (150.77 KB/s) 321629687976 bytes retrieved in 03:12 (150.77 KB/s)
3217url2pkg&gt; Running "make extract" ... 3217url2pkg&gt; Running "make extract" ...
3218=&gt; Required installed package digest&gt;=20010302: digest-20060826 found 3218=&gt; Required installed package digest&gt;=20010302: digest-20060826 found
3219=&gt; Checksum SHA1 OK for nvu-1.0-sources.tar.bz2 3219=&gt; Checksum SHA1 OK for nvu-1.0-sources.tar.bz2
3220=&gt; Checksum RMD160 OK for nvu-1.0-sources.tar.bz2 3220=&gt; Checksum RMD160 OK for nvu-1.0-sources.tar.bz2
3221work.bacc -&gt; /tmp/roland/pkgsrc/www/nvu/work.bacc 3221work.bacc -&gt; /tmp/roland/pkgsrc/www/nvu/work.bacc
3222===&gt; Installing dependencies for nvu-1.0 3222===&gt; Installing dependencies for nvu-1.0
3223===&gt; Overriding tools for nvu-1.0 3223===&gt; Overriding tools for nvu-1.0
3224===&gt; Extracting for nvu-1.0 3224===&gt; Extracting for nvu-1.0
3225url2pkg&gt; Adjusting the Makefile. 3225url2pkg&gt; Adjusting the Makefile.
3226 3226
3227Remember to correct CATEGORIES, HOMEPAGE, COMMENT, and DESCR when you're done! 3227Remember to correct CATEGORIES, HOMEPAGE, COMMENT, and DESCR when you're done!
3228 3228
3229Good luck! (See pkgsrc/doc/pkgsrc.txt for some more help :-) 3229Good luck! (See pkgsrc/doc/pkgsrc.txt for some more help :-)
3230</pre> 3230</pre>
3231</div> 3231</div>
3232<div class="sect3"> 3232<div class="sect3">
3233<div class="titlepage"><div><div><h4 class="title"> 3233<div class="titlepage"><div><div><h4 class="title">
3234<a name="creating.nvu.problems"></a>10.2.1.2. Fixing all kinds of problems to make the package work</h4></div></div></div> 3234<a name="creating.nvu.problems"></a>10.2.1.2. Fixing all kinds of problems to make the package work</h4></div></div></div>
3235<p>Now that the package has been extracted, let's see what's inside 3235<p>Now that the package has been extracted, let's see what's inside
3236it. The package has a <code class="filename">README.txt</code>, but that only 3236it. The package has a <code class="filename">README.txt</code>, but that only
3237says something about mozilla, so it's probably useless for seeing what 3237says something about mozilla, so it's probably useless for seeing what
3238dependencies this package has. But since there is a GNU configure script 3238dependencies this package has. But since there is a GNU configure script
3239in the package, let's hope that it will complain about everything it 3239in the package, let's hope that it will complain about everything it
3240needs.</p> 3240needs.</p>
3241<pre class="programlisting"> 3241<pre class="programlisting">
3242<code class="prompt">$</code> bmake 3242<code class="prompt">$</code> bmake
3243=&gt; Required installed package digest&gt;=20010302: digest-20060826 found 3243=&gt; Required installed package digest&gt;=20010302: digest-20060826 found
3244=&gt; Checksum SHA1 OK for nvu-1.0-sources.tar.bz2 3244=&gt; Checksum SHA1 OK for nvu-1.0-sources.tar.bz2
3245=&gt; Checksum RMD160 OK for nvu-1.0-sources.tar.bz2 3245=&gt; Checksum RMD160 OK for nvu-1.0-sources.tar.bz2
3246===&gt; Patching for nvu-1.0 3246===&gt; Patching for nvu-1.0
3247===&gt; Creating toolchain wrappers for nvu-1.0 3247===&gt; Creating toolchain wrappers for nvu-1.0
3248===&gt; Configuring for nvu-1.0 3248===&gt; Configuring for nvu-1.0
3249[...] 3249[...]
3250configure: error: Perl 5.004 or higher is required. 3250configure: error: Perl 5.004 or higher is required.
3251[...] 3251[...]
3252WARNING: Please add USE_TOOLS+=perl to the package Makefile. 3252WARNING: Please add USE_TOOLS+=perl to the package Makefile.
3253[...] 3253[...]
3254</pre> 3254</pre>
3255<p>That worked quite well. So I opened the package Makefile in my 3255<p>That worked quite well. So I opened the package Makefile in my
3256editor, and since it already has a <code class="varname">USE_TOOLS</code> line, I 3256editor, and since it already has a <code class="varname">USE_TOOLS</code> line, I
3257just appended <span class="quote">&#8220;<span class="quote">perl</span>&#8221;</span> to it. Since the dependencies of the 3257just appended <span class="quote">&#8220;<span class="quote">perl</span>&#8221;</span> to it. Since the dependencies of the
3258package have changed now, and since a perl wrapper is automatically 3258package have changed now, and since a perl wrapper is automatically
3259installed in the <span class="quote">&#8220;<span class="quote">tools</span>&#8221;</span> phase, I need to build the package 3259installed in the <span class="quote">&#8220;<span class="quote">tools</span>&#8221;</span> phase, I need to build the package
3260from scratch.</p> 3260from scratch.</p>
3261<pre class="programlisting"> 3261<pre class="programlisting">
3262<code class="prompt">$</code> bmake clean 3262<code class="prompt">$</code> bmake clean
3263===&gt; Cleaning for nvu-1.0 3263===&gt; Cleaning for nvu-1.0
3264<code class="prompt">$</code> bmake 3264<code class="prompt">$</code> bmake
3265[...] 3265[...]
3266*** /tmp/roland/pkgsrc/www/nvu/work.bacc/.tools/bin/make is not \ 3266*** /tmp/roland/pkgsrc/www/nvu/work.bacc/.tools/bin/make is not \
3267GNU Make. You will not be able to build Mozilla without GNU Make. 3267GNU Make. You will not be able to build Mozilla without GNU Make.
3268[...] 3268[...]
3269</pre> 3269</pre>
3270<p>So I added <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span> to the 3270<p>So I added <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span> to the
3271<code class="varname">USE_TOOLS</code> line and tried again (from scratch).</p> 3271<code class="varname">USE_TOOLS</code> line and tried again (from scratch).</p>
3272<pre class="programlisting"> 3272<pre class="programlisting">
3273[...] 3273[...]
3274checking for GTK - version &gt;= 1.2.0... no 3274checking for GTK - version &gt;= 1.2.0... no
3275*** Could not run GTK test program, checking why... 3275*** Could not run GTK test program, checking why...
3276[...] 3276[...]
3277</pre> 3277</pre>
3278<p>Now to the other dependencies. The first question is: Where is the 3278<p>Now to the other dependencies. The first question is: Where is the
3279GTK package hidden in pkgsrc?</p> 3279GTK package hidden in pkgsrc?</p>
3280<pre class="programlisting"> 3280<pre class="programlisting">
3281<code class="prompt">$</code> echo ../../*/gtk* 3281<code class="prompt">$</code> echo ../../*/gtk*
3282[many packages ...] 3282[many packages ...]
3283<code class="prompt">$</code> echo ../../*/gtk 3283<code class="prompt">$</code> echo ../../*/gtk
3284../../x11/gtk 3284../../x11/gtk
3285<code class="prompt">$</code> echo ../../*/gtk2 3285<code class="prompt">$</code> echo ../../*/gtk2
3286../../x11/gtk2 3286../../x11/gtk2
3287<code class="prompt">$</code> echo ../../*/gtk2/bui* 3287<code class="prompt">$</code> echo ../../*/gtk2/bui*
3288../../x11/gtk2/buildlink3.mk 3288../../x11/gtk2/buildlink3.mk
3289</pre> 3289</pre>
3290<p>The first try was definitely too broad. The second one had exactly 3290<p>The first try was definitely too broad. The second one had exactly
3291one result, which is very good. But there is one pitfall with GNOME 3291one result, which is very good. But there is one pitfall with GNOME
3292packages. Before GNOME 2 had been released, there were already many 3292packages. Before GNOME 2 had been released, there were already many
3293GNOME 1 packages in pkgsrc. To be able to continue to use these 3293GNOME 1 packages in pkgsrc. To be able to continue to use these
3294packages, the GNOME 2 packages were imported as separate packages, and 3294packages, the GNOME 2 packages were imported as separate packages, and
3295their names usually have a <span class="quote">&#8220;<span class="quote">2</span>&#8221;</span> appended. So I checked 3295their names usually have a <span class="quote">&#8220;<span class="quote">2</span>&#8221;</span> appended. So I checked
3296whether this was the case here, and indeed it was.</p> 3296whether this was the case here, and indeed it was.</p>
3297<p>Since the GTK2 package has a <code class="filename">buildlink3.mk</code> 3297<p>Since the GTK2 package has a <code class="filename">buildlink3.mk</code>
3298file, adding the dependency is very easy. I just inserted an 3298file, adding the dependency is very easy. I just inserted an
3299<code class="literal">.include</code> line before the last line of the package 3299<code class="literal">.include</code> line before the last line of the package
3300<code class="filename">Makefile</code>, so that it now looks like this:</p> 3300<code class="filename">Makefile</code>, so that it now looks like this:</p>
3301<pre class="programlisting"> 3301<pre class="programlisting">
3302[...] 3302[...]
3303.include "../../x11/gtk2/buildlink3.mk" 3303.include "../../x11/gtk2/buildlink3.mk"
3304.include "../../mk/bsd.pkg.mk 3304.include "../../mk/bsd.pkg.mk
3305</pre> 3305</pre>
3306<p>After another <span class="command"><strong>bmake clean &amp;&amp; bmake</strong></span>, the answer 3306<p>After another <span class="command"><strong>bmake clean &amp;&amp; bmake</strong></span>, the answer
3307was:</p> 3307was:</p>
3308<pre class="programlisting"> 3308<pre class="programlisting">
3309[...] 3309[...]
3310checking for gtk-config... /home/roland/pkg/bin/gtk-config 3310checking for gtk-config... /home/roland/pkg/bin/gtk-config
3311checking for GTK - version &gt;= 1.2.0... no 3311checking for GTK - version &gt;= 1.2.0... no
3312*** Could not run GTK test program, checking why... 3312*** Could not run GTK test program, checking why...
3313*** The test program failed to compile or link. See the file config.log for the 3313*** The test program failed to compile or link. See the file config.log for the
3314*** exact error that occured. This usually means GTK was incorrectly installed 3314*** exact error that occured. This usually means GTK was incorrectly installed
3315*** or that you have moved GTK since it was installed. In the latter case, you 3315*** or that you have moved GTK since it was installed. In the latter case, you
3316*** may want to edit the gtk-config script: /home/roland/pkg/bin/gtk-config 3316*** may want to edit the gtk-config script: /home/roland/pkg/bin/gtk-config
3317configure: error: Test for GTK failed. 3317configure: error: Test for GTK failed.
3318[...] 3318[...]
3319</pre> 3319</pre>
3320<p>In this particular case, the assumption that <span class="quote">&#8220;<span class="quote">every package 3320<p>In this particular case, the assumption that <span class="quote">&#8220;<span class="quote">every package
3321prefers GNOME 2</span>&#8221;</span> had been wrong. The first of the lines above 3321prefers GNOME 2</span>&#8221;</span> had been wrong. The first of the lines above
3322told me that this package really wanted to have the GNOME 1 version of 3322told me that this package really wanted to have the GNOME 1 version of
3323GTK. If the package had looked for GTK2, it would have looked for 3323GTK. If the package had looked for GTK2, it would have looked for
3324<span class="command"><strong>pkg-config</strong></span> instead of <span class="command"><strong>gtk-config</strong></span>. 3324<span class="command"><strong>pkg-config</strong></span> instead of <span class="command"><strong>gtk-config</strong></span>.
3325So I changed the <code class="literal">x11/gtk2</code> to 3325So I changed the <code class="literal">x11/gtk2</code> to
3326<code class="literal">x11/gtk</code> in the package <code class="filename">Makefile</code>, 3326<code class="literal">x11/gtk</code> in the package <code class="filename">Makefile</code>,
3327and tried again.</p> 3327and tried again.</p>
3328<pre class="programlisting"> 3328<pre class="programlisting">
3329[...] 3329[...]
3330cc -o xpidl.o -c -DOSTYPE=\"NetBSD3\" -DOSARCH=\"NetBSD\" [...] 3330cc -o xpidl.o -c -DOSTYPE=\"NetBSD3\" -DOSARCH=\"NetBSD\" [...]
3331In file included from xpidl.c:42: 3331In file included from xpidl.c:42:
3332xpidl.h:53:24: libIDL/IDL.h: No such file or directory 3332xpidl.h:53:24: libIDL/IDL.h: No such file or directory
3333In file included from xpidl.c:42: 3333In file included from xpidl.c:42:
3334xpidl.h:132: error: parse error before "IDL_ns" 3334xpidl.h:132: error: parse error before "IDL_ns"
3335[...] 3335[...]
3336</pre> 3336</pre>
3337<p>The package still does not find all of its dependencies. Now the 3337<p>The package still does not find all of its dependencies. Now the
3338question is: Which package provides the 3338question is: Which package provides the
3339<code class="filename">libIDL/IDL.h</code> header file?</p> 3339<code class="filename">libIDL/IDL.h</code> header file?</p>
3340<pre class="programlisting"> 3340<pre class="programlisting">
3341<code class="prompt">$</code> echo ../../*/*idl* 3341<code class="prompt">$</code> echo ../../*/*idl*
3342../../devel/py-idle ../../wip/idled ../../x11/acidlaunch 3342../../devel/py-idle ../../wip/idled ../../x11/acidlaunch
3343<code class="prompt">$</code> echo ../../*/*IDL* 3343<code class="prompt">$</code> echo ../../*/*IDL*
3344../../net/libIDL 3344../../net/libIDL
3345</pre> 3345</pre>
3346<p>Let's take the one from the second try. So I included the 3346<p>Let's take the one from the second try. So I included the
3347<code class="filename">../../net/libIDL/buildlink3.mk</code> file and tried 3347<code class="filename">../../net/libIDL/buildlink3.mk</code> file and tried
3348again. But the error didn't change. After digging through some of the 3348again. But the error didn't change. After digging through some of the
3349code, I concluded that the build process of the package was broken and 3349code, I concluded that the build process of the package was broken and
3350couldn't have ever worked, but since the Mozilla source tree is quite 3350couldn't have ever worked, but since the Mozilla source tree is quite
3351large, I didn't want to fix it. So I added the following to the package 3351large, I didn't want to fix it. So I added the following to the package
3352<code class="filename">Makefile</code> and tried again:</p> 3352<code class="filename">Makefile</code> and tried again:</p>
3353<pre class="programlisting"> 3353<pre class="programlisting">
3354CPPFLAGS+= -I${BUILDLINK_PREFIX.libIDL}/include/libIDL-2.0 3354CPPFLAGS+= -I${BUILDLINK_PREFIX.libIDL}/include/libIDL-2.0
3355BUILDLINK_TRANSFORM+= -l:IDL:IDL-2 3355BUILDLINK_TRANSFORM+= -l:IDL:IDL-2
3356</pre> 3356</pre>
3357<p>The latter line is needed because the package expects the library 3357<p>The latter line is needed because the package expects the library
3358<code class="filename">libIDL.so</code>, but only 3358<code class="filename">libIDL.so</code>, but only
3359<code class="filename">libIDL-2.so</code> is available. So I told the compiler 3359<code class="filename">libIDL-2.so</code> is available. So I told the compiler
3360wrapper to rewrite that on the fly.</p> 3360wrapper to rewrite that on the fly.</p>
3361<p>The next problem was related to a recent change of the FreeType 3361<p>The next problem was related to a recent change of the FreeType
3362interface. I looked up in <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/seamonkey/README.html" target="_top"><code class="filename">www/seamonkey</code></a> 3362interface. I looked up in <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/seamonkey/README.html" target="_top"><code class="filename">www/seamonkey</code></a>
3363which patch files were relevant for this issue and copied them to the 3363which patch files were relevant for this issue and copied them to the
3364<code class="filename">patches</code> directory. Then I retried, fixed the 3364<code class="filename">patches</code> directory. Then I retried, fixed the
3365patches so that they applied cleanly and retried again. This time, 3365patches so that they applied cleanly and retried again. This time,
3366everything worked.</p> 3366everything worked.</p>
3367</div> 3367</div>
3368<div class="sect3"> 3368<div class="sect3">
3369<div class="titlepage"><div><div><h4 class="title"> 3369<div class="titlepage"><div><div><h4 class="title">
3370<a name="creating.nvu.inst"></a>10.2.1.3. Installing the package</h4></div></div></div> 3370<a name="creating.nvu.inst"></a>10.2.1.3. Installing the package</h4></div></div></div>
3371<pre class="programlisting"> 3371<pre class="programlisting">
3372<code class="prompt">$</code> bmake CHECK_FILES=no install 3372<code class="prompt">$</code> bmake CHECK_FILES=no install
3373[...] 3373[...]
3374<code class="prompt">$</code> bmake print-PLIST &gt;PLIST 3374<code class="prompt">$</code> bmake print-PLIST &gt;PLIST
3375<code class="prompt">$</code> bmake deinstall 3375<code class="prompt">$</code> bmake deinstall
3376<code class="prompt">$</code> bmake install 3376<code class="prompt">$</code> bmake install
3377</pre> 3377</pre>
3378</div> 3378</div>
3379</div> 3379</div>
3380</div> 3380</div>
3381</div> 3381</div>
3382<div class="chapter"> 3382<div class="chapter">
3383<div class="titlepage"><div><div><h2 class="title"> 3383<div class="titlepage"><div><div><h2 class="title">
3384<a name="components"></a>Chapter 11. Package components - files, directories and contents</h2></div></div></div> 3384<a name="components"></a>Chapter 11. Package components - files, directories and contents</h2></div></div></div>
3385<div class="toc"> 3385<div class="toc">
3386<p><b>Table of Contents</b></p> 3386<p><b>Table of Contents</b></p>
3387<dl class="toc"> 3387<dl class="toc">
3388<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt> 3388<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt>
3389<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt> 3389<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt>
3390<dt><span class="sect1"><a href="#components.patches">11.3. <code class="filename">patches/*</code></a></span></dt> 3390<dt><span class="sect1"><a href="#components.patches">11.3. <code class="filename">patches/*</code></a></span></dt>
3391<dd><dl> 3391<dd><dl>
3392<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt> 3392<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt>
3393<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt> 3393<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt>
3394<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt> 3394<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt>
3395<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt> 3395<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt>
3396<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt> 3396<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt>
3397</dl></dd> 3397</dl></dd>
3398<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt> 3398<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt>
3399<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt> 3399<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt>
3400<dd><dl> 3400<dd><dl>
3401<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt> 3401<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt>
3402<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt> 3402<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt>
3403<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt> 3403<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt>
3404</dl></dd> 3404</dl></dd>
3405<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt> 3405<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt>
3406<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt> 3406<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt>
3407</dl> 3407</dl>
3408</div> 3408</div>
3409<p>Whenever you're preparing a package, there are a number of 3409<p>Whenever you're preparing a package, there are a number of
3410files involved which are described in the following 3410files involved which are described in the following
3411sections.</p> 3411sections.</p>
3412<div class="sect1"> 3412<div class="sect1">
3413<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3413<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3414<a name="components.Makefile"></a>11.1. <code class="filename">Makefile</code> 3414<a name="components.Makefile"></a>11.1. <code class="filename">Makefile</code>
3415</h2></div></div></div> 3415</h2></div></div></div>
3416<p>Building, installation and creation of a binary package are all 3416<p>Building, installation and creation of a binary package are all
3417 controlled by the package's <code class="filename">Makefile</code>. 3417 controlled by the package's <code class="filename">Makefile</code>.
3418 The <code class="filename">Makefile</code> describes various things about 3418 The <code class="filename">Makefile</code> describes various things about
3419 a package, for example from where to get it, how to configure, 3419 a package, for example from where to get it, how to configure,
3420 build, and install it.</p> 3420 build, and install it.</p>
3421<p>A package <code class="filename">Makefile</code> contains several 3421<p>A package <code class="filename">Makefile</code> contains several
3422 sections that describe the package.</p> 3422 sections that describe the package.</p>
3423<p>In the first section there are the following variables, which 3423<p>In the first section there are the following variables, which
3424 should appear exactly in the order given here. The order and 3424 should appear exactly in the order given here. The order and
3425 grouping of the variables is mostly historical and has no further 3425 grouping of the variables is mostly historical and has no further
3426 meaning.</p> 3426 meaning.</p>
3427<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3427<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3428<li class="listitem"><p><code class="varname">DISTNAME</code> is the basename of the 3428<li class="listitem"><p><code class="varname">DISTNAME</code> is the basename of the
3429 distribution file to be downloaded from the package's 3429 distribution file to be downloaded from the package's
3430 website.</p></li> 3430 website.</p></li>
3431<li class="listitem"><p><code class="varname">PKGNAME</code> is the name of the 3431<li class="listitem"><p><code class="varname">PKGNAME</code> is the name of the
3432 package, as used by pkgsrc. You need to provide it if 3432 package, as used by pkgsrc. You need to provide it if
3433 <code class="varname">DISTNAME</code> (which is the default) is not a good 3433 <code class="varname">DISTNAME</code> (which is the default) is not a good
3434 name for the package in pkgsrc or <code class="varname">DISTNAME</code> is not 3434 name for the package in pkgsrc or <code class="varname">DISTNAME</code> is not
3435 provided (no distribution file is required). Usually it is the pkgsrc 3435 provided (no distribution file is required). Usually it is the pkgsrc
3436 directory name together with the version number. It must match the 3436 directory name together with the version number. It must match the
3437 regular expression 3437 regular expression
3438 <code class="varname">^[A-Za-z0-9][A-Za-z0-9-_.+]*$</code>, that is, it 3438 <code class="varname">^[A-Za-z0-9][A-Za-z0-9-_.+]*$</code>, that is, it
3439 starts with a letter or digit, and contains only letters, digits, 3439 starts with a letter or digit, and contains only letters, digits,
3440 dashes, underscores, dots and plus signs.</p></li> 3440 dashes, underscores, dots and plus signs.</p></li>
3441<li class="listitem"> 3441<li class="listitem">
3442<p><code class="varname">CATEGORIES</code> is a list of categories 3442<p><code class="varname">CATEGORIES</code> is a list of categories
3443 which the package fits in. You can choose any of the top-level 3443 which the package fits in. You can choose any of the top-level
3444 directories of pkgsrc for it.</p> 3444 directories of pkgsrc for it.</p>
3445<p>Currently the following values are available for 3445<p>Currently the following values are available for
3446 <code class="varname">CATEGORIES</code>. If more than 3446 <code class="varname">CATEGORIES</code>. If more than
3447 one is used, they need to be separated by spaces:</p> 3447 one is used, they need to be separated by spaces:</p>
3448<pre class="programlisting"> 3448<pre class="programlisting">
3449archivers cross geography meta-pkgs security 3449archivers cross geography meta-pkgs security
3450audio databases graphics misc shells 3450audio databases graphics misc shells
3451benchmarks devel ham multimedia sysutils 3451benchmarks devel ham multimedia sysutils
3452biology editors inputmethod net textproc 3452biology editors inputmethod net textproc
3453cad emulators lang news time 3453cad emulators lang news time
3454chat finance mail parallel wm 3454chat finance mail parallel wm
3455comms fonts math pkgtools www 3455comms fonts math pkgtools www
3456converters games mbone print x11 3456converters games mbone print x11
3457</pre> 3457</pre>
3458</li> 3458</li>
3459<li class="listitem"><p><code class="varname">MASTER_SITES</code>, 3459<li class="listitem"><p><code class="varname">MASTER_SITES</code>,
3460 <code class="varname">DYNAMIC_MASTER_SITES</code>, 3460 <code class="varname">DYNAMIC_MASTER_SITES</code>,
3461 <code class="varname">DIST_SUBDIR</code>, <code class="varname">EXTRACT_SUFX</code> 3461 <code class="varname">DIST_SUBDIR</code>, <code class="varname">EXTRACT_SUFX</code>
3462 and <code class="varname">DISTFILES</code> are discussed in detail in 3462 and <code class="varname">DISTFILES</code> are discussed in detail in
3463 <a class="xref" href="#build.fetch" title="17.5. The fetch phase">Section 17.5, &#8220;The <span class="emphasis"><em>fetch</em></span> phase&#8221;</a>.</p></li> 3463 <a class="xref" href="#build.fetch" title="17.5. The fetch phase">Section 17.5, &#8220;The <span class="emphasis"><em>fetch</em></span> phase&#8221;</a>.</p></li>
3464</ul></div> 3464</ul></div>
3465<p>The second section contains information about separately 3465<p>The second section contains information about separately
3466 downloaded patches, if any. 3466 downloaded patches, if any.
3467 </p> 3467 </p>
3468<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3468<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3469<li class="listitem"><p><code class="varname">PATCHFILES</code>: 3469<li class="listitem"><p><code class="varname">PATCHFILES</code>:
3470 Name(s) of additional files that contain distribution patches. 3470 Name(s) of additional files that contain distribution patches.
3471 There is no default. pkgsrc will look for them at 3471 There is no default. pkgsrc will look for them at
3472 <code class="varname">PATCH_SITES</code>. 3472 <code class="varname">PATCH_SITES</code>.
3473 They will automatically be uncompressed before patching if 3473 They will automatically be uncompressed before patching if
3474 the names end with <code class="filename">.gz</code> or 3474 the names end with <code class="filename">.gz</code> or
3475 <code class="filename">.Z</code>.</p></li> 3475 <code class="filename">.Z</code>.</p></li>
3476<li class="listitem"><p><code class="varname">PATCH_SITES</code>: 3476<li class="listitem"><p><code class="varname">PATCH_SITES</code>:
3477 Primary location(s) for distribution patch files (see 3477 Primary location(s) for distribution patch files (see
3478 <code class="varname">PATCHFILES</code> above) if not found locally.</p></li> 3478 <code class="varname">PATCHFILES</code> above) if not found locally.</p></li>
3479<li class="listitem"><p><code class="varname">PATCH_DIST_STRIP</code>: 3479<li class="listitem"><p><code class="varname">PATCH_DIST_STRIP</code>:
3480 an argument to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> that sets the pathname strip count to 3480 an argument to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> that sets the pathname strip count to
3481 help find the correct files to patch. It defaults to 3481 help find the correct files to patch. It defaults to
3482 <span class="command"><strong>-p0</strong></span>.</p></li> 3482 <span class="command"><strong>-p0</strong></span>.</p></li>
3483</ul></div> 3483</ul></div>
3484<p>The third section contains the following variables. 3484<p>The third section contains the following variables.
3485 </p> 3485 </p>
3486<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3486<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3487<li class="listitem"><p><code class="varname">MAINTAINER</code> is the email 3487<li class="listitem"><p><code class="varname">MAINTAINER</code> is the email
3488 address of the person who feels responsible for this package, 3488 address of the person who feels responsible for this package,
3489 and who is most likely to look at problems or questions regarding 3489 and who is most likely to look at problems or questions regarding
3490 this package which have been reported with <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a>. 3490 this package which have been reported with <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a>.
3491 Other developers may contact the <code class="varname">MAINTAINER</code> 3491 Other developers may contact the <code class="varname">MAINTAINER</code>
3492 before making changes to the package, but are not required to 3492 before making changes to the package, but are not required to
3493 do so. When packaging a new program, set <code class="varname">MAINTAINER</code> 3493 do so. When packaging a new program, set <code class="varname">MAINTAINER</code>
3494 to yourself. If you really can't maintain the package for future 3494 to yourself. If you really can't maintain the package for future
3495 updates, set it to 3495 updates, set it to
3496 <code class="email">&lt;<a class="email" href="mailto:pkgsrc-users@NetBSD.org">pkgsrc-users@NetBSD.org</a>&gt;</code>.</p></li> 3496 <code class="email">&lt;<a class="email" href="mailto:pkgsrc-users@NetBSD.org">pkgsrc-users@NetBSD.org</a>&gt;</code>.</p></li>
3497<li class="listitem"><p><code class="varname">OWNER</code> should be used instead 3497<li class="listitem"><p><code class="varname">OWNER</code> should be used instead
3498 of <code class="varname">MAINTAINER</code> when you do not want other 3498 of <code class="varname">MAINTAINER</code> when you do not want other
3499 developers to update or change the package without contacting 3499 developers to update or change the package without contacting
3500 you first. A package Makefile should contain one of 3500 you first. A package Makefile should contain one of
3501 <code class="varname">MAINTAINER</code> or <code class="varname">OWNER</code>, but 3501 <code class="varname">MAINTAINER</code> or <code class="varname">OWNER</code>, but
3502 not both. </p></li> 3502 not both. </p></li>
3503<li class="listitem"><p><code class="varname">HOMEPAGE</code> is a URL where users can 3503<li class="listitem"><p><code class="varname">HOMEPAGE</code> is a URL where users can
3504 find more information about the package.</p></li> 3504 find more information about the package.</p></li>
3505<li class="listitem"><p><code class="varname">COMMENT</code> is a one-line 3505<li class="listitem"><p><code class="varname">COMMENT</code> is a one-line
3506 description of the package (should not include the package 3506 description of the package (should not include the package
3507 name).</p></li> 3507 name).</p></li>
3508<li class="listitem"><p><code class="varname">LICENSE</code> indicates the license(s) 3508<li class="listitem"><p><code class="varname">LICENSE</code> indicates the license(s)
3509 applicable for the package. See <a class="xref" href="#handling-licenses" title="19.1.3. Handling licenses">Section 19.1.3, &#8220;Handling licenses&#8221;</a> for further details.</p></li> 3509 applicable for the package. See <a class="xref" href="#handling-licenses" title="19.1.3. Handling licenses">Section 19.1.3, &#8220;Handling licenses&#8221;</a> for further details.</p></li>
3510</ul></div> 3510</ul></div>
3511<p>Other variables that affect the build: 3511<p>Other variables that affect the build:
3512 </p> 3512 </p>
3513<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 3513<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
3514<p><code class="varname">WRKSRC</code>: The directory where the 3514<p><code class="varname">WRKSRC</code>: The directory where the
3515 interesting distribution files of the package are found. The 3515 interesting distribution files of the package are found. The
3516 default is <code class="filename">${WRKDIR}/${DISTNAME}</code>, which 3516 default is <code class="filename">${WRKDIR}/${DISTNAME}</code>, which
3517 works for most packages.</p> 3517 works for most packages.</p>
3518<p>If a package doesn't create a subdirectory for itself 3518<p>If a package doesn't create a subdirectory for itself
3519 (most GNU software does, for instance), but extracts itself in 3519 (most GNU software does, for instance), but extracts itself in
3520 the current directory, you should set 3520 the current directory, you should set
3521 <code class="varname">WRKSRC=${WRKDIR}</code>.</p> 3521 <code class="varname">WRKSRC=${WRKDIR}</code>.</p>
3522<p>If a package doesn't create a subdirectory with the 3522<p>If a package doesn't create a subdirectory with the
3523 name of <code class="varname">DISTNAME</code> but some different name, 3523 name of <code class="varname">DISTNAME</code> but some different name,
3524 set <code class="varname">WRKSRC</code> to point to the proper name in 3524 set <code class="varname">WRKSRC</code> to point to the proper name in
3525 <code class="filename">${WRKDIR}</code>, for example 3525 <code class="filename">${WRKDIR}</code>, for example
3526 <code class="varname">WRKSRC=${WRKDIR}/${DISTNAME}/unix</code>. See 3526 <code class="varname">WRKSRC=${WRKDIR}/${DISTNAME}/unix</code>. See
3527 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/tcl/README.html" target="_top"><code class="filename">lang/tcl</code></a> and <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/tk/README.html" target="_top"><code class="filename">x11/tk</code></a> for other examples.</p> 3527 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/tcl/README.html" target="_top"><code class="filename">lang/tcl</code></a> and <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/tk/README.html" target="_top"><code class="filename">x11/tk</code></a> for other examples.</p>
3528<p>The name of the working directory created by pkgsrc is 3528<p>The name of the working directory created by pkgsrc is
3529 taken from the <code class="varname">WRKDIR_BASENAME</code> 3529 taken from the <code class="varname">WRKDIR_BASENAME</code>
3530 variable. By default, its value is 3530 variable. By default, its value is
3531 <code class="filename">work</code>. If you want to use the same 3531 <code class="filename">work</code>. If you want to use the same
3532 pkgsrc tree for building different kinds of binary packages, 3532 pkgsrc tree for building different kinds of binary packages,
3533 you can change the variable according to your needs. Two 3533 you can change the variable according to your needs. Two
3534 other variables handle common cases of setting 3534 other variables handle common cases of setting
3535 <code class="varname">WRKDIR_BASENAME</code> individually. If 3535 <code class="varname">WRKDIR_BASENAME</code> individually. If
3536 <code class="varname">OBJHOSTNAME</code> is defined in 3536 <code class="varname">OBJHOSTNAME</code> is defined in
3537 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, the first component of 3537 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, the first component of
3538 the host's name is attached to the directory name. If 3538 the host's name is attached to the directory name. If
3539 <code class="varname">OBJMACHINE</code> is defined, the platform name 3539 <code class="varname">OBJMACHINE</code> is defined, the platform name
3540 is attached, which might look like 3540 is attached, which might look like
3541 <code class="filename">work.i386</code> or 3541 <code class="filename">work.i386</code> or
3542 <code class="filename">work.sparc</code>.</p> 3542 <code class="filename">work.sparc</code>.</p>
3543</li></ul></div> 3543</li></ul></div>
3544<p>Please pay attention to the following gotchas:</p> 3544<p>Please pay attention to the following gotchas:</p>
3545<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3545<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3546<li class="listitem"><p>Add <code class="varname">MANCOMPRESSED</code> if man pages are 3546<li class="listitem"><p>Add <code class="varname">MANCOMPRESSED</code> if man pages are
3547 installed in compressed form by the package. For packages using 3547 installed in compressed form by the package. For packages using
3548 BSD-style makefiles which honor MANZ, there is 3548 BSD-style makefiles which honor MANZ, there is
3549 <code class="varname">MANCOMPRESSED_IF_MANZ</code>.</p></li> 3549 <code class="varname">MANCOMPRESSED_IF_MANZ</code>.</p></li>
3550<li class="listitem"><p>Replace <code class="filename">/usr/local</code> with 3550<li class="listitem"><p>Replace <code class="filename">/usr/local</code> with
3551 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span> in all files (see patches, 3551 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span> in all files (see patches,
3552 below).</p></li> 3552 below).</p></li>
3553<li class="listitem"><p>If the package installs any info files, see <a class="xref" href="#faq.info-files" title="19.6.7. Packages installing info files">Section 19.6.7, &#8220;Packages installing info files&#8221;</a>.</p></li> 3553<li class="listitem"><p>If the package installs any info files, see <a class="xref" href="#faq.info-files" title="19.6.7. Packages installing info files">Section 19.6.7, &#8220;Packages installing info files&#8221;</a>.</p></li>
3554</ul></div> 3554</ul></div>
3555</div> 3555</div>
3556<div class="sect1"> 3556<div class="sect1">
3557<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3557<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3558<a name="components.distinfo"></a>11.2. <code class="filename">distinfo</code> 3558<a name="components.distinfo"></a>11.2. <code class="filename">distinfo</code>
3559</h2></div></div></div> 3559</h2></div></div></div>
3560<p>The <code class="filename">distinfo</code> file contains the message 3560<p>The <code class="filename">distinfo</code> file contains the message
3561 digest, or checksum, of each distfile needed for the package. This 3561 digest, or checksum, of each distfile needed for the package. This
3562 ensures that the distfiles retrieved from the Internet have not been 3562 ensures that the distfiles retrieved from the Internet have not been
3563 corrupted during transfer or altered by a malign force to introduce 3563 corrupted during transfer or altered by a malign force to introduce
3564 a security hole. To provide maximum security, all distfiles are 3564 a security hole. To provide maximum security, all distfiles are
3565 protected using three different message digest algorithms (SHA1, 3565 protected using three different message digest algorithms (SHA1,
3566 RMD160, SHA512), as well as the file size.</p> 3566 RMD160, SHA512), as well as the file size.</p>
3567<p>The <code class="filename">distinfo</code> file also contains the 3567<p>The <code class="filename">distinfo</code> file also contains the
3568 checksums for all the patches found in the 3568 checksums for all the patches found in the
3569 <code class="filename">patches</code> directory (see <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;<code class="filename">patches/*</code>&#8221;</a>).</p> 3569 <code class="filename">patches</code> directory (see <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;<code class="filename">patches/*</code>&#8221;</a>).</p>
3570<p>To regenerate the <code class="filename">distinfo</code> file, use the 3570<p>To regenerate the <code class="filename">distinfo</code> file, use the
3571 <span class="command"><strong>make distinfo</strong></span> command.</p> 3571 <span class="command"><strong>make distinfo</strong></span> command.</p>
3572<p>Some packages have different sets of distfiles depending on 3572<p>Some packages have different sets of distfiles depending on
3573 the platform, for example <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/openjdk7/README.html" target="_top"><code class="filename">lang/openjdk7</code></a>. These are kept in the same 3573 the platform, for example <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/openjdk7/README.html" target="_top"><code class="filename">lang/openjdk7</code></a>. These are kept in the same
3574 <code class="filename">distinfo</code> file and care should be taken when 3574 <code class="filename">distinfo</code> file and care should be taken when
3575 upgrading such a package to ensure distfile information is not 3575 upgrading such a package to ensure distfile information is not
3576 lost.</p> 3576 lost.</p>
3577</div> 3577</div>
3578<div class="sect1"> 3578<div class="sect1">
3579<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3579<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3580<a name="components.patches"></a>11.3. <code class="filename">patches/*</code> 3580<a name="components.patches"></a>11.3. <code class="filename">patches/*</code>
3581</h2></div></div></div> 3581</h2></div></div></div>
3582<p>Some packages don't work out-of-the box on the various 3582<p>Some packages don't work out-of-the box on the various
3583 platforms that are supported by pkgsrc. These packages need 3583 platforms that are supported by pkgsrc. These packages need
3584 to be patched to make them work. The patch files can be 3584 to be patched to make them work. The patch files can be
3585 found in the <code class="filename">patches/</code> directory.</p> 3585 found in the <code class="filename">patches/</code> directory.</p>
3586<p>In the <span class="emphasis"><em>patch</em></span> phase, these patches are 3586<p>In the <span class="emphasis"><em>patch</em></span> phase, these patches are
3587 applied to the files in <code class="varname">WRKSRC</code> directory after 3587 applied to the files in <code class="varname">WRKSRC</code> directory after
3588 extracting them, in alphabetic order.</p> 3588 extracting them, in alphabetic order.</p>
3589<div class="sect2"> 3589<div class="sect2">
3590<div class="titlepage"><div><div><h3 class="title"> 3590<div class="titlepage"><div><div><h3 class="title">
3591<a name="components.patch.structure"></a>11.3.1. Structure of a single patch file</h3></div></div></div> 3591<a name="components.patch.structure"></a>11.3.1. Structure of a single patch file</h3></div></div></div>
3592<p>The <code class="filename">patch-*</code> files should be in 3592<p>The <code class="filename">patch-*</code> files should be in
3593 <span class="command"><strong>diff -bu</strong></span> format, and apply without a fuzz to avoid 3593 <span class="command"><strong>diff -bu</strong></span> format, and apply without a fuzz to avoid
3594 problems. (To force patches to apply with fuzz you can set 3594 problems. (To force patches to apply with fuzz you can set
3595 <code class="varname">PATCH_FUZZ_FACTOR=-F2</code>). Furthermore, each patch 3595 <code class="varname">PATCH_FUZZ_FACTOR=-F2</code>). Furthermore, each patch
3596 should contain only changes for a single file, and no file should be 3596 should contain only changes for a single file, and no file should be
3597 patched by more than one patch file. This helps to keep future 3597 patched by more than one patch file. This helps to keep future
3598 modifications simple.</p> 3598 modifications simple.</p>
3599<p>Each patch file is structured as follows: In the first line, 3599<p>Each patch file is structured as follows: In the first line,
3600 there is the RCS Id of the patch itself. The second line should be 3600 there is the RCS Id of the patch itself. The second line should be
3601 empty for aesthetic reasons. After that, there should be a comment for 3601 empty for aesthetic reasons. After that, there should be a comment for
3602 each change that the patch does. There are a number of standard 3602 each change that the patch does. There are a number of standard
3603 cases:</p> 3603 cases:</p>
3604<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3604<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3605<li class="listitem"><p>Patches for commonly known vulnerabilities should 3605<li class="listitem"><p>Patches for commonly known vulnerabilities should
3606 mention the vulnerability ID (CAN, CVE).</p></li> 3606 mention the vulnerability ID (CAN, CVE).</p></li>
3607<li class="listitem"><p>Patches that change source code should mention the 3607<li class="listitem"><p>Patches that change source code should mention the
3608 platform and other environment (for example, the compiler) that the 3608 platform and other environment (for example, the compiler) that the
3609 patch is needed for.</p></li> 3609 patch is needed for.</p></li>
3610</ul></div> 3610</ul></div>
3611<p>The patch should be commented so that any 3611<p>The patch should be commented so that any
3612 developer who knows the code of the application can make some use of 3612 developer who knows the code of the application can make some use of
3613 the patch. Special care should be taken for the upstream developers, 3613 the patch. Special care should be taken for the upstream developers,
3614 since we generally want that they accept our patches, so we have less 3614 since we generally want that they accept our patches, so we have less
3615 work in the future.</p> 3615 work in the future.</p>
3616</div> 3616</div>
3617<div class="sect2"> 3617<div class="sect2">
3618<div class="titlepage"><div><div><h3 class="title"> 3618<div class="titlepage"><div><div><h3 class="title">
3619<a name="components.patches.caveats"></a>11.3.2. Creating patch files</h3></div></div></div> 3619<a name="components.patches.caveats"></a>11.3.2. Creating patch files</h3></div></div></div>
3620<p>One important thing to mention is to pay attention that no RCS 3620<p>One important thing to mention is to pay attention that no RCS
3621 IDs get stored in the patch files, as these will cause problems when 3621 IDs get stored in the patch files, as these will cause problems when
3622 later checked into the NetBSD CVS tree. Use the 3622 later checked into the NetBSD CVS tree. Use the
3623 <span class="command"><strong>pkgdiff</strong></span> command from the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> package to avoid these 3623 <span class="command"><strong>pkgdiff</strong></span> command from the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> package to avoid these
3624 problems.</p> 3624 problems.</p>
3625<p>For even more automation, we recommend using 3625<p>For even more automation, we recommend using
3626 <span class="command"><strong>mkpatches</strong></span> from the same package to make a 3626 <span class="command"><strong>mkpatches</strong></span> from the same package to make a
3627 whole set of patches. You just have to backup files before you 3627 whole set of patches. You just have to backup files before you
3628 edit them to <code class="filename">filename.orig</code>, e.g. with 3628 edit them to <code class="filename">filename.orig</code>, e.g. with
3629 <span class="command"><strong>cp -p filename filename.orig</strong></span> or, easier, by 3629 <span class="command"><strong>cp -p filename filename.orig</strong></span> or, easier, by
3630 using <span class="command"><strong>pkgvi</strong></span> again from the same package. If 3630 using <span class="command"><strong>pkgvi</strong></span> again from the same package. If
3631 you upgrade a package this way, you can easily compare the new 3631 you upgrade a package this way, you can easily compare the new
3632 set of patches with the previously existing one with 3632 set of patches with the previously existing one with
3633 <span class="command"><strong>patchdiff</strong></span>. The files in <code class="filename">patches</code> 3633 <span class="command"><strong>patchdiff</strong></span>. The files in <code class="filename">patches</code>
3634 are replaced by new files, so carefully check if you want to take all 3634 are replaced by new files, so carefully check if you want to take all
3635 the changes.</p> 3635 the changes.</p>
3636<p>When you have finished a package, remember to generate 3636<p>When you have finished a package, remember to generate
3637 the checksums for the patch files by using the <span class="command"><strong>make 3637 the checksums for the patch files by using the <span class="command"><strong>make
3638 makepatchsum</strong></span> command, see <a class="xref" href="#components.distinfo" title="11.2. distinfo">Section 11.2, &#8220;<code class="filename">distinfo</code>&#8221;</a>.</p> 3638 makepatchsum</strong></span> command, see <a class="xref" href="#components.distinfo" title="11.2. distinfo">Section 11.2, &#8220;<code class="filename">distinfo</code>&#8221;</a>.</p>
3639<p>When adding a patch that corrects a problem in the 3639<p>When adding a patch that corrects a problem in the
3640 distfile (rather than e.g. enforcing pkgsrc's view of where 3640 distfile (rather than e.g. enforcing pkgsrc's view of where
3641 man pages should go), send the patch as a bug report to the 3641 man pages should go), send the patch as a bug report to the
3642 maintainer. This benefits non-pkgsrc users of the package, 3642 maintainer. This benefits non-pkgsrc users of the package,
3643 and usually makes it possible to remove the patch in future 3643 and usually makes it possible to remove the patch in future
3644 version.</p> 3644 version.</p>
3645<p>The file names of the patch files are usually of the form 3645<p>The file names of the patch files are usually of the form
3646 <code class="filename">patch-<em class="replaceable"><code>path_to_file__with__underscores.c</code></em></code>. 3646 <code class="filename">patch-<em class="replaceable"><code>path_to_file__with__underscores.c</code></em></code>.
3647 Many packages still use the previous convention 3647 Many packages still use the previous convention
3648 <code class="filename">patch-<em class="replaceable"><code>[a-z][a-z]</code></em></code>, 3648 <code class="filename">patch-<em class="replaceable"><code>[a-z][a-z]</code></em></code>,
3649 but new patches should be of the form containing the filename. 3649 but new patches should be of the form containing the filename.
3650 <span class="command"><strong>mkpatches</strong></span> included in <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> takes care of the name 3650 <span class="command"><strong>mkpatches</strong></span> included in <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> takes care of the name
3651 automatically.</p> 3651 automatically.</p>
3652</div> 3652</div>
3653<div class="sect2"> 3653<div class="sect2">
3654<div class="titlepage"><div><div><h3 class="title"> 3654<div class="titlepage"><div><div><h3 class="title">
3655<a name="components.patches.sources"></a>11.3.3. Sources where the patch files come from</h3></div></div></div> 3655<a name="components.patches.sources"></a>11.3.3. Sources where the patch files come from</h3></div></div></div>
3656<p>If you want to share patches between multiple packages 3656<p>If you want to share patches between multiple packages
3657 in pkgsrc, e.g. because they use the same distfiles, set 3657 in pkgsrc, e.g. because they use the same distfiles, set
3658 <code class="varname">PATCHDIR</code> to the path where the patch files 3658 <code class="varname">PATCHDIR</code> to the path where the patch files
3659 can be found, e.g.:</p> 3659 can be found, e.g.:</p>
3660<pre class="programlisting"> 3660<pre class="programlisting">
3661PATCHDIR= ${.CURDIR}/../xemacs/patches 3661PATCHDIR= ${.CURDIR}/../xemacs/patches
3662</pre> 3662</pre>
3663<p>Patch files that are distributed by the author or other 3663<p>Patch files that are distributed by the author or other
3664 maintainers can be listed in 3664 maintainers can be listed in
3665 <code class="varname">PATCHFILES</code>.</p> 3665 <code class="varname">PATCHFILES</code>.</p>
3666<p>If it is desired to store any patches that should not be 3666<p>If it is desired to store any patches that should not be
3667 committed into pkgsrc, they can be kept outside the pkgsrc 3667 committed into pkgsrc, they can be kept outside the pkgsrc
3668 tree in the <code class="filename">$LOCALPATCHES</code> directory. The 3668 tree in the <code class="filename">$LOCALPATCHES</code> directory. The
3669 directory tree there is expected to have the same 3669 directory tree there is expected to have the same
3670 <span class="quote">&#8220;<span class="quote">category/package</span>&#8221;</span> structure as pkgsrc, and 3670 <span class="quote">&#8220;<span class="quote">category/package</span>&#8221;</span> structure as pkgsrc, and
3671 patches are expected to be stored inside these dirs (also 3671 patches are expected to be stored inside these dirs (also
3672 known as <code class="filename">$LOCALPATCHES/$PKGPATH</code>). For 3672 known as <code class="filename">$LOCALPATCHES/$PKGPATH</code>). For
3673 example, if you want to keep a private patch for 3673 example, if you want to keep a private patch for
3674 <code class="filename">pkgsrc/graphics/png</code>, keep it in 3674 <code class="filename">pkgsrc/graphics/png</code>, keep it in
3675 <code class="filename">$LOCALPATCHES/graphics/png/mypatch</code>. All 3675 <code class="filename">$LOCALPATCHES/graphics/png/mypatch</code>. All
3676 files in the named directory are expected to be patch files, 3676 files in the named directory are expected to be patch files,
3677 and <span class="emphasis"><em>they are applied after pkgsrc patches are 3677 and <span class="emphasis"><em>they are applied after pkgsrc patches are
3678 applied</em></span>.</p> 3678 applied</em></span>.</p>
3679</div> 3679</div>
3680<div class="sect2"> 3680<div class="sect2">
3681<div class="titlepage"><div><div><h3 class="title"> 3681<div class="titlepage"><div><div><h3 class="title">
3682<a name="components.patches.guidelines"></a>11.3.4. Patching guidelines</h3></div></div></div> 3682<a name="components.patches.guidelines"></a>11.3.4. Patching guidelines</h3></div></div></div>
3683<p>When fixing a portability issue in the code do not use 3683<p>When fixing a portability issue in the code do not use
3684 preprocessor magic to check for the current operating system nor 3684 preprocessor magic to check for the current operating system nor
3685 platform. Doing so hurts portability to other platforms because 3685 platform. Doing so hurts portability to other platforms because
3686 the OS-specific details are not abstracted appropriately.</p> 3686 the OS-specific details are not abstracted appropriately.</p>
3687<p>The general rule to follow is: instead of checking for the 3687<p>The general rule to follow is: instead of checking for the
3688 operating system the application is being built on, check for the 3688 operating system the application is being built on, check for the
3689 specific <span class="emphasis"><em>features</em></span> you need. For example, 3689 specific <span class="emphasis"><em>features</em></span> you need. For example,
3690 instead of assuming that kqueue is available under NetBSD and 3690 instead of assuming that kqueue is available under NetBSD and
3691 using the <code class="varname">__NetBSD__</code> macro to conditionalize 3691 using the <code class="varname">__NetBSD__</code> macro to conditionalize
3692 kqueue support, add a check that detects kqueue itself &mdash; 3692 kqueue support, add a check that detects kqueue itself &mdash;
3693 yes, this generally involves patching the 3693 yes, this generally involves patching the
3694 <span class="command"><strong>configure</strong></span> script. There is absolutely nothing 3694 <span class="command"><strong>configure</strong></span> script. There is absolutely nothing
3695 that prevents some OSes from adopting interfaces from other OSes 3695 that prevents some OSes from adopting interfaces from other OSes
3696 (e.g. Linux implementing kqueue), something that the above checks 3696 (e.g. Linux implementing kqueue), something that the above checks
3697 cannot take into account.</p> 3697 cannot take into account.</p>
3698<p>Of course, checking for features generally involves more 3698<p>Of course, checking for features generally involves more
3699 work on the developer's side, but the resulting changes are 3699 work on the developer's side, but the resulting changes are
3700 cleaner and there are chances they will work on many other 3700 cleaner and there are chances they will work on many other
3701 platforms. Not to mention that there are higher chances of being 3701 platforms. Not to mention that there are higher chances of being
3702 later integrated into the mainstream sources. Remember: 3702 later integrated into the mainstream sources. Remember:
3703 <span class="emphasis"><em>It doesn't work unless it is right!</em></span></p> 3703 <span class="emphasis"><em>It doesn't work unless it is right!</em></span></p>
3704<p>Some typical examples:</p> 3704<p>Some typical examples:</p>
3705<div class="table"> 3705<div class="table">
3706<a name="patch-examples"></a><p class="title"><b>Table 11.1. Patching examples</b></p> 3706<a name="patch-examples"></a><p class="title"><b>Table 11.1. Patching examples</b></p>
3707<div class="table-contents"><table class="table" summary="Patching examples" border="1"> 3707<div class="table-contents"><table class="table" summary="Patching examples" border="1">
3708<colgroup> 3708<colgroup>
3709<col> 3709<col>
3710<col> 3710<col>
3711<col> 3711<col>
3712</colgroup> 3712</colgroup>
3713<thead><tr> 3713<thead><tr>
3714<th>Where</th> 3714<th>Where</th>
3715<th>Incorrect</th> 3715<th>Incorrect</th>
3716<th>Correct</th> 3716<th>Correct</th>
3717</tr></thead> 3717</tr></thead>
3718<tbody> 3718<tbody>
3719<tr> 3719<tr>
3720<td>configure script</td> 3720<td>configure script</td>
3721<td> 3721<td>
3722<pre class="programlisting"> 3722<pre class="programlisting">
3723case ${target_os} in 3723case ${target_os} in
3724netbsd*) have_kvm=yes ;; 3724netbsd*) have_kvm=yes ;;
3725*) have_kvm=no ;; 3725*) have_kvm=no ;;
3726esac 3726esac
3727</pre> 3727</pre>
3728 </td> 3728 </td>
3729<td> 3729<td>
3730<pre class="programlisting"> 3730<pre class="programlisting">
3731AC_CHECK_LIB(kvm, kvm_open, have_kvm=yes, have_kvm=no) 3731AC_CHECK_LIB(kvm, kvm_open, have_kvm=yes, have_kvm=no)
3732</pre> 3732</pre>
3733 </td> 3733 </td>
3734</tr> 3734</tr>
3735<tr> 3735<tr>
3736<td>C source file</td> 3736<td>C source file</td>
3737<td> 3737<td>
3738<pre class="programlisting"> 3738<pre class="programlisting">
3739#if defined(__NetBSD__) 3739#if defined(__NetBSD__)
3740# include &lt;sys/event.h&gt; 3740# include &lt;sys/event.h&gt;
3741#endif 3741#endif
3742</pre> 3742</pre>
3743 </td> 3743 </td>
3744<td> 3744<td>
3745<pre class="programlisting"> 3745<pre class="programlisting">
3746#if defined(HAVE_SYS_EVENT_H) 3746#if defined(HAVE_SYS_EVENT_H)
3747# include &lt;sys/event.h&gt; 3747# include &lt;sys/event.h&gt;
3748#endif 3748#endif
3749</pre> 3749</pre>
3750 </td> 3750 </td>
3751</tr> 3751</tr>
3752<tr> 3752<tr>
3753<td>C source file</td> 3753<td>C source file</td>
3754<td> 3754<td>
3755<pre class="programlisting"> 3755<pre class="programlisting">
3756int 3756int
3757monitor_file(...) 3757monitor_file(...)
3758{ 3758{
3759#if defined(__NetBSD__) 3759#if defined(__NetBSD__)
3760 int fd = kqueue(); 3760 int fd = kqueue();
3761 ... 3761 ...
3762#else 3762#else
3763 ... 3763 ...
3764#endif 3764#endif
3765} 3765}
3766</pre> 3766</pre>
3767 </td> 3767 </td>
3768<td> 3768<td>
3769<pre class="programlisting"> 3769<pre class="programlisting">
3770int 3770int
3771monitor_file(...) 3771monitor_file(...)
3772{ 3772{
3773#if defined(HAVE_KQUEUE) 3773#if defined(HAVE_KQUEUE)
3774 int fd = kqueue(); 3774 int fd = kqueue();
3775 ... 3775 ...
3776#else 3776#else
3777 ... 3777 ...
3778#endif 3778#endif
3779} 3779}
3780</pre> 3780</pre>
3781 </td> 3781 </td>
3782</tr> 3782</tr>
3783</tbody> 3783</tbody>
3784</table></div> 3784</table></div>
3785</div> 3785</div>
3786<br class="table-break"><p>For more information, please read the <span class="emphasis"><em>Making 3786<br class="table-break"><p>For more information, please read the <span class="emphasis"><em>Making
3787 packager-friendly software</em></span> article (<a class="ulink" href="http://www.onlamp.com/pub/a/onlamp/2005/03/31/packaging.html" target="_top">part 3787 packager-friendly software</em></span> article (<a class="ulink" href="http://www.onlamp.com/pub/a/onlamp/2005/03/31/packaging.html" target="_top">part
3788 1</a>, <a class="ulink" href="http://www.oreillynet.com/pub/a/onlamp/2005/04/28/packaging2.html" target="_top">part 3788 1</a>, <a class="ulink" href="http://www.oreillynet.com/pub/a/onlamp/2005/04/28/packaging2.html" target="_top">part
3789 2</a>). It summarizes multiple details on how to make 3789 2</a>). It summarizes multiple details on how to make
3790 software easier to package; all the suggestions in it were 3790 software easier to package; all the suggestions in it were
3791 collected from our experience in pkgsrc work, so they are possibly 3791 collected from our experience in pkgsrc work, so they are possibly
3792 helpful when creating patches too.</p> 3792 helpful when creating patches too.</p>
3793</div> 3793</div>
3794<div class="sect2"> 3794<div class="sect2">
3795<div class="titlepage"><div><div><h3 class="title"> 3795<div class="titlepage"><div><div><h3 class="title">
3796<a name="components.patches.feedback"></a>11.3.5. Feedback to the author</h3></div></div></div> 3796<a name="components.patches.feedback"></a>11.3.5. Feedback to the author</h3></div></div></div>
3797<p>Always, always, <span class="strong"><strong>always</strong></span> 3797<p>Always, always, <span class="strong"><strong>always</strong></span>
3798 feed back any <span class="emphasis"><em>portability fixes</em></span> or 3798 feed back any <span class="emphasis"><em>portability fixes</em></span> or
3799 improvements you do to a package to the mainstream developers. 3799 improvements you do to a package to the mainstream developers.
3800 This is the only way to get their attention on portability issues 3800 This is the only way to get their attention on portability issues
3801 and to ensure that future versions can be built out-of-the box on 3801 and to ensure that future versions can be built out-of-the box on
3802 NetBSD. Furthermore, any user that gets newer distfiles will get 3802 NetBSD. Furthermore, any user that gets newer distfiles will get
3803 the fixes straight from the packaged code.</p> 3803 the fixes straight from the packaged code.</p>
3804<p>This generally involves cleaning up the patches 3804<p>This generally involves cleaning up the patches
3805 (because sometimes the patches that are 3805 (because sometimes the patches that are
3806 added to pkgsrc are quick hacks), filing bug reports in the 3806 added to pkgsrc are quick hacks), filing bug reports in the
3807 appropriate trackers for the projects and working with the 3807 appropriate trackers for the projects and working with the
3808 mainstream authors to accept your changes. It is 3808 mainstream authors to accept your changes. It is
3809 <span class="emphasis"><em>extremely important</em></span> that you do it so that 3809 <span class="emphasis"><em>extremely important</em></span> that you do it so that
3810 the packages in pkgsrc are kept simple and thus further changes 3810 the packages in pkgsrc are kept simple and thus further changes
3811 can be done without much hassle.</p> 3811 can be done without much hassle.</p>
3812<p>When you have done this, please add a URL to the upstream 3812<p>When you have done this, please add a URL to the upstream
3813 bug report to the patch comment.</p> 3813 bug report to the patch comment.</p>
3814<p>Support the idea of free software!</p> 3814<p>Support the idea of free software!</p>
3815</div> 3815</div>
3816</div> 3816</div>
3817<div class="sect1"> 3817<div class="sect1">
3818<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3818<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3819<a name="other-mandatory-files"></a>11.4. Other mandatory files</h2></div></div></div> 3819<a name="other-mandatory-files"></a>11.4. Other mandatory files</h2></div></div></div>
3820<div class="variablelist"><dl class="variablelist"> 3820<div class="variablelist"><dl class="variablelist">
3821<dt><span class="term"><code class="filename">DESCR</code></span></dt> 3821<dt><span class="term"><code class="filename">DESCR</code></span></dt>
3822<dd><p>A multi-line description of the piece of software. This should include 3822<dd><p>A multi-line description of the piece of software. This should include
3823 any credits where they are due. Please bear in mind that others do not 3823 any credits where they are due. Please bear in mind that others do not
3824 share your sense of humour (or spelling idiosyncrasies), and that others 3824 share your sense of humour (or spelling idiosyncrasies), and that others
3825 will read everything that you write here.</p></dd> 3825 will read everything that you write here.</p></dd>
3826<dt><span class="term"><code class="filename">PLIST</code></span></dt> 3826<dt><span class="term"><code class="filename">PLIST</code></span></dt>
3827<dd><p>This file governs the files that are installed on your 3827<dd><p>This file governs the files that are installed on your
3828 system: all the binaries, manual pages, etc. There are other 3828 system: all the binaries, manual pages, etc. There are other
3829 directives which may be entered in this file, to control the 3829 directives which may be entered in this file, to control the
3830 creation and deletion of directories, and the location of 3830 creation and deletion of directories, and the location of
3831 inserted files. See <a class="xref" href="#plist" title="Chapter 13. PLIST issues">Chapter 13, <i>PLIST issues</i></a> for more 3831 inserted files. See <a class="xref" href="#plist" title="Chapter 13. PLIST issues">Chapter 13, <i>PLIST issues</i></a> for more
3832 information.</p></dd> 3832 information.</p></dd>
3833</dl></div> 3833</dl></div>
3834</div> 3834</div>
3835<div class="sect1"> 3835<div class="sect1">
3836<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3836<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3837<a name="components.optional"></a>11.5. Optional files</h2></div></div></div> 3837<a name="components.optional"></a>11.5. Optional files</h2></div></div></div>
3838<div class="sect2"> 3838<div class="sect2">
3839<div class="titlepage"><div><div><h3 class="title"> 3839<div class="titlepage"><div><div><h3 class="title">
3840<a name="components.optional.bin"></a>11.5.1. Files affecting the binary package</h3></div></div></div> 3840<a name="components.optional.bin"></a>11.5.1. Files affecting the binary package</h3></div></div></div>
3841<div class="variablelist"><dl class="variablelist"> 3841<div class="variablelist"><dl class="variablelist">
3842<dt><span class="term"><code class="filename">INSTALL</code></span></dt> 3842<dt><span class="term"><code class="filename">INSTALL</code></span></dt>
3843<dd> 3843<dd>
3844<p>This shell script is invoked twice by <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. 3844<p>This shell script is invoked twice by <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>.
3845 First time after package extraction and before files are 3845 First time after package extraction and before files are
3846 moved in place, the second time after the files to install 3846 moved in place, the second time after the files to install
3847 are moved in place. This can be used to do any custom 3847 are moved in place. This can be used to do any custom
3848 procedures not possible with @exec commands in 3848 procedures not possible with @exec commands in
3849 <code class="filename">PLIST</code>. See <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> and 3849 <code class="filename">PLIST</code>. See <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> and
3850 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> for more information. See also <a class="xref" href="#files-and-dirs-outside-prefix" title="15.1. Files and directories outside the installation prefix">Section 15.1, &#8220;Files and directories outside the installation prefix&#8221;</a>. 3850 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> for more information. See also <a class="xref" href="#files-and-dirs-outside-prefix" title="15.1. Files and directories outside the installation prefix">Section 15.1, &#8220;Files and directories outside the installation prefix&#8221;</a>.
3851 Please note that you can modify variables in it easily by using 3851 Please note that you can modify variables in it easily by using
3852 <code class="varname">FILES_SUBST</code> in the package's 3852 <code class="varname">FILES_SUBST</code> in the package's
3853 <code class="filename">Makefile</code>:</p> 3853 <code class="filename">Makefile</code>:</p>
3854<pre class="programlisting"> 3854<pre class="programlisting">
3855FILES_SUBST+= SOMEVAR="somevalue" 3855FILES_SUBST+= SOMEVAR="somevalue"
3856</pre> 3856</pre>
3857<p>replaces "@SOMEVAR@" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in the 3857<p>replaces "@SOMEVAR@" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in the
3858 <code class="filename">INSTALL</code>. By default, substitution is 3858 <code class="filename">INSTALL</code>. By default, substitution is
3859 performed for <code class="varname">PREFIX</code>, 3859 performed for <code class="varname">PREFIX</code>,
3860 <code class="varname">LOCALBASE</code>, <code class="varname">X11BASE</code>, 3860 <code class="varname">LOCALBASE</code>, <code class="varname">X11BASE</code>,
3861 <code class="varname">VARBASE</code>, and a few others, type 3861 <code class="varname">VARBASE</code>, and a few others, type
3862 <span class="command"><strong>make help topic=FILES_SUBST</strong></span> for a 3862 <span class="command"><strong>make help topic=FILES_SUBST</strong></span> for a
3863 complete list.</p> 3863 complete list.</p>
3864</dd> 3864</dd>
3865<dt><span class="term"><code class="filename">DEINSTALL</code></span></dt> 3865<dt><span class="term"><code class="filename">DEINSTALL</code></span></dt>
3866<dd><p>This script is executed before and after any files are removed. It is 3866<dd><p>This script is executed before and after any files are removed. It is
3867 this script's responsibility to clean up any additional messy details 3867 this script's responsibility to clean up any additional messy details
3868 around the package's installation, since all pkg_delete knows is how to 3868 around the package's installation, since all pkg_delete knows is how to
3869 delete the files created in the original distribution. 3869 delete the files created in the original distribution.
3870 See <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> 3870 See <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a>
3871 and <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> for more information. 3871 and <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> for more information.
3872 The same methods to replace variables can be used as for 3872 The same methods to replace variables can be used as for
3873 the <code class="filename">INSTALL</code> file.</p></dd> 3873 the <code class="filename">INSTALL</code> file.</p></dd>
3874<dt><span class="term"><code class="filename">MESSAGE</code></span></dt> 3874<dt><span class="term"><code class="filename">MESSAGE</code></span></dt>
3875<dd> 3875<dd>
3876<p>This file is displayed after installation of the package. 3876<p>This file is displayed after installation of the package.
3877 Useful for things like legal notices on almost-free 3877 Useful for things like legal notices on almost-free
3878 software and hints for updating config files after 3878 software and hints for updating config files after
3879 installing modules for apache, PHP etc. 3879 installing modules for apache, PHP etc.
3880 Please note that you can modify variables in it easily by using 3880 Please note that you can modify variables in it easily by using
3881 <code class="varname">MESSAGE_SUBST</code> in the package's 3881 <code class="varname">MESSAGE_SUBST</code> in the package's
3882 <code class="filename">Makefile</code>:</p> 3882 <code class="filename">Makefile</code>:</p>
3883<pre class="programlisting"> 3883<pre class="programlisting">
3884MESSAGE_SUBST+= SOMEVAR="somevalue" 3884MESSAGE_SUBST+= SOMEVAR="somevalue"
3885</pre> 3885</pre>
3886<p>replaces "${SOMEVAR}" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in 3886<p>replaces "${SOMEVAR}" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in
3887 <code class="filename">MESSAGE</code>. By default, substitution is 3887 <code class="filename">MESSAGE</code>. By default, substitution is
3888 performed for <code class="varname">PKGNAME</code>, 3888 performed for <code class="varname">PKGNAME</code>,
3889 <code class="varname">PKGBASE</code>, <code class="varname">PREFIX</code>, 3889 <code class="varname">PKGBASE</code>, <code class="varname">PREFIX</code>,
3890 <code class="varname">LOCALBASE</code>, <code class="varname">X11BASE</code>, 3890 <code class="varname">LOCALBASE</code>, <code class="varname">X11BASE</code>,
3891 <code class="varname">PKG_SYSCONFDIR</code>, 3891 <code class="varname">PKG_SYSCONFDIR</code>,
3892 <code class="varname">ROOT_GROUP</code>, and 3892 <code class="varname">ROOT_GROUP</code>, and
3893 <code class="varname">ROOT_USER</code>.</p> 3893 <code class="varname">ROOT_USER</code>.</p>
3894<p>You can display a different or additional files by 3894<p>You can display a different or additional files by
3895 setting the <code class="varname">MESSAGE_SRC</code> variable. Its 3895 setting the <code class="varname">MESSAGE_SRC</code> variable. Its
3896 default is <code class="filename">MESSAGE</code>, if the file 3896 default is <code class="filename">MESSAGE</code>, if the file
3897 exists.</p> 3897 exists.</p>
3898</dd> 3898</dd>
3899<dt><span class="term"><code class="filename">ALTERNATIVES</code></span></dt> 3899<dt><span class="term"><code class="filename">ALTERNATIVES</code></span></dt>
3900<dd> 3900<dd>
3901<p>This file is used by the alternatives framework. 3901<p>This file is used by the alternatives framework.
3902 It creates, configures, and destroys generic wrappers used to 3902 It creates, configures, and destroys generic wrappers used to
3903 run programs with similar interfaces. 3903 run programs with similar interfaces.
3904 See pkg_alternatives(8) from pkgtools/pkg_alternatives 3904 See pkg_alternatives(8) from pkgtools/pkg_alternatives
3905 for more information.</p> 3905 for more information.</p>
3906<p>Each line of the file contains two filenames, first 3906<p>Each line of the file contains two filenames, first
3907 the wrapper and then the alternative provided by the package. 3907 the wrapper and then the alternative provided by the package.
3908 Both paths are relative to <code class="varname">PREFIX</code>.</p> 3908 Both paths are relative to <code class="varname">PREFIX</code>.</p>
3909</dd> 3909</dd>
3910</dl></div> 3910</dl></div>
3911</div> 3911</div>
3912<div class="sect2"> 3912<div class="sect2">
3913<div class="titlepage"><div><div><h3 class="title"> 3913<div class="titlepage"><div><div><h3 class="title">
3914<a name="components.optional.build"></a>11.5.2. Files affecting the build process</h3></div></div></div> 3914<a name="components.optional.build"></a>11.5.2. Files affecting the build process</h3></div></div></div>
3915<div class="variablelist"><dl class="variablelist"> 3915<div class="variablelist"><dl class="variablelist">
3916<dt><span class="term"><code class="filename">Makefile.common</code></span></dt> 3916<dt><span class="term"><code class="filename">Makefile.common</code></span></dt>
3917<dd><p>This file contains arbitrary things that could 3917<dd><p>This file contains arbitrary things that could
3918 also go into a <code class="filename">Makefile</code>, but its purpose is 3918 also go into a <code class="filename">Makefile</code>, but its purpose is
3919 to be used by more than one package. This file should only be 3919 to be used by more than one package. This file should only be
3920 used when the packages that will use the file are known in 3920 used when the packages that will use the file are known in
3921 advance. For other purposes it is often better to write a 3921 advance. For other purposes it is often better to write a
3922 <code class="filename">*.mk</code> file and give it a good name that 3922 <code class="filename">*.mk</code> file and give it a good name that
3923 describes what it does.</p></dd> 3923 describes what it does.</p></dd>
3924<dt><span class="term"><code class="filename">buildlink3.mk</code></span></dt> 3924<dt><span class="term"><code class="filename">buildlink3.mk</code></span></dt>
3925<dd><p>This file contains the dependency information 3925<dd><p>This file contains the dependency information
3926 for the buildlink3 framework (see <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a>).</p></dd> 3926 for the buildlink3 framework (see <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a>).</p></dd>
3927<dt><span class="term"><code class="filename">hacks.mk</code></span></dt> 3927<dt><span class="term"><code class="filename">hacks.mk</code></span></dt>
3928<dd><p>This file contains workarounds for compiler bugs 3928<dd><p>This file contains workarounds for compiler bugs
3929 and similar things. It is included automatically by the pkgsrc 3929 and similar things. It is included automatically by the pkgsrc
3930 infrastructure, so you don't need an extra 3930 infrastructure, so you don't need an extra
3931 <code class="literal">.include</code> line for 3931 <code class="literal">.include</code> line for
3932 it.</p></dd> 3932 it.</p></dd>
3933<dt><span class="term"><code class="filename">options.mk</code></span></dt> 3933<dt><span class="term"><code class="filename">options.mk</code></span></dt>
3934<dd><p>This file contains the code for the 3934<dd><p>This file contains the code for the
3935 package-specific options (see <a class="xref" href="#options" title="Chapter 16. Options handling">Chapter 16, <i>Options handling</i></a>) that can be 3935 package-specific options (see <a class="xref" href="#options" title="Chapter 16. Options handling">Chapter 16, <i>Options handling</i></a>) that can be
3936 selected by the user. If a package has only one or two options, 3936 selected by the user. If a package has only one or two options,
3937 it is equally acceptable to put the code directly into the 3937 it is equally acceptable to put the code directly into the
3938 <code class="filename">Makefile</code>.</p></dd> 3938 <code class="filename">Makefile</code>.</p></dd>
3939</dl></div> 3939</dl></div>
3940</div> 3940</div>
3941<div class="sect2"> 3941<div class="sect2">
3942<div class="titlepage"><div><div><h3 class="title"> 3942<div class="titlepage"><div><div><h3 class="title">
3943<a name="components.optional.none"></a>11.5.3. Files affecting nothing at all</h3></div></div></div> 3943<a name="components.optional.none"></a>11.5.3. Files affecting nothing at all</h3></div></div></div>
3944<div class="variablelist"><dl class="variablelist"> 3944<div class="variablelist"><dl class="variablelist">
3945<dt><span class="term"><code class="filename">README*</code></span></dt> 3945<dt><span class="term"><code class="filename">README*</code></span></dt>
3946<dd><p>These files do not take place in the creation of 3946<dd><p>These files do not take place in the creation of
3947 a package and thus are purely informative to the package 3947 a package and thus are purely informative to the package
3948 developer.</p></dd> 3948 developer.</p></dd>
3949<dt><span class="term"><code class="filename">TODO</code></span></dt> 3949<dt><span class="term"><code class="filename">TODO</code></span></dt>
3950<dd><p>This file contains things that need to be done 3950<dd><p>This file contains things that need to be done
3951 to make the package even 3951 to make the package even
3952 better.</p></dd> 3952 better.</p></dd>
3953</dl></div> 3953</dl></div>
3954</div> 3954</div>
3955</div> 3955</div>
3956<div class="sect1"> 3956<div class="sect1">
3957<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3957<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3958<a name="work-dir"></a>11.6. <code class="filename">work*</code> 3958<a name="work-dir"></a>11.6. <code class="filename">work*</code>
3959</h2></div></div></div> 3959</h2></div></div></div>
3960<p>When you type <span class="command"><strong>make</strong></span>, the distribution files are 3960<p>When you type <span class="command"><strong>make</strong></span>, the distribution files are
3961 unpacked into the directory denoted by 3961 unpacked into the directory denoted by
3962 <code class="varname">WRKDIR</code>. It can be removed by running 3962 <code class="varname">WRKDIR</code>. It can be removed by running
3963 <span class="command"><strong>make clean</strong></span>. Besides the sources, this 3963 <span class="command"><strong>make clean</strong></span>. Besides the sources, this
3964 directory is also used to keep various timestamp files. 3964 directory is also used to keep various timestamp files.
3965 The directory gets <span class="emphasis"><em>removed completely</em></span> on clean. 3965 The directory gets <span class="emphasis"><em>removed completely</em></span> on clean.
3966 The default is <code class="filename">${.CURDIR}/work</code> 3966 The default is <code class="filename">${.CURDIR}/work</code>
3967 or <code class="filename">${.CURDIR}/work.${MACHINE_ARCH}</code> 3967 or <code class="filename">${.CURDIR}/work.${MACHINE_ARCH}</code>
3968 if <code class="varname">OBJMACHINE</code> is set.</p> 3968 if <code class="varname">OBJMACHINE</code> is set.</p>
3969</div> 3969</div>
3970<div class="sect1"> 3970<div class="sect1">
3971<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3971<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3972<a name="files-dir"></a>11.7. <code class="filename">files/*</code> 3972<a name="files-dir"></a>11.7. <code class="filename">files/*</code>
3973</h2></div></div></div> 3973</h2></div></div></div>
3974<p>If you have any files that you wish to be placed in the package prior 3974<p>If you have any files that you wish to be placed in the package prior
3975 to configuration or building, you could place these files here and use 3975 to configuration or building, you could place these files here and use
3976 a <span class="command"><strong>${CP}</strong></span> command in the 3976 a <span class="command"><strong>${CP}</strong></span> command in the
3977 <span class="quote">&#8220;<span class="quote">pre-configure</span>&#8221;</span> target to achieve 3977 <span class="quote">&#8220;<span class="quote">pre-configure</span>&#8221;</span> target to achieve
3978 this. Alternatively, you could simply diff the file against 3978 this. Alternatively, you could simply diff the file against
3979 <code class="filename">/dev/null</code> and use the patch mechanism to manage 3979 <code class="filename">/dev/null</code> and use the patch mechanism to manage
3980 the creation of this file.</p> 3980 the creation of this file.</p>
3981<p>If you want to share files in this way with other 3981<p>If you want to share files in this way with other
3982 packages, set the <code class="varname">FILESDIR</code> variable to point 3982 packages, set the <code class="varname">FILESDIR</code> variable to point
3983 to the other package's <code class="filename">files</code> directory, 3983 to the other package's <code class="filename">files</code> directory,
3984 e.g.:</p> 3984 e.g.:</p>
3985<pre class="programlisting"> 3985<pre class="programlisting">
3986FILESDIR=${.CURDIR}/../xemacs/files 3986FILESDIR=${.CURDIR}/../xemacs/files
3987</pre> 3987</pre>
3988</div> 3988</div>
3989</div> 3989</div>
3990<div class="chapter"> 3990<div class="chapter">
3991<div class="titlepage"><div><div><h2 class="title"> 3991<div class="titlepage"><div><div><h2 class="title">
3992<a name="makefile"></a>Chapter 12. Programming in <code class="filename">Makefile</code>s</h2></div></div></div> 3992<a name="makefile"></a>Chapter 12. Programming in <code class="filename">Makefile</code>s</h2></div></div></div>
3993<div class="toc"> 3993<div class="toc">
3994<p><b>Table of Contents</b></p> 3994<p><b>Table of Contents</b></p>
3995<dl class="toc"> 3995<dl class="toc">
3996<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt> 3996<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt>
3997<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt> 3997<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt>
3998<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd> 3998<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd>
3999<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt> 3999<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt>
4000<dd><dl> 4000<dd><dl>
4001<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt> 4001<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt>
4002<dt><span class="sect2"><a href="#echo-literal">12.3.2. Echoing a string exactly as-is</a></span></dt> 4002<dt><span class="sect2"><a href="#echo-literal">12.3.2. Echoing a string exactly as-is</a></span></dt>
4003<dt><span class="sect2"><a href="#cflags-gnu-configure">12.3.3. Passing <code class="varname">CFLAGS</code> to GNU configure scripts</a></span></dt> 4003<dt><span class="sect2"><a href="#cflags-gnu-configure">12.3.3. Passing <code class="varname">CFLAGS</code> to GNU configure scripts</a></span></dt>
4004<dt><span class="sect2"><a href="#empty-variables">12.3.4. Handling possibly empty variables</a></span></dt> 4004<dt><span class="sect2"><a href="#empty-variables">12.3.4. Handling possibly empty variables</a></span></dt>
4005</dl></dd> 4005</dl></dd>
4006</dl> 4006</dl>
4007</div> 4007</div>
4008<p>Pkgsrc consists of many <code class="filename">Makefile</code> fragments, 4008<p>Pkgsrc consists of many <code class="filename">Makefile</code> fragments,
4009 each of which forms a well-defined part of the pkgsrc system. Using 4009 each of which forms a well-defined part of the pkgsrc system. Using
4010 the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> system as a programming language for a big system 4010 the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> system as a programming language for a big system
4011 like pkgsrc requires some discipline to keep the code correct and 4011 like pkgsrc requires some discipline to keep the code correct and
4012 understandable.</p> 4012 understandable.</p>
4013<p>The basic ingredients for <code class="filename">Makefile</code> 4013<p>The basic ingredients for <code class="filename">Makefile</code>
4014 programming are variables (which are actually macros) and shell 4014 programming are variables (which are actually macros) and shell
4015 commands. Among these shell commands may even be more complex ones 4015 commands. Among these shell commands may even be more complex ones
4016 like <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?awk+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">awk</span>(1)</span></a> programs. To make sure that every shell command runs 4016 like <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?awk+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">awk</span>(1)</span></a> programs. To make sure that every shell command runs
4017 as intended it is necessary to quote all variables correctly when they 4017 as intended it is necessary to quote all variables correctly when they
4018 are used.</p> 4018 are used.</p>
4019<p>This chapter describes some patterns, that appear quite often in 4019<p>This chapter describes some patterns, that appear quite often in
4020 <code class="filename">Makefile</code>s, including the pitfalls that come along 4020 <code class="filename">Makefile</code>s, including the pitfalls that come along
4021 with them.</p> 4021 with them.</p>
4022<div class="sect1"> 4022<div class="sect1">
4023<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4023<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4024<a name="makefile.style"></a>12.1. Caveats</h2></div></div></div> 4024<a name="makefile.style"></a>12.1. Caveats</h2></div></div></div>
4025<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 4025<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
4026<p>When you are creating a file as a 4026<p>When you are creating a file as a
4027 target of a rule, always write the data to a temporary file first 4027 target of a rule, always write the data to a temporary file first
4028 and finally rename that file. Otherwise there might occur an error 4028 and finally rename that file. Otherwise there might occur an error
4029 in the middle of generating the file, and when the user runs 4029 in the middle of generating the file, and when the user runs
4030 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> for the second time, the file exists and will not be 4030 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> for the second time, the file exists and will not be
4031 regenerated properly. Example:</p> 4031 regenerated properly. Example:</p>
4032<pre class="programlisting"> 4032<pre class="programlisting">
4033wrong: 4033wrong:
4034 @echo "line 1" &gt; ${.TARGET} 4034 @echo "line 1" &gt; ${.TARGET}
4035 @echo "line 2" &gt;&gt; ${.TARGET} 4035 @echo "line 2" &gt;&gt; ${.TARGET}
4036 @false 4036 @false
4037 4037
4038correct: 4038correct:
4039 @echo "line 1" &gt; ${.TARGET}.tmp 4039 @echo "line 1" &gt; ${.TARGET}.tmp
4040 @echo "line 2" &gt;&gt; ${.TARGET}.tmp 4040 @echo "line 2" &gt;&gt; ${.TARGET}.tmp
4041 @false 4041 @false
4042 @mv ${.TARGET}.tmp ${.TARGET} 4042 @mv ${.TARGET}.tmp ${.TARGET}
4043</pre> 4043</pre>
4044<p>When you run <span class="command"><strong>make wrong</strong></span> twice, the file 4044<p>When you run <span class="command"><strong>make wrong</strong></span> twice, the file
4045 <code class="filename">wrong</code> will exist, although there was an error 4045 <code class="filename">wrong</code> will exist, although there was an error
4046 message in the first run. On the other hand, running <span class="command"><strong>make 4046 message in the first run. On the other hand, running <span class="command"><strong>make
4047 correct</strong></span> gives an error message twice, as expected.</p> 4047 correct</strong></span> gives an error message twice, as expected.</p>
4048<p>You might remember that <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> sometimes removes 4048<p>You might remember that <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> sometimes removes
4049 <code class="literal">${.TARGET}</code> in case of error, but this only 4049 <code class="literal">${.TARGET}</code> in case of error, but this only
4050 happens when it is interrupted, for example by pressing 4050 happens when it is interrupted, for example by pressing
4051 <code class="literal">^C</code>. This does <span class="emphasis"><em>not</em></span> happen 4051 <code class="literal">^C</code>. This does <span class="emphasis"><em>not</em></span> happen
4052 when one of the commands fails (like <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?false+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">false</span>(1)</span></a> above).</p> 4052 when one of the commands fails (like <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?false+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">false</span>(1)</span></a> above).</p>
4053</li></ul></div> 4053</li></ul></div>
4054</div> 4054</div>
4055<div class="sect1"> 4055<div class="sect1">
4056<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4056<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4057<a name="makefile.variables"></a>12.2. <code class="filename">Makefile</code> variables</h2></div></div></div> 4057<a name="makefile.variables"></a>12.2. <code class="filename">Makefile</code> variables</h2></div></div></div>
4058<p><code class="filename">Makefile</code> variables contain strings that 4058<p><code class="filename">Makefile</code> variables contain strings that
4059 can be processed using the five operators ``='', ``+='', ``?='', 4059 can be processed using the five operators ``='', ``+='', ``?='',
4060 ``:='', and ``!='', which are described in the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> man 4060 ``:='', and ``!='', which are described in the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> man
4061 page.</p> 4061 page.</p>
4062<p>When a variable's value is parsed from a 4062<p>When a variable's value is parsed from a
4063 <code class="filename">Makefile</code>, the hash character ``#'' and the 4063 <code class="filename">Makefile</code>, the hash character ``#'' and the
4064 backslash character ``\'' are handled specially. If a backslash is 4064 backslash character ``\'' are handled specially. If a backslash is
4065 followed by a newline, any whitespace immediately in front of the 4065 followed by a newline, any whitespace immediately in front of the
4066 backslash, the backslash, the newline, and any whitespace 4066 backslash, the backslash, the newline, and any whitespace
4067 immediately behind the newline are replaced with a single space. A 4067 immediately behind the newline are replaced with a single space. A
4068 backslash character and an immediately following hash character are 4068 backslash character and an immediately following hash character are
4069 replaced with a single hash character. Otherwise, the backslash is 4069 replaced with a single hash character. Otherwise, the backslash is
4070 passed as is. In a variable assignment, any hash character that is 4070 passed as is. In a variable assignment, any hash character that is
4071 not preceded by a backslash starts a comment that continues upto the 4071 not preceded by a backslash starts a comment that continues upto the
4072 end of the logical line.</p> 4072 end of the logical line.</p>
4073<p>The evaluation of variables either happens immediately or lazy. 4073<p>The evaluation of variables either happens immediately or lazy.
4074 It happens immediately when the variable occurs 4074 It happens immediately when the variable occurs
4075 on the right-hand side of the ``:='' or the ``!='' operator, in a 4075 on the right-hand side of the ``:='' or the ``!='' operator, in a
4076 <code class="varname">.if</code> condition or a <code class="varname">.for</code> loop. 4076 <code class="varname">.if</code> condition or a <code class="varname">.for</code> loop.
4077 In the other cases, it is evaluated lazily.</p> 4077 In the other cases, it is evaluated lazily.</p>
4078<p>Some of the modifiers split the string into words and then 4078<p>Some of the modifiers split the string into words and then
4079 operate on the words, others operate on the string as a whole. When 4079 operate on the words, others operate on the string as a whole. When
4080 a string is split into words, it is split like in <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?sh+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">sh</span>(1)</span></a>.</p> 4080 a string is split into words, it is split like in <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?sh+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">sh</span>(1)</span></a>.</p>
4081<p>There are several types of variables that should be handled 4081<p>There are several types of variables that should be handled
4082 differently. Strings and two types of lists.</p> 4082 differently. Strings and two types of lists.</p>
4083<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4083<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4084<li class="listitem"><p><span class="emphasis"><em>Strings</em></span> can contain arbitrary 4084<li class="listitem"><p><span class="emphasis"><em>Strings</em></span> can contain arbitrary
4085 characters. Nevertheless, you should restrict yourself to only 4085 characters. Nevertheless, you should restrict yourself to only
4086 using printable characters. Examples are 4086 using printable characters. Examples are
4087 <code class="varname">PREFIX</code> and 4087 <code class="varname">PREFIX</code> and
4088 <code class="varname">COMMENT</code>.</p></li> 4088 <code class="varname">COMMENT</code>.</p></li>
4089<li class="listitem"><p><span class="emphasis"><em>Internal lists</em></span> are lists that 4089<li class="listitem"><p><span class="emphasis"><em>Internal lists</em></span> are lists that
4090 are never exported to any shell command. Their elements are 4090 are never exported to any shell command. Their elements are
4091 separated by whitespace. Therefore, the elements themselves cannot 4091 separated by whitespace. Therefore, the elements themselves cannot
4092 have embedded whitespace. Any other characters are allowed. 4092 have embedded whitespace. Any other characters are allowed.
4093 Internal lists can be used in <span class="command"><strong>.for</strong></span> loops. 4093 Internal lists can be used in <span class="command"><strong>.for</strong></span> loops.
4094 Examples are <code class="varname">DEPENDS</code> and 4094 Examples are <code class="varname">DEPENDS</code> and
4095 <code class="varname">BUILD_DEPENDS</code>.</p></li> 4095 <code class="varname">BUILD_DEPENDS</code>.</p></li>
4096<li class="listitem"><p><span class="emphasis"><em>External lists</em></span> are lists that 4096<li class="listitem"><p><span class="emphasis"><em>External lists</em></span> are lists that
4097 may be exported to a shell command. Their elements can contain any 4097 may be exported to a shell command. Their elements can contain any
4098 characters, including whitespace. That's why they cannot be used 4098 characters, including whitespace. That's why they cannot be used
4099 in <span class="command"><strong>.for</strong></span> loops. Examples are 4099 in <span class="command"><strong>.for</strong></span> loops. Examples are
4100 <code class="varname">DISTFILES</code> and 4100 <code class="varname">DISTFILES</code> and
4101 <code class="varname">MASTER_SITES</code>.</p></li> 4101 <code class="varname">MASTER_SITES</code>.</p></li>
4102</ul></div> 4102</ul></div>
4103<div class="sect2"> 4103<div class="sect2">
4104<div class="titlepage"><div><div><h3 class="title"> 4104<div class="titlepage"><div><div><h3 class="title">
4105<a name="makefile.variables.names"></a>12.2.1. Naming conventions</h3></div></div></div> 4105<a name="makefile.variables.names"></a>12.2.1. Naming conventions</h3></div></div></div>
4106<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4106<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4107<li class="listitem"><p>All variable names starting with an underscore 4107<li class="listitem"><p>All variable names starting with an underscore
4108 are reserved for use by the pkgsrc infrastructure. They shall 4108 are reserved for use by the pkgsrc infrastructure. They shall
4109 not be used by package 4109 not be used by package
4110 <code class="filename">Makefile</code>s.</p></li> 4110 <code class="filename">Makefile</code>s.</p></li>
4111<li class="listitem"><p>In <span class="command"><strong>.for</strong></span> loops you should use 4111<li class="listitem"><p>In <span class="command"><strong>.for</strong></span> loops you should use
4112 lowercase variable names for the iteration 4112 lowercase variable names for the iteration
4113 variables.</p></li> 4113 variables.</p></li>
4114<li class="listitem"><p>All list variables should have a ``plural'' 4114<li class="listitem"><p>All list variables should have a ``plural''
4115 name, e.g. <code class="varname">PKG_OPTIONS</code> or 4115 name, e.g. <code class="varname">PKG_OPTIONS</code> or
4116 <code class="varname">DISTFILES</code>.</p></li> 4116 <code class="varname">DISTFILES</code>.</p></li>
4117</ul></div> 4117</ul></div>
4118</div> 4118</div>
4119</div> 4119</div>
4120<div class="sect1"> 4120<div class="sect1">
4121<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4121<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4122<a name="makefile.code"></a>12.3. Code snippets</h2></div></div></div> 4122<a name="makefile.code"></a>12.3. Code snippets</h2></div></div></div>
4123<div class="sect2"> 4123<div class="sect2">
4124<div class="titlepage"><div><div><h3 class="title"> 4124<div class="titlepage"><div><div><h3 class="title">
4125<a name="adding-to-list"></a>12.3.1. Adding things to a list</h3></div></div></div> 4125<a name="adding-to-list"></a>12.3.1. Adding things to a list</h3></div></div></div>
4126<p>When adding a string that possibly contains whitespace or quotes to 4126<p>When adding a string that possibly contains whitespace or quotes to
4127a list (example 1), it must be quoted using the <code class="code">:Q</code> 4127a list (example 1), it must be quoted using the <code class="code">:Q</code>
4128modifier.</p> 4128modifier.</p>
4129<p>When adding another list to a list (example 2), it must not be 4129<p>When adding another list to a list (example 2), it must not be
4130quoted, since its elements are already quoted.</p> 4130quoted, since its elements are already quoted.</p>
4131<pre class="programlisting"> 4131<pre class="programlisting">
4132STRING= foo * bar `date` 4132STRING= foo * bar `date`
4133LIST= # empty 4133LIST= # empty
4134ANOTHER_LIST= a=b c=d 4134ANOTHER_LIST= a=b c=d
4135 4135
4136LIST+= ${STRING:Q} # 1 4136LIST+= ${STRING:Q} # 1
4137LIST+= ${ANOTHER_LIST} # 2 4137LIST+= ${ANOTHER_LIST} # 2
4138</pre> 4138</pre>
4139</div> 4139</div>
4140<div class="sect2"> 4140<div class="sect2">
4141<div class="titlepage"><div><div><h3 class="title"> 4141<div class="titlepage"><div><div><h3 class="title">
4142<a name="echo-literal"></a>12.3.2. Echoing a string exactly as-is</h3></div></div></div> 4142<a name="echo-literal"></a>12.3.2. Echoing a string exactly as-is</h3></div></div></div>
4143<p>Echoing a string containing special characters needs special 4143<p>Echoing a string containing special characters needs special
4144work.</p> 4144work.</p>
4145<pre class="programlisting"> 4145<pre class="programlisting">
4146STRING= foo bar &lt; &gt; * `date` $$HOME ' " 4146STRING= foo bar &lt; &gt; * `date` $$HOME ' "
4147EXAMPLE_ENV= string=${STRING:Q} x=multiple\ quoted\ words 4147EXAMPLE_ENV= string=${STRING:Q} x=multiple\ quoted\ words
4148 4148
4149all: 4149all:
4150 echo ${STRING} # 1 4150 echo ${STRING} # 1
4151 echo ${STRING:Q} # 2 4151 echo ${STRING:Q} # 2
4152 printf '%s\n' ${STRING:Q}'' # 3 4152 printf '%s\n' ${STRING:Q}'' # 3
4153 env ${EXAMPLE_ENV} sh -c 'echo "$$string"; echo "$$x"' # 4 4153 env ${EXAMPLE_ENV} sh -c 'echo "$$string"; echo "$$x"' # 4
4154</pre> 4154</pre>
4155<p>Example 1 leads to a syntax error in the shell, as the characters 4155<p>Example 1 leads to a syntax error in the shell, as the characters
4156are just copied.</p> 4156are just copied.</p>
4157<p>Example 2 quotes the string so that the shell interprets it 4157<p>Example 2 quotes the string so that the shell interprets it
4158correctly. But the echo command may additionally interpret strings with a 4158correctly. But the echo command may additionally interpret strings with a
4159leading dash or those containing backslashes.</p> 4159leading dash or those containing backslashes.</p>
4160<p>Example 3 can handle arbitrary strings, since <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?printf+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">printf</span>(1)</span></a> only 4160<p>Example 3 can handle arbitrary strings, since <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?printf+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">printf</span>(1)</span></a> only
4161interprets the format string, but not the next argument.</p> 4161interprets the format string, but not the next argument.</p>
4162<p>In example 4, the <code class="varname">EXAMPLE_ENV</code> does not 4162<p>In example 4, the <code class="varname">EXAMPLE_ENV</code> does not
4163need to be quoted because the quoting has already been done 4163need to be quoted because the quoting has already been done
4164when adding elements to the list.</p> 4164when adding elements to the list.</p>
4165</div> 4165</div>
4166<div class="sect2"> 4166<div class="sect2">
4167<div class="titlepage"><div><div><h3 class="title"> 4167<div class="titlepage"><div><div><h3 class="title">
4168<a name="cflags-gnu-configure"></a>12.3.3. Passing <code class="varname">CFLAGS</code> to GNU configure scripts</h3></div></div></div> 4168<a name="cflags-gnu-configure"></a>12.3.3. Passing <code class="varname">CFLAGS</code> to GNU configure scripts</h3></div></div></div>
4169<p>When passing <code class="varname">CFLAGS</code> or similar variables to a 4169<p>When passing <code class="varname">CFLAGS</code> or similar variables to a
4170GNU-style configure script (especially those that call other configure 4170GNU-style configure script (especially those that call other configure
4171scripts), it must not have leading or trailing whitespace, since 4171scripts), it must not have leading or trailing whitespace, since
4172otherwise the configure script gets confused. To trim leading and 4172otherwise the configure script gets confused. To trim leading and
4173trailing whitespace, use the <code class="code">:M</code> modifier, as in the 4173trailing whitespace, use the <code class="code">:M</code> modifier, as in the
4174following example:</p> 4174following example:</p>
4175<pre class="programlisting"> 4175<pre class="programlisting">
4176CPPFLAGS= # empty 4176CPPFLAGS= # empty
4177CPPFLAGS+= -Wundef -DPREFIX=\"${PREFIX}\" 4177CPPFLAGS+= -Wundef -DPREFIX=\"${PREFIX}\"
4178CPPFLAGS+= ${MY_CPPFLAGS} 4178CPPFLAGS+= ${MY_CPPFLAGS}
4179 4179
4180CONFIGURE_ARGS+= CPPFLAGS=${CPPFLAGS:M*:Q} 4180CONFIGURE_ARGS+= CPPFLAGS=${CPPFLAGS:M*:Q}
4181 4181
4182all: 4182all:
4183 echo x${CPPFLAGS:Q}x # leading and trailing whitespace 4183 echo x${CPPFLAGS:Q}x # leading and trailing whitespace
4184 echo x${CONFIGURE_ARGS:Q}x # properly trimmed 4184 echo x${CONFIGURE_ARGS:Q}x # properly trimmed
4185</pre> 4185</pre>
4186<p>In this example, <code class="varname">CPPFLAGS</code> has both leading and 4186<p>In this example, <code class="varname">CPPFLAGS</code> has both leading and
4187trailing whitespace because the <code class="code">+=</code> operator always adds a 4187trailing whitespace because the <code class="code">+=</code> operator always adds a
4188space.</p> 4188space.</p>
4189</div> 4189</div>
4190<div class="sect2"> 4190<div class="sect2">
4191<div class="titlepage"><div><div><h3 class="title"> 4191<div class="titlepage"><div><div><h3 class="title">
4192<a name="empty-variables"></a>12.3.4. Handling possibly empty variables</h3></div></div></div> 4192<a name="empty-variables"></a>12.3.4. Handling possibly empty variables</h3></div></div></div>
4193<p>When a possibly empty variable is used in a shell program, it may 4193<p>When a possibly empty variable is used in a shell program, it may
4194lead to a syntax error.</p> 4194lead to a syntax error.</p>
4195<pre class="programlisting"> 4195<pre class="programlisting">
4196EGFILES= # empty 4196EGFILES= # empty
4197 4197
4198install-examples: # produces a syntax error in the shell 4198install-examples: # produces a syntax error in the shell
4199 for egfile in ${EGFILES}; do \ 4199 for egfile in ${EGFILES}; do \
4200 echo "Installing $$egfile"; \ 4200 echo "Installing $$egfile"; \
4201 done 4201 done
4202</pre> 4202</pre>
4203<p>The shell only sees the text <code class="code">for egfile in ; do</code>, since 4203<p>The shell only sees the text <code class="code">for egfile in ; do</code>, since
4204<code class="code">${EGFILES}</code> is replaced with an empty string by <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>. 4204<code class="code">${EGFILES}</code> is replaced with an empty string by <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>.
4205To fix this syntax error, use one of the snippets below.</p> 4205To fix this syntax error, use one of the snippets below.</p>
4206<pre class="programlisting"> 4206<pre class="programlisting">
4207EMPTY= # empty 4207EMPTY= # empty
4208 4208
4209install-examples: 4209install-examples:
4210 for egfile in ${EGFILES} ""; do \ 4210 for egfile in ${EGFILES} ""; do \
4211 [ -n "$$egfile" ] || continue; \ 4211 [ -n "$$egfile" ] || continue; \
4212 echo "Installing $$egfile"; \ 4212 echo "Installing $$egfile"; \
4213 done 4213 done
4214</pre> 4214</pre>
4215<p>In this case, an empty string is appended to the iteration list (to 4215<p>In this case, an empty string is appended to the iteration list (to
4216prevent the syntax error) and filtered out later.</p> 4216prevent the syntax error) and filtered out later.</p>
4217<pre class="programlisting"> 4217<pre class="programlisting">
4218EGFILES= # empty 4218EGFILES= # empty
4219 4219
4220install-examples: 4220install-examples:
4221.for egfile in ${EGFILES} 4221.for egfile in ${EGFILES}
4222 echo "Installing ${egfile}" 4222 echo "Installing ${egfile}"
4223.endfor 4223.endfor
4224</pre> 4224</pre>
4225<p>This variant only works when <code class="varname">EGFILES</code> does not 4225<p>This variant only works when <code class="varname">EGFILES</code> does not
4226contain filenames with spaces, since the <code class="code">.for</code> loop splits on 4226contain filenames with spaces, since the <code class="code">.for</code> loop splits on
4227simple whitespace.</p> 4227simple whitespace.</p>
4228<p>To have a shell command test whether a make variable is empty, use 4228<p>To have a shell command test whether a make variable is empty, use
4229the following code: <code class="code">${TEST} -z ${POSSIBLY_EMPTY:Q}""</code>.</p> 4229the following code: <code class="code">${TEST} -z ${POSSIBLY_EMPTY:Q}""</code>.</p>
4230</div> 4230</div>
4231</div> 4231</div>
4232</div> 4232</div>
4233<div class="chapter"> 4233<div class="chapter">
4234<div class="titlepage"><div><div><h2 class="title"> 4234<div class="titlepage"><div><div><h2 class="title">
4235<a name="plist"></a>Chapter 13. PLIST issues</h2></div></div></div> 4235<a name="plist"></a>Chapter 13. PLIST issues</h2></div></div></div>
4236<div class="toc"> 4236<div class="toc">
4237<p><b>Table of Contents</b></p> 4237<p><b>Table of Contents</b></p>
4238<dl class="toc"> 4238<dl class="toc">
4239<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt> 4239<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt>
4240<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt> 4240<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt>
4241<dt><span class="sect1"><a href="#print-PLIST">13.3. Tweaking output of <span class="command"><strong>make print-PLIST</strong></span></a></span></dt> 4241<dt><span class="sect1"><a href="#print-PLIST">13.3. Tweaking output of <span class="command"><strong>make print-PLIST</strong></span></a></span></dt>
4242<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt> 4242<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt>
4243<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt> 4243<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt>
4244<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt> 4244<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt>
4245<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt> 4245<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt>
4246<dt><span class="sect1"><a href="#build-plist">13.8. Build-specific PLISTs</a></span></dt> 4246<dt><span class="sect1"><a href="#build-plist">13.8. Build-specific PLISTs</a></span></dt>
4247<dt><span class="sect1"><a href="#faq.common-dirs">13.9. Sharing directories between packages</a></span></dt> 4247<dt><span class="sect1"><a href="#faq.common-dirs">13.9. Sharing directories between packages</a></span></dt>
4248</dl> 4248</dl>
4249</div> 4249</div>
4250<p>The <code class="filename">PLIST</code> file contains a package's 4250<p>The <code class="filename">PLIST</code> file contains a package's
4251 <span class="quote">&#8220;<span class="quote">packing list</span>&#8221;</span>, i.e. a list of files that belong to 4251 <span class="quote">&#8220;<span class="quote">packing list</span>&#8221;</span>, i.e. a list of files that belong to
4252 the package (relative to the <code class="filename">${PREFIX}</code> 4252 the package (relative to the <code class="filename">${PREFIX}</code>
4253 directory it's been installed in) plus some additional statements 4253 directory it's been installed in) plus some additional statements
4254 - see the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> man page for a full list. 4254 - see the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> man page for a full list.
4255 This chapter addresses some issues that need attention when 4255 This chapter addresses some issues that need attention when
4256 dealing with the <code class="filename">PLIST</code> file (or files, see 4256 dealing with the <code class="filename">PLIST</code> file (or files, see
4257 below!).</p> 4257 below!).</p>
4258<div class="sect1"> 4258<div class="sect1">
4259<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4259<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4260<a name="rcs-id"></a>13.1. RCS ID</h2></div></div></div> 4260<a name="rcs-id"></a>13.1. RCS ID</h2></div></div></div>
4261<p>Be sure to add a RCS ID line as the first thing in any 4261<p>Be sure to add a RCS ID line as the first thing in any
4262 <code class="filename">PLIST</code> file you write:</p> 4262 <code class="filename">PLIST</code> file you write:</p>
4263<pre class="programlisting"> 4263<pre class="programlisting">
4264@comment $NetBSD $ 4264@comment $NetBSD $
4265</pre> 4265</pre>
4266<p>An artificial space has been added between NetBSD and $, this is a 4266<p>An artificial space has been added between NetBSD and $, this is a
4267workaround here to prevent CVS expanding to the filename of the guide. When 4267workaround here to prevent CVS expanding to the filename of the guide. When
4268adding the RCS ID the space should be omitted.</p> 4268adding the RCS ID the space should be omitted.</p>
4269</div> 4269</div>
4270<div class="sect1"> 4270<div class="sect1">
4271<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4271<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4272<a name="automatic-plist-generation"></a>13.2. Semi-automatic <code class="filename">PLIST</code> generation</h2></div></div></div> 4272<a name="automatic-plist-generation"></a>13.2. Semi-automatic <code class="filename">PLIST</code> generation</h2></div></div></div>
4273<p>You can use the <span class="command"><strong>make print-PLIST</strong></span> command 4273<p>You can use the <span class="command"><strong>make print-PLIST</strong></span> command
4274 to output a PLIST that matches any new files since the package 4274 to output a PLIST that matches any new files since the package
4275 was extracted. See <a class="xref" href="#build.helpful-targets" title="17.17. Other helpful targets">Section 17.17, &#8220;Other helpful targets&#8221;</a> for 4275 was extracted. See <a class="xref" href="#build.helpful-targets" title="17.17. Other helpful targets">Section 17.17, &#8220;Other helpful targets&#8221;</a> for
4276 more information on this target.</p> 4276 more information on this target.</p>
4277</div> 4277</div>
4278<div class="sect1"> 4278<div class="sect1">
4279<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4279<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4280<a name="print-PLIST"></a>13.3. Tweaking output of <span class="command"><strong>make print-PLIST</strong></span> 4280<a name="print-PLIST"></a>13.3. Tweaking output of <span class="command"><strong>make print-PLIST</strong></span>
4281</h2></div></div></div> 4281</h2></div></div></div>
4282<p>The <code class="varname">PRINT_PLIST_AWK</code> variable takes a set 4282<p>The <code class="varname">PRINT_PLIST_AWK</code> variable takes a set
4283 of AWK patterns and actions that are used to filter the output of 4283 of AWK patterns and actions that are used to filter the output of
4284 print-PLIST. You can <span class="emphasis"><em>append</em></span> any chunk of AWK 4284 print-PLIST. You can <span class="emphasis"><em>append</em></span> any chunk of AWK
4285 scripting you like to it, but be careful with quoting.</p> 4285 scripting you like to it, but be careful with quoting.</p>
4286<p>For example, to get all files inside the 4286<p>For example, to get all files inside the
4287 <code class="filename">libdata/foo</code> directory removed from the 4287 <code class="filename">libdata/foo</code> directory removed from the
4288 resulting PLIST:</p> 4288 resulting PLIST:</p>
4289<pre class="programlisting"> 4289<pre class="programlisting">
4290PRINT_PLIST_AWK+= /^libdata\/foo/ { next; } 4290PRINT_PLIST_AWK+= /^libdata\/foo/ { next; }
4291</pre> 4291</pre>
4292</div> 4292</div>
4293<div class="sect1"> 4293<div class="sect1">
4294<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4294<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4295<a name="plist.misc"></a>13.4. Variable substitution in PLIST</h2></div></div></div> 4295<a name="plist.misc"></a>13.4. Variable substitution in PLIST</h2></div></div></div>
4296<p>A number of variables are substituted automatically in 4296<p>A number of variables are substituted automatically in
4297 PLISTs when a package is installed on a system. This includes the 4297 PLISTs when a package is installed on a system. This includes the
4298 following variables:</p> 4298 following variables:</p>
4299<div class="variablelist"><dl class="variablelist"> 4299<div class="variablelist"><dl class="variablelist">
4300<dt><span class="term"><code class="varname">${MACHINE_ARCH}</code>, <code class="varname">${MACHINE_GNU_ARCH}</code></span></dt> 4300<dt><span class="term"><code class="varname">${MACHINE_ARCH}</code>, <code class="varname">${MACHINE_GNU_ARCH}</code></span></dt>
4301<dd> 4301<dd>
4302<p>Some packages like emacs and perl embed information 4302<p>Some packages like emacs and perl embed information
4303 about which architecture they were built on into the 4303 about which architecture they were built on into the
4304 pathnames where they install their files. To handle this 4304 pathnames where they install their files. To handle this
4305 case, PLIST will be preprocessed before actually used, and 4305 case, PLIST will be preprocessed before actually used, and
4306 the symbol 4306 the symbol
4307 <span class="quote">&#8220;<span class="quote"><code class="varname">${MACHINE_ARCH}</code></span>&#8221;</span> will be 4307 <span class="quote">&#8220;<span class="quote"><code class="varname">${MACHINE_ARCH}</code></span>&#8221;</span> will be
4308 replaced by what <span class="command"><strong>uname -p</strong></span> gives. The 4308 replaced by what <span class="command"><strong>uname -p</strong></span> gives. The
4309 same is done if the string 4309 same is done if the string
4310 <code class="varname">${MACHINE_GNU_ARCH}</code> is embedded in 4310 <code class="varname">${MACHINE_GNU_ARCH}</code> is embedded in
4311 PLIST somewhere - use this on packages that have GNU 4311 PLIST somewhere - use this on packages that have GNU
4312 autoconf-created configure scripts.</p> 4312 autoconf-created configure scripts.</p>
4313<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 4313<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
4314<h3 class="title">Legacy note</h3> 4314<h3 class="title">Legacy note</h3>
4315<p>There used to be a symbol 4315<p>There used to be a symbol
4316 <span class="quote">&#8220;<span class="quote"><code class="varname">$ARCH</code></span>&#8221;</span> that 4316 <span class="quote">&#8220;<span class="quote"><code class="varname">$ARCH</code></span>&#8221;</span> that
4317 was replaced by the output of <span class="command"><strong>uname 4317 was replaced by the output of <span class="command"><strong>uname
4318 -m</strong></span>, but that's no longer supported and has 4318 -m</strong></span>, but that's no longer supported and has
4319 been removed.</p> 4319 been removed.</p>
4320</div> 4320</div>
4321</dd> 4321</dd>
4322<dt><span class="term"><code class="varname">${OPSYS}</code>, <code class="varname">${LOWER_OPSYS}</code>, <code class="varname">${OS_VERSION}</code></span></dt> 4322<dt><span class="term"><code class="varname">${OPSYS}</code>, <code class="varname">${LOWER_OPSYS}</code>, <code class="varname">${OS_VERSION}</code></span></dt>
4323<dd> 4323<dd>
4324<p>Some packages want to embed the OS name and version 4324<p>Some packages want to embed the OS name and version
4325 into some paths. To do this, use these variables in the 4325 into some paths. To do this, use these variables in the
4326 <code class="filename">PLIST</code>: 4326 <code class="filename">PLIST</code>:
4327 </p> 4327 </p>
4328<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4328<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4329<li class="listitem"><p><code class="varname">${OPSYS}</code> - output of <span class="quote">&#8220;<span class="quote"><span class="command"><strong>uname -s</strong></span></span>&#8221;</span></p></li> 4329<li class="listitem"><p><code class="varname">${OPSYS}</code> - output of <span class="quote">&#8220;<span class="quote"><span class="command"><strong>uname -s</strong></span></span>&#8221;</span></p></li>
4330<li class="listitem"><p><code class="varname">${LOWER_OPSYS}</code> - lowercase common name (eg. <span class="quote">&#8220;<span class="quote">solaris</span>&#8221;</span>)</p></li> 4330<li class="listitem"><p><code class="varname">${LOWER_OPSYS}</code> - lowercase common name (eg. <span class="quote">&#8220;<span class="quote">solaris</span>&#8221;</span>)</p></li>
4331<li class="listitem"><p><code class="varname">${OS_VERSION}</code> - <span class="quote">&#8220;<span class="quote"><span class="command"><strong>uname -r</strong></span></span>&#8221;</span></p></li> 4331<li class="listitem"><p><code class="varname">${OS_VERSION}</code> - <span class="quote">&#8220;<span class="quote"><span class="command"><strong>uname -r</strong></span></span>&#8221;</span></p></li>
4332</ul></div> 4332</ul></div>
4333</dd> 4333</dd>
4334</dl></div> 4334</dl></div>
4335<p>For a list of values which are replaced by 4335<p>For a list of values which are replaced by
4336 default, the output of <span class="command"><strong>make help topic=PLIST_SUBST</strong></span> as 4336 default, the output of <span class="command"><strong>make help topic=PLIST_SUBST</strong></span> as
4337well as searching the <code class="filename">pkgsrc/mk</code> directory with <span class="command"><strong>grep</strong></span> for 4337well as searching the <code class="filename">pkgsrc/mk</code> directory with <span class="command"><strong>grep</strong></span> for
4338<code class="varname">PLIST_SUBST</code> should help.</p> 4338<code class="varname">PLIST_SUBST</code> should help.</p>
4339<p>If you want to change other variables not listed above, you 4339<p>If you want to change other variables not listed above, you
4340 can add variables and their expansions to this variable in the 4340 can add variables and their expansions to this variable in the
4341 following way, similar to <code class="varname">MESSAGE_SUBST</code> (see <a class="xref" href="#components.optional" title="11.5. Optional files">Section 11.5, &#8220;Optional files&#8221;</a>):</p> 4341 following way, similar to <code class="varname">MESSAGE_SUBST</code> (see <a class="xref" href="#components.optional" title="11.5. Optional files">Section 11.5, &#8220;Optional files&#8221;</a>):</p>
4342<pre class="programlisting"> 4342<pre class="programlisting">
4343PLIST_SUBST+= SOMEVAR="somevalue" 4343PLIST_SUBST+= SOMEVAR="somevalue"
4344</pre> 4344</pre>
4345<p>This replaces all occurrences of <span class="quote">&#8220;<span class="quote">${SOMEVAR}</span>&#8221;</span> 4345<p>This replaces all occurrences of <span class="quote">&#8220;<span class="quote">${SOMEVAR}</span>&#8221;</span>
4346 in the <code class="filename">PLIST</code> with 4346 in the <code class="filename">PLIST</code> with
4347 <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span>.</p> 4347 <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span>.</p>
4348<p>The <code class="varname">PLIST_VARS</code> variable can be used to simplify 4348<p>The <code class="varname">PLIST_VARS</code> variable can be used to simplify
4349 the common case of conditionally including some 4349 the common case of conditionally including some
4350 <code class="filename">PLIST</code> entries. It can be done by adding 4350 <code class="filename">PLIST</code> entries. It can be done by adding
4351 <code class="literal"><code class="varname">PLIST_VARS</code>+=foo</code> and 4351 <code class="literal"><code class="varname">PLIST_VARS</code>+=foo</code> and
4352 setting the corresponding <code class="varname">PLIST.foo</code> variable 4352 setting the corresponding <code class="varname">PLIST.foo</code> variable
4353 to <code class="literal">yes</code> if the entry should be included. 4353 to <code class="literal">yes</code> if the entry should be included.
4354 This will substitute <span class="quote">&#8220;<span class="quote"><code class="varname">${PLIST.foo}</code></span>&#8221;</span> 4354 This will substitute <span class="quote">&#8220;<span class="quote"><code class="varname">${PLIST.foo}</code></span>&#8221;</span>
4355 in the <code class="filename">PLIST</code> with either 4355 in the <code class="filename">PLIST</code> with either
4356 <span class="quote">&#8220;<span class="quote"><code class="literal">""</code></span>&#8221;</span> or 4356 <span class="quote">&#8220;<span class="quote"><code class="literal">""</code></span>&#8221;</span> or
4357 <span class="quote">&#8220;<span class="quote"><code class="literal">"@comment "</code></span>&#8221;</span>. 4357 <span class="quote">&#8220;<span class="quote"><code class="literal">"@comment "</code></span>&#8221;</span>.
4358 For example, in <code class="filename">Makefile</code>:</p> 4358 For example, in <code class="filename">Makefile</code>:</p>
4359<pre class="programlisting"> 4359<pre class="programlisting">
4360PLIST_VARS+= foo 4360PLIST_VARS+= foo
4361.if <em class="replaceable"><code>condition</code></em> 4361.if <em class="replaceable"><code>condition</code></em>
4362PLIST.foo= yes 4362PLIST.foo= yes
4363.else 4363.else
4364</pre> 4364</pre>
4365<p>And then in <code class="filename">PLIST</code>:</p> 4365<p>And then in <code class="filename">PLIST</code>:</p>
4366<pre class="programlisting"> 4366<pre class="programlisting">
4367@comment $NetBSD $ 4367@comment $NetBSD $
4368bin/bar 4368bin/bar
4369man/man1/bar.1 4369man/man1/bar.1
4370${PLIST.foo}bin/foo 4370${PLIST.foo}bin/foo
4371${PLIST.foo}man/man1/foo.1 4371${PLIST.foo}man/man1/foo.1
4372${PLIST.foo}share/bar/foo.data 4372${PLIST.foo}share/bar/foo.data
4373</pre> 4373</pre>
4374<p>An artificial space has been added between NetBSD and $, this is a 4374<p>An artificial space has been added between NetBSD and $, this is a
4375workaround here to prevent CVS expanding to the filename of the guide. When 4375workaround here to prevent CVS expanding to the filename of the guide. When
4376adding the RCS ID the space should be ommited.</p> 4376adding the RCS ID the space should be ommited.</p>
4377</div> 4377</div>
4378<div class="sect1"> 4378<div class="sect1">
4379<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4379<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4380<a name="manpage-compression"></a>13.5. Man page compression</h2></div></div></div> 4380<a name="manpage-compression"></a>13.5. Man page compression</h2></div></div></div>
4381<p>Man pages should be installed in compressed form if 4381<p>Man pages should be installed in compressed form if
4382 <code class="varname">MANZ</code> is set (in <code class="filename">bsd.own.mk</code>), 4382 <code class="varname">MANZ</code> is set (in <code class="filename">bsd.own.mk</code>),
4383 and uncompressed otherwise. To handle this in the 4383 and uncompressed otherwise. To handle this in the
4384 <code class="filename">PLIST</code> file, the suffix <span class="quote">&#8220;<span class="quote">.gz</span>&#8221;</span> is 4384 <code class="filename">PLIST</code> file, the suffix <span class="quote">&#8220;<span class="quote">.gz</span>&#8221;</span> is
4385 appended/removed automatically for man pages according to 4385 appended/removed automatically for man pages according to
4386 <code class="varname">MANZ</code> and <code class="varname">MANCOMPRESSED</code> being set 4386 <code class="varname">MANZ</code> and <code class="varname">MANCOMPRESSED</code> being set
4387 or not, see above for details. This modification of the 4387 or not, see above for details. This modification of the
4388 <code class="filename">PLIST</code> file is done on a copy of it, not 4388 <code class="filename">PLIST</code> file is done on a copy of it, not
4389 <code class="filename">PLIST</code> itself.</p> 4389 <code class="filename">PLIST</code> itself.</p>
4390</div> 4390</div>
4391<div class="sect1"> 4391<div class="sect1">
4392<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4392<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4393<a name="using-PLIST_SRC"></a>13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code> 4393<a name="using-PLIST_SRC"></a>13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code>
4394</h2></div></div></div> 4394</h2></div></div></div>
4395<p>To use one or more files as source for the <code class="filename">PLIST</code> used 4395<p>To use one or more files as source for the <code class="filename">PLIST</code> used
4396 in generating the binary package, set the variable 4396 in generating the binary package, set the variable
4397 <code class="varname">PLIST_SRC</code> to the names of that file(s). 4397 <code class="varname">PLIST_SRC</code> to the names of that file(s).
4398 The files are later concatenated using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cat+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">cat</span>(1)</span></a>, and the order of things is 4398 The files are later concatenated using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cat+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">cat</span>(1)</span></a>, and the order of things is
4399 important. The default for <code class="varname">PLIST_SRC</code> is 4399 important. The default for <code class="varname">PLIST_SRC</code> is
4400 <code class="filename">${PKGDIR}/PLIST</code>.</p> 4400 <code class="filename">${PKGDIR}/PLIST</code>.</p>
4401</div> 4401</div>
4402<div class="sect1"> 4402<div class="sect1">
4403<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4403<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4404<a name="platform-specific-plist"></a>13.7. Platform-specific and differing PLISTs</h2></div></div></div> 4404<a name="platform-specific-plist"></a>13.7. Platform-specific and differing PLISTs</h2></div></div></div>
4405<p>Some packages decide to install a different set of files based on 4405<p>Some packages decide to install a different set of files based on
4406 the operating system being used. These differences can be 4406 the operating system being used. These differences can be
4407 automatically handled by using the following files:</p> 4407 automatically handled by using the following files:</p>
4408<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4408<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4409<li class="listitem"><p><code class="filename">PLIST.common</code></p></li> 4409<li class="listitem"><p><code class="filename">PLIST.common</code></p></li>
4410<li class="listitem"><p><code class="filename">PLIST.${OPSYS}</code></p></li> 4410<li class="listitem"><p><code class="filename">PLIST.${OPSYS}</code></p></li>
4411<li class="listitem"><p><code class="filename">PLIST.${MACHINE_ARCH}</code></p></li> 4411<li class="listitem"><p><code class="filename">PLIST.${MACHINE_ARCH}</code></p></li>
4412<li class="listitem"><p><code class="filename">PLIST.${OPSYS}-${MACHINE_ARCH}</code></p></li> 4412<li class="listitem"><p><code class="filename">PLIST.${OPSYS}-${MACHINE_ARCH}</code></p></li>
4413<li class="listitem"><p><code class="filename">PLIST.common_end</code></p></li> 4413<li class="listitem"><p><code class="filename">PLIST.common_end</code></p></li>
4414</ul></div> 4414</ul></div>
4415</div> 4415</div>
4416<div class="sect1"> 4416<div class="sect1">
4417<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4417<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4418<a name="build-plist"></a>13.8. Build-specific PLISTs</h2></div></div></div> 4418<a name="build-plist"></a>13.8. Build-specific PLISTs</h2></div></div></div>
4419<p>Some packages decide to generate hard-to-guess file names 4419<p>Some packages decide to generate hard-to-guess file names
4420 during installation that are hard to wire down.</p> 4420 during installation that are hard to wire down.</p>
4421<p>In such cases, you can set the 4421<p>In such cases, you can set the
4422 <code class="varname">GENERATE_PLIST</code> variable to shell code 4422 <code class="varname">GENERATE_PLIST</code> variable to shell code
4423 terminated (with a semicolon) that will output PLIST entries which 4423 terminated (with a semicolon) that will output PLIST entries which
4424 will be appended to the PLIST</p> 4424 will be appended to the PLIST</p>
4425<p>You can find one example in editors/xemacs:</p> 4425<p>You can find one example in editors/xemacs:</p>
4426<pre class="programlisting"> 4426<pre class="programlisting">
4427GENERATE_PLIST+= ${ECHO} bin/${DISTNAME}-`${WRKSRC}/src/xemacs -sd`.dmp ; 4427GENERATE_PLIST+= ${ECHO} bin/${DISTNAME}-`${WRKSRC}/src/xemacs -sd`.dmp ;
4428</pre> 4428</pre>
4429<p>which will append something like 4429<p>which will append something like
4430 <code class="filename">bin/xemacs-21.4.23-54e8ea71.dmp</code> to the 4430 <code class="filename">bin/xemacs-21.4.23-54e8ea71.dmp</code> to the
4431 <code class="filename">PLIST</code>. 4431 <code class="filename">PLIST</code>.
4432 </p> 4432 </p>
4433</div> 4433</div>
4434<div class="sect1"> 4434<div class="sect1">
4435<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4435<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4436<a name="faq.common-dirs"></a>13.9. Sharing directories between packages</h2></div></div></div> 4436<a name="faq.common-dirs"></a>13.9. Sharing directories between packages</h2></div></div></div>
4437<p>A <span class="quote">&#8220;<span class="quote">shared directory</span>&#8221;</span> is a directory where 4437<p>A <span class="quote">&#8220;<span class="quote">shared directory</span>&#8221;</span> is a directory where
4438 multiple (and unrelated) packages install files. These 4438 multiple (and unrelated) packages install files. These
4439 directories were problematic because you had to add special 4439 directories were problematic because you had to add special
4440 tricks in the PLIST to conditionally remove them, or have some 4440 tricks in the PLIST to conditionally remove them, or have some
4441 centralized package handle them.</p> 4441 centralized package handle them.</p>
4442<p>In pkgsrc, it is now easy: Each package should create 4442<p>In pkgsrc, it is now easy: Each package should create
4443 directories and install files as needed; <span class="command"><strong>pkg_delete</strong></span> 4443 directories and install files as needed; <span class="command"><strong>pkg_delete</strong></span>
4444 will remove any directories left empty after uninstalling a 4444 will remove any directories left empty after uninstalling a
4445 package.</p> 4445 package.</p>
4446<p>If a package needs an empty directory to work, create 4446<p>If a package needs an empty directory to work, create
4447 the directory during installation as usual, and also add an 4447 the directory during installation as usual, and also add an
4448 entry to the PLIST: 4448 entry to the PLIST:
4449 4449
4450</p> 4450</p>
4451<pre class="programlisting"> 4451<pre class="programlisting">
4452@pkgdir path/to/empty/directory 4452@pkgdir path/to/empty/directory
4453</pre> 4453</pre>
4454<p> 4454<p>
4455 4455
4456 or take a look at <code class="varname">MAKE_DIRS</code> and 4456 or take a look at <code class="varname">MAKE_DIRS</code> and
4457 <code class="varname">OWN_DIRS</code>. 4457 <code class="varname">OWN_DIRS</code>.
4458 </p> 4458 </p>
4459</div> 4459</div>
4460</div> 4460</div>
4461<div class="chapter"> 4461<div class="chapter">
4462<div class="titlepage"><div><div><h2 class="title"> 4462<div class="titlepage"><div><div><h2 class="title">
4463<a name="buildlink"></a>Chapter 14. Buildlink methodology</h2></div></div></div> 4463<a name="buildlink"></a>Chapter 14. Buildlink methodology</h2></div></div></div>
4464<div class="toc"> 4464<div class="toc">
4465<p><b>Table of Contents</b></p> 4465<p><b>Table of Contents</b></p>
4466<dl class="toc"> 4466<dl class="toc">
4467<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt> 4467<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt>
4468<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt> 4468<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt>
4469<dd><dl> 4469<dd><dl>
4470<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt> 4470<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt>
4471<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating 4471<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating
4472 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4472 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4473 and 4473 and
4474 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4474 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4475 in <code class="filename">buildlink3.mk</code> files</a></span></dt> 4475 in <code class="filename">buildlink3.mk</code> files</a></span></dt>
4476</dl></dd> 4476</dl></dd>
4477<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt> 4477<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt>
4478<dd><dl> 4478<dd><dl>
4479<dt><span class="sect2"><a href="#anatomy-of-builtin.mk">14.3.1. Anatomy of a <code class="filename">builtin.mk</code> file</a></span></dt> 4479<dt><span class="sect2"><a href="#anatomy-of-builtin.mk">14.3.1. Anatomy of a <code class="filename">builtin.mk</code> file</a></span></dt>
4480<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt> 4480<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt>
4481</dl></dd> 4481</dl></dd>
4482</dl> 4482</dl>
4483</div> 4483</div>
4484<p>Buildlink is a framework in pkgsrc that controls what headers and libraries 4484<p>Buildlink is a framework in pkgsrc that controls what headers and libraries
4485 are seen by a package's configure and build processes. This is implemented 4485 are seen by a package's configure and build processes. This is implemented
4486 in a two step process:</p> 4486 in a two step process:</p>
4487<div class="orderedlist"><ol class="orderedlist" type="1"> 4487<div class="orderedlist"><ol class="orderedlist" type="1">
4488<li class="listitem"><p>Symlink headers and libraries for dependencies into 4488<li class="listitem"><p>Symlink headers and libraries for dependencies into
4489 <code class="varname">BUILDLINK_DIR</code>, which by default is a subdirectory 4489 <code class="varname">BUILDLINK_DIR</code>, which by default is a subdirectory
4490 of <code class="varname">WRKDIR</code>.</p></li> 4490 of <code class="varname">WRKDIR</code>.</p></li>
4491<li class="listitem"><p>Create wrapper scripts that are used in place of the normal compiler 4491<li class="listitem"><p>Create wrapper scripts that are used in place of the normal compiler
4492 tools that translate <code class="option">-I${LOCALBASE}/include</code> and 4492 tools that translate <code class="option">-I${LOCALBASE}/include</code> and
4493 <code class="option">-L${LOCALBASE}/lib</code> into references to 4493 <code class="option">-L${LOCALBASE}/lib</code> into references to
4494 <code class="varname">BUILDLINK_DIR</code>. The wrapper scripts also make 4494 <code class="varname">BUILDLINK_DIR</code>. The wrapper scripts also make
4495 native compiler on some operating systems look like GCC, so that 4495 native compiler on some operating systems look like GCC, so that
4496 packages that expect GCC won't require modifications to build with 4496 packages that expect GCC won't require modifications to build with
4497 those native compilers.</p></li> 4497 those native compilers.</p></li>
4498</ol></div> 4498</ol></div>
4499<p>This normalizes the environment in which a package is built so that the 4499<p>This normalizes the environment in which a package is built so that the
4500 package may be built consistently despite what other software may be 4500 package may be built consistently despite what other software may be
4501 installed. Please note that the normal system header and library paths, 4501 installed. Please note that the normal system header and library paths,
4502 e.g. <code class="filename">/usr/include</code>, 4502 e.g. <code class="filename">/usr/include</code>,
4503 <code class="filename">/usr/lib</code>, etc., are always searched -- buildlink3 is 4503 <code class="filename">/usr/lib</code>, etc., are always searched -- buildlink3 is
4504 designed to insulate the package build from non-system-supplied 4504 designed to insulate the package build from non-system-supplied
4505 software.</p> 4505 software.</p>
4506<div class="sect1"> 4506<div class="sect1">
4507<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4507<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4508<a name="converting-to-buildlink3"></a>14.1. Converting packages to use buildlink3</h2></div></div></div> 4508<a name="converting-to-buildlink3"></a>14.1. Converting packages to use buildlink3</h2></div></div></div>
4509<p>The process of converting packages to use the buildlink3 4509<p>The process of converting packages to use the buildlink3
4510 framework (<span class="quote">&#8220;<span class="quote">bl3ifying</span>&#8221;</span>) is fairly straightforward. 4510 framework (<span class="quote">&#8220;<span class="quote">bl3ifying</span>&#8221;</span>) is fairly straightforward.
4511 The things to keep in mind are:</p> 4511 The things to keep in mind are:</p>
4512<div class="orderedlist"><ol class="orderedlist" type="1"> 4512<div class="orderedlist"><ol class="orderedlist" type="1">
4513<li class="listitem"><p>Ensure that the build always calls the wrapper scripts 4513<li class="listitem"><p>Ensure that the build always calls the wrapper scripts
4514 instead of the actual toolchain. Some packages are tricky, 4514 instead of the actual toolchain. Some packages are tricky,
4515 and the only way to know for sure is the check 4515 and the only way to know for sure is the check
4516 <code class="filename">${WRKDIR}/.work.log</code> to see if the 4516 <code class="filename">${WRKDIR}/.work.log</code> to see if the
4517 wrappers are being invoked.</p></li> 4517 wrappers are being invoked.</p></li>
4518<li class="listitem"><p>Don't override <code class="varname">PREFIX</code> from within 4518<li class="listitem"><p>Don't override <code class="varname">PREFIX</code> from within
4519 the package Makefile, e.g. Java VMs, standalone shells, 4519 the package Makefile, e.g. Java VMs, standalone shells,
4520 etc., because the code to symlink files into 4520 etc., because the code to symlink files into
4521 <code class="filename">${BUILDLINK_DIR}</code> looks for files 4521 <code class="filename">${BUILDLINK_DIR}</code> looks for files
4522 relative to <span class="quote">&#8220;<span class="quote">pkg_info -qp <em class="replaceable"><code>pkgname</code></em></span>&#8221;</span>. 4522 relative to <span class="quote">&#8220;<span class="quote">pkg_info -qp <em class="replaceable"><code>pkgname</code></em></span>&#8221;</span>.
4523 </p></li> 4523 </p></li>
4524<li class="listitem"><p>Remember that <span class="emphasis"><em>only</em></span> the 4524<li class="listitem"><p>Remember that <span class="emphasis"><em>only</em></span> the
4525 <code class="filename">buildlink3.mk</code> files that you list in a 4525 <code class="filename">buildlink3.mk</code> files that you list in a
4526 package's Makefile are added as dependencies for that package. 4526 package's Makefile are added as dependencies for that package.
4527 </p></li> 4527 </p></li>
4528</ol></div> 4528</ol></div>
4529<p>If a dependency on a particular package is required for its libraries and 4529<p>If a dependency on a particular package is required for its libraries and
4530 headers, then we replace:</p> 4530 headers, then we replace:</p>
4531<pre class="programlisting"> 4531<pre class="programlisting">
4532DEPENDS+= foo&gt;=1.1.0:../../category/foo 4532DEPENDS+= foo&gt;=1.1.0:../../category/foo
4533</pre> 4533</pre>
4534<p>with</p> 4534<p>with</p>
4535<pre class="programlisting"> 4535<pre class="programlisting">
4536.include "../../category/foo/buildlink3.mk" 4536.include "../../category/foo/buildlink3.mk"
4537</pre> 4537</pre>
4538<p>The buildlink3.mk files usually define the required dependencies. 4538<p>The buildlink3.mk files usually define the required dependencies.
4539 If you need a newer version of the dependency when using buildlink3.mk 4539 If you need a newer version of the dependency when using buildlink3.mk
4540 files, then you can define it in your Makefile; for example:</p> 4540 files, then you can define it in your Makefile; for example:</p>
4541<pre class="programlisting"> 4541<pre class="programlisting">
4542BUILDLINK_API_DEPENDS.foo+= foo&gt;=1.1.0 4542BUILDLINK_API_DEPENDS.foo+= foo&gt;=1.1.0
4543.include "../../category/foo/buildlink3.mk" 4543.include "../../category/foo/buildlink3.mk"
4544</pre> 4544</pre>
4545<p>There are several <code class="filename">buildlink3.mk</code> 4545<p>There are several <code class="filename">buildlink3.mk</code>
4546 files in <code class="filename">pkgsrc/mk</code> 4546 files in <code class="filename">pkgsrc/mk</code>
4547 that handle special package issues:</p> 4547 that handle special package issues:</p>
4548<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4548<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4549<li class="listitem"><p><code class="filename">bdb.buildlink3.mk</code> chooses either 4549<li class="listitem"><p><code class="filename">bdb.buildlink3.mk</code> chooses either
4550 the native or a pkgsrc Berkeley DB implementation based on 4550 the native or a pkgsrc Berkeley DB implementation based on
4551 the values of <code class="varname">BDB_ACCEPTED</code> and 4551 the values of <code class="varname">BDB_ACCEPTED</code> and
4552 <code class="varname">BDB_DEFAULT</code>.</p></li> 4552 <code class="varname">BDB_DEFAULT</code>.</p></li>
4553<li class="listitem"><p><code class="filename">curses.buildlink3.mk</code>: If the system 4553<li class="listitem"><p><code class="filename">curses.buildlink3.mk</code>: If the system
4554 comes with neither Curses nor NCurses, this will take care 4554 comes with neither Curses nor NCurses, this will take care
4555 to install the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/ncurses/README.html" target="_top"><code class="filename">devel/ncurses</code></a> package.</p></li> 4555 to install the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/ncurses/README.html" target="_top"><code class="filename">devel/ncurses</code></a> package.</p></li>
4556<li class="listitem"><p><code class="filename">krb5.buildlink3.mk</code> uses the value 4556<li class="listitem"><p><code class="filename">krb5.buildlink3.mk</code> uses the value
4557 of <code class="varname">KRB5_ACCEPTED</code> to choose between 4557 of <code class="varname">KRB5_ACCEPTED</code> to choose between
4558 adding a dependency on Heimdal or MIT-krb5 for packages that 4558 adding a dependency on Heimdal or MIT-krb5 for packages that
4559 require a Kerberos 5 implementation.</p></li> 4559 require a Kerberos 5 implementation.</p></li>
4560<li class="listitem"><p><code class="filename">motif.buildlink3.mk</code> checks for a 4560<li class="listitem"><p><code class="filename">motif.buildlink3.mk</code> checks for a
4561 system-provided Motif installation or adds a dependency on 4561 system-provided Motif installation or adds a dependency on
4562 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/lesstif/README.html" target="_top"><code class="filename">x11/lesstif</code></a> or <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/motif/README.html" target="_top"><code class="filename">x11/motif</code></a>. The user can set 4562 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/lesstif/README.html" target="_top"><code class="filename">x11/lesstif</code></a> or <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/motif/README.html" target="_top"><code class="filename">x11/motif</code></a>. The user can set
4563 <code class="varname">MOTIF_TYPE</code> to <span class="quote">&#8220;<span class="quote">dt</span>&#8221;</span>, 4563 <code class="varname">MOTIF_TYPE</code> to <span class="quote">&#8220;<span class="quote">dt</span>&#8221;</span>,
4564 <span class="quote">&#8220;<span class="quote">lesstif</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">motif</span>&#8221;</span> 4564 <span class="quote">&#8220;<span class="quote">lesstif</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">motif</span>&#8221;</span>
4565 to choose which Motif version will be used.</p></li> 4565 to choose which Motif version will be used.</p></li>
4566<li class="listitem"><p><code class="filename">readline.buildlink3.mk</code> checks for a 4566<li class="listitem"><p><code class="filename">readline.buildlink3.mk</code> checks for a
4567 system-provided GNU readline or editline (libedit) installation, 4567 system-provided GNU readline or editline (libedit) installation,
4568 or adds a dependency on <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/readline/README.html" target="_top"><code class="filename">devel/readline</code></a>, 4568 or adds a dependency on <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/readline/README.html" target="_top"><code class="filename">devel/readline</code></a>,
4569 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/editline/README.html" target="_top"><code class="filename">devel/editline</code></a>. The user can set 4569 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/editline/README.html" target="_top"><code class="filename">devel/editline</code></a>. The user can set
4570 <code class="varname">READLINE_DEFAULT</code> to choose readline implementation. 4570 <code class="varname">READLINE_DEFAULT</code> to choose readline implementation.
4571 If your package really needs GNU readline library, its Makefile 4571 If your package really needs GNU readline library, its Makefile
4572 should include <code class="filename">devel/readline/buildlink3.mk</code> 4572 should include <code class="filename">devel/readline/buildlink3.mk</code>
4573 instead of <code class="filename">readline.buildlink3.mk</code>.</p></li> 4573 instead of <code class="filename">readline.buildlink3.mk</code>.</p></li>
4574<li class="listitem"><p><code class="filename">oss.buildlink3.mk</code> defines several 4574<li class="listitem"><p><code class="filename">oss.buildlink3.mk</code> defines several
4575 variables that may be used by packages that use the 4575 variables that may be used by packages that use the
4576 Open Sound System (OSS) API.</p></li> 4576 Open Sound System (OSS) API.</p></li>
4577<li class="listitem"><p><code class="filename">pgsql.buildlink3.mk</code> will accept 4577<li class="listitem"><p><code class="filename">pgsql.buildlink3.mk</code> will accept
4578 any of the Postgres versions in the variable 4578 any of the Postgres versions in the variable
4579 <code class="varname">PGSQL_VERSIONS_ACCEPTED</code> and default to 4579 <code class="varname">PGSQL_VERSIONS_ACCEPTED</code> and default to
4580 the version <code class="varname">PGSQL_VERSION_DEFAULT</code>. See 4580 the version <code class="varname">PGSQL_VERSION_DEFAULT</code>. See
4581 the file for more information.</p></li> 4581 the file for more information.</p></li>
4582<li class="listitem"><p><code class="filename">pthread.buildlink3.mk</code> uses the value of 4582<li class="listitem"><p><code class="filename">pthread.buildlink3.mk</code> uses the value of
4583 <code class="varname">PTHREAD_OPTS</code> and checks for native pthreads or adds 4583 <code class="varname">PTHREAD_OPTS</code> and checks for native pthreads or adds
4584 a dependency on <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/pth/README.html" target="_top"><code class="filename">devel/pth</code></a> as needed.</p></li> 4584 a dependency on <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/pth/README.html" target="_top"><code class="filename">devel/pth</code></a> as needed.</p></li>
4585<li class="listitem"><p><code class="filename">xaw.buildlink3.mk</code> uses the value of 4585<li class="listitem"><p><code class="filename">xaw.buildlink3.mk</code> uses the value of
4586 <code class="varname">XAW_TYPE</code> to choose a particular Athena widgets 4586 <code class="varname">XAW_TYPE</code> to choose a particular Athena widgets
4587 library.</p></li> 4587 library.</p></li>
4588</ul></div> 4588</ul></div>
4589<p>The comments in those <code class="filename">buildlink3.mk</code> 4589<p>The comments in those <code class="filename">buildlink3.mk</code>
4590 files provide a more complete 4590 files provide a more complete
4591 description of how to use them properly.</p> 4591 description of how to use them properly.</p>
4592</div> 4592</div>
4593<div class="sect1"> 4593<div class="sect1">
4594<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4594<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4595<a name="creating-buildlink3.mk"></a>14.2. Writing <code class="filename">buildlink3.mk</code> files</h2></div></div></div> 4595<a name="creating-buildlink3.mk"></a>14.2. Writing <code class="filename">buildlink3.mk</code> files</h2></div></div></div>
4596<a name="buildlink3.mk"></a><p>A package's <code class="filename">buildlink3.mk</code> file is 4596<a name="buildlink3.mk"></a><p>A package's <code class="filename">buildlink3.mk</code> file is
4597 included by Makefiles to indicate the need to compile and link 4597 included by Makefiles to indicate the need to compile and link
4598 against header files and libraries provided by the package. A 4598 against header files and libraries provided by the package. A
4599 <code class="filename">buildlink3.mk</code> file should always provide 4599 <code class="filename">buildlink3.mk</code> file should always provide
4600 enough information to add the correct type of dependency 4600 enough information to add the correct type of dependency
4601 relationship and include any other 4601 relationship and include any other
4602 <code class="filename">buildlink3.mk</code> files that it needs to find 4602 <code class="filename">buildlink3.mk</code> files that it needs to find
4603 headers and libraries that it needs in turn.</p> 4603 headers and libraries that it needs in turn.</p>
4604<p>To generate an initial <code class="filename">buildlink3.mk</code> 4604<p>To generate an initial <code class="filename">buildlink3.mk</code>
4605 file for further editing, Rene Hexel's <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/createbuildlink/README.html" target="_top"><code class="filename">pkgtools/createbuildlink</code></a> 4605 file for further editing, Rene Hexel's <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/createbuildlink/README.html" target="_top"><code class="filename">pkgtools/createbuildlink</code></a>
4606 package is highly recommended. For most packages, the following 4606 package is highly recommended. For most packages, the following
4607 command will generate a good starting point for 4607 command will generate a good starting point for
4608 <code class="filename">buildlink3.mk</code> files:</p> 4608 <code class="filename">buildlink3.mk</code> files:</p>
4609<pre class="screen"> 4609<pre class="screen">
4610<code class="prompt">%</code> <strong class="userinput"><code>cd pkgsrc/<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>pkgdir</code></em> 4610<code class="prompt">%</code> <strong class="userinput"><code>cd pkgsrc/<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>pkgdir</code></em>
4611<code class="prompt">%</code> createbuildlink &gt;buildlink3.mk</code></strong> 4611<code class="prompt">%</code> createbuildlink &gt;buildlink3.mk</code></strong>
4612 </pre> 4612 </pre>
4613<div class="sect2"> 4613<div class="sect2">
4614<div class="titlepage"><div><div><h3 class="title"> 4614<div class="titlepage"><div><div><h3 class="title">
4615<a name="anatomy-of-bl3"></a>14.2.1. Anatomy of a buildlink3.mk file</h3></div></div></div> 4615<a name="anatomy-of-bl3"></a>14.2.1. Anatomy of a buildlink3.mk file</h3></div></div></div>
4616<p>The following real-life example 4616<p>The following real-life example
4617 <code class="filename">buildlink3.mk</code> is taken 4617 <code class="filename">buildlink3.mk</code> is taken
4618 from <code class="filename">pkgsrc/graphics/tiff</code>:</p> 4618 from <code class="filename">pkgsrc/graphics/tiff</code>:</p>
4619<pre class="programlisting"> 4619<pre class="programlisting">
4620# $NetBSD: buildlink3.mk,v 1.16 2009/03/20 19:24:45 joerg Exp $ 4620# $NetBSD: buildlink3.mk,v 1.16 2009/03/20 19:24:45 joerg Exp $
4621 4621
4622BUILDLINK_TREE+= tiff 4622BUILDLINK_TREE+= tiff
4623 4623
4624.if !defined(TIFF_BUILDLINK3_MK) 4624.if !defined(TIFF_BUILDLINK3_MK)
4625TIFF_BUILDLINK3_MK:= 4625TIFF_BUILDLINK3_MK:=
4626 4626
4627BUILDLINK_API_DEPENDS.tiff+= tiff&gt;=3.6.1 4627BUILDLINK_API_DEPENDS.tiff+= tiff&gt;=3.6.1
4628BUILDLINK_ABI_DEPENDS.tiff+= tiff&gt;=3.7.2nb1 4628BUILDLINK_ABI_DEPENDS.tiff+= tiff&gt;=3.7.2nb1
4629BUILDLINK_PKGSRCDIR.tiff?= ../../graphics/tiff 4629BUILDLINK_PKGSRCDIR.tiff?= ../../graphics/tiff
4630 4630
4631.include "../../devel/zlib/buildlink3.mk" 4631.include "../../devel/zlib/buildlink3.mk"
4632.include "../../graphics/jpeg/buildlink3.mk" 4632.include "../../graphics/jpeg/buildlink3.mk"
4633.endif # TIFF_BUILDLINK3_MK 4633.endif # TIFF_BUILDLINK3_MK
4634 4634
4635BUILDLINK_TREE+= -tiff 4635BUILDLINK_TREE+= -tiff
4636</pre> 4636</pre>
4637<p>The header and footer manipulate 4637<p>The header and footer manipulate
4638 <code class="varname">BUILDLINK_TREE</code>, which is common across all 4638 <code class="varname">BUILDLINK_TREE</code>, which is common across all
4639 <code class="filename">buildlink3.mk</code> files and is used to track 4639 <code class="filename">buildlink3.mk</code> files and is used to track
4640 the dependency tree.</p> 4640 the dependency tree.</p>
4641<p>The main section is protected from multiple inclusion 4641<p>The main section is protected from multiple inclusion
4642 and controls how the dependency on <em class="replaceable"><code>pkg</code></em> is 4642 and controls how the dependency on <em class="replaceable"><code>pkg</code></em> is
4643 added. Several important variables are set in the section:</p> 4643 added. Several important variables are set in the section:</p>
4644<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4644<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4645<li class="listitem"><p><code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4645<li class="listitem"><p><code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4646 is the actual dependency recorded in the installed 4646 is the actual dependency recorded in the installed
4647 package; this should always be set using 4647 package; this should always be set using
4648 <span class="command"><strong>+=</strong></span> to ensure that 4648 <span class="command"><strong>+=</strong></span> to ensure that
4649 we're appending to any pre-existing list of values. This 4649 we're appending to any pre-existing list of values. This
4650 variable should be set to the first version of the 4650 variable should be set to the first version of the
4651 package that had an backwards-incompatible API change. 4651 package that had an backwards-incompatible API change.
4652 </p></li> 4652 </p></li>
4653<li class="listitem"><p><code class="varname">BUILDLINK_PKGSRCDIR.<em class="replaceable"><code>pkg</code></em></code> 4653<li class="listitem"><p><code class="varname">BUILDLINK_PKGSRCDIR.<em class="replaceable"><code>pkg</code></em></code>
4654 is the location of the <em class="replaceable"><code>pkg</code></em> 4654 is the location of the <em class="replaceable"><code>pkg</code></em>
4655 pkgsrc directory.</p></li> 4655 pkgsrc directory.</p></li>
4656<li class="listitem"><p><code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>pkg</code></em></code> 4656<li class="listitem"><p><code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>pkg</code></em></code>
4657 (not shown above) controls whether we use 4657 (not shown above) controls whether we use
4658 <code class="varname">BUILD_DEPENDS</code> or 4658 <code class="varname">BUILD_DEPENDS</code> or
4659 <code class="varname">DEPENDS</code> to add the dependency on 4659 <code class="varname">DEPENDS</code> to add the dependency on
4660 <em class="replaceable"><code>pkg</code></em>. The build dependency is 4660 <em class="replaceable"><code>pkg</code></em>. The build dependency is
4661 selected by setting 4661 selected by setting
4662 <code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>pkg</code></em></code> 4662 <code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>pkg</code></em></code>
4663 to <span class="quote">&#8220;<span class="quote">build</span>&#8221;</span>. By default, the full dependency is 4663 to <span class="quote">&#8220;<span class="quote">build</span>&#8221;</span>. By default, the full dependency is
4664 used.</p></li> 4664 used.</p></li>
4665<li class="listitem"><p><code class="varname">BUILDLINK_INCDIRS.<em class="replaceable"><code>pkg</code></em></code> 4665<li class="listitem"><p><code class="varname">BUILDLINK_INCDIRS.<em class="replaceable"><code>pkg</code></em></code>
4666 and 4666 and
4667 <code class="varname">BUILDLINK_LIBDIRS.<em class="replaceable"><code>pkg</code></em></code> 4667 <code class="varname">BUILDLINK_LIBDIRS.<em class="replaceable"><code>pkg</code></em></code>
4668 (not shown above) are lists of subdirectories of 4668 (not shown above) are lists of subdirectories of
4669 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code> 4669 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code>
4670 to add to the header and library search paths. These 4670 to add to the header and library search paths. These
4671 default to <span class="quote">&#8220;<span class="quote">include</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">lib</span>&#8221;</span> 4671 default to <span class="quote">&#8220;<span class="quote">include</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">lib</span>&#8221;</span>
4672 respectively.</p></li> 4672 respectively.</p></li>
4673<li class="listitem"><p><code class="varname">BUILDLINK_CPPFLAGS.<em class="replaceable"><code>pkg</code></em></code> 4673<li class="listitem"><p><code class="varname">BUILDLINK_CPPFLAGS.<em class="replaceable"><code>pkg</code></em></code>
4674 (not shown above) is the list of preprocessor flags to add 4674 (not shown above) is the list of preprocessor flags to add
4675 to <code class="varname">CPPFLAGS</code>, which are passed on to the 4675 to <code class="varname">CPPFLAGS</code>, which are passed on to the
4676 configure and build phases. The <span class="quote">&#8220;<span class="quote">-I</span>&#8221;</span> option 4676 configure and build phases. The <span class="quote">&#8220;<span class="quote">-I</span>&#8221;</span> option
4677 should be avoided and instead be handled using 4677 should be avoided and instead be handled using
4678 <code class="varname">BUILDLINK_INCDIRS.<em class="replaceable"><code>pkg</code></em></code> as 4678 <code class="varname">BUILDLINK_INCDIRS.<em class="replaceable"><code>pkg</code></em></code> as
4679 above.</p></li> 4679 above.</p></li>
4680</ul></div> 4680</ul></div>
4681<p>The following variables are all optionally defined within 4681<p>The following variables are all optionally defined within
4682 this second section (protected against multiple inclusion) and 4682 this second section (protected against multiple inclusion) and
4683 control which package files are symlinked into 4683 control which package files are symlinked into
4684 <code class="filename">${BUILDLINK_DIR}</code> and how their names are 4684 <code class="filename">${BUILDLINK_DIR}</code> and how their names are
4685 transformed during the symlinking:</p> 4685 transformed during the symlinking:</p>
4686<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4686<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4687<li class="listitem"><p><code class="varname">BUILDLINK_FILES.<em class="replaceable"><code>pkg</code></em></code> 4687<li class="listitem"><p><code class="varname">BUILDLINK_FILES.<em class="replaceable"><code>pkg</code></em></code>
4688 (not shown above) is a shell glob pattern relative to 4688 (not shown above) is a shell glob pattern relative to
4689 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code> 4689 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code>
4690 to be symlinked into 4690 to be symlinked into
4691 <code class="filename">${BUILDLINK_DIR}</code>, 4691 <code class="filename">${BUILDLINK_DIR}</code>,
4692 e.g. <code class="filename">include/*.h</code>.</p></li> 4692 e.g. <code class="filename">include/*.h</code>.</p></li>
4693<li class="listitem"><p><code class="varname">BUILDLINK_FILES_CMD.<em class="replaceable"><code>pkg</code></em></code> 4693<li class="listitem"><p><code class="varname">BUILDLINK_FILES_CMD.<em class="replaceable"><code>pkg</code></em></code>
4694 (not shown above) is a shell pipeline that 4694 (not shown above) is a shell pipeline that
4695 outputs to stdout a list of files relative to 4695 outputs to stdout a list of files relative to
4696 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code>. 4696 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code>.
4697 The resulting files are to be symlinked 4697 The resulting files are to be symlinked
4698 into <code class="filename">${BUILDLINK_DIR}</code>. By default, 4698 into <code class="filename">${BUILDLINK_DIR}</code>. By default,
4699 this takes the <code class="filename">+CONTENTS</code> of a 4699 this takes the <code class="filename">+CONTENTS</code> of a
4700 <em class="replaceable"><code>pkg</code></em> and filters it through 4700 <em class="replaceable"><code>pkg</code></em> and filters it through
4701 <code class="varname">${BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em>}</code>.</p></li> 4701 <code class="varname">${BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em>}</code>.</p></li>
4702<li class="listitem"><p><code class="varname">BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em></code> 4702<li class="listitem"><p><code class="varname">BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em></code>
4703 (not shown above) is a filter command that filters 4703 (not shown above) is a filter command that filters
4704 <code class="filename">+CONTENTS</code> input into a list of files 4704 <code class="filename">+CONTENTS</code> input into a list of files
4705 relative to 4705 relative to
4706 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code> 4706 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code>
4707 on stdout. By default, 4707 on stdout. By default,
4708 <code class="varname">BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em></code> 4708 <code class="varname">BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em></code>
4709 outputs the contents of the <code class="filename">include</code> 4709 outputs the contents of the <code class="filename">include</code>
4710 and <code class="filename">lib</code> directories in the package 4710 and <code class="filename">lib</code> directories in the package
4711 <code class="filename">+CONTENTS</code>.</p></li> 4711 <code class="filename">+CONTENTS</code>.</p></li>
4712<li class="listitem"><p><code class="varname">BUILDLINK_FNAME_TRANSFORM.<em class="replaceable"><code>pkg</code></em></code> 4712<li class="listitem"><p><code class="varname">BUILDLINK_FNAME_TRANSFORM.<em class="replaceable"><code>pkg</code></em></code>
4713 (not shown above) is a list of sed arguments used to 4713 (not shown above) is a list of sed arguments used to
4714 transform the name of the source filename into a 4714 transform the name of the source filename into a
4715 destination filename, e.g. <span class="command"><strong>-e 4715 destination filename, e.g. <span class="command"><strong>-e
4716 "s|/curses.h|/ncurses.h|g"</strong></span>.</p></li> 4716 "s|/curses.h|/ncurses.h|g"</strong></span>.</p></li>
4717</ul></div> 4717</ul></div>
4718<p>This section can additionally include any 4718<p>This section can additionally include any
4719 <code class="filename">buildlink3.mk</code> needed for 4719 <code class="filename">buildlink3.mk</code> needed for
4720 <em class="replaceable"><code>pkg</code></em>'s library dependencies. 4720 <em class="replaceable"><code>pkg</code></em>'s library dependencies.
4721 Including these <code class="filename">buildlink3.mk</code> files 4721 Including these <code class="filename">buildlink3.mk</code> files
4722 means that the headers and libraries for these 4722 means that the headers and libraries for these
4723 dependencies are also symlinked into 4723 dependencies are also symlinked into
4724 <code class="filename">${BUILDLINK_DIR}</code> 4724 <code class="filename">${BUILDLINK_DIR}</code>
4725 whenever the <em class="replaceable"><code>pkg</code></em> 4725 whenever the <em class="replaceable"><code>pkg</code></em>
4726 <code class="filename">buildlink3.mk</code> 4726 <code class="filename">buildlink3.mk</code>
4727 file is included. Dependencies are only added for directly 4727 file is included. Dependencies are only added for directly
4728 include <code class="filename">buildlink3.mk</code> files.</p> 4728 include <code class="filename">buildlink3.mk</code> files.</p>
4729<p>When providing a <code class="filename">buildlink3.mk</code> and 4729<p>When providing a <code class="filename">buildlink3.mk</code> and
4730 including other <code class="filename">buildlink3.mk</code> files in it, 4730 including other <code class="filename">buildlink3.mk</code> files in it,
4731 please only add necessary ones, i.e., those whose libraries or 4731 please only add necessary ones, i.e., those whose libraries or
4732 header files are automatically exposed when the package is 4732 header files are automatically exposed when the package is
4733 use.</p> 4733 use.</p>
4734<p>In particular, if only an executable 4734<p>In particular, if only an executable
4735 (<code class="filename">bin/foo</code>) is linked against a library, that 4735 (<code class="filename">bin/foo</code>) is linked against a library, that
4736 library does not need to be propagated in the 4736 library does not need to be propagated in the
4737 <code class="filename">buildlink3.mk</code> file.</p> 4737 <code class="filename">buildlink3.mk</code> file.</p>
4738<p>The following steps should help you decide if a 4738<p>The following steps should help you decide if a
4739 <code class="filename">buildlink3.mk</code> file needs to be included: 4739 <code class="filename">buildlink3.mk</code> file needs to be included:
4740 </p> 4740 </p>
4741<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4741<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4742<li class="listitem"><p>Look at the installed header files: What 4742<li class="listitem"><p>Look at the installed header files: What
4743 headers do they include? The packages providing these files 4743 headers do they include? The packages providing these files
4744 must be buildlinked.</p></li> 4744 must be buildlinked.</p></li>
4745<li class="listitem"><p>Run <code class="filename">ldd</code> on all installed 4745<li class="listitem"><p>Run <code class="filename">ldd</code> on all installed
4746 libraries and look against what other libraries they link. 4746 libraries and look against what other libraries they link.
4747 Some of the packages providing these probably need to be 4747 Some of the packages providing these probably need to be
4748 buildlinked; however, it's not automatic, since e.g. GTK on 4748 buildlinked; however, it's not automatic, since e.g. GTK on
4749 some systems pulls in the X libraries, so they will show up in 4749 some systems pulls in the X libraries, so they will show up in
4750 the <code class="filename">ldd</code> output, while on others (like OS 4750 the <code class="filename">ldd</code> output, while on others (like OS
4751 X) it won't. <code class="filename">ldd</code> output can thus only be 4751 X) it won't. <code class="filename">ldd</code> output can thus only be
4752 used as a hint.</p></li> 4752 used as a hint.</p></li>
4753</ul></div> 4753</ul></div>
4754<p> 4754<p>
4755 </p> 4755 </p>
4756</div> 4756</div>
4757<div class="sect2"> 4757<div class="sect2">
4758<div class="titlepage"><div><div><h3 class="title"> 4758<div class="titlepage"><div><div><h3 class="title">
4759<a name="updating-buildlink-depends"></a>14.2.2. Updating 4759<a name="updating-buildlink-depends"></a>14.2.2. Updating
4760 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4760 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4761 and 4761 and
4762 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4762 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4763 in <code class="filename">buildlink3.mk</code> files</h3></div></div></div> 4763 in <code class="filename">buildlink3.mk</code> files</h3></div></div></div>
4764<p>These two variables differ in that one describes source 4764<p>These two variables differ in that one describes source
4765 compatibility (API) and the other binary compatibility (ABI). 4765 compatibility (API) and the other binary compatibility (ABI).
4766 The difference is that a change in the API breaks compilation of 4766 The difference is that a change in the API breaks compilation of
4767 programs while changes in the ABI stop compiled programs from 4767 programs while changes in the ABI stop compiled programs from
4768 running.</p> 4768 running.</p>
4769<p>Changes to the 4769<p>Changes to the
4770 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4770 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4771 variable in a <code class="filename">buildlink3.mk</code> file happen 4771 variable in a <code class="filename">buildlink3.mk</code> file happen
4772 very rarely. One possible reason is that all packages depending 4772 very rarely. One possible reason is that all packages depending
4773 on this already need a newer version. In case it is bumped see 4773 on this already need a newer version. In case it is bumped see
4774 the description below.</p> 4774 the description below.</p>
4775<p>The most common example of an ABI change is that the major 4775<p>The most common example of an ABI change is that the major
4776 version of a shared library is increased. In this case, 4776 version of a shared library is increased. In this case,
4777 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4777 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4778 should be adjusted to require at least the new package version. 4778 should be adjusted to require at least the new package version.
4779 Then the packages that depend on this package need their 4779 Then the packages that depend on this package need their
4780 <code class="varname">PKGREVISION</code>s increased and, if they have 4780 <code class="varname">PKGREVISION</code>s increased and, if they have
4781 <code class="filename">buildlink3.mk</code> files, their 4781 <code class="filename">buildlink3.mk</code> files, their
4782 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4782 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4783 adjusted, too. This is needed so pkgsrc will require the correct 4783 adjusted, too. This is needed so pkgsrc will require the correct
4784 package dependency and not settle for an older one when building 4784 package dependency and not settle for an older one when building
4785 the source.</p> 4785 the source.</p>
4786<p>See <a class="xref" href="#dependencies" title="19.1.5. Handling dependencies">Section 19.1.5, &#8220;Handling dependencies&#8221;</a> for 4786<p>See <a class="xref" href="#dependencies" title="19.1.5. Handling dependencies">Section 19.1.5, &#8220;Handling dependencies&#8221;</a> for
4787 more information about dependencies on other packages, 4787 more information about dependencies on other packages,
4788 including the <code class="varname">BUILDLINK_ABI_DEPENDS</code> and 4788 including the <code class="varname">BUILDLINK_ABI_DEPENDS</code> and
4789 <code class="varname">ABI_DEPENDS</code> definitions.</p> 4789 <code class="varname">ABI_DEPENDS</code> definitions.</p>
4790<p>Please take careful consideration before adjusting 4790<p>Please take careful consideration before adjusting
4791 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4791 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4792 or 4792 or
4793 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4793 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4794 as we don't want to cause unneeded package deletions and 4794 as we don't want to cause unneeded package deletions and
4795 rebuilds. In many cases, new versions of packages work just 4795 rebuilds. In many cases, new versions of packages work just
4796 fine with older dependencies.</p> 4796 fine with older dependencies.</p>
4797<p>Also it is not needed to set 4797<p>Also it is not needed to set
4798 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 4798 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
4799 when it is identical to 4799 when it is identical to
4800 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>. </p> 4800 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>. </p>
4801</div> 4801</div>
4802</div> 4802</div>
4803<div class="sect1"> 4803<div class="sect1">
4804<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4804<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4805<a name="writing-builtin.mk"></a>14.3. Writing <code class="filename">builtin.mk</code> files</h2></div></div></div> 4805<a name="writing-builtin.mk"></a>14.3. Writing <code class="filename">builtin.mk</code> files</h2></div></div></div>
4806<p>Some packages in pkgsrc install headers and libraries that 4806<p>Some packages in pkgsrc install headers and libraries that
4807 coincide with headers and libraries present in the base system. 4807 coincide with headers and libraries present in the base system.
4808 Aside from a <code class="filename">buildlink3.mk</code> file, these 4808 Aside from a <code class="filename">buildlink3.mk</code> file, these
4809 packages should also include a <code class="filename">builtin.mk</code> 4809 packages should also include a <code class="filename">builtin.mk</code>
4810 file that includes the necessary checks to decide whether using 4810 file that includes the necessary checks to decide whether using
4811 the built-in software or the pkgsrc software is 4811 the built-in software or the pkgsrc software is
4812 appropriate.</p> 4812 appropriate.</p>
4813<p>The only requirements of a builtin.mk file for 4813<p>The only requirements of a builtin.mk file for
4814 <em class="replaceable"><code>pkg</code></em> are:</p> 4814 <em class="replaceable"><code>pkg</code></em> are:</p>
4815<div class="orderedlist"><ol class="orderedlist" type="1"> 4815<div class="orderedlist"><ol class="orderedlist" type="1">
4816<li class="listitem"><p>It should set 4816<li class="listitem"><p>It should set
4817 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 4817 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
4818 to either <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span> 4818 to either <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span>
4819 after it is included.</p></li> 4819 after it is included.</p></li>
4820<li class="listitem"><p>It should <span class="emphasis"><em>not</em></span> override any 4820<li class="listitem"><p>It should <span class="emphasis"><em>not</em></span> override any
4821 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 4821 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
4822 which is already set before the 4822 which is already set before the
4823 <code class="filename">builtin.mk</code> file is included.</p></li> 4823 <code class="filename">builtin.mk</code> file is included.</p></li>
4824<li class="listitem"><p>It should be written to allow multiple inclusion. This 4824<li class="listitem"><p>It should be written to allow multiple inclusion. This
4825 is <span class="emphasis"><em>very</em></span> important and takes careful 4825 is <span class="emphasis"><em>very</em></span> important and takes careful
4826 attention to <code class="filename">Makefile</code> coding.</p></li> 4826 attention to <code class="filename">Makefile</code> coding.</p></li>
4827</ol></div> 4827</ol></div>
4828<div class="sect2"> 4828<div class="sect2">
4829<div class="titlepage"><div><div><h3 class="title"> 4829<div class="titlepage"><div><div><h3 class="title">
4830<a name="anatomy-of-builtin.mk"></a>14.3.1. Anatomy of a <code class="filename">builtin.mk</code> file</h3></div></div></div> 4830<a name="anatomy-of-builtin.mk"></a>14.3.1. Anatomy of a <code class="filename">builtin.mk</code> file</h3></div></div></div>
4831<p>The following is the recommended template for builtin.mk 4831<p>The following is the recommended template for builtin.mk
4832 files:</p> 4832 files:</p>
4833<pre class="programlisting"> 4833<pre class="programlisting">
4834.if !defined(IS_BUILTIN.foo) 4834.if !defined(IS_BUILTIN.foo)
4835# 4835#
4836# IS_BUILTIN.foo is set to "yes" or "no" depending on whether "foo" 4836# IS_BUILTIN.foo is set to "yes" or "no" depending on whether "foo"
4837# genuinely exists in the system or not. 4837# genuinely exists in the system or not.
4838# 4838#
4839IS_BUILTIN.foo?= no 4839IS_BUILTIN.foo?= no
4840 4840
4841# BUILTIN_PKG.foo should be set here if "foo" is built-in and its package 4841# BUILTIN_PKG.foo should be set here if "foo" is built-in and its package
4842# version can be determined. 4842# version can be determined.
4843# 4843#
4844. if !empty(IS_BUILTIN.foo:M[yY][eE][sS]) 4844. if !empty(IS_BUILTIN.foo:M[yY][eE][sS])
4845BUILTIN_PKG.foo?= foo-1.0 4845BUILTIN_PKG.foo?= foo-1.0
4846. endif 4846. endif
4847.endif # IS_BUILTIN.foo 4847.endif # IS_BUILTIN.foo
4848 4848
4849.if !defined(USE_BUILTIN.foo) 4849.if !defined(USE_BUILTIN.foo)
4850USE_BUILTIN.foo?= ${IS_BUILTIN.foo} 4850USE_BUILTIN.foo?= ${IS_BUILTIN.foo}
4851. if defined(BUILTIN_PKG.foo) 4851. if defined(BUILTIN_PKG.foo)
4852. for _depend_ in ${BUILDLINK_API_DEPENDS.foo} 4852. for _depend_ in ${BUILDLINK_API_DEPENDS.foo}
4853. if !empty(USE_BUILTIN.foo:M[yY][eE][sS]) 4853. if !empty(USE_BUILTIN.foo:M[yY][eE][sS])
4854USE_BUILTIN.foo!= \ 4854USE_BUILTIN.foo!= \
4855 ${PKG_ADMIN} pmatch '${_depend_}' ${BUILTIN_PKG.foo} \ 4855 ${PKG_ADMIN} pmatch '${_depend_}' ${BUILTIN_PKG.foo} \
4856 &amp;&amp; ${ECHO} "yes" || ${ECHO} "no" 4856 &amp;&amp; ${ECHO} "yes" || ${ECHO} "no"
4857. endif 4857. endif
4858. endfor 4858. endfor
4859. endif 4859. endif
4860.endif # USE_BUILTIN.foo 4860.endif # USE_BUILTIN.foo
4861 4861
4862CHECK_BUILTIN.foo?= no 4862CHECK_BUILTIN.foo?= no
4863.if !empty(CHECK_BUILTIN.foo:M[nN][oO]) 4863.if !empty(CHECK_BUILTIN.foo:M[nN][oO])
4864# 4864#
4865# Here we place code that depends on whether USE_BUILTIN.foo is set to 4865# Here we place code that depends on whether USE_BUILTIN.foo is set to
4866# "yes" or "no". 4866# "yes" or "no".
4867# 4867#
4868.endif # CHECK_BUILTIN.foo 4868.endif # CHECK_BUILTIN.foo
4869</pre> 4869</pre>
4870<p>The first section sets 4870<p>The first section sets
4871 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 4871 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
4872 depending on if <em class="replaceable"><code>pkg</code></em> really exists 4872 depending on if <em class="replaceable"><code>pkg</code></em> really exists
4873 in the base system. This should not be a base system software 4873 in the base system. This should not be a base system software
4874 with similar functionality to <em class="replaceable"><code>pkg</code></em>; 4874 with similar functionality to <em class="replaceable"><code>pkg</code></em>;
4875 it should only be <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> if the actual package is 4875 it should only be <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> if the actual package is
4876 included as part of the base system. This variable is only 4876 included as part of the base system. This variable is only
4877 used internally within the <code class="filename">builtin.mk</code> 4877 used internally within the <code class="filename">builtin.mk</code>
4878 file.</p> 4878 file.</p>
4879<p>The second section sets 4879<p>The second section sets
4880 <code class="varname">BUILTIN_PKG.<em class="replaceable"><code>pkg</code></em></code> 4880 <code class="varname">BUILTIN_PKG.<em class="replaceable"><code>pkg</code></em></code>
4881 to the version of <em class="replaceable"><code>pkg</code></em> in the base 4881 to the version of <em class="replaceable"><code>pkg</code></em> in the base
4882 system if it exists (if 4882 system if it exists (if
4883 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 4883 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
4884 is <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>). This variable is only used internally 4884 is <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>). This variable is only used internally
4885 within the <code class="filename">builtin.mk</code> file.</p> 4885 within the <code class="filename">builtin.mk</code> file.</p>
4886<p>The third section sets 4886<p>The third section sets
4887 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 4887 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
4888 and is <span class="emphasis"><em>required</em></span> in all 4888 and is <span class="emphasis"><em>required</em></span> in all
4889 <code class="filename">builtin.mk</code> files. The code in this 4889 <code class="filename">builtin.mk</code> files. The code in this
4890 section must make the determination whether the built-in 4890 section must make the determination whether the built-in
4891 software is adequate to satisfy the dependencies listed in 4891 software is adequate to satisfy the dependencies listed in
4892 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>. 4892 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>.
4893 This is typically done by comparing 4893 This is typically done by comparing
4894 <code class="varname">BUILTIN_PKG.<em class="replaceable"><code>pkg</code></em></code> 4894 <code class="varname">BUILTIN_PKG.<em class="replaceable"><code>pkg</code></em></code>
4895 against each of the dependencies in 4895 against each of the dependencies in
4896 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>. 4896 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>.
4897 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 4897 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
4898 <span class="emphasis"><em>must</em></span> be set to the correct value by the 4898 <span class="emphasis"><em>must</em></span> be set to the correct value by the
4899 end of the <code class="filename">builtin.mk</code> file. Note that 4899 end of the <code class="filename">builtin.mk</code> file. Note that
4900 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 4900 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
4901 may be <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> even if 4901 may be <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> even if
4902 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 4902 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
4903 is <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span> because we may make the determination 4903 is <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span> because we may make the determination
4904 that the built-in version of the software is similar enough to 4904 that the built-in version of the software is similar enough to
4905 be used as a replacement.</p> 4905 be used as a replacement.</p>
4906<p>The last section is guarded by 4906<p>The last section is guarded by
4907 <code class="varname">CHECK_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>, 4907 <code class="varname">CHECK_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>,
4908 and includes code that uses the value of 4908 and includes code that uses the value of
4909 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 4909 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
4910 set in the previous section. This typically includes, e.g., 4910 set in the previous section. This typically includes, e.g.,
4911 adding additional dependency restrictions and listing additional 4911 adding additional dependency restrictions and listing additional
4912 files to symlink into <code class="filename">${BUILDLINK_DIR}</code> (via 4912 files to symlink into <code class="filename">${BUILDLINK_DIR}</code> (via
4913 <code class="varname">BUILDLINK_FILES.<em class="replaceable"><code>pkg</code></em></code>).</p> 4913 <code class="varname">BUILDLINK_FILES.<em class="replaceable"><code>pkg</code></em></code>).</p>
4914</div> 4914</div>
4915<div class="sect2"> 4915<div class="sect2">
4916<div class="titlepage"><div><div><h3 class="title"> 4916<div class="titlepage"><div><div><h3 class="title">
4917<a name="native-or-pkgsrc-preference"></a>14.3.2. Global preferences for native or pkgsrc software</h3></div></div></div> 4917<a name="native-or-pkgsrc-preference"></a>14.3.2. Global preferences for native or pkgsrc software</h3></div></div></div>
4918<p>When building packages, it's possible to choose whether to set 4918<p>When building packages, it's possible to choose whether to set
4919 a global preference for using either the built-in (native) 4919 a global preference for using either the built-in (native)
4920 version or the pkgsrc version of software to satisfy a 4920 version or the pkgsrc version of software to satisfy a
4921 dependency. This is controlled by setting 4921 dependency. This is controlled by setting
4922 <code class="varname">PREFER_PKGSRC</code> and 4922 <code class="varname">PREFER_PKGSRC</code> and
4923 <code class="varname">PREFER_NATIVE</code>. These variables take values 4923 <code class="varname">PREFER_NATIVE</code>. These variables take values
4924 of either <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span>, or a list of 4924 of either <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span>, or a list of
4925 packages. <code class="varname">PREFER_PKGSRC</code> tells pkgsrc to 4925 packages. <code class="varname">PREFER_PKGSRC</code> tells pkgsrc to
4926 use the pkgsrc versions of software, while 4926 use the pkgsrc versions of software, while
4927 <code class="varname">PREFER_NATIVE</code> tells pkgsrc to use the 4927 <code class="varname">PREFER_NATIVE</code> tells pkgsrc to use the
4928 built-in versions. Preferences are determined by the most 4928 built-in versions. Preferences are determined by the most
4929 specific instance of the package in either 4929 specific instance of the package in either
4930 <code class="varname">PREFER_PKGSRC</code> or 4930 <code class="varname">PREFER_PKGSRC</code> or
4931 <code class="varname">PREFER_NATIVE</code>. If a package is specified 4931 <code class="varname">PREFER_NATIVE</code>. If a package is specified
4932 in neither or in both variables, then 4932 in neither or in both variables, then
4933 <code class="varname">PREFER_PKGSRC</code> has precedence over 4933 <code class="varname">PREFER_PKGSRC</code> has precedence over
4934 <code class="varname">PREFER_NATIVE</code>. For example, to require 4934 <code class="varname">PREFER_NATIVE</code>. For example, to require
4935 using pkgsrc versions of software for all but the most basic 4935 using pkgsrc versions of software for all but the most basic
4936 bits on a NetBSD system, you can set:</p> 4936 bits on a NetBSD system, you can set:</p>
4937<pre class="programlisting"> 4937<pre class="programlisting">
4938PREFER_PKGSRC= yes 4938PREFER_PKGSRC= yes
4939PREFER_NATIVE= getopt skey tcp_wrappers 4939PREFER_NATIVE= getopt skey tcp_wrappers
4940</pre> 4940</pre>
4941<p>A package <span class="emphasis"><em>must</em></span> have a 4941<p>A package <span class="emphasis"><em>must</em></span> have a
4942 <code class="filename">builtin.mk</code> 4942 <code class="filename">builtin.mk</code>
4943 file to be listed in <code class="varname">PREFER_NATIVE</code>, 4943 file to be listed in <code class="varname">PREFER_NATIVE</code>,
4944 otherwise it is simply ignored in that list.</p> 4944 otherwise it is simply ignored in that list.</p>
4945<p>Setting <code class="varname">PREFER_NATIVE</code> should be performed 4945<p>Setting <code class="varname">PREFER_NATIVE</code> should be performed
4946 straight after bootstrap and <code class="varname">PREFER_PKGSRC</code> during 4946 straight after bootstrap and <code class="varname">PREFER_PKGSRC</code> during
4947 bootstrap. 4947 bootstrap.
4948 Switching between settings globally at a later date can introduce 4948 Switching between settings globally at a later date can introduce
4949 complications with dependency resolution. This is caused by packages 4949 complications with dependency resolution. This is caused by packages
4950 built with the opposite preference being installed alongside each other.</p> 4950 built with the opposite preference being installed alongside each other.</p>
4951<pre class="screen"> 4951<pre class="screen">
4952<code class="prompt">#</code> <strong class="userinput"><code>./bootstrap --prefer-pkgsrc yes</code></strong> 4952<code class="prompt">#</code> <strong class="userinput"><code>./bootstrap --prefer-pkgsrc yes</code></strong>
4953</pre> 4953</pre>
4954</div> 4954</div>
4955</div> 4955</div>
4956</div> 4956</div>
4957<div class="chapter"> 4957<div class="chapter">
4958<div class="titlepage"><div><div><h2 class="title"> 4958<div class="titlepage"><div><div><h2 class="title">
4959<a name="pkginstall"></a>Chapter 15. The pkginstall framework</h2></div></div></div> 4959<a name="pkginstall"></a>Chapter 15. The pkginstall framework</h2></div></div></div>
4960<div class="toc"> 4960<div class="toc">
4961<p><b>Table of Contents</b></p> 4961<p><b>Table of Contents</b></p>
4962<dl class="toc"> 4962<dl class="toc">
4963<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt> 4963<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt>
4964<dd><dl> 4964<dd><dl>
4965<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt> 4965<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt>
4966<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt> 4966<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt>
4967</dl></dd> 4967</dl></dd>
4968<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt> 4968<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt>
4969<dd><dl> 4969<dd><dl>
4970<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt> 4970<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt>
4971<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt> 4971<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt>
4972<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt> 4972<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt>
4973<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt> 4973<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt>
4974</dl></dd> 4974</dl></dd>
4975<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt> 4975<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt>
4976<dd><dl><dt><span class="sect2"><a href="#rcd-scripts-disable">15.3.1. Disabling handling of system startup scripts</a></span></dt></dl></dd> 4976<dd><dl><dt><span class="sect2"><a href="#rcd-scripts-disable">15.3.1. Disabling handling of system startup scripts</a></span></dt></dl></dd>
4977<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt> 4977<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt>
4978<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt> 4978<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt>
4979<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd> 4979<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd>
4980<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt> 4980<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt>
4981<dd><dl><dt><span class="sect2"><a href="#fonts-disable">15.6.1. Disabling automatic update of the fonts databases</a></span></dt></dl></dd> 4981<dd><dl><dt><span class="sect2"><a href="#fonts-disable">15.6.1. Disabling automatic update of the fonts databases</a></span></dt></dl></dd>
4982</dl> 4982</dl>
4983</div> 4983</div>
4984<p>This chapter describes the framework known as 4984<p>This chapter describes the framework known as
4985<code class="literal">pkginstall</code>, whose key features are:</p> 4985<code class="literal">pkginstall</code>, whose key features are:</p>
4986<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4986<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4987<li class="listitem"><p>Generic installation and manipulation of directories and files 4987<li class="listitem"><p>Generic installation and manipulation of directories and files
4988 outside the pkgsrc-handled tree, <code class="varname">LOCALBASE</code>.</p></li> 4988 outside the pkgsrc-handled tree, <code class="varname">LOCALBASE</code>.</p></li>
4989<li class="listitem"><p>Automatic handling of configuration files during installation, 4989<li class="listitem"><p>Automatic handling of configuration files during installation,
4990 provided that packages are correctly designed.</p></li> 4990 provided that packages are correctly designed.</p></li>
4991<li class="listitem"><p>Generation and installation of system startup scripts.</p></li> 4991<li class="listitem"><p>Generation and installation of system startup scripts.</p></li>
4992<li class="listitem"><p>Registration of system users and groups.</p></li> 4992<li class="listitem"><p>Registration of system users and groups.</p></li>
4993<li class="listitem"><p>Registration of system shells.</p></li> 4993<li class="listitem"><p>Registration of system shells.</p></li>
4994<li class="listitem"><p>Automatic updating of fonts databases.</p></li> 4994<li class="listitem"><p>Automatic updating of fonts databases.</p></li>
4995</ul></div> 4995</ul></div>
4996<p>The following sections inspect each of the above points in detail.</p> 4996<p>The following sections inspect each of the above points in detail.</p>
4997<p>You may be thinking that many of the things described here could be 4997<p>You may be thinking that many of the things described here could be
4998easily done with simple code in the package's post-installation target 4998easily done with simple code in the package's post-installation target
4999(<code class="literal">post-install</code>). <span class="emphasis"><em>This is incorrect</em></span>, 4999(<code class="literal">post-install</code>). <span class="emphasis"><em>This is incorrect</em></span>,
5000as the code in them is only executed when building from source. Machines 5000as the code in them is only executed when building from source. Machines
5001using binary packages could not benefit from it at all (as the code itself 5001using binary packages could not benefit from it at all (as the code itself
5002could be unavailable). Therefore, the only way to achieve any of the items 5002could be unavailable). Therefore, the only way to achieve any of the items
5003described above is by means of the installation scripts, which are 5003described above is by means of the installation scripts, which are
5004automatically generated by pkginstall.</p> 5004automatically generated by pkginstall.</p>
5005<div class="sect1"> 5005<div class="sect1">
5006<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5006<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5007<a name="files-and-dirs-outside-prefix"></a>15.1. Files and directories outside the installation prefix</h2></div></div></div> 5007<a name="files-and-dirs-outside-prefix"></a>15.1. Files and directories outside the installation prefix</h2></div></div></div>
5008<p>As you already know, the <code class="filename">PLIST</code> file holds a list 5008<p>As you already know, the <code class="filename">PLIST</code> file holds a list
5009of files and directories that belong to a package. The names used in it 5009of files and directories that belong to a package. The names used in it
5010are relative to the installation prefix (<code class="filename">${PREFIX}</code>), 5010are relative to the installation prefix (<code class="filename">${PREFIX}</code>),
5011which means that it cannot register files outside this directory (absolute 5011which means that it cannot register files outside this directory (absolute
5012path names are not allowed). Despite this restriction, some packages need 5012path names are not allowed). Despite this restriction, some packages need
5013to install files outside this location; e.g., under 5013to install files outside this location; e.g., under
5014<code class="filename">${VARBASE}</code> or 5014<code class="filename">${VARBASE}</code> or
5015<code class="filename">${PKG_SYSCONFDIR}</code>. The only way to achieve this 5015<code class="filename">${PKG_SYSCONFDIR}</code>. The only way to achieve this
5016is to create such files during installation time by using 5016is to create such files during installation time by using
5017installation scripts.</p> 5017installation scripts.</p>
5018<p>The generic installation scripts are shell scripts that can 5018<p>The generic installation scripts are shell scripts that can
5019contain arbitrary code. The list of scripts to execute is taken from 5019contain arbitrary code. The list of scripts to execute is taken from
5020the <code class="varname">INSTALL_FILE</code> variable, which defaults to 5020the <code class="varname">INSTALL_FILE</code> variable, which defaults to
5021<code class="filename">INSTALL</code>. A similar variable exists for package 5021<code class="filename">INSTALL</code>. A similar variable exists for package
5022removal (<code class="varname">DEINSTALL_FILE</code>, whose default is 5022removal (<code class="varname">DEINSTALL_FILE</code>, whose default is
5023<code class="filename">DEINSTALL</code>). These scripts can run arbitrary 5023<code class="filename">DEINSTALL</code>). These scripts can run arbitrary
5024commands, so they have the potential to create and manage files 5024commands, so they have the potential to create and manage files
5025anywhere in the file system.</p> 5025anywhere in the file system.</p>
5026<p>Using these general installation files is not recommended, but 5026<p>Using these general installation files is not recommended, but
5027may be needed in some special cases. One reason for avoiding them is 5027may be needed in some special cases. One reason for avoiding them is
5028that the user has to trust the packager that there is no unwanted or 5028that the user has to trust the packager that there is no unwanted or
5029simply erroneous code included in the installation script. Also, 5029simply erroneous code included in the installation script. Also,
5030previously there were many similar scripts for the same functionality, 5030previously there were many similar scripts for the same functionality,
5031and fixing a common error involved finding and changing all of 5031and fixing a common error involved finding and changing all of
5032them.</p> 5032them.</p>
5033<p>The pkginstall framework offers another, standardized way. It 5033<p>The pkginstall framework offers another, standardized way. It
5034provides generic scripts to abstract the manipulation of such files 5034provides generic scripts to abstract the manipulation of such files
5035and directories based on variables set in the package's 5035and directories based on variables set in the package's
5036<code class="filename">Makefile</code>. The rest of this section describes 5036<code class="filename">Makefile</code>. The rest of this section describes
5037these variables.</p> 5037these variables.</p>
5038<div class="sect2"> 5038<div class="sect2">
5039<div class="titlepage"><div><div><h3 class="title"> 5039<div class="titlepage"><div><div><h3 class="title">
5040<a name="dirs-outside-prefix"></a>15.1.1. Directory manipulation</h3></div></div></div> 5040<a name="dirs-outside-prefix"></a>15.1.1. Directory manipulation</h3></div></div></div>
5041<p>The following variables can be set to request the creation of 5041<p>The following variables can be set to request the creation of
5042directories anywhere in the file system:</p> 5042directories anywhere in the file system:</p>
5043<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5043<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5044<li class="listitem"> 5044<li class="listitem">
5045<p><code class="varname">MAKE_DIRS</code> and <code class="varname">OWN_DIRS</code> 5045<p><code class="varname">MAKE_DIRS</code> and <code class="varname">OWN_DIRS</code>
5046 contain a list of directories that should be created and should attempt 5046 contain a list of directories that should be created and should attempt
5047 to be destroyed by the installation scripts. The difference between 5047 to be destroyed by the installation scripts. The difference between
5048 the two is that the latter prompts the administrator to remove any 5048 the two is that the latter prompts the administrator to remove any
5049 directories that may be left after deinstallation (because they were 5049 directories that may be left after deinstallation (because they were
5050 not empty), while the former does not. Example:</p> 5050 not empty), while the former does not. Example:</p>
5051<pre class="programlisting"> 5051<pre class="programlisting">
5052MAKE_DIRS+= ${VARBASE}/foo/private 5052MAKE_DIRS+= ${VARBASE}/foo/private
5053</pre> 5053</pre>
5054</li> 5054</li>
5055<li class="listitem"> 5055<li class="listitem">
5056<p><code class="varname">MAKE_DIRS_PERMS</code> and 5056<p><code class="varname">MAKE_DIRS_PERMS</code> and
5057 <code class="varname">OWN_DIRS_PERMS</code> contain a list of tuples describing 5057 <code class="varname">OWN_DIRS_PERMS</code> contain a list of tuples describing
5058 which directories should be created and should attempt to be destroyed 5058 which directories should be created and should attempt to be destroyed
5059 by the installation scripts. Each tuple holds the following values, 5059 by the installation scripts. Each tuple holds the following values,
5060 separated by spaces: the directory name, its owner, its group and its 5060 separated by spaces: the directory name, its owner, its group and its
5061 numerical mode. For example:</p> 5061 numerical mode. For example:</p>
5062<pre class="programlisting"> 5062<pre class="programlisting">
5063MAKE_DIRS_PERMS+= ${VARBASE}/foo/private \ 5063MAKE_DIRS_PERMS+= ${VARBASE}/foo/private \
5064 ${REAL_ROOT_USER} ${REAL_ROOT_GROUP} 0700 5064 ${REAL_ROOT_USER} ${REAL_ROOT_GROUP} 0700
5065</pre> 5065</pre>
5066<p>The difference between the two is exactly the same as their 5066<p>The difference between the two is exactly the same as their
5067 non-<code class="varname">PERMS</code> counterparts.</p> 5067 non-<code class="varname">PERMS</code> counterparts.</p>
5068</li> 5068</li>
5069</ul></div> 5069</ul></div>
5070</div> 5070</div>
5071<div class="sect2"> 5071<div class="sect2">
5072<div class="titlepage"><div><div><h3 class="title"> 5072<div class="titlepage"><div><div><h3 class="title">
5073<a name="files-outside-prefix"></a>15.1.2. File manipulation</h3></div></div></div> 5073<a name="files-outside-prefix"></a>15.1.2. File manipulation</h3></div></div></div>
5074<p>Creating non-empty files outside the installation prefix is tricky 5074<p>Creating non-empty files outside the installation prefix is tricky
5075because the <code class="filename">PLIST</code> forces all files to be inside it. 5075because the <code class="filename">PLIST</code> forces all files to be inside it.
5076To overcome this problem, the only solution is to extract the file in the 5076To overcome this problem, the only solution is to extract the file in the
5077known place (i.e., inside the installation prefix) and copy it to the 5077known place (i.e., inside the installation prefix) and copy it to the
5078appropriate location during installation (done by the installation scripts 5078appropriate location during installation (done by the installation scripts
5079generated by pkginstall). We will call the former the <span class="emphasis"><em>master 5079generated by pkginstall). We will call the former the <span class="emphasis"><em>master
5080file</em></span> in the following paragraphs, which describe the variables 5080file</em></span> in the following paragraphs, which describe the variables
5081that can be used to automatically and consistently handle files outside the 5081that can be used to automatically and consistently handle files outside the
5082installation prefix:</p> 5082installation prefix:</p>
5083<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5083<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5084<li class="listitem"> 5084<li class="listitem">
5085<p><code class="varname">CONF_FILES</code> and 5085<p><code class="varname">CONF_FILES</code> and
5086 <code class="varname">REQD_FILES</code> are pairs of master and target files. 5086 <code class="varname">REQD_FILES</code> are pairs of master and target files.
5087 During installation time, the master file is copied to the target one 5087 During installation time, the master file is copied to the target one
5088 if and only if the latter does not exist. Upon deinstallation, the 5088 if and only if the latter does not exist. Upon deinstallation, the
5089 target file is removed provided that it was not modified by the 5089 target file is removed provided that it was not modified by the
5090 installation.</p> 5090 installation.</p>
5091<p>The difference between the two is that the latter prompts the 5091<p>The difference between the two is that the latter prompts the
5092 administrator to remove any files that may be left after 5092 administrator to remove any files that may be left after
5093 deinstallation (because they were not empty), while the former does 5093 deinstallation (because they were not empty), while the former does
5094 not.</p> 5094 not.</p>
5095</li> 5095</li>
5096<li class="listitem"> 5096<li class="listitem">
5097<p><code class="varname">CONF_FILES_PERMS</code> and 5097<p><code class="varname">CONF_FILES_PERMS</code> and
5098 <code class="varname">REQD_FILES_PERMS</code> contain tuples describing master 5098 <code class="varname">REQD_FILES_PERMS</code> contain tuples describing master
5099 files as well as their target locations. For each of them, it also 5099 files as well as their target locations. For each of them, it also
5100 specifies their owner, their group and their numeric permissions, in 5100 specifies their owner, their group and their numeric permissions, in
5101 this order. For example:</p> 5101 this order. For example:</p>
5102<pre class="programlisting"> 5102<pre class="programlisting">
5103REQD_FILES_PERMS+= ${PREFIX}/share/somefile ${VARBASE}/somefile \ 5103REQD_FILES_PERMS+= ${PREFIX}/share/somefile ${VARBASE}/somefile \
5104 ${REAL_ROOT_USER} ${REAL_ROOT_GROUP} 0700 5104 ${REAL_ROOT_USER} ${REAL_ROOT_GROUP} 0700
5105</pre> 5105</pre>
5106<p>The difference between the two is exactly the same as their 5106<p>The difference between the two is exactly the same as their
5107 non-<code class="varname">PERMS</code> counterparts.</p> 5107 non-<code class="varname">PERMS</code> counterparts.</p>
5108</li> 5108</li>
5109</ul></div> 5109</ul></div>
5110</div> 5110</div>
5111</div> 5111</div>
5112<div class="sect1"> 5112<div class="sect1">
5113<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5113<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5114<a name="conf-files"></a>15.2. Configuration files</h2></div></div></div> 5114<a name="conf-files"></a>15.2. Configuration files</h2></div></div></div>
5115<p>Configuration files are special in the sense that they are installed 5115<p>Configuration files are special in the sense that they are installed
5116in their own specific directory, <code class="varname">PKG_SYSCONFDIR</code>, and 5116in their own specific directory, <code class="varname">PKG_SYSCONFDIR</code>, and
5117need special treatment during installation (most of which is automated by 5117need special treatment during installation (most of which is automated by
5118pkginstall). The main concept you must bear in mind is that files marked 5118pkginstall). The main concept you must bear in mind is that files marked
5119as configuration files are automatically copied to the right place (somewhere 5119as configuration files are automatically copied to the right place (somewhere
5120inside <code class="varname">PKG_SYSCONFDIR</code>) during installation <span class="emphasis"><em>if 5120inside <code class="varname">PKG_SYSCONFDIR</code>) during installation <span class="emphasis"><em>if
5121and only if</em></span> they didn't exist before. Similarly, they will not 5121and only if</em></span> they didn't exist before. Similarly, they will not
5122be removed if they have local modifications. This ensures that 5122be removed if they have local modifications. This ensures that
5123administrators never lose any custom changes they may have made.</p> 5123administrators never lose any custom changes they may have made.</p>
5124<div class="sect2"> 5124<div class="sect2">
5125<div class="titlepage"><div><div><h3 class="title"> 5125<div class="titlepage"><div><div><h3 class="title">
5126<a name="conf-files-sysconfdir"></a>15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</h3></div></div></div> 5126<a name="conf-files-sysconfdir"></a>15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</h3></div></div></div>
5127<p>As said before, the <code class="varname">PKG_SYSCONFDIR</code> variable 5127<p>As said before, the <code class="varname">PKG_SYSCONFDIR</code> variable
5128specifies where configuration files shall be installed. Its contents are 5128specifies where configuration files shall be installed. Its contents are
5129set based upon the following variables:</p> 5129set based upon the following variables:</p>
5130<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5130<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5131<li class="listitem"><p><code class="varname">PKG_SYSCONFBASE</code>: The configuration's root 5131<li class="listitem"><p><code class="varname">PKG_SYSCONFBASE</code>: The configuration's root
5132 directory. Defaults to <code class="filename">${PREFIX}/etc</code> although it may 5132 directory. Defaults to <code class="filename">${PREFIX}/etc</code> although it may
5133 be overridden by the user to point to his preferred location (e.g., 5133 be overridden by the user to point to his preferred location (e.g.,
5134 <code class="filename">/etc</code>, <code class="filename">/etc/pkg</code>, etc.). 5134 <code class="filename">/etc</code>, <code class="filename">/etc/pkg</code>, etc.).
5135 Packages must not use it directly.</p></li> 5135 Packages must not use it directly.</p></li>
5136<li class="listitem"> 5136<li class="listitem">
5137<p><code class="varname">PKG_SYSCONFSUBDIR</code>: A subdirectory of 5137<p><code class="varname">PKG_SYSCONFSUBDIR</code>: A subdirectory of
5138 <code class="varname">PKG_SYSCONFBASE</code> under which the configuration files 5138 <code class="varname">PKG_SYSCONFBASE</code> under which the configuration files
5139 for the package being built shall be installed. The definition of this 5139 for the package being built shall be installed. The definition of this
5140 variable only makes sense in the package's 5140 variable only makes sense in the package's
5141 <code class="filename">Makefile</code> (i.e., it is not user-customizable).</p> 5141 <code class="filename">Makefile</code> (i.e., it is not user-customizable).</p>
5142<p>As an example, consider the Apache package, 5142<p>As an example, consider the Apache package,
5143 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/apache24/README.html" target="_top"><code class="filename">www/apache24</code></a>, which places its 5143 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/apache24/README.html" target="_top"><code class="filename">www/apache24</code></a>, which places its
5144 configuration files under the 5144 configuration files under the
5145 <code class="filename">httpd/</code> subdirectory of 5145 <code class="filename">httpd/</code> subdirectory of
5146 <code class="varname">PKG_SYSCONFBASE</code>. This should be set in the package 5146 <code class="varname">PKG_SYSCONFBASE</code>. This should be set in the package
5147 Makefile.</p> 5147 Makefile.</p>
5148</li> 5148</li>
5149<li class="listitem"><p><code class="varname">PKG_SYSCONFVAR</code>: Specifies the name of the 5149<li class="listitem"><p><code class="varname">PKG_SYSCONFVAR</code>: Specifies the name of the
5150 variable that holds this package's configuration directory (if 5150 variable that holds this package's configuration directory (if
5151 different from <code class="varname">PKG_SYSCONFBASE</code>). It defaults to 5151 different from <code class="varname">PKG_SYSCONFBASE</code>). It defaults to
5152 <code class="varname">PKGBASE</code>'s value, and is always prefixed with 5152 <code class="varname">PKGBASE</code>'s value, and is always prefixed with
5153 <code class="literal">PKG_SYSCONFDIR</code>.</p></li> 5153 <code class="literal">PKG_SYSCONFDIR</code>.</p></li>
5154<li class="listitem"><p><code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code>: Holds the 5154<li class="listitem"><p><code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code>: Holds the
5155 directory where the configuration files for the package identified by 5155 directory where the configuration files for the package identified by
5156 <code class="varname">PKG_SYSCONFVAR</code>'s shall be placed.</p></li> 5156 <code class="varname">PKG_SYSCONFVAR</code>'s shall be placed.</p></li>
5157</ul></div> 5157</ul></div>
5158<p>Based on the above variables, pkginstall determines the value of 5158<p>Based on the above variables, pkginstall determines the value of
5159<code class="varname">PKG_SYSCONFDIR</code>, which is the <span class="emphasis"><em>only</em></span> 5159<code class="varname">PKG_SYSCONFDIR</code>, which is the <span class="emphasis"><em>only</em></span>
5160variable that can be used within a package to refer to its configuration 5160variable that can be used within a package to refer to its configuration
5161directory. The algorithm used to set its value is basically the 5161directory. The algorithm used to set its value is basically the
5162following:</p> 5162following:</p>
5163<div class="orderedlist"><ol class="orderedlist" type="1"> 5163<div class="orderedlist"><ol class="orderedlist" type="1">
5164<li class="listitem"><p>If <code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code> is set, 5164<li class="listitem"><p>If <code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code> is set,
5165 its value is used.</p></li> 5165 its value is used.</p></li>
5166<li class="listitem"><p>If the previous variable is not defined but 5166<li class="listitem"><p>If the previous variable is not defined but
5167 <code class="varname">PKG_SYSCONFSUBDIR</code> is set in the package's 5167 <code class="varname">PKG_SYSCONFSUBDIR</code> is set in the package's
5168 <code class="filename">Makefile</code>, the resulting value is 5168 <code class="filename">Makefile</code>, the resulting value is
5169 <code class="filename">${PKG_SYSCONFBASE}/${PKG_SYSCONFSUBDIR}</code>.</p></li> 5169 <code class="filename">${PKG_SYSCONFBASE}/${PKG_SYSCONFSUBDIR}</code>.</p></li>
5170<li class="listitem"><p>Otherwise, it is set to 5170<li class="listitem"><p>Otherwise, it is set to
5171 <code class="filename">${PKG_SYSCONFBASE}</code>.</p></li> 5171 <code class="filename">${PKG_SYSCONFBASE}</code>.</p></li>
5172</ol></div> 5172</ol></div>
5173<p>It is worth mentioning that <code class="filename">${PKG_SYSCONFDIR}</code> is 5173<p>It is worth mentioning that <code class="filename">${PKG_SYSCONFDIR}</code> is
5174automatically added to <code class="filename">OWN_DIRS</code>. See <a class="xref" href="#dirs-outside-prefix" title="15.1.1. Directory manipulation">Section 15.1.1, &#8220;Directory manipulation&#8221;</a> what this means. This does not apply to 5174automatically added to <code class="filename">OWN_DIRS</code>. See <a class="xref" href="#dirs-outside-prefix" title="15.1.1. Directory manipulation">Section 15.1.1, &#8220;Directory manipulation&#8221;</a> what this means. This does not apply to
5175subdirectories of <code class="filename">${PKG_SYSCONFDIR}</code>, they still have to 5175subdirectories of <code class="filename">${PKG_SYSCONFDIR}</code>, they still have to
5176be created with OWN_DIRS or MAKE_DIRS.</p> 5176be created with OWN_DIRS or MAKE_DIRS.</p>
5177</div> 5177</div>
5178<div class="sect2"> 5178<div class="sect2">
5179<div class="titlepage"><div><div><h3 class="title"> 5179<div class="titlepage"><div><div><h3 class="title">
5180<a name="conf-files-configure"></a>15.2.2. Telling the software where configuration files are</h3></div></div></div> 5180<a name="conf-files-configure"></a>15.2.2. Telling the software where configuration files are</h3></div></div></div>
5181<p>Given that pkgsrc (and users!) expect configuration files to be in a 5181<p>Given that pkgsrc (and users!) expect configuration files to be in a
5182known place, you need to teach each package where it shall install its 5182known place, you need to teach each package where it shall install its
5183files. In some cases you will have to patch the package Makefiles to 5183files. In some cases you will have to patch the package Makefiles to
5184achieve it. If you are lucky, though, it may be as easy as passing an 5184achieve it. If you are lucky, though, it may be as easy as passing an
5185extra flag to the configuration script; this is the case of GNU Autoconf- 5185extra flag to the configuration script; this is the case of GNU Autoconf-
5186generated files:</p> 5186generated files:</p>
5187<pre class="programlisting"> 5187<pre class="programlisting">
5188CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR} 5188CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR}
5189</pre> 5189</pre>
5190<p>Note that this specifies where the package has to <span class="emphasis"><em>look 5190<p>Note that this specifies where the package has to <span class="emphasis"><em>look
5191for</em></span> its configuration files, not where they will be originally 5191for</em></span> its configuration files, not where they will be originally
5192installed (although the difference is never explicit, 5192installed (although the difference is never explicit,
5193unfortunately).</p> 5193unfortunately).</p>
5194</div> 5194</div>
5195<div class="sect2"> 5195<div class="sect2">
5196<div class="titlepage"><div><div><h3 class="title"> 5196<div class="titlepage"><div><div><h3 class="title">
5197<a name="conf-files-patching"></a>15.2.3. Patching installations</h3></div></div></div> 5197<a name="conf-files-patching"></a>15.2.3. Patching installations</h3></div></div></div>
5198<p>As said before, pkginstall automatically handles configuration files. 5198<p>As said before, pkginstall automatically handles configuration files.
5199This means that <span class="strong"><strong>the packages themselves must not 5199This means that <span class="strong"><strong>the packages themselves must not
5200touch the contents of <code class="filename">${PKG_SYSCONFDIR}</code> 5200touch the contents of <code class="filename">${PKG_SYSCONFDIR}</code>
5201directly</strong></span>. Bad news is that many software installation scripts 5201directly</strong></span>. Bad news is that many software installation scripts
5202will, out of the box, mess with the contents of that directory. So what is 5202will, out of the box, mess with the contents of that directory. So what is
5203the correct procedure to fix this issue?</p> 5203the correct procedure to fix this issue?</p>
5204<p>You must teach the package (usually by manually patching it) to 5204<p>You must teach the package (usually by manually patching it) to
5205install any configuration files under the examples hierarchy, 5205install any configuration files under the examples hierarchy,
5206<code class="filename">share/examples/${PKGBASE}/</code>. This way, the 5206<code class="filename">share/examples/${PKGBASE}/</code>. This way, the
5207<code class="filename">PLIST</code> registers them and the administrator always 5207<code class="filename">PLIST</code> registers them and the administrator always
5208has the original copies available.</p> 5208has the original copies available.</p>
5209<p>Once the required configuration files are in place (i.e., under the 5209<p>Once the required configuration files are in place (i.e., under the
5210examples hierarchy), the pkginstall framework can use them as master copies 5210examples hierarchy), the pkginstall framework can use them as master copies
5211during the package installation to update what is in 5211during the package installation to update what is in
5212<code class="filename">${PKG_SYSCONFDIR}</code>. To achieve this, the variables 5212<code class="filename">${PKG_SYSCONFDIR}</code>. To achieve this, the variables
5213<code class="varname">CONF_FILES</code> and <code class="varname">CONF_FILES_PERMS</code> are 5213<code class="varname">CONF_FILES</code> and <code class="varname">CONF_FILES_PERMS</code> are
5214used. Check out <a class="xref" href="#files-outside-prefix" title="15.1.2. File manipulation">Section 15.1.2, &#8220;File manipulation&#8221;</a> for information 5214used. Check out <a class="xref" href="#files-outside-prefix" title="15.1.2. File manipulation">Section 15.1.2, &#8220;File manipulation&#8221;</a> for information
5215about their syntax and their purpose. Here is an example, taken from the 5215about their syntax and their purpose. Here is an example, taken from the
5216<a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/mail/mutt/README.html" target="_top"><code class="filename">mail/mutt</code></a> package:</p> 5216<a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/mail/mutt/README.html" target="_top"><code class="filename">mail/mutt</code></a> package:</p>
5217<pre class="programlisting"> 5217<pre class="programlisting">
5218EGDIR= ${PREFIX}/share/doc/mutt/samples 5218EGDIR= ${PREFIX}/share/doc/mutt/samples
5219CONF_FILES= ${EGDIR}/Muttrc ${PKG_SYSCONFDIR}/Muttrc 5219CONF_FILES= ${EGDIR}/Muttrc ${PKG_SYSCONFDIR}/Muttrc
5220</pre> 5220</pre>
5221<p>Note that the <code class="varname">EGDIR</code> variable is specific to that 5221<p>Note that the <code class="varname">EGDIR</code> variable is specific to that
5222package and has no meaning outside it.</p> 5222package and has no meaning outside it.</p>
5223</div> 5223</div>
5224<div class="sect2"> 5224<div class="sect2">
5225<div class="titlepage"><div><div><h3 class="title"> 5225<div class="titlepage"><div><div><h3 class="title">
5226<a name="conf-files-disable"></a>15.2.4. Disabling handling of configuration files</h3></div></div></div> 5226<a name="conf-files-disable"></a>15.2.4. Disabling handling of configuration files</h3></div></div></div>
5227<p>The automatic copying of config files can be toggled by setting the 5227<p>The automatic copying of config files can be toggled by setting the
5228environment variable <code class="varname">PKG_CONFIG</code> prior to package 5228environment variable <code class="varname">PKG_CONFIG</code> prior to package
5229installation.</p> 5229installation.</p>
5230</div> 5230</div>
5231</div> 5231</div>
5232<div class="sect1"> 5232<div class="sect1">
5233<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5233<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5234<a name="rcd-scripts"></a>15.3. System startup scripts</h2></div></div></div> 5234<a name="rcd-scripts"></a>15.3. System startup scripts</h2></div></div></div>
5235<p>System startup scripts are special files because they must be 5235<p>System startup scripts are special files because they must be
5236installed in a place known by the underlying OS, usually outside the 5236installed in a place known by the underlying OS, usually outside the
5237installation prefix. Therefore, the same rules described in <a class="xref" href="#files-and-dirs-outside-prefix" title="15.1. Files and directories outside the installation prefix">Section 15.1, &#8220;Files and directories outside the installation prefix&#8221;</a> apply, and the same solutions 5237installation prefix. Therefore, the same rules described in <a class="xref" href="#files-and-dirs-outside-prefix" title="15.1. Files and directories outside the installation prefix">Section 15.1, &#8220;Files and directories outside the installation prefix&#8221;</a> apply, and the same solutions
5238can be used. However, pkginstall provides a special mechanism to handle 5238can be used. However, pkginstall provides a special mechanism to handle
5239these files.</p> 5239these files.</p>
5240<p>In order to provide system startup scripts, the package has 5240<p>In order to provide system startup scripts, the package has
5241to:</p> 5241to:</p>
5242<div class="orderedlist"><ol class="orderedlist" type="1"> 5242<div class="orderedlist"><ol class="orderedlist" type="1">
5243<li class="listitem"><p>Store the script inside <code class="filename">${FILESDIR}</code>, with 5243<li class="listitem"><p>Store the script inside <code class="filename">${FILESDIR}</code>, with
5244 the <code class="literal">.sh</code> suffix appended. Considering the 5244 the <code class="literal">.sh</code> suffix appended. Considering the
5245 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/cups/README.html" target="_top"><code class="filename">print/cups</code></a> package as an example, it has a 5245 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/cups/README.html" target="_top"><code class="filename">print/cups</code></a> package as an example, it has a
5246 <code class="filename">cupsd.sh</code> in its files directory.</p></li> 5246 <code class="filename">cupsd.sh</code> in its files directory.</p></li>
5247<li class="listitem"> 5247<li class="listitem">
5248<p>Tell pkginstall to handle it, appending the name of the script, 5248<p>Tell pkginstall to handle it, appending the name of the script,
5249 without its extension, to the <code class="varname">RCD_SCRIPTS</code> variable. 5249 without its extension, to the <code class="varname">RCD_SCRIPTS</code> variable.
5250 Continuing the previous example:</p> 5250 Continuing the previous example:</p>
5251<pre class="programlisting"> 5251<pre class="programlisting">
5252RCD_SCRIPTS+= cupsd 5252RCD_SCRIPTS+= cupsd
5253</pre> 5253</pre>
5254</li> 5254</li>
5255</ol></div> 5255</ol></div>
5256<p>Once this is done, pkginstall will do the following steps for each 5256<p>Once this is done, pkginstall will do the following steps for each
5257script in an automated fashion:</p> 5257script in an automated fashion:</p>
5258<div class="orderedlist"><ol class="orderedlist" type="1"> 5258<div class="orderedlist"><ol class="orderedlist" type="1">
5259<li class="listitem"><p>Process the file found in the files directory applying all the 5259<li class="listitem"><p>Process the file found in the files directory applying all the
5260 substitutions described in the <code class="filename">FILES_SUBST</code> 5260 substitutions described in the <code class="filename">FILES_SUBST</code>
5261 variable.</p></li> 5261 variable.</p></li>
5262<li class="listitem"><p>Copy the script from the files directory to the examples 5262<li class="listitem"><p>Copy the script from the files directory to the examples
5263 hierarchy, <code class="filename">${PREFIX}/share/examples/rc.d/</code>. Note 5263 hierarchy, <code class="filename">${PREFIX}/share/examples/rc.d/</code>. Note
5264 that this master file must be explicitly registered in the 5264 that this master file must be explicitly registered in the
5265 <code class="filename">PLIST</code>.</p></li> 5265 <code class="filename">PLIST</code>.</p></li>
5266<li class="listitem"><p>Add code to the installation scripts to copy the startup script 5266<li class="listitem"><p>Add code to the installation scripts to copy the startup script
5267 from the examples hierarchy into the system-wide startup scripts 5267 from the examples hierarchy into the system-wide startup scripts
5268 directory.</p></li> 5268 directory.</p></li>
5269</ol></div> 5269</ol></div>
5270<div class="sect2"> 5270<div class="sect2">
5271<div class="titlepage"><div><div><h3 class="title"> 5271<div class="titlepage"><div><div><h3 class="title">
5272<a name="rcd-scripts-disable"></a>15.3.1. Disabling handling of system startup scripts</h3></div></div></div> 5272<a name="rcd-scripts-disable"></a>15.3.1. Disabling handling of system startup scripts</h3></div></div></div>
5273<p>The automatic copying of config files can be toggled by setting the 5273<p>The automatic copying of config files can be toggled by setting the
5274environment variable <code class="varname">PKG_RCD_SCRIPTS</code> prior to package 5274environment variable <code class="varname">PKG_RCD_SCRIPTS</code> prior to package
5275installation. Note that the scripts will be always copied inside the 5275installation. Note that the scripts will be always copied inside the
5276examples hierarchy, <code class="filename">${PREFIX}/share/examples/rc.d/</code>, no 5276examples hierarchy, <code class="filename">${PREFIX}/share/examples/rc.d/</code>, no
5277matter what the value of this variable is.</p> 5277matter what the value of this variable is.</p>
5278</div> 5278</div>
5279</div> 5279</div>
5280<div class="sect1"> 5280<div class="sect1">
5281<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5281<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5282<a name="users-and-groups"></a>15.4. System users and groups</h2></div></div></div> 5282<a name="users-and-groups"></a>15.4. System users and groups</h2></div></div></div>
5283<p>If a package needs to create special users and/or groups during 5283<p>If a package needs to create special users and/or groups during
5284installation, it can do so by using the pkginstall framework.</p> 5284installation, it can do so by using the pkginstall framework.</p>
5285<p>Users can be created by adding entries to the 5285<p>Users can be created by adding entries to the
5286<code class="varname">PKG_USERS</code> variable. Each entry has the following 5286<code class="varname">PKG_USERS</code> variable. Each entry has the following
5287syntax:</p> 5287syntax:</p>
5288<pre class="programlisting"> 5288<pre class="programlisting">
5289user:group 5289user:group
5290</pre> 5290</pre>
5291<p>Further specification of user details may be done by setting 5291<p>Further specification of user details may be done by setting
5292per-user variables. 5292per-user variables.
5293<code class="varname">PKG_UID.<em class="replaceable"><code>user</code></em></code> is the 5293<code class="varname">PKG_UID.<em class="replaceable"><code>user</code></em></code> is the
5294numeric UID for the user. 5294numeric UID for the user.
5295<code class="varname">PKG_GECOS.<em class="replaceable"><code>user</code></em></code> is the 5295<code class="varname">PKG_GECOS.<em class="replaceable"><code>user</code></em></code> is the
5296user's description or comment. 5296user's description or comment.
5297<code class="varname">PKG_HOME.<em class="replaceable"><code>user</code></em></code> is the 5297<code class="varname">PKG_HOME.<em class="replaceable"><code>user</code></em></code> is the
5298user's home directory, and defaults to 5298user's home directory, and defaults to
5299<code class="filename">/nonexistent</code> if not specified. 5299<code class="filename">/nonexistent</code> if not specified.
5300<code class="varname">PKG_SHELL.<em class="replaceable"><code>user</code></em></code> is the 5300<code class="varname">PKG_SHELL.<em class="replaceable"><code>user</code></em></code> is the
5301user's shell, and defaults to <code class="filename">/sbin/nologin</code> if 5301user's shell, and defaults to <code class="filename">/sbin/nologin</code> if
5302not specified.</p> 5302not specified.</p>
5303<p>Similarly, groups can be created by adding entries to the 5303<p>Similarly, groups can be created by adding entries to the
5304<code class="varname">PKG_GROUPS</code> variable, whose syntax is:</p> 5304<code class="varname">PKG_GROUPS</code> variable, whose syntax is:</p>
5305<pre class="programlisting"> 5305<pre class="programlisting">
5306group 5306group
5307</pre> 5307</pre>
5308<p>The numeric GID of the group may be set by defining 5308<p>The numeric GID of the group may be set by defining
5309<code class="varname">PKG_GID.<em class="replaceable"><code>group</code></em></code>.</p> 5309<code class="varname">PKG_GID.<em class="replaceable"><code>group</code></em></code>.</p>
5310<p>If a package needs to create the users and groups at an earlier 5310<p>If a package needs to create the users and groups at an earlier
5311stage, then it can set <code class="varname">USERGROUP_PHASE</code> to either 5311stage, then it can set <code class="varname">USERGROUP_PHASE</code> to either
5312<code class="literal">configure</code>,<code class="literal">build</code>, or 5312<code class="literal">configure</code>,<code class="literal">build</code>, or
5313<code class="literal">pre-install</code> to indicate the phase before which the 5313<code class="literal">pre-install</code> to indicate the phase before which the
5314users and groups are created. In this case, the numeric UIDs and GIDs 5314users and groups are created. In this case, the numeric UIDs and GIDs
5315of the created users and groups are automatically hardcoded into the 5315of the created users and groups are automatically hardcoded into the
5316final installation scripts.</p> 5316final installation scripts.</p>
5317</div> 5317</div>
5318<div class="sect1"> 5318<div class="sect1">
5319<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5319<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5320<a name="shells"></a>15.5. System shells</h2></div></div></div> 5320<a name="shells"></a>15.5. System shells</h2></div></div></div>
5321<p>Packages that install system shells should register them in the shell 5321<p>Packages that install system shells should register them in the shell
5322database, <code class="filename">/etc/shells</code>, to make things easier to the 5322database, <code class="filename">/etc/shells</code>, to make things easier to the
5323administrator. This must be done from the installation scripts to keep 5323administrator. This must be done from the installation scripts to keep
5324binary packages working on any system. pkginstall provides an easy way to 5324binary packages working on any system. pkginstall provides an easy way to
5325accomplish this task.</p> 5325accomplish this task.</p>
5326<p>When a package provides a shell interpreter, it has to set the 5326<p>When a package provides a shell interpreter, it has to set the
5327<code class="varname">PKG_SHELL</code> variable to its absolute file name. This will 5327<code class="varname">PKG_SHELL</code> variable to its absolute file name. This will
5328add some hooks to the installation scripts to handle it. Consider the 5328add some hooks to the installation scripts to handle it. Consider the
5329following example, taken from <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/shells/zsh/README.html" target="_top"><code class="filename">shells/zsh</code></a>:</p> 5329following example, taken from <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/shells/zsh/README.html" target="_top"><code class="filename">shells/zsh</code></a>:</p>
5330<pre class="programlisting"> 5330<pre class="programlisting">
5331PKG_SHELL= ${PREFIX}/bin/zsh 5331PKG_SHELL= ${PREFIX}/bin/zsh
5332</pre> 5332</pre>
5333<div class="sect2"> 5333<div class="sect2">
5334<div class="titlepage"><div><div><h3 class="title"> 5334<div class="titlepage"><div><div><h3 class="title">
5335<a name="shells-disable"></a>15.5.1. Disabling shell registration</h3></div></div></div> 5335<a name="shells-disable"></a>15.5.1. Disabling shell registration</h3></div></div></div>
5336<p>The automatic registration of shell interpreters can be disabled by 5336<p>The automatic registration of shell interpreters can be disabled by
5337the administrator by setting the <code class="filename">PKG_REGISTER_SHELLS</code> 5337the administrator by setting the <code class="filename">PKG_REGISTER_SHELLS</code>
5338environment variable to <code class="literal">NO</code>.</p> 5338environment variable to <code class="literal">NO</code>.</p>
5339</div> 5339</div>
5340</div> 5340</div>
5341<div class="sect1"> 5341<div class="sect1">
5342<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5342<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5343<a name="fonts"></a>15.6. Fonts</h2></div></div></div> 5343<a name="fonts"></a>15.6. Fonts</h2></div></div></div>
5344<p>Packages that install X11 fonts should update the database files 5344<p>Packages that install X11 fonts should update the database files
5345that index the fonts within each fonts directory. This can easily be 5345that index the fonts within each fonts directory. This can easily be
5346accomplished within the pkginstall framework.</p> 5346accomplished within the pkginstall framework.</p>
5347<p>When a package installs X11 fonts, it must list the directories in 5347<p>When a package installs X11 fonts, it must list the directories in
5348which fonts are installed in the 5348which fonts are installed in the
5349<code class="varname">FONTS_DIRS.<em class="replaceable"><code>type</code></em></code> variables, 5349<code class="varname">FONTS_DIRS.<em class="replaceable"><code>type</code></em></code> variables,
5350where <em class="replaceable"><code>type</code></em> can be one of <span class="quote">&#8220;<span class="quote">ttf</span>&#8221;</span>, 5350where <em class="replaceable"><code>type</code></em> can be one of <span class="quote">&#8220;<span class="quote">ttf</span>&#8221;</span>,
5351<span class="quote">&#8220;<span class="quote">type1</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">x11</span>&#8221;</span>. This will add hooks to the 5351<span class="quote">&#8220;<span class="quote">type1</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">x11</span>&#8221;</span>. This will add hooks to the
5352installation scripts to run the appropriate commands to update the fonts 5352installation scripts to run the appropriate commands to update the fonts
5353database files within each of those directories. For convenience, if the 5353database files within each of those directories. For convenience, if the
5354directory path is relative, it is taken to be relative to the package's 5354directory path is relative, it is taken to be relative to the package's
5355installation prefix. Consider the following example, taken from <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/fonts/dbz-ttf/README.html" target="_top"><code class="filename">fonts/dbz-ttf</code></a>:</p> 5355installation prefix. Consider the following example, taken from <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/fonts/dbz-ttf/README.html" target="_top"><code class="filename">fonts/dbz-ttf</code></a>:</p>
5356<pre class="programlisting"> 5356<pre class="programlisting">
5357FONTS_DIRS.ttf= ${PREFIX}/share/fonts/X11/TTF 5357FONTS_DIRS.ttf= ${PREFIX}/share/fonts/X11/TTF
5358</pre> 5358</pre>
5359<div class="sect2"> 5359<div class="sect2">
5360<div class="titlepage"><div><div><h3 class="title"> 5360<div class="titlepage"><div><div><h3 class="title">
5361<a name="fonts-disable"></a>15.6.1. Disabling automatic update of the fonts databases</h3></div></div></div> 5361<a name="fonts-disable"></a>15.6.1. Disabling automatic update of the fonts databases</h3></div></div></div>
5362<p>The automatic update of fonts databases can be disabled by 5362<p>The automatic update of fonts databases can be disabled by
5363the administrator by setting the <code class="filename">PKG_UPDATE_FONTS_DB</code> 5363the administrator by setting the <code class="filename">PKG_UPDATE_FONTS_DB</code>
5364environment variable to <code class="literal">NO</code>.</p> 5364environment variable to <code class="literal">NO</code>.</p>
5365</div> 5365</div>
5366</div> 5366</div>
5367</div> 5367</div>
5368<div class="chapter"> 5368<div class="chapter">
5369<div class="titlepage"><div><div><h2 class="title"> 5369<div class="titlepage"><div><div><h2 class="title">
5370<a name="options"></a>Chapter 16. Options handling</h2></div></div></div> 5370<a name="options"></a>Chapter 16. Options handling</h2></div></div></div>
5371<div class="toc"> 5371<div class="toc">
5372<p><b>Table of Contents</b></p> 5372<p><b>Table of Contents</b></p>
5373<dl class="toc"> 5373<dl class="toc">
5374<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt> 5374<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt>
5375<dt><span class="sect1"><a href="#converting-to-options">16.2. Converting packages to use <code class="filename">bsd.options.mk</code></a></span></dt> 5375<dt><span class="sect1"><a href="#converting-to-options">16.2. Converting packages to use <code class="filename">bsd.options.mk</code></a></span></dt>
5376<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt> 5376<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt>
5377<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt> 5377<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt>
5378</dl> 5378</dl>
5379</div> 5379</div>
5380<p>Many packages have the ability to be built to support different 5380<p>Many packages have the ability to be built to support different
5381sets of features. <code class="filename">bsd.options.mk</code> is a framework 5381sets of features. <code class="filename">bsd.options.mk</code> is a framework
5382in pkgsrc that provides generic handling of those options that 5382in pkgsrc that provides generic handling of those options that
5383determine different ways in which the packages can be built. It's 5383determine different ways in which the packages can be built. It's
5384possible for the user to specify exactly which sets of options will be 5384possible for the user to specify exactly which sets of options will be
5385built into a package or to allow a set of global default options 5385built into a package or to allow a set of global default options
5386apply.</p> 5386apply.</p>
5387<p>There are two broad classes of behaviors that one might want to 5387<p>There are two broad classes of behaviors that one might want to
5388control via options. One is whether some particular feature is 5388control via options. One is whether some particular feature is
5389enabled in a program that will be built anyway, often by including or 5389enabled in a program that will be built anyway, often by including or
5390not including a dependency on some other package. The other is 5390not including a dependency on some other package. The other is
5391whether or not an additional program will be built as part of the 5391whether or not an additional program will be built as part of the
5392package. Generally, it is better to make a split package for such 5392package. Generally, it is better to make a split package for such
5393additional programs instead of using options, because it enables 5393additional programs instead of using options, because it enables
5394binary packages to be built which can then be added separately. For 5394binary packages to be built which can then be added separately. For
5395example, the foo package might have minimal dependencies (those 5395example, the foo package might have minimal dependencies (those
5396packages without which foo doesn't make sense), and then the foo-gfoo 5396packages without which foo doesn't make sense), and then the foo-gfoo
5397package might include the GTK frontend program gfoo. This is better 5397package might include the GTK frontend program gfoo. This is better
5398than including a gtk option to foo that adds gfoo, because either that 5398than including a gtk option to foo that adds gfoo, because either that
5399option is default, in which case binary users can't get foo without 5399option is default, in which case binary users can't get foo without
5400gfoo, or not default, in which case they can't get gfoo. With split 5400gfoo, or not default, in which case they can't get gfoo. With split
5401packages, they can install foo without having GTK, and later decide to 5401packages, they can install foo without having GTK, and later decide to
5402install gfoo (pulling in GTK at that time). This is an advantage to 5402install gfoo (pulling in GTK at that time). This is an advantage to
5403source users too, avoiding the need for rebuilds.</p> 5403source users too, avoiding the need for rebuilds.</p>
5404<p>Plugins with widely varying dependencies should usually be split 5404<p>Plugins with widely varying dependencies should usually be split
5405instead of options.</p> 5405instead of options.</p>
5406<p>It is often more work to maintain split packages, especially if 5406<p>It is often more work to maintain split packages, especially if
5407the upstream package does not support this. The decision of split 5407the upstream package does not support this. The decision of split
5408vs. option should be made based on the likelihood that users will want 5408vs. option should be made based on the likelihood that users will want
5409or object to the various pieces, the size of the dependencies that are 5409or object to the various pieces, the size of the dependencies that are
5410included, and the amount of work.</p> 5410included, and the amount of work.</p>
5411<p>A further consideration is licensing. Non-free parts, or parts 5411<p>A further consideration is licensing. Non-free parts, or parts
5412that depend on non-free dependencies (especially plugins) should 5412that depend on non-free dependencies (especially plugins) should
5413almost always be split if feasible.</p> 5413almost always be split if feasible.</p>
5414<div class="sect1"> 5414<div class="sect1">
5415<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5415<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5416<a name="global-default-options"></a>16.1. Global default options</h2></div></div></div> 5416<a name="global-default-options"></a>16.1. Global default options</h2></div></div></div>
5417<p>Global default options are listed in 5417<p>Global default options are listed in
5418<code class="varname">PKG_DEFAULT_OPTIONS</code>, which is a list of the options 5418<code class="varname">PKG_DEFAULT_OPTIONS</code>, which is a list of the options
5419that should be built into every package if that option is supported. 5419that should be built into every package if that option is supported.
5420This variable should be set in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p> 5420This variable should be set in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p>
5421</div> 5421</div>
5422<div class="sect1"> 5422<div class="sect1">
5423<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5423<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5424<a name="converting-to-options"></a>16.2. Converting packages to use <code class="filename">bsd.options.mk</code> 5424<a name="converting-to-options"></a>16.2. Converting packages to use <code class="filename">bsd.options.mk</code>
5425</h2></div></div></div> 5425</h2></div></div></div>
5426<p>The following example shows how 5426<p>The following example shows how
5427<code class="filename">bsd.options.mk</code> should be used 5427<code class="filename">bsd.options.mk</code> should be used
5428by the hypothetical ``wibble'' package, either in the package 5428by the hypothetical ``wibble'' package, either in the package
5429<code class="filename">Makefile</code>, or in a file, 5429<code class="filename">Makefile</code>, or in a file,
5430e.g. <code class="filename">options.mk</code>, that is included by the 5430e.g. <code class="filename">options.mk</code>, that is included by the
5431main package <code class="filename">Makefile</code>.</p> 5431main package <code class="filename">Makefile</code>.</p>
5432<pre class="programlisting"> 5432<pre class="programlisting">
5433PKG_OPTIONS_VAR= PKG_OPTIONS.wibble 5433PKG_OPTIONS_VAR= PKG_OPTIONS.wibble
5434PKG_SUPPORTED_OPTIONS= wibble-foo ldap 5434PKG_SUPPORTED_OPTIONS= wibble-foo ldap
5435PKG_OPTIONS_OPTIONAL_GROUPS= database 5435PKG_OPTIONS_OPTIONAL_GROUPS= database
5436PKG_OPTIONS_GROUP.database= mysql pgsql 5436PKG_OPTIONS_GROUP.database= mysql pgsql
5437PKG_SUGGESTED_OPTIONS= wibble-foo 5437PKG_SUGGESTED_OPTIONS= wibble-foo
5438PKG_OPTIONS_LEGACY_VARS+= WIBBLE_USE_OPENLDAP:ldap 5438PKG_OPTIONS_LEGACY_VARS+= WIBBLE_USE_OPENLDAP:ldap
5439PKG_OPTIONS_LEGACY_OPTS+= foo:wibble-foo 5439PKG_OPTIONS_LEGACY_OPTS+= foo:wibble-foo
5440 5440
5441.include "../../mk/bsd.prefs.mk" 5441.include "../../mk/bsd.prefs.mk"
5442 5442
5443# this package was previously named wibble2 5443# this package was previously named wibble2
5444.if defined(PKG_OPTIONS.wibble2) 5444.if defined(PKG_OPTIONS.wibble2)
5445PKG_LEGACY_OPTIONS+= ${PKG_OPTIONS.wibble2} 5445PKG_LEGACY_OPTIONS+= ${PKG_OPTIONS.wibble2}
5446PKG_OPTIONS_DEPRECATED_WARNINGS+= \ 5446PKG_OPTIONS_DEPRECATED_WARNINGS+= \
5447 "Deprecated variable PKG_OPTIONS.wibble2 used, use ${PKG_OPTIONS_VAR} instead." 5447 "Deprecated variable PKG_OPTIONS.wibble2 used, use ${PKG_OPTIONS_VAR} instead."
5448.endif 5448.endif
5449 5449
5450.include "../../mk/bsd.options.mk" 5450.include "../../mk/bsd.options.mk"
5451 5451
5452# Package-specific option-handling 5452# Package-specific option-handling
5453 5453
5454### 5454###
5455### FOO support 5455### FOO support
5456### 5456###
5457.if !empty(PKG_OPTIONS:Mwibble-foo) 5457.if !empty(PKG_OPTIONS:Mwibble-foo)
5458CONFIGURE_ARGS+= --enable-foo 5458CONFIGURE_ARGS+= --enable-foo
5459.endif 5459.endif
5460 5460
5461### 5461###
5462### LDAP support 5462### LDAP support
5463### 5463###
5464.if !empty(PKG_OPTIONS:Mldap) 5464.if !empty(PKG_OPTIONS:Mldap)
5465. include "../../databases/openldap-client/buildlink3.mk" 5465. include "../../databases/openldap-client/buildlink3.mk"
5466CONFIGURE_ARGS+= --enable-ldap=${BUILDLINK_PREFIX.openldap-client} 5466CONFIGURE_ARGS+= --enable-ldap=${BUILDLINK_PREFIX.openldap-client}
5467.endif 5467.endif
5468 5468
5469### 5469###
5470### database support 5470### database support
5471### 5471###
5472.if !empty(PKG_OPTIONS:Mmysql) 5472.if !empty(PKG_OPTIONS:Mmysql)
5473. include "../../mk/mysql.buildlink3.mk" 5473. include "../../mk/mysql.buildlink3.mk"
5474.endif 5474.endif
5475.if !empty(PKG_OPTIONS:Mpgsql) 5475.if !empty(PKG_OPTIONS:Mpgsql)
5476. include "../../mk/pgsql.buildlink3.mk" 5476. include "../../mk/pgsql.buildlink3.mk"
5477.endif 5477.endif
5478</pre> 5478</pre>
5479<p>The first section contains the information about which build 5479<p>The first section contains the information about which build
5480options are supported by the package, and any default options settings 5480options are supported by the package, and any default options settings
5481if needed.</p> 5481if needed.</p>
5482<div class="orderedlist"><ol class="orderedlist" type="1"> 5482<div class="orderedlist"><ol class="orderedlist" type="1">
5483<li class="listitem"><p><code class="varname">PKG_OPTIONS_VAR</code> is the name of the 5483<li class="listitem"><p><code class="varname">PKG_OPTIONS_VAR</code> is the name of the
5484<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> variable that the user can set to override the default 5484<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> variable that the user can set to override the default
5485options. It should be set to 5485options. It should be set to
5486PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em>. Do not set it to 5486PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em>. Do not set it to
5487PKG_OPTIONS.${PKGBASE}, since <code class="varname">PKGBASE</code> is not defined 5487PKG_OPTIONS.${PKGBASE}, since <code class="varname">PKGBASE</code> is not defined
5488at the point where the options are processed.</p></li> 5488at the point where the options are processed.</p></li>
5489<li class="listitem"><p><code class="varname">PKG_SUPPORTED_OPTIONS</code> is a list of 5489<li class="listitem"><p><code class="varname">PKG_SUPPORTED_OPTIONS</code> is a list of
5490build options supported by the package.</p></li> 5490build options supported by the package.</p></li>
5491<li class="listitem"><p><code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code> is a 5491<li class="listitem"><p><code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code> is a
5492list of names of groups of mutually exclusive options. The options in 5492list of names of groups of mutually exclusive options. The options in
5493each group are listed in 5493each group are listed in
5494<code class="varname">PKG_OPTIONS_GROUP.<em class="replaceable"><code>groupname</code></em></code>. 5494<code class="varname">PKG_OPTIONS_GROUP.<em class="replaceable"><code>groupname</code></em></code>.
5495The most specific setting of any option from the group takes 5495The most specific setting of any option from the group takes
5496precedence over all other options in the group. Options from the 5496precedence over all other options in the group. Options from the
5497groups will be automatically added to 5497groups will be automatically added to
5498<code class="varname">PKG_SUPPORTED_OPTIONS</code>.</p></li> 5498<code class="varname">PKG_SUPPORTED_OPTIONS</code>.</p></li>
5499<li class="listitem"><p><code class="varname">PKG_OPTIONS_REQUIRED_GROUPS</code> is like 5499<li class="listitem"><p><code class="varname">PKG_OPTIONS_REQUIRED_GROUPS</code> is like
5500<code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code>, but building the 5500<code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code>, but building the
5501packages will fail if no option from the group is 5501packages will fail if no option from the group is
5502selected.</p></li> 5502selected.</p></li>
5503<li class="listitem"><p><code class="varname">PKG_OPTIONS_NONEMPTY_SETS</code> is a list 5503<li class="listitem"><p><code class="varname">PKG_OPTIONS_NONEMPTY_SETS</code> is a list
5504of names of sets of options. At least one option from each set must 5504of names of sets of options. At least one option from each set must
5505be selected. The options in each set are listed in 5505be selected. The options in each set are listed in
5506<code class="varname">PKG_OPTIONS_SET.<em class="replaceable"><code>setname</code></em></code>. 5506<code class="varname">PKG_OPTIONS_SET.<em class="replaceable"><code>setname</code></em></code>.
5507Options from the sets will be automatically added to 5507Options from the sets will be automatically added to
5508<code class="varname">PKG_SUPPORTED_OPTIONS</code>. Building the package will 5508<code class="varname">PKG_SUPPORTED_OPTIONS</code>. Building the package will
5509fail if no option from the set is selected.</p></li> 5509fail if no option from the set is selected.</p></li>
5510<li class="listitem"><p><code class="varname">PKG_SUGGESTED_OPTIONS</code> is a list of 5510<li class="listitem"><p><code class="varname">PKG_SUGGESTED_OPTIONS</code> is a list of
5511build options which are enabled by default.</p></li> 5511build options which are enabled by default.</p></li>
5512<li class="listitem"><p><code class="varname">PKG_OPTIONS_LEGACY_VARS</code> is a list 5512<li class="listitem"><p><code class="varname">PKG_OPTIONS_LEGACY_VARS</code> is a list
5513of 5513of
5514<span class="quote">&#8220;<span class="quote"><em class="replaceable"><code>USE_VARIABLE</code></em>:<em class="replaceable"><code>option</code></em></span>&#8221;</span> 5514<span class="quote">&#8220;<span class="quote"><em class="replaceable"><code>USE_VARIABLE</code></em>:<em class="replaceable"><code>option</code></em></span>&#8221;</span>
5515pairs that map legacy <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> variables to 5515pairs that map legacy <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> variables to
5516their option counterparts. Pairs should be added with 5516their option counterparts. Pairs should be added with
5517<span class="quote">&#8220;<span class="quote">+=</span>&#8221;</span> to keep the listing of global legacy variables. A 5517<span class="quote">&#8220;<span class="quote">+=</span>&#8221;</span> to keep the listing of global legacy variables. A
5518warning will be issued if the user uses a legacy 5518warning will be issued if the user uses a legacy
5519variable.</p></li> 5519variable.</p></li>
5520<li class="listitem"><p><code class="varname">PKG_OPTIONS_LEGACY_OPTS</code> is a list 5520<li class="listitem"><p><code class="varname">PKG_OPTIONS_LEGACY_OPTS</code> is a list
5521of 5521of
5522<span class="quote">&#8220;<span class="quote"><em class="replaceable"><code>old-option</code></em>:<em class="replaceable"><code>new-option</code></em></span>&#8221;</span> 5522<span class="quote">&#8220;<span class="quote"><em class="replaceable"><code>old-option</code></em>:<em class="replaceable"><code>new-option</code></em></span>&#8221;</span>
5523pairs that map options that have been renamed to their new 5523pairs that map options that have been renamed to their new
5524counterparts. Pairs should be added with <span class="quote">&#8220;<span class="quote">+=</span>&#8221;</span> to keep 5524counterparts. Pairs should be added with <span class="quote">&#8220;<span class="quote">+=</span>&#8221;</span> to keep
5525the listing of global legacy options. A warning will be issued if 5525the listing of global legacy options. A warning will be issued if
5526the user uses a legacy option.</p></li> 5526the user uses a legacy option.</p></li>
5527<li class="listitem"><p><code class="varname">PKG_LEGACY_OPTIONS</code> is a list of 5527<li class="listitem"><p><code class="varname">PKG_LEGACY_OPTIONS</code> is a list of
5528options implied by deprecated variables used. This can be used for 5528options implied by deprecated variables used. This can be used for
5529cases that neither <code class="varname">PKG_OPTIONS_LEGACY_VARS</code> nor 5529cases that neither <code class="varname">PKG_OPTIONS_LEGACY_VARS</code> nor
5530<code class="varname">PKG_OPTIONS_LEGACY_OPTS</code> can handle, e. g. when 5530<code class="varname">PKG_OPTIONS_LEGACY_OPTS</code> can handle, e. g. when
5531<code class="varname">PKG_OPTIONS_VAR</code> is renamed.</p></li> 5531<code class="varname">PKG_OPTIONS_VAR</code> is renamed.</p></li>
5532<li class="listitem"><p><code class="varname">PKG_OPTIONS_DEPRECATED_WARNINGS</code> is 5532<li class="listitem"><p><code class="varname">PKG_OPTIONS_DEPRECATED_WARNINGS</code> is
5533a list of warnings about deprecated variables or options used, and 5533a list of warnings about deprecated variables or options used, and
5534what to use instead.</p></li> 5534what to use instead.</p></li>
5535</ol></div> 5535</ol></div>
5536<p>A package should never modify 5536<p>A package should never modify
5537<code class="varname">PKG_DEFAULT_OPTIONS</code> or the variable named in 5537<code class="varname">PKG_DEFAULT_OPTIONS</code> or the variable named in
5538<code class="varname">PKG_OPTIONS_VAR</code>. These are strictly user-settable. 5538<code class="varname">PKG_OPTIONS_VAR</code>. These are strictly user-settable.
5539To suggest a default set of options, use 5539To suggest a default set of options, use
5540<code class="varname">PKG_SUGGESTED_OPTIONS</code>.</p> 5540<code class="varname">PKG_SUGGESTED_OPTIONS</code>.</p>
5541<p><code class="varname">PKG_OPTIONS_VAR</code> must be defined before 5541<p><code class="varname">PKG_OPTIONS_VAR</code> must be defined before
5542including <code class="filename">bsd.options.mk</code>. If none of 5542including <code class="filename">bsd.options.mk</code>. If none of
5543<code class="varname">PKG_SUPPORTED_OPTIONS</code>, 5543<code class="varname">PKG_SUPPORTED_OPTIONS</code>,
5544<code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code>, and 5544<code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code>, and
5545<code class="varname">PKG_OPTIONS_REQUIRED_GROUPS</code> are defined (as can 5545<code class="varname">PKG_OPTIONS_REQUIRED_GROUPS</code> are defined (as can
5546happen with platform-specific options if none of them is supported on 5546happen with platform-specific options if none of them is supported on
5547the current platform), <code class="varname">PKG_OPTIONS</code> is set to the 5547the current platform), <code class="varname">PKG_OPTIONS</code> is set to the
5548empty list and the package is otherwise treated as not using the 5548empty list and the package is otherwise treated as not using the
5549options framework.</p> 5549options framework.</p>
5550<p>After the inclusion of <code class="filename">bsd.options.mk</code>, the 5550<p>After the inclusion of <code class="filename">bsd.options.mk</code>, the
5551variable <code class="varname">PKG_OPTIONS</code> contains the list of selected 5551variable <code class="varname">PKG_OPTIONS</code> contains the list of selected
5552build options, properly filtered to remove unsupported and duplicate 5552build options, properly filtered to remove unsupported and duplicate
5553options.</p> 5553options.</p>
5554<p>The remaining sections contain the logic that is specific to 5554<p>The remaining sections contain the logic that is specific to
5555each option. The correct way to check for an option is to check 5555each option. The correct way to check for an option is to check
5556whether it is listed in <code class="varname">PKG_OPTIONS</code>:</p> 5556whether it is listed in <code class="varname">PKG_OPTIONS</code>:</p>
5557<pre class="programlisting"> 5557<pre class="programlisting">
5558.if !empty(PKG_OPTIONS:M<em class="replaceable"><code>option</code></em>) 5558.if !empty(PKG_OPTIONS:M<em class="replaceable"><code>option</code></em>)
5559</pre> 5559</pre>
5560</div> 5560</div>
5561<div class="sect1"> 5561<div class="sect1">
5562<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5562<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5563<a name="option-names"></a>16.3. Option Names</h2></div></div></div> 5563<a name="option-names"></a>16.3. Option Names</h2></div></div></div>
5564<p>Options that enable similar features in different packages (like 5564<p>Options that enable similar features in different packages (like
5565optional support for a library) should use a common name in all 5565optional support for a library) should use a common name in all
5566packages that support it (like the name of the library). If another 5566packages that support it (like the name of the library). If another
5567package already has an option with the same meaning, use the same 5567package already has an option with the same meaning, use the same
5568name.</p> 5568name.</p>
5569<p>Options that enable features specific to one package, where it's 5569<p>Options that enable features specific to one package, where it's
5570unlikely that another (unrelated) package has the same (or a similar) 5570unlikely that another (unrelated) package has the same (or a similar)
5571optional feature, should use a name prefixed with 5571optional feature, should use a name prefixed with
5572<code class="varname"><em class="replaceable"><code>pkgname</code></em>-</code>.</p> 5572<code class="varname"><em class="replaceable"><code>pkgname</code></em>-</code>.</p>
5573<p>If a group of related packages share an optional feature 5573<p>If a group of related packages share an optional feature
5574specific to that group, prefix it with the name of the 5574specific to that group, prefix it with the name of the
5575<span class="quote">&#8220;<span class="quote">main</span>&#8221;</span> package 5575<span class="quote">&#8220;<span class="quote">main</span>&#8221;</span> package
5576(e. g. <code class="varname">djbware-errno-hack</code>).</p> 5576(e. g. <code class="varname">djbware-errno-hack</code>).</p>
5577<p>For new options, add a line to 5577<p>For new options, add a line to
5578<code class="filename">mk/defaults/options.description</code>. Lines have two 5578<code class="filename">mk/defaults/options.description</code>. Lines have two
5579fields, separated by tab. The first field is the option name, the 5579fields, separated by tab. The first field is the option name, the
5580second its description. The description should be a whole sentence 5580second its description. The description should be a whole sentence
5581(starting with an uppercase letter and ending with a period) that 5581(starting with an uppercase letter and ending with a period) that
5582describes what enabling the option does. E. g. <span class="quote">&#8220;<span class="quote">Enable ispell 5582describes what enabling the option does. E. g. <span class="quote">&#8220;<span class="quote">Enable ispell
5583support.</span>&#8221;</span> The file is sorted by option names.</p> 5583support.</span>&#8221;</span> The file is sorted by option names.</p>
5584</div> 5584</div>
5585<div class="sect1"> 5585<div class="sect1">
5586<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5586<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5587<a name="option-build"></a>16.4. Determining the options of dependencies</h2></div></div></div> 5587<a name="option-build"></a>16.4. Determining the options of dependencies</h2></div></div></div>
5588<p>When writing <a class="link" href="#buildlink3.mk"><code class="filename">buildlink3.mk</code></a> files, it is often necessary to list 5588<p>When writing <a class="link" href="#buildlink3.mk"><code class="filename">buildlink3.mk</code></a> files, it is often necessary to list
5589different dependencies based on the options with which the package was 5589different dependencies based on the options with which the package was
5590built. For querying these options, the file 5590built. For querying these options, the file
5591<code class="filename">pkgsrc/mk/pkg-build-options.mk</code> should be used. A 5591<code class="filename">pkgsrc/mk/pkg-build-options.mk</code> should be used. A
5592typical example looks like this:</p> 5592typical example looks like this:</p>
5593<pre class="programlisting"> 5593<pre class="programlisting">
5594pkgbase := libpurple 5594pkgbase := libpurple
5595.include "../../mk/pkg-build-options.mk" 5595.include "../../mk/pkg-build-options.mk"
5596 5596
5597.if !empty(PKG_BUILD_OPTIONS.libpurple:Mdbus) 5597.if !empty(PKG_BUILD_OPTIONS.libpurple:Mdbus)
5598... 5598...
5599.endif 5599.endif
5600</pre> 5600</pre>
5601<p>Including <code class="filename">pkg-build-options.mk</code> here will set 5601<p>Including <code class="filename">pkg-build-options.mk</code> here will set
5602the variable <code class="varname">PKG_BUILD_OPTIONS.libpurple</code> to the build 5602the variable <code class="varname">PKG_BUILD_OPTIONS.libpurple</code> to the build
5603options of the libpurple package, which can then be queried like 5603options of the libpurple package, which can then be queried like
5604<code class="varname">PKG_OPTIONS</code> in the <code class="filename">options.mk</code> 5604<code class="varname">PKG_OPTIONS</code> in the <code class="filename">options.mk</code>
5605file. See the file <code class="filename">pkg-build-options.mk</code> for more 5605file. See the file <code class="filename">pkg-build-options.mk</code> for more
5606details.</p> 5606details.</p>
5607</div> 5607</div>
5608</div> 5608</div>
5609<div class="chapter"> 5609<div class="chapter">
5610<div class="titlepage"><div><div><h2 class="title"> 5610<div class="titlepage"><div><div><h2 class="title">
5611<a name="build"></a>Chapter 17. The build process</h2></div></div></div> 5611<a name="build"></a>Chapter 17. The build process</h2></div></div></div>
5612<div class="toc"> 5612<div class="toc">
5613<p><b>Table of Contents</b></p> 5613<p><b>Table of Contents</b></p>
5614<dl class="toc"> 5614<dl class="toc">
5615<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt> 5615<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt>
5616<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt> 5616<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt>
5617<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt> 5617<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt>
5618<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt> 5618<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt>
5619<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 5619<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
5620<dd><dl> 5620<dd><dl>
5621<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt> 5621<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt>
5622<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt> 5622<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt>
5623</dl></dd> 5623</dl></dd>
5624<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt> 5624<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt>
5625<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt> 5625<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt>
5626<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt> 5626<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt>
5627<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt> 5627<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt>
5628<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt> 5628<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt>
5629<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 5629<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
5630<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 5630<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
5631<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt> 5631<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt>
5632<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 5632<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
5633<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt> 5633<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt>
5634<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt> 5634<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt>
5635<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt> 5635<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt>
5636</dl> 5636</dl>
5637</div> 5637</div>
5638<div class="sect1"> 5638<div class="sect1">
5639<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5639<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5640<a name="build.intro"></a>17.1. Introduction</h2></div></div></div> 5640<a name="build.intro"></a>17.1. Introduction</h2></div></div></div>
5641<p>This chapter gives a detailed description on how a package is 5641<p>This chapter gives a detailed description on how a package is
5642 built. Building a package is separated into different 5642 built. Building a package is separated into different
5643 <span class="emphasis"><em>phases</em></span> (for example <code class="varname">fetch</code>, 5643 <span class="emphasis"><em>phases</em></span> (for example <code class="varname">fetch</code>,
5644 <code class="varname">build</code>, <code class="varname">install</code>), all of which are 5644 <code class="varname">build</code>, <code class="varname">install</code>), all of which are
5645 described in the following sections. Each phase is split into 5645 described in the following sections. Each phase is split into
5646 so-called <span class="emphasis"><em>stages</em></span>, which take the name of the 5646 so-called <span class="emphasis"><em>stages</em></span>, which take the name of the
5647 containing phase, prefixed by one of <code class="varname">pre-</code>, 5647 containing phase, prefixed by one of <code class="varname">pre-</code>,
5648 <code class="varname">do-</code> or <code class="varname">post-</code>. (Examples are 5648 <code class="varname">do-</code> or <code class="varname">post-</code>. (Examples are
5649 <code class="varname">pre-configure</code>, <code class="varname">post-build</code>.) Most 5649 <code class="varname">pre-configure</code>, <code class="varname">post-build</code>.) Most
5650 of the actual work is done in the <code class="varname">do-*</code> stages.</p> 5650 of the actual work is done in the <code class="varname">do-*</code> stages.</p>
5651<p>Never override the regular targets (like 5651<p>Never override the regular targets (like
5652 <code class="varname">fetch</code>), if you have to, override the 5652 <code class="varname">fetch</code>), if you have to, override the
5653 <code class="varname">do-*</code> ones instead.</p> 5653 <code class="varname">do-*</code> ones instead.</p>
5654<p>The basic steps for building a program are always the same. First 5654<p>The basic steps for building a program are always the same. First
5655 the program's source (<span class="emphasis"><em>distfile</em></span>) must be brought to 5655 the program's source (<span class="emphasis"><em>distfile</em></span>) must be brought to
5656 the local system and then extracted. After any pkgsrc-specific patches 5656 the local system and then extracted. After any pkgsrc-specific patches
5657 to compile properly are applied, the software can be configured, then 5657 to compile properly are applied, the software can be configured, then
5658 built (usually by compiling), and finally the generated binaries, etc. 5658 built (usually by compiling), and finally the generated binaries, etc.
5659 can be put into place on the system.</p> 5659 can be put into place on the system.</p>
5660<p>To get more details about what is happening at each step, 5660<p>To get more details about what is happening at each step,
5661 you can set the <code class="varname">PKG_VERBOSE</code> variable, or the 5661 you can set the <code class="varname">PKG_VERBOSE</code> variable, or the
5662 <code class="varname">PATCH_DEBUG</code> variable if you are just interested 5662 <code class="varname">PATCH_DEBUG</code> variable if you are just interested
5663 in more details about the <span class="emphasis"><em>patch</em></span> step.</p> 5663 in more details about the <span class="emphasis"><em>patch</em></span> step.</p>
5664</div> 5664</div>
5665<div class="sect1"> 5665<div class="sect1">
5666<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5666<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5667<a name="build.prefix"></a>17.2. Program location</h2></div></div></div> 5667<a name="build.prefix"></a>17.2. Program location</h2></div></div></div>
5668<p>Before outlining the process performed by the NetBSD package system in 5668<p>Before outlining the process performed by the NetBSD package system in
5669 the next section, here's a brief discussion on where programs are 5669 the next section, here's a brief discussion on where programs are
5670 installed, and which variables influence this.</p> 5670 installed, and which variables influence this.</p>
5671<p>The automatic variable <code class="varname">PREFIX</code> indicates 5671<p>The automatic variable <code class="varname">PREFIX</code> indicates
5672 where all files of the final program shall be installed. It is 5672 where all files of the final program shall be installed. It is
5673 usually set to <code class="varname">LOCALBASE</code> 5673 usually set to <code class="varname">LOCALBASE</code>
5674 (<code class="filename">/usr/pkg</code>), or <code class="varname">CROSSBASE</code> 5674 (<code class="filename">/usr/pkg</code>), or <code class="varname">CROSSBASE</code>
5675 for pkgs in the <code class="filename">cross</code> category. The value of 5675 for pkgs in the <code class="filename">cross</code> category. The value of
5676 <code class="varname">PREFIX</code> needs to be put 5676 <code class="varname">PREFIX</code> needs to be put
5677 into the various places in the program's source where paths to 5677 into the various places in the program's source where paths to
5678 these files are encoded. See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;<code class="filename">patches/*</code>&#8221;</a> and <a class="xref" href="#fixes.libtool" title="19.3.1. Shared libraries - libtool">Section 19.3.1, &#8220;Shared libraries - libtool&#8221;</a> for more details.</p> 5678 these files are encoded. See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;<code class="filename">patches/*</code>&#8221;</a> and <a class="xref" href="#fixes.libtool" title="19.3.1. Shared libraries - libtool">Section 19.3.1, &#8220;Shared libraries - libtool&#8221;</a> for more details.</p>
5679<p>When choosing which of these variables to use, 5679<p>When choosing which of these variables to use,
5680 follow the following rules:</p> 5680 follow the following rules:</p>
5681<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5681<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5682<li class="listitem"><p><code class="varname">PREFIX</code> always points to the location 5682<li class="listitem"><p><code class="varname">PREFIX</code> always points to the location
5683 where the current pkg will be installed. When referring to a 5683 where the current pkg will be installed. When referring to a
5684 pkg's own installation path, use 5684 pkg's own installation path, use
5685 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span>.</p></li> 5685 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span>.</p></li>
5686<li class="listitem"><p><code class="varname">LOCALBASE</code> is where all non-X11 pkgs 5686<li class="listitem"><p><code class="varname">LOCALBASE</code> is where all non-X11 pkgs
5687 are installed. If you need to construct a -I or -L argument 5687 are installed. If you need to construct a -I or -L argument
5688 to the compiler to find includes and libraries installed by 5688 to the compiler to find includes and libraries installed by
5689 another non-X11 pkg, use <span class="quote">&#8220;<span class="quote">${LOCALBASE}</span>&#8221;</span>. The name 5689 another non-X11 pkg, use <span class="quote">&#8220;<span class="quote">${LOCALBASE}</span>&#8221;</span>. The name
5690 <code class="varname">LOCALBASE</code> stems from FreeBSD, which 5690 <code class="varname">LOCALBASE</code> stems from FreeBSD, which
5691 installed all packages in <code class="filename">/usr/local</code>. As 5691 installed all packages in <code class="filename">/usr/local</code>. As
5692 pkgsrc leaves <code class="filename">/usr/local</code> for the system 5692 pkgsrc leaves <code class="filename">/usr/local</code> for the system
5693 administrator, this variable is a misnomer.</p></li> 5693 administrator, this variable is a misnomer.</p></li>
5694<li class="listitem"><p><code class="varname">X11BASE</code> is where the actual X11 5694<li class="listitem"><p><code class="varname">X11BASE</code> is where the actual X11
5695 distribution (from xsrc, etc.) is installed. When looking for 5695 distribution (from xsrc, etc.) is installed. When looking for
5696 <span class="emphasis"><em>standard</em></span> X11 includes (not those 5696 <span class="emphasis"><em>standard</em></span> X11 includes (not those
5697 installed by a package), use <span class="quote">&#8220;<span class="quote">${X11BASE}</span>&#8221;</span>.</p></li> 5697 installed by a package), use <span class="quote">&#8220;<span class="quote">${X11BASE}</span>&#8221;</span>.</p></li>
5698<li class="listitem"><p>X11-based packages using imake must set 5698<li class="listitem"><p>X11-based packages using imake must set
5699 <code class="varname">USE_IMAKE</code> to be installed correctly under 5699 <code class="varname">USE_IMAKE</code> to be installed correctly under
5700 <code class="varname">LOCALBASE</code>.</p></li> 5700 <code class="varname">LOCALBASE</code>.</p></li>
5701<li class="listitem"><p>Within <code class="filename">${PREFIX}</code>, packages should 5701<li class="listitem"><p>Within <code class="filename">${PREFIX}</code>, packages should
5702 install files according to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?hier+7.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">hier</span>(7)</span></a>, with the exception that 5702 install files according to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?hier+7.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">hier</span>(7)</span></a>, with the exception that
5703 manual pages go into <code class="filename">${PREFIX}/man</code>, not 5703 manual pages go into <code class="filename">${PREFIX}/man</code>, not
5704 <code class="filename">${PREFIX}/share/man</code>.</p></li> 5704 <code class="filename">${PREFIX}/share/man</code>.</p></li>
5705</ul></div> 5705</ul></div>
5706</div> 5706</div>
5707<div class="sect1"> 5707<div class="sect1">
5708<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5708<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5709<a name="build.builddirs"></a>17.3. Directories used during the build process</h2></div></div></div> 5709<a name="build.builddirs"></a>17.3. Directories used during the build process</h2></div></div></div>
5710<p>When building a package, various directories are used to store 5710<p>When building a package, various directories are used to store
5711 source files, temporary files, pkgsrc-internal files, and so on. These 5711 source files, temporary files, pkgsrc-internal files, and so on. These
5712 directories are explained here.</p> 5712 directories are explained here.</p>
5713<p>Some of the directory variables contain relative pathnames. There 5713<p>Some of the directory variables contain relative pathnames. There
5714 are two common base directories for these relative directories: 5714 are two common base directories for these relative directories:
5715 <code class="varname">PKGSRCDIR/PKGPATH</code> is used for directories that are 5715 <code class="varname">PKGSRCDIR/PKGPATH</code> is used for directories that are
5716 pkgsrc-specific. <code class="varname">WRKSRC</code> is used for directories 5716 pkgsrc-specific. <code class="varname">WRKSRC</code> is used for directories
5717 inside the package itself.</p> 5717 inside the package itself.</p>
5718<div class="variablelist"><dl class="variablelist"> 5718<div class="variablelist"><dl class="variablelist">
5719<dt><span class="term"><code class="varname">PKGSRCDIR</code></span></dt> 5719<dt><span class="term"><code class="varname">PKGSRCDIR</code></span></dt>
5720<dd><p>This is an absolute pathname that points to the pkgsrc 5720<dd><p>This is an absolute pathname that points to the pkgsrc
5721 root directory. Generally, you don't need 5721 root directory. Generally, you don't need
5722 it.</p></dd> 5722 it.</p></dd>
5723<dt><span class="term"><code class="varname">PKGDIR</code></span></dt> 5723<dt><span class="term"><code class="varname">PKGDIR</code></span></dt>
5724<dd><p>This is an absolute pathname that points to the 5724<dd><p>This is an absolute pathname that points to the
5725 current package.</p></dd> 5725 current package.</p></dd>
5726<dt><span class="term"><code class="varname">PKGPATH</code></span></dt> 5726<dt><span class="term"><code class="varname">PKGPATH</code></span></dt>
5727<dd><p>This is a pathname relative to 5727<dd><p>This is a pathname relative to
5728 <code class="varname">PKGSRCDIR</code> that points to the current 5728 <code class="varname">PKGSRCDIR</code> that points to the current
5729 package.</p></dd> 5729 package.</p></dd>
5730<dt><span class="term"><code class="varname">WRKDIR</code></span></dt> 5730<dt><span class="term"><code class="varname">WRKDIR</code></span></dt>
5731<dd><p>This is an absolute pathname pointing to the directory 5731<dd><p>This is an absolute pathname pointing to the directory
5732 where all work takes place. The distfiles are extracted to this 5732 where all work takes place. The distfiles are extracted to this
5733 directory. It also contains temporary directories and log files used by 5733 directory. It also contains temporary directories and log files used by
5734 the various pkgsrc frameworks, like <span class="emphasis"><em>buildlink</em></span> or 5734 the various pkgsrc frameworks, like <span class="emphasis"><em>buildlink</em></span> or
5735 the <span class="emphasis"><em>wrappers</em></span>.</p></dd> 5735 the <span class="emphasis"><em>wrappers</em></span>.</p></dd>
5736<dt><span class="term"><code class="varname">WRKSRC</code></span></dt> 5736<dt><span class="term"><code class="varname">WRKSRC</code></span></dt>
5737<dd><p>This is an absolute pathname pointing to the directory 5737<dd><p>This is an absolute pathname pointing to the directory
5738 where the distfiles are extracted. It is usually a direct subdirectory 5738 where the distfiles are extracted. It is usually a direct subdirectory
5739 of <code class="varname">WRKDIR</code>, and often it's the only directory entry 5739 of <code class="varname">WRKDIR</code>, and often it's the only directory entry
5740 that isn't hidden. This variable may be changed by a package 5740 that isn't hidden. This variable may be changed by a package
5741 <code class="filename">Makefile</code>.</p></dd> 5741 <code class="filename">Makefile</code>.</p></dd>
5742</dl></div> 5742</dl></div>
5743<p>The <code class="varname">CREATE_WRKDIR_SYMLINK</code> definition takes either 5743<p>The <code class="varname">CREATE_WRKDIR_SYMLINK</code> definition takes either
5744 the value <span class="emphasis"><em>yes</em></span> or <span class="emphasis"><em>no</em></span> and defaults 5744 the value <span class="emphasis"><em>yes</em></span> or <span class="emphasis"><em>no</em></span> and defaults
5745 to <span class="emphasis"><em>no</em></span>. It indicates whether a symbolic link to the 5745 to <span class="emphasis"><em>no</em></span>. It indicates whether a symbolic link to the
5746 <code class="varname">WRKDIR</code> is to be created in the pkgsrc entry's directory. 5746 <code class="varname">WRKDIR</code> is to be created in the pkgsrc entry's directory.
5747 If users would like to have their pkgsrc trees behave in a 5747 If users would like to have their pkgsrc trees behave in a
5748 read-only manner, then the value of 5748 read-only manner, then the value of
5749 <code class="varname">CREATE_WRKDIR_SYMLINK</code> should be set to 5749 <code class="varname">CREATE_WRKDIR_SYMLINK</code> should be set to
5750 <span class="emphasis"><em>no</em></span>.</p> 5750 <span class="emphasis"><em>no</em></span>.</p>
5751</div> 5751</div>
5752<div class="sect1"> 5752<div class="sect1">
5753<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5753<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5754<a name="build.running"></a>17.4. Running a phase</h2></div></div></div> 5754<a name="build.running"></a>17.4. Running a phase</h2></div></div></div>
5755<p>You can run a particular phase by typing <span class="command"><strong>make 5755<p>You can run a particular phase by typing <span class="command"><strong>make
5756 phase</strong></span>, where <span class="emphasis"><em>phase</em></span> is the name of the 5756 phase</strong></span>, where <span class="emphasis"><em>phase</em></span> is the name of the
5757 phase. This will automatically run all phases that are required for this 5757 phase. This will automatically run all phases that are required for this
5758 phase. The default phase is <code class="varname">build</code>, that is, when you 5758 phase. The default phase is <code class="varname">build</code>, that is, when you
5759 run <span class="command"><strong>make</strong></span> without parameters in a package directory, 5759 run <span class="command"><strong>make</strong></span> without parameters in a package directory,
5760 the package will be built, but not installed.</p> 5760 the package will be built, but not installed.</p>
5761</div> 5761</div>
5762<div class="sect1"> 5762<div class="sect1">
5763<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5763<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5764<a name="build.fetch"></a>17.5. The <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div> 5764<a name="build.fetch"></a>17.5. The <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div>
5765<p>The first step in building a package is to fetch the 5765<p>The first step in building a package is to fetch the
5766 distribution files (distfiles) from the sites that are providing 5766 distribution files (distfiles) from the sites that are providing
5767 them. This is the task of the <span class="emphasis"><em>fetch</em></span> 5767 them. This is the task of the <span class="emphasis"><em>fetch</em></span>
5768 phase.</p> 5768 phase.</p>
5769<div class="sect2"> 5769<div class="sect2">
5770<div class="titlepage"><div><div><h3 class="title"> 5770<div class="titlepage"><div><div><h3 class="title">
5771<a name="build.fetch.what"></a>17.5.1. What to fetch and where to get it from</h3></div></div></div> 5771<a name="build.fetch.what"></a>17.5.1. What to fetch and where to get it from</h3></div></div></div>
5772<p>In simple cases, <code class="varname">MASTER_SITES</code> 5772<p>In simple cases, <code class="varname">MASTER_SITES</code>
5773 defines all URLs from where the distfile, whose name is 5773 defines all URLs from where the distfile, whose name is
5774 derived from the <code class="varname">DISTNAME</code> variable, is 5774 derived from the <code class="varname">DISTNAME</code> variable, is
5775 fetched. The more complicated cases are described 5775 fetched. The more complicated cases are described
5776 below.</p> 5776 below.</p>
5777<p>The variable <code class="varname">DISTFILES</code> specifies 5777<p>The variable <code class="varname">DISTFILES</code> specifies
5778 the list of distfiles that have to be fetched. Its value 5778 the list of distfiles that have to be fetched. Its value
5779 defaults to <code class="literal">${DEFAULT_DISTFILES}</code> and 5779 defaults to <code class="literal">${DEFAULT_DISTFILES}</code> and
5780 its value is <code class="literal">${DISTNAME}${EXTRACT_SUFX}</code>, 5780 its value is <code class="literal">${DISTNAME}${EXTRACT_SUFX}</code>,
5781 so that most packages don't need to define it at all. 5781 so that most packages don't need to define it at all.
5782 <code class="varname">EXTRACT_SUFX</code> is 5782 <code class="varname">EXTRACT_SUFX</code> is
5783 <code class="literal">.tar.gz</code> by default, but can be changed 5783 <code class="literal">.tar.gz</code> by default, but can be changed
5784 freely. Note that if your package requires additional 5784 freely. Note that if your package requires additional
5785 distfiles to the default one, you cannot just append the 5785 distfiles to the default one, you cannot just append the
5786 additional filenames using the <code class="literal">+=</code> 5786 additional filenames using the <code class="literal">+=</code>
5787 operator, but you have write for example:</p> 5787 operator, but you have write for example:</p>
5788<pre class="programlisting"> 5788<pre class="programlisting">
5789DISTFILES= ${DEFAULT_DISTFILES} additional-files.tar.gz 5789DISTFILES= ${DEFAULT_DISTFILES} additional-files.tar.gz
5790</pre> 5790</pre>
5791<p>Each distfile is fetched from a list of sites, usually 5791<p>Each distfile is fetched from a list of sites, usually
5792 <code class="varname">MASTER_SITES</code>. If the package has multiple 5792 <code class="varname">MASTER_SITES</code>. If the package has multiple
5793 <code class="varname">DISTFILES</code> or multiple 5793 <code class="varname">DISTFILES</code> or multiple
5794 <code class="varname">PATCHFILES</code> from different sites, you can 5794 <code class="varname">PATCHFILES</code> from different sites, you can
5795 set 5795 set
5796 <code class="varname">SITES.<em class="replaceable"><code>distfile</code></em></code> 5796 <code class="varname">SITES.<em class="replaceable"><code>distfile</code></em></code>
5797 to the list of URLs where the file 5797 to the list of URLs where the file
5798 <code class="filename"><em class="replaceable"><code>distfile</code></em></code> 5798 <code class="filename"><em class="replaceable"><code>distfile</code></em></code>
5799 (including the suffix) can be found.</p> 5799 (including the suffix) can be found.</p>
5800<pre class="programlisting"> 5800<pre class="programlisting">
5801DISTFILES= ${DISTNAME}${EXTRACT_SUFX} 5801DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
5802DISTFILES+= foo-file.tar.gz 5802DISTFILES+= foo-file.tar.gz
5803SITES.foo-file.tar.gz= \ 5803SITES.foo-file.tar.gz= \
5804http://www.somewhere.com/somehow/ \ 5804http://www.somewhere.com/somehow/ \
5805http://www.somewhereelse.com/mirror/somehow/ 5805http://www.somewhereelse.com/mirror/somehow/
5806</pre> 5806</pre>
5807<p>When actually fetching the distfiles, each item from 5807<p>When actually fetching the distfiles, each item from
5808 <code class="varname">MASTER_SITES</code> or 5808 <code class="varname">MASTER_SITES</code> or
5809 <code class="varname">SITES.*</code> gets the name of each distfile 5809 <code class="varname">SITES.*</code> gets the name of each distfile
5810 appended to it, without an intermediate slash. Therefore, 5810 appended to it, without an intermediate slash. Therefore,
5811 all site values have to end with a slash or other separator 5811 all site values have to end with a slash or other separator
5812 character. This allows for example to set 5812 character. This allows for example to set
5813 <code class="varname">MASTER_SITES</code> to a URL of a CGI script 5813 <code class="varname">MASTER_SITES</code> to a URL of a CGI script
5814 that gets the name of the distfile as a parameter. In this 5814 that gets the name of the distfile as a parameter. In this
5815 case, the definition would look like:</p> 5815 case, the definition would look like:</p>
5816<pre class="programlisting"> 5816<pre class="programlisting">
5817MASTER_SITES= http://www.example.com/download.cgi?file= 5817MASTER_SITES= http://www.example.com/download.cgi?file=
5818</pre> 5818</pre>
5819<p> The exception to this rule are URLs starting with a dash. 5819<p> The exception to this rule are URLs starting with a dash.
5820 In that case the URL is taken as is, fetched and the result 5820 In that case the URL is taken as is, fetched and the result
5821 stored under the name of the distfile. You can use this style 5821 stored under the name of the distfile. You can use this style
5822 for the case when the download URL style does not match the 5822 for the case when the download URL style does not match the
5823 above common case. For example, if permanent download URL is a 5823 above common case. For example, if permanent download URL is a
5824 redirector to the real download URL, or the download file name 5824 redirector to the real download URL, or the download file name
5825 is offered by an HTTP Content-Disposition header. In the 5825 is offered by an HTTP Content-Disposition header. In the
5826 following example, <code class="filename">foo-1.0.0.tar.gz</code> will be 5826 following example, <code class="filename">foo-1.0.0.tar.gz</code> will be
5827 created instead of the default 5827 created instead of the default
5828 <code class="filename">v1.0.0.tar.gz</code>.</p> 5828 <code class="filename">v1.0.0.tar.gz</code>.</p>
5829<pre class="programlisting"> 5829<pre class="programlisting">
5830DISTNAME= foo-1.0.0 5830DISTNAME= foo-1.0.0
5831MASTER_SITES= -http://www.example.com/archive/v1.0.0.tar.gz 5831MASTER_SITES= -http://www.example.com/archive/v1.0.0.tar.gz
5832</pre> 5832</pre>
5833<p>There are some predefined values for 5833<p>There are some predefined values for
5834 <code class="varname">MASTER_SITES</code>, which can be used in 5834 <code class="varname">MASTER_SITES</code>, which can be used in
5835 packages. The names of the variables should speak for 5835 packages. The names of the variables should speak for
5836 themselves.</p> 5836 themselves.</p>
5837<pre class="programlisting"> 5837<pre class="programlisting">
5838${MASTER_SITE_APACHE} 5838${MASTER_SITE_APACHE}
5839${MASTER_SITE_BACKUP} 5839${MASTER_SITE_BACKUP}
5840${MASTER_SITE_CYGWIN} 5840${MASTER_SITE_CYGWIN}
5841${MASTER_SITE_DEBIAN} 5841${MASTER_SITE_DEBIAN}
5842${MASTER_SITE_FREEBSD} 5842${MASTER_SITE_FREEBSD}
5843${MASTER_SITE_FREEBSD_LOCAL} 5843${MASTER_SITE_FREEBSD_LOCAL}
5844${MASTER_SITE_GENTOO} 5844${MASTER_SITE_GENTOO}
5845${MASTER_SITE_GNOME} 5845${MASTER_SITE_GNOME}
5846${MASTER_SITE_GNU} 5846${MASTER_SITE_GNU}
5847${MASTER_SITE_GNUSTEP} 5847${MASTER_SITE_GNUSTEP}
5848${MASTER_SITE_HASKELL_HACKAGE} 5848${MASTER_SITE_HASKELL_HACKAGE}
5849${MASTER_SITE_IFARCHIVE} 5849${MASTER_SITE_IFARCHIVE}
5850${MASTER_SITE_KDE} 5850${MASTER_SITE_KDE}
5851${MASTER_SITE_MOZILLA} 5851${MASTER_SITE_MOZILLA}
5852${MASTER_SITE_MOZILLA_ALL} 5852${MASTER_SITE_MOZILLA_ALL}
5853${MASTER_SITE_MOZILLA_ESR} 5853${MASTER_SITE_MOZILLA_ESR}
5854${MASTER_SITE_MYSQL} 5854${MASTER_SITE_MYSQL}
5855${MASTER_SITE_NETLIB} 5855${MASTER_SITE_NETLIB}
5856${MASTER_SITE_OPENOFFICE} 5856${MASTER_SITE_OPENOFFICE}
5857${MASTER_SITE_OSDN} 5857${MASTER_SITE_OSDN}
5858${MASTER_SITE_PERL_CPAN} 5858${MASTER_SITE_PERL_CPAN}
5859${MASTER_SITE_PGSQL} 5859${MASTER_SITE_PGSQL}
5860${MASTER_SITE_RUBYGEMS} 5860${MASTER_SITE_RUBYGEMS}
5861${MASTER_SITE_R_CRAN} 5861${MASTER_SITE_R_CRAN}
5862${MASTER_SITE_SOURCEFORGE} 5862${MASTER_SITE_SOURCEFORGE}
5863${MASTER_SITE_SUNSITE} 5863${MASTER_SITE_SUNSITE}
5864${MASTER_SITE_SUSE} 5864${MASTER_SITE_SUSE}
5865${MASTER_SITE_TEX_CTAN} 5865${MASTER_SITE_TEX_CTAN}
5866${MASTER_SITE_XCONTRIB} 5866${MASTER_SITE_XCONTRIB}
5867${MASTER_SITE_XEMACS} 5867${MASTER_SITE_XEMACS}
5868${MASTER_SITE_XORG} 5868${MASTER_SITE_XORG}
5869</pre> 5869</pre>
5870<p>Some explanations for the less self-explaining ones: 5870<p>Some explanations for the less self-explaining ones:
5871 <code class="varname">MASTER_SITE_BACKUP</code> contains backup sites 5871 <code class="varname">MASTER_SITE_BACKUP</code> contains backup sites
5872 for packages that are maintained in <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/%24%7BDIST_SUBDIR%7D" target="_top">ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/${DIST_SUBDIR}</a>. <code class="varname">MASTER_SITE_LOCAL</code> contains local 5872 for packages that are maintained in <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/%24%7BDIST_SUBDIR%7D" target="_top">ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/${DIST_SUBDIR}</a>. <code class="varname">MASTER_SITE_LOCAL</code> contains local
5873 package source distributions that are maintained in <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/LOCAL_PORTS/" target="_top">ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/LOCAL_PORTS/</a>.</p> 5873 package source distributions that are maintained in <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/LOCAL_PORTS/" target="_top">ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/LOCAL_PORTS/</a>.</p>
5874<p>If you choose one of these predefined sites, you may 5874<p>If you choose one of these predefined sites, you may
5875 want to specify a subdirectory of that site. Since these 5875 want to specify a subdirectory of that site. Since these
5876 macros may expand to more than one actual site, you 5876 macros may expand to more than one actual site, you
5877 <span class="emphasis"><em>must</em></span> use the following construct to 5877 <span class="emphasis"><em>must</em></span> use the following construct to
5878 specify a subdirectory:</p> 5878 specify a subdirectory:</p>
5879<pre class="programlisting"> 5879<pre class="programlisting">
5880MASTER_SITES= ${MASTER_SITE_GNU:=subdirectory/name/} 5880MASTER_SITES= ${MASTER_SITE_GNU:=subdirectory/name/}
5881MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=project_name/} 5881MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=project_name/}
5882</pre> 5882</pre>
5883<p>Note the trailing slash after the subdirectory 5883<p>Note the trailing slash after the subdirectory
5884 name.</p> 5884 name.</p>
5885</div> 5885</div>
5886<div class="sect2"> 5886<div class="sect2">
5887<div class="titlepage"><div><div><h3 class="title"> 5887<div class="titlepage"><div><div><h3 class="title">
5888<a name="build.fetch.how"></a>17.5.2. How are the files fetched?</h3></div></div></div> 5888<a name="build.fetch.how"></a>17.5.2. How are the files fetched?</h3></div></div></div>
5889<p>The <span class="emphasis"><em>fetch</em></span> phase makes sure that 5889<p>The <span class="emphasis"><em>fetch</em></span> phase makes sure that
5890 all the distfiles exist in a local directory 5890 all the distfiles exist in a local directory
5891 (<code class="varname">DISTDIR</code>, which can be set by the pkgsrc 5891 (<code class="varname">DISTDIR</code>, which can be set by the pkgsrc
5892 user). If the files do not exist, they are fetched using 5892 user). If the files do not exist, they are fetched using
5893 commands of the form</p> 5893 commands of the form</p>
5894<pre class="programlisting"> 5894<pre class="programlisting">
5895${FETCH_CMD} ${FETCH_BEFORE_ARGS} ${site}${file} ${FETCH_AFTER_ARGS} 5895${FETCH_CMD} ${FETCH_BEFORE_ARGS} ${site}${file} ${FETCH_AFTER_ARGS}
5896</pre> 5896</pre>
5897<p>where <code class="literal">${site}</code> varies through 5897<p>where <code class="literal">${site}</code> varies through
5898 several possibilities in turn: first, 5898 several possibilities in turn: first,
5899 <code class="varname">MASTER_SITE_OVERRIDE</code> is tried, then the 5899 <code class="varname">MASTER_SITE_OVERRIDE</code> is tried, then the
5900 sites specified in either <code class="varname">SITES.file</code> if 5900 sites specified in either <code class="varname">SITES.file</code> if
5901 defined, else <code class="varname">MASTER_SITES</code> or 5901 defined, else <code class="varname">MASTER_SITES</code> or
5902 <code class="varname">PATCH_SITES</code>, as applies, then finally the 5902 <code class="varname">PATCH_SITES</code>, as applies, then finally the
5903 value of <code class="varname">MASTER_SITE_BACKUP</code>. The order of 5903 value of <code class="varname">MASTER_SITE_BACKUP</code>. The order of
5904 all except the first and the last can be optionally sorted 5904 all except the first and the last can be optionally sorted
5905 by the user, via setting either 5905 by the user, via setting either
5906 <code class="varname">MASTER_SORT_RANDOM</code>, and 5906 <code class="varname">MASTER_SORT_RANDOM</code>, and
5907 <code class="varname">MASTER_SORT_AWK</code> or 5907 <code class="varname">MASTER_SORT_AWK</code> or
5908 <code class="varname">MASTER_SORT_REGEX</code>.</p> 5908 <code class="varname">MASTER_SORT_REGEX</code>.</p>
5909<p> The specific command and arguments used depend on the 5909<p> The specific command and arguments used depend on the
5910 <code class="varname">FETCH_USING</code> parameter. The example above is 5910 <code class="varname">FETCH_USING</code> parameter. The example above is
5911 for <code class="literal">FETCH_USING=custom</code>.</p> 5911 for <code class="literal">FETCH_USING=custom</code>.</p>
5912<p>The distfiles mirror run by the NetBSD Foundation uses the 5912<p>The distfiles mirror run by the NetBSD Foundation uses the
5913 <span class="emphasis"><em>mirror-distfiles</em></span> target to mirror the 5913 <span class="emphasis"><em>mirror-distfiles</em></span> target to mirror the
5914 distfiles, if they are freely distributable. Packages setting 5914 distfiles, if they are freely distributable. Packages setting
5915 <code class="varname">NO_SRC_ON_FTP</code> (usually to 5915 <code class="varname">NO_SRC_ON_FTP</code> (usually to
5916 <span class="quote">&#8220;<span class="quote">${RESTRICTED}</span>&#8221;</span>) will not have their distfiles 5916 <span class="quote">&#8220;<span class="quote">${RESTRICTED}</span>&#8221;</span>) will not have their distfiles
5917 mirrored.</p> 5917 mirrored.</p>
5918</div> 5918</div>
5919</div> 5919</div>
5920<div class="sect1"> 5920<div class="sect1">
5921<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5921<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5922<a name="build.checksum"></a>17.6. The <span class="emphasis"><em>checksum</em></span> phase</h2></div></div></div> 5922<a name="build.checksum"></a>17.6. The <span class="emphasis"><em>checksum</em></span> phase</h2></div></div></div>
5923<p>After the distfile(s) are fetched, their checksum is 5923<p>After the distfile(s) are fetched, their checksum is
5924 generated and compared with the checksums stored in the 5924 generated and compared with the checksums stored in the
5925 distinfo file. If the checksums don't match, the build is 5925 distinfo file. If the checksums don't match, the build is
5926 aborted. This is to ensure the same distfile is used for 5926 aborted. This is to ensure the same distfile is used for
5927 building, and that the distfile wasn't changed, e.g. by some 5927 building, and that the distfile wasn't changed, e.g. by some
5928 malign force, deliberately changed distfiles on the master 5928 malign force, deliberately changed distfiles on the master
5929 distribution site or network lossage.</p> 5929 distribution site or network lossage.</p>
5930</div> 5930</div>
5931<div class="sect1"> 5931<div class="sect1">
5932<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5932<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5933<a name="build.extract"></a>17.7. The <span class="emphasis"><em>extract</em></span> phase</h2></div></div></div> 5933<a name="build.extract"></a>17.7. The <span class="emphasis"><em>extract</em></span> phase</h2></div></div></div>
5934<p>When the distfiles are present on the local system, they 5934<p>When the distfiles are present on the local system, they
5935 need to be extracted, as they usually come in the form of some 5935 need to be extracted, as they usually come in the form of some
5936 compressed archive format.</p> 5936 compressed archive format.</p>
5937<p>By default, all <code class="varname">DISTFILES</code> are 5937<p>By default, all <code class="varname">DISTFILES</code> are
5938 extracted. If you only need some of them, you can set the 5938 extracted. If you only need some of them, you can set the
5939 <code class="varname">EXTRACT_ONLY</code> variable to the list of those 5939 <code class="varname">EXTRACT_ONLY</code> variable to the list of those
5940 files.</p> 5940 files.</p>
5941<p>Extracting the files is usually done by a little 5941<p>Extracting the files is usually done by a little
5942 program, <code class="filename">mk/extract/extract</code>, which 5942 program, <code class="filename">mk/extract/extract</code>, which
5943 already knows how to extract various archive formats, so most 5943 already knows how to extract various archive formats, so most
5944 likely you will not need to change anything here. But if you 5944 likely you will not need to change anything here. But if you
5945 need, the following variables may help you:</p> 5945 need, the following variables may help you:</p>
5946<div class="variablelist"><dl class="variablelist"> 5946<div class="variablelist"><dl class="variablelist">
5947<dt><span class="term"><code class="varname">EXTRACT_OPTS_{BIN,LHA,PAX,RAR,TAR,ZIP,ZOO}</code></span></dt> 5947<dt><span class="term"><code class="varname">EXTRACT_OPTS_{BIN,LHA,PAX,RAR,TAR,ZIP,ZOO}</code></span></dt>
5948<dd><p>Use these variables to override the default 5948<dd><p>Use these variables to override the default
5949 options for an extract command, which are defined in 5949 options for an extract command, which are defined in
5950 <code class="filename">mk/extract/extract</code>.</p></dd> 5950 <code class="filename">mk/extract/extract</code>.</p></dd>
5951<dt><span class="term"><code class="varname">EXTRACT_USING</code></span></dt> 5951<dt><span class="term"><code class="varname">EXTRACT_USING</code></span></dt>
5952<dd><p>This variable can be set to 5952<dd><p>This variable can be set to
5953 <code class="literal">bsdtar</code>, <code class="literal">gtar</code>, <code class="literal">nbtar</code> 5953 <code class="literal">bsdtar</code>, <code class="literal">gtar</code>, <code class="literal">nbtar</code>
5954 (which is the default value), <code class="literal">pax</code>, or an 5954 (which is the default value), <code class="literal">pax</code>, or an
5955 absolute pathname pointing to the command with which tar 5955 absolute pathname pointing to the command with which tar
5956 archives should be extracted. It is preferred to choose bsdtar over gtar 5956 archives should be extracted. It is preferred to choose bsdtar over gtar
5957 if NetBSD's pax-as-tar is not good enough.</p></dd> 5957 if NetBSD's pax-as-tar is not good enough.</p></dd>
5958</dl></div> 5958</dl></div>
5959<p>If the <code class="filename">extract</code> program doesn't 5959<p>If the <code class="filename">extract</code> program doesn't
5960 serve your needs, you can also override the 5960 serve your needs, you can also override the
5961 <code class="varname">EXTRACT_CMD</code> variable, which holds the 5961 <code class="varname">EXTRACT_CMD</code> variable, which holds the
5962 command used for extracting the files. This command is 5962 command used for extracting the files. This command is
5963 executed in the <code class="filename">${WRKSRC}</code> 5963 executed in the <code class="filename">${WRKSRC}</code>
5964 directory. During execution of this command, the shell 5964 directory. During execution of this command, the shell
5965 variable <code class="varname">extract_file</code> holds the absolute 5965 variable <code class="varname">extract_file</code> holds the absolute
5966 pathname of the file that is going to be extracted.</p> 5966 pathname of the file that is going to be extracted.</p>
5967<p>And if that still does not suffice, you can override the 5967<p>And if that still does not suffice, you can override the
5968 <code class="varname">do-extract</code> target in the package 5968 <code class="varname">do-extract</code> target in the package
5969 Makefile.</p> 5969 Makefile.</p>
5970</div> 5970</div>
5971<div class="sect1"> 5971<div class="sect1">
5972<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5972<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5973<a name="build.patch"></a>17.8. The <span class="emphasis"><em>patch</em></span> phase</h2></div></div></div> 5973<a name="build.patch"></a>17.8. The <span class="emphasis"><em>patch</em></span> phase</h2></div></div></div>
5974<p>After extraction, all the patches named by the 5974<p>After extraction, all the patches named by the
5975 <code class="varname">PATCHFILES</code>, those present in the patches 5975 <code class="varname">PATCHFILES</code>, those present in the patches
5976 subdirectory of the package as well as in 5976 subdirectory of the package as well as in
5977 $LOCALPATCHES/$PKGPATH (e.g. 5977 $LOCALPATCHES/$PKGPATH (e.g.
5978 <code class="filename">/usr/local/patches/graphics/png</code>) are 5978 <code class="filename">/usr/local/patches/graphics/png</code>) are
5979 applied. Patchfiles ending in <code class="filename">.Z</code> or 5979 applied. Patchfiles ending in <code class="filename">.Z</code> or
5980 <code class="filename">.gz</code> are uncompressed before they are 5980 <code class="filename">.gz</code> are uncompressed before they are
5981 applied, files ending in <code class="filename">.orig</code> or 5981 applied, files ending in <code class="filename">.orig</code> or
5982 <code class="filename">.rej</code> are ignored. Any special options to 5982 <code class="filename">.rej</code> are ignored. Any special options to
5983 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> can be handed in 5983 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> can be handed in
5984 <code class="varname">PATCH_DIST_ARGS</code>. See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;<code class="filename">patches/*</code>&#8221;</a> for more details.</p> 5984 <code class="varname">PATCH_DIST_ARGS</code>. See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;<code class="filename">patches/*</code>&#8221;</a> for more details.</p>
5985<p>By default <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> is given special args to make 5985<p>By default <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> is given special args to make
5986 it fail if the patches apply with some lines of fuzz. Please 5986 it fail if the patches apply with some lines of fuzz. Please
5987 fix (regen) the patches so that they apply cleanly. The 5987 fix (regen) the patches so that they apply cleanly. The
5988 rationale behind this is that patches that don't apply cleanly 5988 rationale behind this is that patches that don't apply cleanly
5989 may end up being applied in the wrong place, and cause severe 5989 may end up being applied in the wrong place, and cause severe
5990 harm there.</p> 5990 harm there.</p>
5991</div> 5991</div>
5992<div class="sect1"> 5992<div class="sect1">
5993<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5993<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5994<a name="build.tools"></a>17.9. The <span class="emphasis"><em>tools</em></span> phase</h2></div></div></div> 5994<a name="build.tools"></a>17.9. The <span class="emphasis"><em>tools</em></span> phase</h2></div></div></div>
5995<p>This is covered in <a class="xref" href="#tools" title="Chapter 18. Tools needed for building or running">Chapter 18, <i>Tools needed for building or running</i></a>. 5995<p>This is covered in <a class="xref" href="#tools" title="Chapter 18. Tools needed for building or running">Chapter 18, <i>Tools needed for building or running</i></a>.
5996 </p> 5996 </p>
5997</div> 5997</div>
5998<div class="sect1"> 5998<div class="sect1">
5999<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5999<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6000<a name="build.wrapper"></a>17.10. The <span class="emphasis"><em>wrapper</em></span> phase</h2></div></div></div> 6000<a name="build.wrapper"></a>17.10. The <span class="emphasis"><em>wrapper</em></span> phase</h2></div></div></div>
6001<p>This phase creates wrapper programs for the compilers and 6001<p>This phase creates wrapper programs for the compilers and
6002 linkers. The following variables can be used to tweak the 6002 linkers. The following variables can be used to tweak the
6003 wrappers.</p> 6003 wrappers.</p>
6004<div class="variablelist"><dl class="variablelist"> 6004<div class="variablelist"><dl class="variablelist">
6005<dt><span class="term"><code class="varname">ECHO_WRAPPER_MSG</code></span></dt> 6005<dt><span class="term"><code class="varname">ECHO_WRAPPER_MSG</code></span></dt>
6006<dd><p>The command used to print progress 6006<dd><p>The command used to print progress
6007 messages. Does nothing by default. Set to 6007 messages. Does nothing by default. Set to
6008 <code class="literal">${ECHO}</code> to see the progress 6008 <code class="literal">${ECHO}</code> to see the progress
6009 messages.</p></dd> 6009 messages.</p></dd>
6010<dt><span class="term"><code class="varname">WRAPPER_DEBUG</code></span></dt> 6010<dt><span class="term"><code class="varname">WRAPPER_DEBUG</code></span></dt>
6011<dd><p>This variable can be set to 6011<dd><p>This variable can be set to
6012 <code class="literal">yes</code> (default) or <code class="literal">no</code>, 6012 <code class="literal">yes</code> (default) or <code class="literal">no</code>,
6013 depending on whether you want additional information in the 6013 depending on whether you want additional information in the
6014 wrapper log file.</p></dd> 6014 wrapper log file.</p></dd>
6015<dt><span class="term"><code class="varname">WRAPPER_UPDATE_CACHE</code></span></dt> 6015<dt><span class="term"><code class="varname">WRAPPER_UPDATE_CACHE</code></span></dt>
6016<dd><p>This variable can be set to 6016<dd><p>This variable can be set to
6017 <code class="literal">yes</code> or <code class="literal">no</code>, depending 6017 <code class="literal">yes</code> or <code class="literal">no</code>, depending
6018 on whether the wrapper should use its cache, which will 6018 on whether the wrapper should use its cache, which will
6019 improve the speed. The default value is 6019 improve the speed. The default value is
6020 <code class="literal">yes</code>, but is forced to 6020 <code class="literal">yes</code>, but is forced to
6021 <code class="literal">no</code> if the platform does not support 6021 <code class="literal">no</code> if the platform does not support
6022 it.</p></dd> 6022 it.</p></dd>
6023<dt><span class="term"><code class="varname">WRAPPER_REORDER_CMDS</code></span></dt> 6023<dt><span class="term"><code class="varname">WRAPPER_REORDER_CMDS</code></span></dt>
6024<dd><p>A list of reordering commands. A reordering 6024<dd><p>A list of reordering commands. A reordering
6025 command has the form 6025 command has the form
6026 <code class="literal">reorder:l:<em class="replaceable"><code>lib1</code></em>:<em class="replaceable"><code>lib2</code></em></code>. 6026 <code class="literal">reorder:l:<em class="replaceable"><code>lib1</code></em>:<em class="replaceable"><code>lib2</code></em></code>.
6027 It ensures that that 6027 It ensures that that
6028 <code class="literal">-l<em class="replaceable"><code>lib1</code></em></code> occurs 6028 <code class="literal">-l<em class="replaceable"><code>lib1</code></em></code> occurs
6029 before <code class="literal">-l<em class="replaceable"><code>lib2</code></em></code>. 6029 before <code class="literal">-l<em class="replaceable"><code>lib2</code></em></code>.
6030 </p></dd> 6030 </p></dd>
6031<dt><span class="term"><code class="varname">WRAPPER_TRANSFORM_CMDS</code></span></dt> 6031<dt><span class="term"><code class="varname">WRAPPER_TRANSFORM_CMDS</code></span></dt>
6032<dd><p>A list of transformation commands. [TODO: 6032<dd><p>A list of transformation commands. [TODO:
6033 investigate further]</p></dd> 6033 investigate further]</p></dd>
6034</dl></div> 6034</dl></div>
6035</div> 6035</div>
6036<div class="sect1"> 6036<div class="sect1">
6037<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6037<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6038<a name="build.configure"></a>17.11. The <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div> 6038<a name="build.configure"></a>17.11. The <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div>
6039<p>Most pieces of software need information on the header 6039<p>Most pieces of software need information on the header
6040 files, system calls, and library routines which are available 6040 files, system calls, and library routines which are available
6041 on the platform they run on. The process of determining this 6041 on the platform they run on. The process of determining this
6042 information is known as configuration, and is usually 6042 information is known as configuration, and is usually
6043 automated. In most cases, a script is supplied with the 6043 automated. In most cases, a script is supplied with the
6044 distfiles, and its invocation results in generation of header 6044 distfiles, and its invocation results in generation of header
6045 files, Makefiles, etc.</p> 6045 files, Makefiles, etc.</p>
6046<p>If the package contains a configure script, this can be 6046<p>If the package contains a configure script, this can be
6047 invoked by setting <code class="varname">HAS_CONFIGURE</code> to 6047 invoked by setting <code class="varname">HAS_CONFIGURE</code> to
6048 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. If the configure script is a GNU autoconf 6048 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. If the configure script is a GNU autoconf
6049 script, you should set <code class="varname">GNU_CONFIGURE</code> to 6049 script, you should set <code class="varname">GNU_CONFIGURE</code> to
6050 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> instead. What happens in the 6050 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> instead. What happens in the
6051 <span class="emphasis"><em>configure</em></span> phase is roughly:</p> 6051 <span class="emphasis"><em>configure</em></span> phase is roughly:</p>
6052<pre class="programlisting"> 6052<pre class="programlisting">
6053.for d in ${CONFIGURE_DIRS} 6053.for d in ${CONFIGURE_DIRS}
6054 cd ${WRKSRC} \ 6054 cd ${WRKSRC} \
6055 &amp;&amp; cd ${d} \ 6055 &amp;&amp; cd ${d} \
6056 &amp;&amp; env ${CONFIGURE_ENV} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS} 6056 &amp;&amp; env ${CONFIGURE_ENV} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}
6057.endfor 6057.endfor
6058</pre> 6058</pre>
6059<p><code class="varname">CONFIGURE_DIRS</code> (default: 6059<p><code class="varname">CONFIGURE_DIRS</code> (default:
6060 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to 6060 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to
6061 <code class="varname">WRKSRC</code>. In each of these directories, the 6061 <code class="varname">WRKSRC</code>. In each of these directories, the
6062 configure script is run with the environment 6062 configure script is run with the environment
6063 <code class="varname">CONFIGURE_ENV</code> and arguments 6063 <code class="varname">CONFIGURE_ENV</code> and arguments
6064 <code class="varname">CONFIGURE_ARGS</code>. The variables 6064 <code class="varname">CONFIGURE_ARGS</code>. The variables
6065 <code class="varname">CONFIGURE_ENV</code>, 6065 <code class="varname">CONFIGURE_ENV</code>,
6066 <code class="varname">CONFIGURE_SCRIPT</code> (default: 6066 <code class="varname">CONFIGURE_SCRIPT</code> (default:
6067 <span class="quote">&#8220;<span class="quote">./configure</span>&#8221;</span>) and 6067 <span class="quote">&#8220;<span class="quote">./configure</span>&#8221;</span>) and
6068 <code class="varname">CONFIGURE_ARGS</code> may all be changed by the 6068 <code class="varname">CONFIGURE_ARGS</code> may all be changed by the
6069 package.</p> 6069 package.</p>
6070<p>If the program uses the Perl way of configuration (mainly Perl 6070<p>If the program uses the Perl way of configuration (mainly Perl
6071 modules, but not only), i.e. a file called 6071 modules, but not only), i.e. a file called
6072 <code class="filename">Makefile.PL</code>, it should include 6072 <code class="filename">Makefile.PL</code>, it should include
6073 <code class="filename">../../lang/perl5/module.mk</code>. To set any parameter for 6073 <code class="filename">../../lang/perl5/module.mk</code>. To set any parameter for
6074 <code class="filename">Makefile.PL</code> use the <code class="varname">MAKE_PARAMS</code> 6074 <code class="filename">Makefile.PL</code> use the <code class="varname">MAKE_PARAMS</code>
6075 variable (e.g., <code class="literal">MAKE_PARAMS+=foo=bar</code></p> 6075 variable (e.g., <code class="literal">MAKE_PARAMS+=foo=bar</code></p>
6076<p>If the program uses an <code class="filename">Imakefile</code> 6076<p>If the program uses an <code class="filename">Imakefile</code>
6077 for configuration, the appropriate steps can be invoked by 6077 for configuration, the appropriate steps can be invoked by
6078 setting <code class="varname">USE_IMAKE</code> to 6078 setting <code class="varname">USE_IMAKE</code> to
6079 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. If you only need xmkmf, add it to <code class="varname">USE_TOOLS</code>. 6079 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. If you only need xmkmf, add it to <code class="varname">USE_TOOLS</code>.
6080 You can add variables to xmkmf's environment by adding them to the 6080 You can add variables to xmkmf's environment by adding them to the
6081 <code class="varname">SCRIPTS_ENV</code> variable.</p> 6081 <code class="varname">SCRIPTS_ENV</code> variable.</p>
6082<p>If the program uses <code class="filename">cmake</code> 6082<p>If the program uses <code class="filename">cmake</code>
6083 for configuration, the appropriate steps can be invoked by 6083 for configuration, the appropriate steps can be invoked by
6084 setting <code class="varname">USE_CMAKE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. 6084 setting <code class="varname">USE_CMAKE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.
6085 You can add variables to cmake's environment by adding them to the 6085 You can add variables to cmake's environment by adding them to the
6086 <code class="varname">CONFIGURE_ENV</code> variable and arguments to cmake 6086 <code class="varname">CONFIGURE_ENV</code> variable and arguments to cmake
6087 by adding them to the <code class="varname">CMAKE_ARGS</code> variable. 6087 by adding them to the <code class="varname">CMAKE_ARGS</code> variable.
6088 The top directory argument is given by the 6088 The top directory argument is given by the
6089 <code class="varname">CMAKE_ARG_PATH</code> variable, that defaults to 6089 <code class="varname">CMAKE_ARG_PATH</code> variable, that defaults to
6090 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> (relative to <code class="varname">CONFIGURE_DIRS</code>)</p> 6090 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> (relative to <code class="varname">CONFIGURE_DIRS</code>)</p>
6091<p>If there is no configure step at all, set 6091<p>If there is no configure step at all, set
6092 <code class="varname">NO_CONFIGURE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p> 6092 <code class="varname">NO_CONFIGURE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p>
6093</div> 6093</div>
6094<div class="sect1"> 6094<div class="sect1">
6095<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6095<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6096<a name="build.build"></a>17.12. The <span class="emphasis"><em>build</em></span> phase</h2></div></div></div> 6096<a name="build.build"></a>17.12. The <span class="emphasis"><em>build</em></span> phase</h2></div></div></div>
6097<p>For building a package, a rough equivalent of the 6097<p>For building a package, a rough equivalent of the
6098 following code is executed.</p> 6098 following code is executed.</p>
6099<pre class="programlisting"> 6099<pre class="programlisting">
6100.for d in ${BUILD_DIRS} 6100.for d in ${BUILD_DIRS}
6101 cd ${WRKSRC} \ 6101 cd ${WRKSRC} \
6102 &amp;&amp; cd ${d} \ 6102 &amp;&amp; cd ${d} \
6103 &amp;&amp; env ${MAKE_ENV} \ 6103 &amp;&amp; env ${MAKE_ENV} \
6104 ${MAKE_PROGRAM} ${BUILD_MAKE_FLAGS} \ 6104 ${MAKE_PROGRAM} ${BUILD_MAKE_FLAGS} \
6105 -f ${MAKE_FILE} \ 6105 -f ${MAKE_FILE} \
6106 ${BUILD_TARGET} 6106 ${BUILD_TARGET}
6107.endfor 6107.endfor
6108</pre> 6108</pre>
6109<p><code class="varname">BUILD_DIRS</code> (default: 6109<p><code class="varname">BUILD_DIRS</code> (default:
6110 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to 6110 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to
6111 <code class="varname">WRKSRC</code>. In each of these directories, 6111 <code class="varname">WRKSRC</code>. In each of these directories,
6112 <code class="varname">MAKE_PROGRAM</code> is run with the environment 6112 <code class="varname">MAKE_PROGRAM</code> is run with the environment
6113 <code class="varname">MAKE_ENV</code> and arguments 6113 <code class="varname">MAKE_ENV</code> and arguments
6114 <code class="varname">BUILD_MAKE_FLAGS</code>. The variables 6114 <code class="varname">BUILD_MAKE_FLAGS</code>. The variables
6115 <code class="varname">MAKE_ENV</code>, 6115 <code class="varname">MAKE_ENV</code>,
6116 <code class="varname">BUILD_MAKE_FLAGS</code>, 6116 <code class="varname">BUILD_MAKE_FLAGS</code>,
6117 <code class="varname">MAKE_FILE</code> and 6117 <code class="varname">MAKE_FILE</code> and
6118 <code class="varname">BUILD_TARGET</code> may all be changed by the 6118 <code class="varname">BUILD_TARGET</code> may all be changed by the
6119 package.</p> 6119 package.</p>
6120<p>The default value of <code class="varname">MAKE_PROGRAM</code> is 6120<p>The default value of <code class="varname">MAKE_PROGRAM</code> is
6121 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span> if <code class="varname">USE_TOOLS</code> contains 6121 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span> if <code class="varname">USE_TOOLS</code> contains
6122 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span> otherwise. The 6122 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span> otherwise. The
6123 default value of <code class="varname">MAKE_FILE</code> is 6123 default value of <code class="varname">MAKE_FILE</code> is
6124 <span class="quote">&#8220;<span class="quote">Makefile</span>&#8221;</span>, and <code class="varname">BUILD_TARGET</code> 6124 <span class="quote">&#8220;<span class="quote">Makefile</span>&#8221;</span>, and <code class="varname">BUILD_TARGET</code>
6125 defaults to <span class="quote">&#8220;<span class="quote">all</span>&#8221;</span>.</p> 6125 defaults to <span class="quote">&#8220;<span class="quote">all</span>&#8221;</span>.</p>
6126<p>If there is no build step at all, set 6126<p>If there is no build step at all, set
6127 <code class="varname">NO_BUILD</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p> 6127 <code class="varname">NO_BUILD</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p>
6128</div> 6128</div>
6129<div class="sect1"> 6129<div class="sect1">
6130<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6130<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6131<a name="build.test"></a>17.13. The <span class="emphasis"><em>test</em></span> phase</h2></div></div></div> 6131<a name="build.test"></a>17.13. The <span class="emphasis"><em>test</em></span> phase</h2></div></div></div>
6132<p>[TODO]</p> 6132<p>[TODO]</p>
6133</div> 6133</div>
6134<div class="sect1"> 6134<div class="sect1">
6135<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6135<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6136<a name="build.install"></a>17.14. The <span class="emphasis"><em>install</em></span> phase</h2></div></div></div> 6136<a name="build.install"></a>17.14. The <span class="emphasis"><em>install</em></span> phase</h2></div></div></div>
6137<p>Once the build stage has completed, the final step is to 6137<p>Once the build stage has completed, the final step is to
6138 install the software in public directories, so users can 6138 install the software in public directories, so users can
6139 access the programs and files.</p> 6139 access the programs and files.</p>
6140<p>In the <span class="emphasis"><em>install</em></span> phase, a rough 6140<p>In the <span class="emphasis"><em>install</em></span> phase, a rough
6141 equivalent of the following code is executed. Additionally, 6141 equivalent of the following code is executed. Additionally,
6142 before and after this code, much magic is performed to do 6142 before and after this code, much magic is performed to do
6143 consistency checks, registering the package, and so on.</p> 6143 consistency checks, registering the package, and so on.</p>
6144<pre class="programlisting"> 6144<pre class="programlisting">
6145.for d in ${INSTALL_DIRS} 6145.for d in ${INSTALL_DIRS}
6146 cd ${WRKSRC} \ 6146 cd ${WRKSRC} \
6147 &amp;&amp; cd ${d} \ 6147 &amp;&amp; cd ${d} \
6148 &amp;&amp; env ${MAKE_ENV} \ 6148 &amp;&amp; env ${MAKE_ENV} \
6149 ${MAKE_PROGRAM} ${INSTALL_MAKE_FLAGS} \ 6149 ${MAKE_PROGRAM} ${INSTALL_MAKE_FLAGS} \
6150 -f ${MAKE_FILE} \ 6150 -f ${MAKE_FILE} \
6151 ${INSTALL_TARGET} 6151 ${INSTALL_TARGET}
6152.endfor 6152.endfor
6153</pre> 6153</pre>
6154<p>The variable's meanings are analogous to the ones in the 6154<p>The variable's meanings are analogous to the ones in the
6155 <span class="emphasis"><em>build</em></span> phase. 6155 <span class="emphasis"><em>build</em></span> phase.
6156 <code class="varname">INSTALL_DIRS</code> defaults to 6156 <code class="varname">INSTALL_DIRS</code> defaults to
6157 <code class="varname">BUILD_DIRS</code>. <code class="varname">INSTALL_TARGET</code> 6157 <code class="varname">BUILD_DIRS</code>. <code class="varname">INSTALL_TARGET</code>
6158 is <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> by default, plus 6158 is <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> by default, plus
6159 <span class="quote">&#8220;<span class="quote">install.man</span>&#8221;</span> if <code class="varname">USE_IMAKE</code> is 6159 <span class="quote">&#8220;<span class="quote">install.man</span>&#8221;</span> if <code class="varname">USE_IMAKE</code> is
6160 defined and <code class="varname">NO_INSTALL_MANPAGES</code> is not 6160 defined and <code class="varname">NO_INSTALL_MANPAGES</code> is not
6161 defined.</p> 6161 defined.</p>
6162<p>In the <span class="emphasis"><em>install</em></span> phase, the following 6162<p>In the <span class="emphasis"><em>install</em></span> phase, the following
6163 variables are useful. They are all variations of the 6163 variables are useful. They are all variations of the
6164 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?install+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a> command that have the owner, group and 6164 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?install+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a> command that have the owner, group and
6165 permissions preset. <code class="varname">INSTALL</code> is the plain 6165 permissions preset. <code class="varname">INSTALL</code> is the plain
6166 install command. The specialized variants, together with their 6166 install command. The specialized variants, together with their
6167 intended use, are:</p> 6167 intended use, are:</p>
6168<div class="variablelist"><dl class="variablelist"> 6168<div class="variablelist"><dl class="variablelist">
6169<dt><span class="term"><code class="varname">INSTALL_PROGRAM_DIR</code></span></dt> 6169<dt><span class="term"><code class="varname">INSTALL_PROGRAM_DIR</code></span></dt>
6170<dd><p>directories that contain 6170<dd><p>directories that contain
6171 binaries</p></dd> 6171 binaries</p></dd>
6172<dt><span class="term"><code class="varname">INSTALL_SCRIPT_DIR</code></span></dt> 6172<dt><span class="term"><code class="varname">INSTALL_SCRIPT_DIR</code></span></dt>
6173<dd><p>directories that contain 6173<dd><p>directories that contain
6174 scripts</p></dd> 6174 scripts</p></dd>
6175<dt><span class="term"><code class="varname">INSTALL_LIB_DIR</code></span></dt> 6175<dt><span class="term"><code class="varname">INSTALL_LIB_DIR</code></span></dt>
6176<dd><p>directories that contain shared and static 6176<dd><p>directories that contain shared and static
6177 libraries</p></dd> 6177 libraries</p></dd>
6178<dt><span class="term"><code class="varname">INSTALL_DATA_DIR</code></span></dt> 6178<dt><span class="term"><code class="varname">INSTALL_DATA_DIR</code></span></dt>
6179<dd><p>directories that contain data 6179<dd><p>directories that contain data
6180 files</p></dd> 6180 files</p></dd>
6181<dt><span class="term"><code class="varname">INSTALL_MAN_DIR</code></span></dt> 6181<dt><span class="term"><code class="varname">INSTALL_MAN_DIR</code></span></dt>
6182<dd><p>directories that contain man 6182<dd><p>directories that contain man
6183 pages</p></dd> 6183 pages</p></dd>
6184<dt><span class="term"><code class="varname">INSTALL_GAME_DIR</code></span></dt> 6184<dt><span class="term"><code class="varname">INSTALL_GAME_DIR</code></span></dt>
6185<dd><p>directories that contain data files for games 6185<dd><p>directories that contain data files for games
6186 </p></dd> 6186 </p></dd>
6187<dt><span class="term"><code class="varname">INSTALL_PROGRAM</code></span></dt> 6187<dt><span class="term"><code class="varname">INSTALL_PROGRAM</code></span></dt>
6188<dd><p>binaries that can be stripped from debugging 6188<dd><p>binaries that can be stripped from debugging
6189 symbols</p></dd> 6189 symbols</p></dd>
6190<dt><span class="term"><code class="varname">INSTALL_SCRIPT</code></span></dt> 6190<dt><span class="term"><code class="varname">INSTALL_SCRIPT</code></span></dt>
6191<dd><p>binaries that cannot be 6191<dd><p>binaries that cannot be
6192 stripped</p></dd> 6192 stripped</p></dd>
6193<dt><span class="term"><code class="varname">INSTALL_GAME</code></span></dt> 6193<dt><span class="term"><code class="varname">INSTALL_GAME</code></span></dt>
6194<dd><p>game 6194<dd><p>game
6195 binaries</p></dd> 6195 binaries</p></dd>
6196<dt><span class="term"><code class="varname">INSTALL_LIB</code></span></dt> 6196<dt><span class="term"><code class="varname">INSTALL_LIB</code></span></dt>
6197<dd><p>shared and static 6197<dd><p>shared and static
6198 libraries</p></dd> 6198 libraries</p></dd>
6199<dt><span class="term"><code class="varname">INSTALL_DATA</code></span></dt> 6199<dt><span class="term"><code class="varname">INSTALL_DATA</code></span></dt>
6200<dd><p>data files</p></dd> 6200<dd><p>data files</p></dd>
6201<dt><span class="term"><code class="varname">INSTALL_GAME_DATA</code></span></dt> 6201<dt><span class="term"><code class="varname">INSTALL_GAME_DATA</code></span></dt>
6202<dd><p>data files for 6202<dd><p>data files for
6203 games</p></dd> 6203 games</p></dd>
6204<dt><span class="term"><code class="varname">INSTALL_MAN</code></span></dt> 6204<dt><span class="term"><code class="varname">INSTALL_MAN</code></span></dt>
6205<dd><p>man pages</p></dd> 6205<dd><p>man pages</p></dd>
6206</dl></div> 6206</dl></div>
6207<p>Some other variables are:</p> 6207<p>Some other variables are:</p>
6208<div class="variablelist"><dl class="variablelist"> 6208<div class="variablelist"><dl class="variablelist">
6209<dt><span class="term"><code class="varname">INSTALL_UNSTRIPPED</code></span></dt> 6209<dt><span class="term"><code class="varname">INSTALL_UNSTRIPPED</code></span></dt>
6210<dd><p>If set to <code class="literal">yes</code>, do not run <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?strip+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">strip</span>(1)</span></a> 6210<dd><p>If set to <code class="literal">yes</code>, do not run <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?strip+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">strip</span>(1)</span></a>
6211 when installing binaries. Any debugging sections and symbols present in 6211 when installing binaries. Any debugging sections and symbols present in
6212 binaries will be preserved. 6212 binaries will be preserved.
6213 </p></dd> 6213 </p></dd>
6214<dt><span class="term"><code class="varname">INSTALLATION_DIRS</code></span></dt> 6214<dt><span class="term"><code class="varname">INSTALLATION_DIRS</code></span></dt>
6215<dd><p>A list of directories relative to 6215<dd><p>A list of directories relative to
6216 <code class="varname">PREFIX</code> that are created by pkgsrc at the 6216 <code class="varname">PREFIX</code> that are created by pkgsrc at the
6217 beginning of the <span class="emphasis"><em>install</em></span> phase. 6217 beginning of the <span class="emphasis"><em>install</em></span> phase.
6218 The package is supposed to create all needed directories itself 6218 The package is supposed to create all needed directories itself
6219 before installing files to it and list all other directories here. 6219 before installing files to it and list all other directories here.
6220 </p></dd> 6220 </p></dd>
6221</dl></div> 6221</dl></div>
6222<p>In the rare cases that a package shouldn't install anything, 6222<p>In the rare cases that a package shouldn't install anything,
6223 set <code class="varname">NO_INSTALL</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This is 6223 set <code class="varname">NO_INSTALL</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This is
6224 mostly relevant for packages in the <code class="filename">regress</code> 6224 mostly relevant for packages in the <code class="filename">regress</code>
6225 category.</p> 6225 category.</p>
6226</div> 6226</div>
6227<div class="sect1"> 6227<div class="sect1">
6228<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6228<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6229<a name="build.package"></a>17.15. The <span class="emphasis"><em>package</em></span> phase</h2></div></div></div> 6229<a name="build.package"></a>17.15. The <span class="emphasis"><em>package</em></span> phase</h2></div></div></div>
6230<p>Once the install stage has completed, a binary package of 6230<p>Once the install stage has completed, a binary package of
6231 the installed files can be built. These binary packages can be 6231 the installed files can be built. These binary packages can be
6232 used for quick installation without previous compilation, e.g. by 6232 used for quick installation without previous compilation, e.g. by
6233 the <span class="command"><strong>make bin-install</strong></span> or by using 6233 the <span class="command"><strong>make bin-install</strong></span> or by using
6234 <span class="command"><strong>pkg_add</strong></span>.</p> 6234 <span class="command"><strong>pkg_add</strong></span>.</p>
6235<p>By default, the binary packages are created in 6235<p>By default, the binary packages are created in
6236 <code class="filename">${PACKAGES}/All</code> and symlinks are created in 6236 <code class="filename">${PACKAGES}/All</code> and symlinks are created in
6237 <code class="filename">${PACKAGES}/<em class="replaceable"><code>category</code></em></code>, 6237 <code class="filename">${PACKAGES}/<em class="replaceable"><code>category</code></em></code>,
6238 one for each category in the <code class="varname">CATEGORIES</code> 6238 one for each category in the <code class="varname">CATEGORIES</code>
6239 variable. <code class="varname">PACKAGES</code> defaults to 6239 variable. <code class="varname">PACKAGES</code> defaults to
6240 <code class="filename">pkgsrc/packages</code>.</p> 6240 <code class="filename">pkgsrc/packages</code>.</p>
6241</div> 6241</div>
6242<div class="sect1"> 6242<div class="sect1">
6243<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6243<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6244<a name="build.clean"></a>17.16. Cleaning up</h2></div></div></div> 6244<a name="build.clean"></a>17.16. Cleaning up</h2></div></div></div>
6245<p>Once you're finished with a package, you can clean the work 6245<p>Once you're finished with a package, you can clean the work
6246 directory by running <span class="command"><strong>make clean</strong></span>. If you want 6246 directory by running <span class="command"><strong>make clean</strong></span>. If you want
6247 to clean the work directories of all dependencies too, use 6247 to clean the work directories of all dependencies too, use
6248 <span class="command"><strong>make clean-depends</strong></span>.</p> 6248 <span class="command"><strong>make clean-depends</strong></span>.</p>
6249</div> 6249</div>
6250<div class="sect1"> 6250<div class="sect1">
6251<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6251<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6252<a name="build.helpful-targets"></a>17.17. Other helpful targets</h2></div></div></div> 6252<a name="build.helpful-targets"></a>17.17. Other helpful targets</h2></div></div></div>
6253<div class="variablelist"><dl class="variablelist"> 6253<div class="variablelist"><dl class="variablelist">
6254<dt><span class="term">pre/post-*</span></dt> 6254<dt><span class="term">pre/post-*</span></dt>
6255<dd><p>For any of the main targets described in the 6255<dd><p>For any of the main targets described in the
6256 previous section, two auxiliary targets exist with 6256 previous section, two auxiliary targets exist with
6257 <span class="quote">&#8220;<span class="quote">pre-</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">post-</span>&#8221;</span> used as a 6257 <span class="quote">&#8220;<span class="quote">pre-</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">post-</span>&#8221;</span> used as a
6258 prefix for the main target's name. These targets are 6258 prefix for the main target's name. These targets are
6259 invoked before and after the main target is called, 6259 invoked before and after the main target is called,
6260 allowing extra configuration or installation steps be 6260 allowing extra configuration or installation steps be
6261 performed from a package's Makefile, for example, which 6261 performed from a package's Makefile, for example, which
6262 a program's configure script or install target 6262 a program's configure script or install target
6263 omitted.</p></dd> 6263 omitted.</p></dd>
6264<dt><span class="term">do-*</span></dt> 6264<dt><span class="term">do-*</span></dt>
6265<dd><p>Should one of the main targets do the wrong thing, 6265<dd><p>Should one of the main targets do the wrong thing,
6266 and should there be no variable to fix this, you can 6266 and should there be no variable to fix this, you can
6267 redefine it with the do-* target. (Note that redefining 6267 redefine it with the do-* target. (Note that redefining
6268 the target itself instead of the do-* target is a bad 6268 the target itself instead of the do-* target is a bad
6269 idea, as the pre-* and post-* targets won't be called 6269 idea, as the pre-* and post-* targets won't be called
6270 anymore, etc.) You will not usually need to do 6270 anymore, etc.) You will not usually need to do
6271 this.</p></dd> 6271 this.</p></dd>
6272<dt><span class="term">reinstall</span></dt> 6272<dt><span class="term">reinstall</span></dt>
6273<dd> 6273<dd>
6274<p>If you did a <span class="command"><strong>make install</strong></span> and 6274<p>If you did a <span class="command"><strong>make install</strong></span> and
6275 you noticed some file was not installed properly, you 6275 you noticed some file was not installed properly, you
6276 can repeat the installation with this target, which will 6276 can repeat the installation with this target, which will
6277 ignore the <span class="quote">&#8220;<span class="quote">already installed</span>&#8221;</span> flag.</p> 6277 ignore the <span class="quote">&#8220;<span class="quote">already installed</span>&#8221;</span> flag.</p>
6278<p>This is the default value of 6278<p>This is the default value of
6279 <code class="varname">DEPENDS_TARGET</code> except in the case of 6279 <code class="varname">DEPENDS_TARGET</code> except in the case of
6280 <span class="command"><strong>make update</strong></span> and <span class="command"><strong>make 6280 <span class="command"><strong>make update</strong></span> and <span class="command"><strong>make
6281 package</strong></span>, where the defaults are 6281 package</strong></span>, where the defaults are
6282 <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span>, 6282 <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span>,
6283 respectively.</p> 6283 respectively.</p>
6284</dd> 6284</dd>
6285<dt><span class="term">deinstall</span></dt> 6285<dt><span class="term">deinstall</span></dt>
6286<dd> 6286<dd>
6287<p>This target does a <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> in the 6287<p>This target does a <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> in the
6288 current directory, effectively de-installing the 6288 current directory, effectively de-installing the
6289 package. The following variables can be used to tune the 6289 package. The following variables can be used to tune the
6290 behaviour:</p> 6290 behaviour:</p>
6291<div class="variablelist"><dl class="variablelist"> 6291<div class="variablelist"><dl class="variablelist">
6292<dt><span class="term"><code class="varname">PKG_VERBOSE</code></span></dt> 6292<dt><span class="term"><code class="varname">PKG_VERBOSE</code></span></dt>
6293<dd><p>Add a "-v" to the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> command.</p></dd> 6293<dd><p>Add a "-v" to the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> command.</p></dd>
6294<dt><span class="term"><code class="varname">DEINSTALLDEPENDS</code></span></dt> 6294<dt><span class="term"><code class="varname">DEINSTALLDEPENDS</code></span></dt>
6295<dd><p>Remove all packages that require (depend on) 6295<dd><p>Remove all packages that require (depend on)
6296 the given package. This can be used to remove any 6296 the given package. This can be used to remove any
6297 packages that may have been pulled in by a given 6297 packages that may have been pulled in by a given
6298 package, e.g. if <span class="command"><strong>make deinstall 6298 package, e.g. if <span class="command"><strong>make deinstall
6299 DEINSTALLDEPENDS=1</strong></span> is done in 6299 DEINSTALLDEPENDS=1</strong></span> is done in
6300 <code class="filename">pkgsrc/x11/kde</code>, this is 6300 <code class="filename">pkgsrc/x11/kde</code>, this is
6301 likely to remove whole KDE. Works by adding 6301 likely to remove whole KDE. Works by adding
6302 <span class="quote">&#8220;<span class="quote">-R</span>&#8221;</span> to the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> 6302 <span class="quote">&#8220;<span class="quote">-R</span>&#8221;</span> to the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a>
6303 command line.</p></dd> 6303 command line.</p></dd>
6304</dl></div> 6304</dl></div>
6305</dd> 6305</dd>
6306<dt><span class="term">bin-install</span></dt> 6306<dt><span class="term">bin-install</span></dt>
6307<dd><p>Install a binary package from local disk and via FTP 6307<dd><p>Install a binary package from local disk and via FTP
6308 from a list of sites (see the 6308 from a list of sites (see the
6309 <code class="varname">BINPKG_SITES</code> variable), and do a 6309 <code class="varname">BINPKG_SITES</code> variable), and do a
6310 <span class="command"><strong>make package</strong></span> if no binary package is 6310 <span class="command"><strong>make package</strong></span> if no binary package is
6311 available anywhere. The arguments given to 6311 available anywhere. The arguments given to
6312 <span class="command"><strong>pkg_add</strong></span> can be set via 6312 <span class="command"><strong>pkg_add</strong></span> can be set via
6313 <code class="varname">BIN_INSTALL_FLAGS</code> e.g., to do verbose 6313 <code class="varname">BIN_INSTALL_FLAGS</code> e.g., to do verbose
6314 operation, etc.</p></dd> 6314 operation, etc.</p></dd>
6315<dt><span class="term">install-clean</span></dt> 6315<dt><span class="term">install-clean</span></dt>
6316<dd><p>This target removes the state files for the "install" and later 6316<dd><p>This target removes the state files for the "install" and later
6317 phases so that the "install" target may be re-invoked. This can be 6317 phases so that the "install" target may be re-invoked. This can be
6318 used after editing the PLIST to install the package without 6318 used after editing the PLIST to install the package without
6319 rebuilding it.</p></dd> 6319 rebuilding it.</p></dd>
6320<dt><span class="term">build-clean</span></dt> 6320<dt><span class="term">build-clean</span></dt>
6321<dd><p>This target removes the state files for the "build" and later 6321<dd><p>This target removes the state files for the "build" and later
6322 phases so that the "build" target may be re-invoked.</p></dd> 6322 phases so that the "build" target may be re-invoked.</p></dd>
6323<dt><span class="term">update</span></dt> 6323<dt><span class="term">update</span></dt>
6324<dd> 6324<dd>
6325<p>This target causes the current package to be 6325<p>This target causes the current package to be
6326 updated to the latest version. The package and all 6326 updated to the latest version. The package and all
6327 depending packages first get de-installed, then current 6327 depending packages first get de-installed, then current
6328 versions of the corresponding packages get compiled and 6328 versions of the corresponding packages get compiled and
6329 installed. This is similar to manually noting which 6329 installed. This is similar to manually noting which
6330 packages are currently installed, then performing a 6330 packages are currently installed, then performing a
6331 series of <span class="command"><strong>make deinstall</strong></span> and 6331 series of <span class="command"><strong>make deinstall</strong></span> and
6332 <span class="command"><strong>make install</strong></span> (or whatever 6332 <span class="command"><strong>make install</strong></span> (or whatever
6333 <code class="varname">UPDATE_TARGET</code> is set to) for these 6333 <code class="varname">UPDATE_TARGET</code> is set to) for these
6334 packages.</p> 6334 packages.</p>
6335<p>You can use the <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> target to 6335<p>You can use the <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> target to
6336 resume package updating in case a previous <span class="command"><strong>make 6336 resume package updating in case a previous <span class="command"><strong>make
6337 update</strong></span> was interrupted for some reason. 6337 update</strong></span> was interrupted for some reason.
6338 However, in this case, make sure you don't call 6338 However, in this case, make sure you don't call
6339 <span class="command"><strong>make clean</strong></span> or otherwise remove the 6339 <span class="command"><strong>make clean</strong></span> or otherwise remove the
6340 list of dependent packages in <code class="varname">WRKDIR</code>. 6340 list of dependent packages in <code class="varname">WRKDIR</code>.
6341 Otherwise, you lose the ability to automatically update 6341 Otherwise, you lose the ability to automatically update
6342 the current package along with the dependent packages 6342 the current package along with the dependent packages
6343 you have installed.</p> 6343 you have installed.</p>
6344<p>Resuming an interrupted <span class="command"><strong>make 6344<p>Resuming an interrupted <span class="command"><strong>make
6345 update</strong></span> will only work as long as the package 6345 update</strong></span> will only work as long as the package
6346 tree remains unchanged. If the source code for one of 6346 tree remains unchanged. If the source code for one of
6347 the packages to be updated has been changed, resuming 6347 the packages to be updated has been changed, resuming
6348 <span class="command"><strong>make update</strong></span> will most certainly 6348 <span class="command"><strong>make update</strong></span> will most certainly
6349 fail!</p> 6349 fail!</p>
6350<p>The following variables can be used either on the 6350<p>The following variables can be used either on the
6351 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to 6351 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to
6352 alter the behaviour of <span class="command"><strong>make 6352 alter the behaviour of <span class="command"><strong>make
6353 update</strong></span>:</p> 6353 update</strong></span>:</p>
6354<div class="variablelist"><dl class="variablelist"> 6354<div class="variablelist"><dl class="variablelist">
6355<dt><span class="term"><code class="varname">UPDATE_TARGET</code></span></dt> 6355<dt><span class="term"><code class="varname">UPDATE_TARGET</code></span></dt>
6356<dd><p>Install target to recursively use for the 6356<dd><p>Install target to recursively use for the
6357 updated package and the dependent packages. 6357 updated package and the dependent packages.
6358 Defaults to <code class="varname">DEPENDS_TARGET</code> if 6358 Defaults to <code class="varname">DEPENDS_TARGET</code> if
6359 set, <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> otherwise for 6359 set, <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> otherwise for
6360 <span class="command"><strong>make update</strong></span>. Other good 6360 <span class="command"><strong>make update</strong></span>. Other good
6361 targets are <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> or 6361 targets are <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> or
6362 <span class="quote">&#8220;<span class="quote">bin-install</span>&#8221;</span>. Do not set this to 6362 <span class="quote">&#8220;<span class="quote">bin-install</span>&#8221;</span>. Do not set this to
6363 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> or you will get stuck in an 6363 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> or you will get stuck in an
6364 endless loop!</p></dd> 6364 endless loop!</p></dd>
6365<dt><span class="term"><code class="varname">NOCLEAN</code></span></dt> 6365<dt><span class="term"><code class="varname">NOCLEAN</code></span></dt>
6366<dd><p>Don't clean up after updating. Useful if 6366<dd><p>Don't clean up after updating. Useful if
6367 you want to leave the work sources of the updated 6367 you want to leave the work sources of the updated
6368 packages around for inspection or other purposes. 6368 packages around for inspection or other purposes.
6369 Be sure you eventually clean up the source tree 6369 Be sure you eventually clean up the source tree
6370 (see the <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target below) 6370 (see the <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target below)
6371 or you may run into troubles with old source code 6371 or you may run into troubles with old source code
6372 still lying around on your next 6372 still lying around on your next
6373 <span class="command"><strong>make</strong></span> or <span class="command"><strong>make 6373 <span class="command"><strong>make</strong></span> or <span class="command"><strong>make
6374 update</strong></span>.</p></dd> 6374 update</strong></span>.</p></dd>
6375<dt><span class="term"><code class="varname">REINSTALL</code></span></dt> 6375<dt><span class="term"><code class="varname">REINSTALL</code></span></dt>
6376<dd><p>Deinstall each package before installing 6376<dd><p>Deinstall each package before installing
6377 (making <code class="varname">DEPENDS_TARGET</code>). This 6377 (making <code class="varname">DEPENDS_TARGET</code>). This
6378 may be necessary if the 6378 may be necessary if the
6379 <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target (see below) was 6379 <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target (see below) was
6380 called after interrupting a running <span class="command"><strong>make 6380 called after interrupting a running <span class="command"><strong>make
6381 update</strong></span>.</p></dd> 6381 update</strong></span>.</p></dd>
6382<dt><span class="term"><code class="varname">DEPENDS_TARGET</code></span></dt> 6382<dt><span class="term"><code class="varname">DEPENDS_TARGET</code></span></dt>
6383<dd><p>Allows you to disable recursion and hardcode 6383<dd><p>Allows you to disable recursion and hardcode
6384 the target for packages. The default is 6384 the target for packages. The default is
6385 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> for the update target, 6385 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> for the update target,
6386 facilitating a recursive update of prerequisite 6386 facilitating a recursive update of prerequisite
6387 packages. Only set 6387 packages. Only set
6388 <code class="varname">DEPENDS_TARGET</code> if you want to 6388 <code class="varname">DEPENDS_TARGET</code> if you want to
6389 disable recursive updates. Use 6389 disable recursive updates. Use
6390 <code class="varname">UPDATE_TARGET</code> instead to just 6390 <code class="varname">UPDATE_TARGET</code> instead to just
6391 set a specific target for each package to be 6391 set a specific target for each package to be
6392 installed during <span class="command"><strong>make update</strong></span> 6392 installed during <span class="command"><strong>make update</strong></span>
6393 (see above).</p></dd> 6393 (see above).</p></dd>
6394</dl></div> 6394</dl></div>
6395</dd> 6395</dd>
6396<dt><span class="term">clean-update</span></dt> 6396<dt><span class="term">clean-update</span></dt>
6397<dd> 6397<dd>
6398<p>Clean the source tree for all packages that would 6398<p>Clean the source tree for all packages that would
6399 get updated if <span class="command"><strong>make update</strong></span> was called 6399 get updated if <span class="command"><strong>make update</strong></span> was called
6400 from the current directory. This target should not be 6400 from the current directory. This target should not be
6401 used if the current package (or any of its depending 6401 used if the current package (or any of its depending
6402 packages) have already been de-installed (e.g., after 6402 packages) have already been de-installed (e.g., after
6403 calling <span class="command"><strong>make update</strong></span>) or you may lose 6403 calling <span class="command"><strong>make update</strong></span>) or you may lose
6404 some packages you intended to update. As a rule of 6404 some packages you intended to update. As a rule of
6405 thumb: only use this target <span class="emphasis"><em>before</em></span> 6405 thumb: only use this target <span class="emphasis"><em>before</em></span>
6406 the first time you run <span class="command"><strong>make update</strong></span> 6406 the first time you run <span class="command"><strong>make update</strong></span>
6407 and only if you have a dirty package tree (e.g., if you 6407 and only if you have a dirty package tree (e.g., if you
6408 used <code class="varname">NOCLEAN</code>).</p> 6408 used <code class="varname">NOCLEAN</code>).</p>
6409<p>If you are unsure about whether your tree is 6409<p>If you are unsure about whether your tree is
6410 clean, you can either perform a <span class="command"><strong>make 6410 clean, you can either perform a <span class="command"><strong>make
6411 clean</strong></span> at the top of the tree, or use the 6411 clean</strong></span> at the top of the tree, or use the
6412 following sequence of commands from the directory of the 6412 following sequence of commands from the directory of the
6413 package you want to update (<span class="emphasis"><em>before</em></span> 6413 package you want to update (<span class="emphasis"><em>before</em></span>
6414 running <span class="command"><strong>make update</strong></span> for the first 6414 running <span class="command"><strong>make update</strong></span> for the first
6415 time, otherwise you lose all the packages you wanted to 6415 time, otherwise you lose all the packages you wanted to
6416 update!):</p> 6416 update!):</p>
6417<pre class="screen"> 6417<pre class="screen">
6418<code class="prompt">#</code> <strong class="userinput"><code>make clean-update</code></strong> 6418<code class="prompt">#</code> <strong class="userinput"><code>make clean-update</code></strong>
6419<code class="prompt">#</code> <strong class="userinput"><code>make clean CLEANDEPENDS=YES</code></strong> 6419<code class="prompt">#</code> <strong class="userinput"><code>make clean CLEANDEPENDS=YES</code></strong>
6420<code class="prompt">#</code> <strong class="userinput"><code>make update</code></strong> 6420<code class="prompt">#</code> <strong class="userinput"><code>make update</code></strong>
6421 </pre> 6421 </pre>
6422<p>The following variables can be used either on the 6422<p>The following variables can be used either on the
6423 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to alter the behaviour of 6423 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to alter the behaviour of
6424 <span class="command"><strong>make clean-update</strong></span>:</p> 6424 <span class="command"><strong>make clean-update</strong></span>:</p>
6425<div class="variablelist"><dl class="variablelist"> 6425<div class="variablelist"><dl class="variablelist">
6426<dt><span class="term"><code class="varname">CLEAR_DIRLIST</code></span></dt> 6426<dt><span class="term"><code class="varname">CLEAR_DIRLIST</code></span></dt>
6427<dd><p>After <span class="command"><strong>make clean</strong></span>, do not 6427<dd><p>After <span class="command"><strong>make clean</strong></span>, do not
6428 reconstruct the list of directories to update for 6428 reconstruct the list of directories to update for
6429 this package. Only use this if <span class="command"><strong>make 6429 this package. Only use this if <span class="command"><strong>make
6430 update</strong></span> successfully installed all 6430 update</strong></span> successfully installed all
6431 packages you wanted to update. Normally, this is 6431 packages you wanted to update. Normally, this is
6432 done automatically on <span class="command"><strong>make 6432 done automatically on <span class="command"><strong>make
6433 update</strong></span>, but may have been suppressed by 6433 update</strong></span>, but may have been suppressed by
6434 the <code class="varname">NOCLEAN</code> variable (see 6434 the <code class="varname">NOCLEAN</code> variable (see
6435 above).</p></dd> 6435 above).</p></dd>
6436</dl></div> 6436</dl></div>
6437</dd> 6437</dd>
6438<dt><span class="term">replace</span></dt> 6438<dt><span class="term">replace</span></dt>
6439<dd> 6439<dd>
6440<p>Update the installation of the current package. This 6440<p>Update the installation of the current package. This
6441 differs from update in that it does not replace dependent 6441 differs from update in that it does not replace dependent
6442 packages. You will need to install <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_tarup/README.html" target="_top"><code class="filename">pkgtools/pkg_tarup</code></a> for this 6442 packages. You will need to install <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_tarup/README.html" target="_top"><code class="filename">pkgtools/pkg_tarup</code></a> for this
6443 target to work.</p> 6443 target to work.</p>
6444<p><span class="emphasis"><em>Be careful when using this 6444<p><span class="emphasis"><em>Be careful when using this
6445 target!</em></span> There are no guarantees that dependent 6445 target!</em></span> There are no guarantees that dependent
6446 packages will still work, in particular they will most 6446 packages will still work, in particular they will most
6447 certainly break if you <span class="command"><strong>make replace</strong></span> a 6447 certainly break if you <span class="command"><strong>make replace</strong></span> a
6448 library package whose shared library major version changed 6448 library package whose shared library major version changed
6449 between your installed version and the new one. For this 6449 between your installed version and the new one. For this
6450 reason, this target is not officially supported and only 6450 reason, this target is not officially supported and only
6451 recommended for advanced users.</p> 6451 recommended for advanced users.</p>
6452</dd> 6452</dd>
6453<dt><span class="term">info</span></dt> 6453<dt><span class="term">info</span></dt>
6454<dd><p>This target invokes <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_info+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_info</span>(1)</span></a> for the current 6454<dd><p>This target invokes <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_info+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_info</span>(1)</span></a> for the current
6455 package. You can use this to check which version of a 6455 package. You can use this to check which version of a
6456 package is installed.</p></dd> 6456 package is installed.</p></dd>
6457<dt><span class="term">index</span></dt> 6457<dt><span class="term">index</span></dt>
6458<dd> 6458<dd>
6459<p>This is a top-level command, i.e. it should be used in 6459<p>This is a top-level command, i.e. it should be used in
6460 the <code class="filename">pkgsrc</code> directory. It creates a 6460 the <code class="filename">pkgsrc</code> directory. It creates a
6461 database of all packages in the local pkgsrc tree, including 6461 database of all packages in the local pkgsrc tree, including
6462 dependencies, comment, maintainer, and some other useful 6462 dependencies, comment, maintainer, and some other useful
6463 information. Individual entries are created by running 6463 information. Individual entries are created by running
6464 <span class="command"><strong>make describe</strong></span> in the packages' 6464 <span class="command"><strong>make describe</strong></span> in the packages'
6465 directories. This index file is saved as 6465 directories. This index file is saved as
6466 <code class="filename">pkgsrc/INDEX</code>. It can be displayed in 6466 <code class="filename">pkgsrc/INDEX</code>. It can be displayed in
6467 verbose format by running <span class="command"><strong>make 6467 verbose format by running <span class="command"><strong>make
6468 print-index</strong></span>. You can search in it with 6468 print-index</strong></span>. You can search in it with
6469 <span class="command"><strong>make search 6469 <span class="command"><strong>make search
6470 key=<em class="replaceable"><code>something</code></em></strong></span>. You can 6470 key=<em class="replaceable"><code>something</code></em></strong></span>. You can
6471 extract a list of all packages that depend on a particular 6471 extract a list of all packages that depend on a particular
6472 one by running <span class="command"><strong>make show-deps 6472 one by running <span class="command"><strong>make show-deps
6473 PKG=<em class="replaceable"><code>somepackage</code></em></strong></span>.</p> 6473 PKG=<em class="replaceable"><code>somepackage</code></em></strong></span>.</p>
6474<p>Running this command takes a very long time, some 6474<p>Running this command takes a very long time, some
6475 hours even on fast machines!</p> 6475 hours even on fast machines!</p>
6476</dd> 6476</dd>
6477<dt><span class="term">readme</span></dt> 6477<dt><span class="term">readme</span></dt>
6478<dd> 6478<dd>
6479<p>This target generates a 6479<p>This target generates a
6480 <code class="filename">README.html</code> file, which can be 6480 <code class="filename">README.html</code> file, which can be
6481 viewed using a browser such as <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a> or <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/links/README.html" target="_top"><code class="filename">www/links</code></a>. The generated files 6481 viewed using a browser such as <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a> or <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/links/README.html" target="_top"><code class="filename">www/links</code></a>. The generated files
6482 contain references to any packages which are in the 6482 contain references to any packages which are in the
6483 <code class="varname">PACKAGES</code> directory on the local 6483 <code class="varname">PACKAGES</code> directory on the local
6484 host. The generated files can be made to refer to URLs 6484 host. The generated files can be made to refer to URLs
6485 based on <code class="varname">FTP_PKG_URL_HOST</code> and 6485 based on <code class="varname">FTP_PKG_URL_HOST</code> and
6486 <code class="varname">FTP_PKG_URL_DIR</code>. For example, if I 6486 <code class="varname">FTP_PKG_URL_DIR</code>. For example, if I
6487 wanted to generate <code class="filename">README.html</code> 6487 wanted to generate <code class="filename">README.html</code>
6488 files which pointed to binary packages on the local 6488 files which pointed to binary packages on the local
6489 machine, in the directory 6489 machine, in the directory
6490 <code class="filename">/usr/packages</code>, set 6490 <code class="filename">/usr/packages</code>, set
6491 <code class="varname">FTP_PKG_URL_HOST=file://localhost</code> and 6491 <code class="varname">FTP_PKG_URL_HOST=file://localhost</code> and
6492 <code class="varname">FTP_PKG_URL_DIR=/usr/packages</code>. The 6492 <code class="varname">FTP_PKG_URL_DIR=/usr/packages</code>. The
6493 <code class="varname">${PACKAGES}</code> directory and its 6493 <code class="varname">${PACKAGES}</code> directory and its
6494 subdirectories will be searched for all the binary 6494 subdirectories will be searched for all the binary
6495 packages.</p> 6495 packages.</p>
6496<p>The target can be run at the toplevel or in category 6496<p>The target can be run at the toplevel or in category
6497 directories, in which case it descends recursively.</p> 6497 directories, in which case it descends recursively.</p>
6498</dd> 6498</dd>
6499<dt><span class="term">readme-all</span></dt> 6499<dt><span class="term">readme-all</span></dt>
6500<dd><p>This is a top-level command, run it in 6500<dd><p>This is a top-level command, run it in
6501 <code class="filename">pkgsrc</code>. Use this target to create a 6501 <code class="filename">pkgsrc</code>. Use this target to create a
6502 file <code class="filename">README-all.html</code> which contains a 6502 file <code class="filename">README-all.html</code> which contains a
6503 list of all packages currently available in the NetBSD 6503 list of all packages currently available in the NetBSD
6504 Packages Collection, together with the category they belong 6504 Packages Collection, together with the category they belong
6505 to and a short description. This file is compiled from the 6505 to and a short description. This file is compiled from the
6506 <code class="filename">pkgsrc/*/README.html</code> files, so be sure 6506 <code class="filename">pkgsrc/*/README.html</code> files, so be sure
6507 to run this <span class="emphasis"><em>after</em></span> a <span class="command"><strong>make 6507 to run this <span class="emphasis"><em>after</em></span> a <span class="command"><strong>make
6508 readme</strong></span>.</p></dd> 6508 readme</strong></span>.</p></dd>
6509<dt><span class="term">cdrom-readme</span></dt> 6509<dt><span class="term">cdrom-readme</span></dt>
6510<dd><p>This is very much the same as the 6510<dd><p>This is very much the same as the
6511 <span class="quote">&#8220;<span class="quote">readme</span>&#8221;</span> target (see above), but is to be 6511 <span class="quote">&#8220;<span class="quote">readme</span>&#8221;</span> target (see above), but is to be
6512 used when generating a pkgsrc tree to be written to a 6512 used when generating a pkgsrc tree to be written to a
6513 CD-ROM. This target also produces 6513 CD-ROM. This target also produces
6514 <code class="filename">README.html</code> files, and can be made 6514 <code class="filename">README.html</code> files, and can be made
6515 to refer to URLs based on 6515 to refer to URLs based on
6516 <code class="varname">CDROM_PKG_URL_HOST</code> and 6516 <code class="varname">CDROM_PKG_URL_HOST</code> and
6517 <code class="varname">CDROM_PKG_URL_DIR</code>.</p></dd> 6517 <code class="varname">CDROM_PKG_URL_DIR</code>.</p></dd>
6518<dt><span class="term">show-distfiles</span></dt> 6518<dt><span class="term">show-distfiles</span></dt>
6519<dd><p>This target shows which distfiles and patchfiles 6519<dd><p>This target shows which distfiles and patchfiles
6520 are needed to build the package 6520 are needed to build the package
6521 (<code class="varname">ALLFILES</code>, which contains all 6521 (<code class="varname">ALLFILES</code>, which contains all
6522 <code class="varname">DISTFILES</code> and 6522 <code class="varname">DISTFILES</code> and
6523 <code class="varname">PATCHFILES</code>, but not 6523 <code class="varname">PATCHFILES</code>, but not
6524 <code class="filename">patches/*</code>).</p></dd> 6524 <code class="filename">patches/*</code>).</p></dd>
6525<dt><span class="term">show-downlevel</span></dt> 6525<dt><span class="term">show-downlevel</span></dt>
6526<dd><p>This target shows nothing if the package is not 6526<dd><p>This target shows nothing if the package is not
6527 installed. If a version of this package is installed, 6527 installed. If a version of this package is installed,
6528 but is not the version provided in this version of 6528 but is not the version provided in this version of
6529 pkgsrc, then a warning message is displayed. This target 6529 pkgsrc, then a warning message is displayed. This target
6530 can be used to show which of your installed packages are 6530 can be used to show which of your installed packages are
6531 downlevel, and so the old versions can be deleted, and 6531 downlevel, and so the old versions can be deleted, and
6532 the current ones added.</p></dd> 6532 the current ones added.</p></dd>
6533<dt><span class="term">show-pkgsrc-dir</span></dt> 6533<dt><span class="term">show-pkgsrc-dir</span></dt>
6534<dd><p>This target shows the directory in the pkgsrc 6534<dd><p>This target shows the directory in the pkgsrc
6535 hierarchy from which the package can be built and 6535 hierarchy from which the package can be built and
6536 installed. This may not be the same directory as the one 6536 installed. This may not be the same directory as the one
6537 from which the package was installed. This target is 6537 from which the package was installed. This target is
6538 intended to be used by people who may wish to upgrade 6538 intended to be used by people who may wish to upgrade
6539 many packages on a single host, and can be invoked from 6539 many packages on a single host, and can be invoked from
6540 the top-level pkgsrc Makefile by using the 6540 the top-level pkgsrc Makefile by using the
6541 <span class="quote">&#8220;<span class="quote">show-host-specific-pkgs</span>&#8221;</span> target.</p></dd> 6541 <span class="quote">&#8220;<span class="quote">show-host-specific-pkgs</span>&#8221;</span> target.</p></dd>
6542<dt><span class="term">show-installed-depends</span></dt> 6542<dt><span class="term">show-installed-depends</span></dt>
6543<dd><p>This target shows which installed packages match 6543<dd><p>This target shows which installed packages match
6544 the current package's <code class="varname">DEPENDS</code>. Useful 6544 the current package's <code class="varname">DEPENDS</code>. Useful
6545 if out of date dependencies are causing build 6545 if out of date dependencies are causing build
6546 problems.</p></dd> 6546 problems.</p></dd>
6547<dt><span class="term">print-build-depends-list</span></dt> 6547<dt><span class="term">print-build-depends-list</span></dt>
6548<dd><p>This target shows the list of packages that the current package 6548<dd><p>This target shows the list of packages that the current package
6549 depends on for building.</p></dd> 6549 depends on for building.</p></dd>
6550<dt><span class="term">print-run-depends-list</span></dt> 6550<dt><span class="term">print-run-depends-list</span></dt>
6551<dd><p>This target shows the list of packages that the current package 6551<dd><p>This target shows the list of packages that the current package
6552 depends on for running.</p></dd> 6552 depends on for running.</p></dd>
6553<dt><span class="term">check-shlibs</span></dt> 6553<dt><span class="term">check-shlibs</span></dt>
6554<dd><p>After a package is installed, check all its 6554<dd><p>After a package is installed, check all its
6555 binaries and (on ELF platforms) shared libraries to see 6555 binaries and (on ELF platforms) shared libraries to see
6556 if they find the shared libs they need. Run by default 6556 if they find the shared libs they need. Run by default
6557 if <code class="varname">PKG_DEVELOPER</code> is set in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p></dd> 6557 if <code class="varname">PKG_DEVELOPER</code> is set in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p></dd>
6558<dt><span class="term">print-PLIST</span></dt> 6558<dt><span class="term">print-PLIST</span></dt>
6559<dd> 6559<dd>
6560<p>After a <span class="quote">&#8220;<span class="quote">make install</span>&#8221;</span> from a new or 6560<p>After a <span class="quote">&#8220;<span class="quote">make install</span>&#8221;</span> from a new or
6561 upgraded pkg, this prints out an attempt to generate a 6561 upgraded pkg, this prints out an attempt to generate a
6562 new <code class="filename">PLIST</code> from a <span class="command"><strong>find 6562 new <code class="filename">PLIST</code> from a <span class="command"><strong>find
6563 -newer work/.extract_done</strong></span>. An attempt is made 6563 -newer work/.extract_done</strong></span>. An attempt is made
6564 to care for shared libs etc., but it is 6564 to care for shared libs etc., but it is
6565 <span class="emphasis"><em>strongly</em></span> recommended to review the 6565 <span class="emphasis"><em>strongly</em></span> recommended to review the
6566 result before putting it into 6566 result before putting it into
6567 <code class="filename">PLIST</code>. On upgrades, it's useful to 6567 <code class="filename">PLIST</code>. On upgrades, it's useful to
6568 diff the output of this command against an already 6568 diff the output of this command against an already
6569 existing <code class="filename">PLIST</code> file.</p> 6569 existing <code class="filename">PLIST</code> file.</p>
6570<p>If the package installs files via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?tar+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a> or 6570<p>If the package installs files via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?tar+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a> or
6571 other methods that don't update file access times, be 6571 other methods that don't update file access times, be
6572 sure to add these files manually to your 6572 sure to add these files manually to your
6573 <code class="filename">PLIST</code>, as the <span class="quote">&#8220;<span class="quote">find 6573 <code class="filename">PLIST</code>, as the <span class="quote">&#8220;<span class="quote">find
6574 -newer</span>&#8221;</span> command used by this target won't catch 6574 -newer</span>&#8221;</span> command used by this target won't catch
6575 them!</p> 6575 them!</p>
6576<p>See <a class="xref" href="#print-PLIST" title="13.3. Tweaking output of make print-PLIST">Section 13.3, &#8220;Tweaking output of <span class="command"><strong>make print-PLIST</strong></span>&#8221;</a> for more 6576<p>See <a class="xref" href="#print-PLIST" title="13.3. Tweaking output of make print-PLIST">Section 13.3, &#8220;Tweaking output of <span class="command"><strong>make print-PLIST</strong></span>&#8221;</a> for more
6577 information on this target.</p> 6577 information on this target.</p>
6578</dd> 6578</dd>
6579<dt><span class="term">bulk-package</span></dt> 6579<dt><span class="term">bulk-package</span></dt>
6580<dd> 6580<dd>
6581<p>Used to do bulk builds. If an appropriate binary 6581<p>Used to do bulk builds. If an appropriate binary
6582 package already exists, no action is taken. If not, this 6582 package already exists, no action is taken. If not, this
6583 target will compile, install and package it (and its 6583 target will compile, install and package it (and its
6584 depends, if <code class="varname">PKG_DEPENDS</code> is set 6584 depends, if <code class="varname">PKG_DEPENDS</code> is set
6585 properly. See <a class="xref" href="#bulk" title="Chapter 7. Creating binary packages for everything in pkgsrc (bulk builds)">Chapter 7, <i>Creating binary packages for everything in pkgsrc (bulk 6585 properly. See <a class="xref" href="#bulk" title="Chapter 7. Creating binary packages for everything in pkgsrc (bulk builds)">Chapter 7, <i>Creating binary packages for everything in pkgsrc (bulk
6586builds)</i></a>). 6586builds)</i></a>).
6587 After creating the binary package, the sources, the 6587 After creating the binary package, the sources, the
6588 just-installed package and its required packages are 6588 just-installed package and its required packages are
6589 removed, preserving free disk space.</p> 6589 removed, preserving free disk space.</p>
6590<p><span class="emphasis"><em>Beware that this target may deinstall 6590<p><span class="emphasis"><em>Beware that this target may deinstall
6591 all packages installed on a system!</em></span></p> 6591 all packages installed on a system!</em></span></p>
6592</dd> 6592</dd>
6593<dt><span class="term">bulk-install</span></dt> 6593<dt><span class="term">bulk-install</span></dt>
6594<dd> 6594<dd>
6595<p>Used during bulk-installs to install required 6595<p>Used during bulk-installs to install required
6596 packages. If an up-to-date binary package is available, 6596 packages. If an up-to-date binary package is available,
6597 it will be installed via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. If not, 6597 it will be installed via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. If not,
6598 <span class="command"><strong>make bulk-package</strong></span> will be executed, 6598 <span class="command"><strong>make bulk-package</strong></span> will be executed,
6599 but the installed binary won't be removed.</p> 6599 but the installed binary won't be removed.</p>
6600<p>A binary package is considered 6600<p>A binary package is considered
6601 <span class="quote">&#8220;<span class="quote">up-to-date</span>&#8221;</span> to be installed via 6601 <span class="quote">&#8220;<span class="quote">up-to-date</span>&#8221;</span> to be installed via
6602 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> if:</p> 6602 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> if:</p>
6603<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6603<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6604<li class="listitem"><p>None of the package's files 6604<li class="listitem"><p>None of the package's files
6605 (<code class="filename">Makefile</code>, ...) were modified 6605 (<code class="filename">Makefile</code>, ...) were modified
6606 since it was built.</p></li> 6606 since it was built.</p></li>
6607<li class="listitem"><p>None of the package's required (binary) 6607<li class="listitem"><p>None of the package's required (binary)
6608 packages were modified since it was built.</p></li> 6608 packages were modified since it was built.</p></li>
6609</ul></div> 6609</ul></div>
6610<p><span class="emphasis"><em>Beware that this target may deinstall 6610<p><span class="emphasis"><em>Beware that this target may deinstall
6611 all packages installed on a system!</em></span></p> 6611 all packages installed on a system!</em></span></p>
6612</dd> 6612</dd>
6613</dl></div> 6613</dl></div>
6614</div> 6614</div>
6615</div> 6615</div>
6616<div class="chapter"> 6616<div class="chapter">
6617<div class="titlepage"><div><div><h2 class="title"> 6617<div class="titlepage"><div><div><h2 class="title">
6618<a name="tools"></a>Chapter 18. Tools needed for building or running</h2></div></div></div> 6618<a name="tools"></a>Chapter 18. Tools needed for building or running</h2></div></div></div>
6619<div class="toc"> 6619<div class="toc">
6620<p><b>Table of Contents</b></p> 6620<p><b>Table of Contents</b></p>
6621<dl class="toc"> 6621<dl class="toc">
6622<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt> 6622<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt>
6623<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt> 6623<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt>
6624<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt> 6624<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt>
6625</dl> 6625</dl>
6626</div> 6626</div>
6627<p>The <code class="varname">USE_TOOLS</code> definition is used both internally 6627<p>The <code class="varname">USE_TOOLS</code> definition is used both internally
6628by pkgsrc and also for individual packages to define what commands 6628by pkgsrc and also for individual packages to define what commands
6629are needed for building a package (like <code class="varname">BUILD_DEPENDS</code>) 6629are needed for building a package (like <code class="varname">BUILD_DEPENDS</code>)
6630or for later run-time of an installed packaged (such as 6630or for later run-time of an installed packaged (such as
6631<code class="varname">DEPENDS</code>). 6631<code class="varname">DEPENDS</code>).
6632If the native system provides an adequate tool, then in many cases, a pkgsrc 6632If the native system provides an adequate tool, then in many cases, a pkgsrc
6633package will not be used.</p> 6633package will not be used.</p>
6634<p>When building a package, the replacement tools are 6634<p>When building a package, the replacement tools are
6635made available in a directory (as symlinks or wrapper scripts) 6635made available in a directory (as symlinks or wrapper scripts)
6636that is early in the executable search path. Just like the buildlink 6636that is early in the executable search path. Just like the buildlink
6637system, this helps with consistent builds.</p> 6637system, this helps with consistent builds.</p>
6638<p>A tool may be needed to help build a specific package. For example, 6638<p>A tool may be needed to help build a specific package. For example,
6639perl, GNU make (gmake) or yacc may be needed.</p> 6639perl, GNU make (gmake) or yacc may be needed.</p>
6640<p>Also a tool may be needed, for example, because the native system's supplied 6640<p>Also a tool may be needed, for example, because the native system's supplied
6641tool may be inefficient for building a package with pkgsrc. 6641tool may be inefficient for building a package with pkgsrc.
6642For example, a package may need GNU awk, bison (instead of 6642For example, a package may need GNU awk, bison (instead of
6643yacc) or a better sed.</p> 6643yacc) or a better sed.</p>
6644<p>The tools used by a package can be listed by running 6644<p>The tools used by a package can be listed by running
6645<span class="command"><strong>make show-tools</strong></span>.</p> 6645<span class="command"><strong>make show-tools</strong></span>.</p>
6646<div class="sect1"> 6646<div class="sect1">
6647<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6647<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6648<a name="pkgsrc-tools"></a>18.1. Tools for pkgsrc builds</h2></div></div></div> 6648<a name="pkgsrc-tools"></a>18.1. Tools for pkgsrc builds</h2></div></div></div>
6649<p>The default set of tools used by pkgsrc is defined in 6649<p>The default set of tools used by pkgsrc is defined in
6650<code class="filename">bsd.pkg.mk</code>. This includes standard Unix tools, 6650<code class="filename">bsd.pkg.mk</code>. This includes standard Unix tools,
6651such as: <span class="command"><strong>cat</strong></span>, <span class="command"><strong>awk</strong></span>, 6651such as: <span class="command"><strong>cat</strong></span>, <span class="command"><strong>awk</strong></span>,
6652<span class="command"><strong>chmod</strong></span>, <span class="command"><strong>test</strong></span>, and so on. 6652<span class="command"><strong>chmod</strong></span>, <span class="command"><strong>test</strong></span>, and so on.
6653These can be seen by running: 6653These can be seen by running:
6654<span class="command"><strong>make show-var VARNAME=USE_TOOLS</strong></span>.</p> 6654<span class="command"><strong>make show-var VARNAME=USE_TOOLS</strong></span>.</p>
6655<p>If a package needs a specific program to build 6655<p>If a package needs a specific program to build
6656then the <code class="varname">USE_TOOLS</code> variable can be used 6656then the <code class="varname">USE_TOOLS</code> variable can be used
6657to define the tools needed.</p> 6657to define the tools needed.</p>
6658</div> 6658</div>
6659<div class="sect1"> 6659<div class="sect1">
6660<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6660<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6661<a name="package-tools"></a>18.2. Tools needed by packages</h2></div></div></div> 6661<a name="package-tools"></a>18.2. Tools needed by packages</h2></div></div></div>
6662<p>In the following examples, the :run means that it is needed at 6662<p>In the following examples, the :run means that it is needed at
6663run-time (and becomes a DEPENDS). 6663run-time (and becomes a DEPENDS).
6664The default is a build dependency which can be set with 6664The default is a build dependency which can be set with
6665:build. (So in this example, it is the same as gmake:build 6665:build. (So in this example, it is the same as gmake:build
6666and pkg-config:build.)</p> 6666and pkg-config:build.)</p>
6667<pre class="programlisting"> 6667<pre class="programlisting">
6668USE_TOOLS+= gmake perl:run pkg-config 6668USE_TOOLS+= gmake perl:run pkg-config
6669</pre> 6669</pre>
6670<p>When using the tools framework, a 6670<p>When using the tools framework, a
6671<code class="varname">TOOLS_PATH.foo</code> variable is defined 6671<code class="varname">TOOLS_PATH.foo</code> variable is defined
6672which contains the full path to the appropriate tool. For example, 6672which contains the full path to the appropriate tool. For example,
6673<code class="varname">TOOLS_PATH.bash</code> could be <span class="quote">&#8220;<span class="quote">/bin/bash</span>&#8221;</span> 6673<code class="varname">TOOLS_PATH.bash</code> could be <span class="quote">&#8220;<span class="quote">/bin/bash</span>&#8221;</span>
6674on Linux systems.</p> 6674on Linux systems.</p>
6675<p>If you always need a pkgsrc version of the 6675<p>If you always need a pkgsrc version of the
6676tool at run-time, then just use <code class="varname">DEPENDS</code> instead. 6676tool at run-time, then just use <code class="varname">DEPENDS</code> instead.
6677</p> 6677</p>
6678</div> 6678</div>
6679<div class="sect1"> 6679<div class="sect1">
6680<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6680<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6681<a name="platform-tools"></a>18.3. Tools provided by platforms</h2></div></div></div> 6681<a name="platform-tools"></a>18.3. Tools provided by platforms</h2></div></div></div>
6682<p>When improving or porting pkgsrc to a new platform, have a look 6682<p>When improving or porting pkgsrc to a new platform, have a look
6683at (or create) the corresponding platform specific make file fragment under 6683at (or create) the corresponding platform specific make file fragment under
6684<code class="filename">pkgsrc/mk/tools/tools.${OPSYS}.mk</code> which defines 6684<code class="filename">pkgsrc/mk/tools/tools.${OPSYS}.mk</code> which defines
6685the name of the common tools. For example:</p> 6685the name of the common tools. For example:</p>
6686<pre class="programlisting"> 6686<pre class="programlisting">
6687.if exists(/usr/bin/bzcat) 6687.if exists(/usr/bin/bzcat)
6688TOOLS_PLATFORM.bzcat?= /usr/bin/bzcat 6688TOOLS_PLATFORM.bzcat?= /usr/bin/bzcat
6689.elif exists(/usr/bin/bzip2) 6689.elif exists(/usr/bin/bzip2)
6690TOOLS_PLATFORM.bzcat?= /usr/bin/bzip2 -cd 6690TOOLS_PLATFORM.bzcat?= /usr/bin/bzip2 -cd
6691.endif 6691.endif
6692 6692
6693TOOLS_PLATFORM.true?= true # shell builtin 6693TOOLS_PLATFORM.true?= true # shell builtin
6694</pre> 6694</pre>
6695</div> 6695</div>
6696</div> 6696</div>
6697<div class="chapter"> 6697<div class="chapter">
6698<div class="titlepage"><div><div><h2 class="title"> 6698<div class="titlepage"><div><div><h2 class="title">
6699<a name="fixes"></a>Chapter 19. Making your package work</h2></div></div></div> 6699<a name="fixes"></a>Chapter 19. Making your package work</h2></div></div></div>
6700<div class="toc"> 6700<div class="toc">
6701<p><b>Table of Contents</b></p> 6701<p><b>Table of Contents</b></p>
6702<dl class="toc"> 6702<dl class="toc">
6703<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt> 6703<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt>
6704<dd><dl> 6704<dd><dl>
6705<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.1. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt> 6705<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.1. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt>
6706<dt><span class="sect2"><a href="#user-interaction">19.1.2. User interaction</a></span></dt> 6706<dt><span class="sect2"><a href="#user-interaction">19.1.2. User interaction</a></span></dt>
6707<dt><span class="sect2"><a href="#handling-licenses">19.1.3. Handling licenses</a></span></dt> 6707<dt><span class="sect2"><a href="#handling-licenses">19.1.3. Handling licenses</a></span></dt>
6708<dt><span class="sect2"><a href="#restricted-packages">19.1.4. Restricted packages</a></span></dt> 6708<dt><span class="sect2"><a href="#restricted-packages">19.1.4. Restricted packages</a></span></dt>
6709<dt><span class="sect2"><a href="#dependencies">19.1.5. Handling dependencies</a></span></dt> 6709<dt><span class="sect2"><a href="#dependencies">19.1.5. Handling dependencies</a></span></dt>
6710<dt><span class="sect2"><a href="#conflicts">19.1.6. Handling conflicts with other packages</a></span></dt> 6710<dt><span class="sect2"><a href="#conflicts">19.1.6. Handling conflicts with other packages</a></span></dt>
6711<dt><span class="sect2"><a href="#not-building-packages">19.1.7. Packages that cannot or should not be built</a></span></dt> 6711<dt><span class="sect2"><a href="#not-building-packages">19.1.7. Packages that cannot or should not be built</a></span></dt>
6712<dt><span class="sect2"><a href="#undeletable-packages">19.1.8. Packages which should not be deleted, once installed</a></span></dt> 6712<dt><span class="sect2"><a href="#undeletable-packages">19.1.8. Packages which should not be deleted, once installed</a></span></dt>
6713<dt><span class="sect2"><a href="#security-handling">19.1.9. Handling packages with security problems</a></span></dt> 6713<dt><span class="sect2"><a href="#security-handling">19.1.9. Handling packages with security problems</a></span></dt>
6714<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.10. How to handle incrementing versions when fixing an existing package</a></span></dt> 6714<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.10. How to handle incrementing versions when fixing an existing package</a></span></dt>
6715<dt><span class="sect2"><a href="#fixes.subst">19.1.11. Substituting variable text in the package files (the SUBST framework)</a></span></dt> 6715<dt><span class="sect2"><a href="#fixes.subst">19.1.11. Substituting variable text in the package files (the SUBST framework)</a></span></dt>
6716</dl></dd> 6716</dl></dd>
6717<dt><span class="sect1"><a href="#fixes.fetch">19.2. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 6717<dt><span class="sect1"><a href="#fixes.fetch">19.2. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
6718<dd><dl> 6718<dd><dl>
6719<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt> 6719<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt>
6720<dt><span class="sect2"><a href="#modified-distfiles-same-name">19.2.2. How to handle modified distfiles with the 'old' name</a></span></dt> 6720<dt><span class="sect2"><a href="#modified-distfiles-same-name">19.2.2. How to handle modified distfiles with the 'old' name</a></span></dt>
6721<dt><span class="sect2"><a href="#build.fetch.github">19.2.3. Packages hosted on github.com</a></span></dt> 6721<dt><span class="sect2"><a href="#build.fetch.github">19.2.3. Packages hosted on github.com</a></span></dt>
6722</dl></dd> 6722</dl></dd>
6723<dt><span class="sect1"><a href="#fixes.configure">19.3. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 6723<dt><span class="sect1"><a href="#fixes.configure">19.3. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
6724<dd><dl> 6724<dd><dl>
6725<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt> 6725<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt>
6726<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt> 6726<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt>
6727<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt> 6727<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt>
6728</dl></dd> 6728</dl></dd>
6729<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt> 6729<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt>
6730<dd><dl> 6730<dd><dl>
6731<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt> 6731<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt>
6732<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt> 6732<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt>
6733<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt> 6733<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt>
6734<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt> 6734<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt>
6735<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt> 6735<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt>
6736</dl></dd> 6736</dl></dd>
6737<dt><span class="sect1"><a href="#fixes.build">19.5. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 6737<dt><span class="sect1"><a href="#fixes.build">19.5. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
6738<dd><dl> 6738<dd><dl>
6739<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt> 6739<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt>
6740<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt> 6740<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt>
6741<dt><span class="sect2"><a href="#undefined-reference">19.5.3. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span></a></span></dt> 6741<dt><span class="sect2"><a href="#undefined-reference">19.5.3. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span></a></span></dt>
6742<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt> 6742<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt>
6743</dl></dd> 6743</dl></dd>
6744<dt><span class="sect1"><a href="#fixes.install">19.6. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 6744<dt><span class="sect1"><a href="#fixes.install">19.6. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
6745<dd><dl> 6745<dd><dl>
6746<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt> 6746<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt>
6747<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt> 6747<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt>
6748<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt> 6748<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt>
6749<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt> 6749<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt>
6750<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt> 6750<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt>
6751<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt> 6751<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt>
6752<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt> 6752<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt>
6753<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt> 6753<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt>
6754<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt> 6754<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt>
6755<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt> 6755<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt>
6756<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt> 6756<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt>
6757<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt> 6757<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt>
6758<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt> 6758<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt>
6759<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt> 6759<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt>
6760<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt> 6760<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt>
6761<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt> 6761<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt>
6762<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt> 6762<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt>
6763<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in 6763<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in
6764 emulation</a></span></dt> 6764 emulation</a></span></dt>
6765<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt> 6765<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt>
6766<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt> 6766<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt>
6767</dl></dd> 6767</dl></dd>
6768<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt> 6768<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt>
6769</dl> 6769</dl>
6770</div> 6770</div>
6771<div class="sect1"> 6771<div class="sect1">
6772<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6772<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6773<a name="general-operation"></a>19.1. General operation</h2></div></div></div> 6773<a name="general-operation"></a>19.1. General operation</h2></div></div></div>
6774<p>One appealing feature of pkgsrc is that it runs on many 6774<p>One appealing feature of pkgsrc is that it runs on many
6775 different platforms. As a result, it is important to ensure, 6775 different platforms. As a result, it is important to ensure,
6776 where possible, that packages in pkgsrc are portable. This 6776 where possible, that packages in pkgsrc are portable. This
6777 chapter mentions some particular details you should pay 6777 chapter mentions some particular details you should pay
6778 attention to while working on pkgsrc.</p> 6778 attention to while working on pkgsrc.</p>
6779<div class="sect2"> 6779<div class="sect2">
6780<div class="titlepage"><div><div><h3 class="title"> 6780<div class="titlepage"><div><div><h3 class="title">
6781<a name="pulling-vars-from-etc-mk.conf"></a>19.1.1. How to pull in user-settable variables from <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> 6781<a name="pulling-vars-from-etc-mk.conf"></a>19.1.1. How to pull in user-settable variables from <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>
6782</h3></div></div></div> 6782</h3></div></div></div>
6783<p>The pkgsrc user can configure pkgsrc by overriding several 6783<p>The pkgsrc user can configure pkgsrc by overriding several
6784 variables in the file pointed to by <code class="varname">MAKECONF</code>, 6784 variables in the file pointed to by <code class="varname">MAKECONF</code>,
6785 which is <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> by default. When you 6785 which is <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> by default. When you
6786 want to use those variables in the preprocessor directives of 6786 want to use those variables in the preprocessor directives of
6787 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> (for example <code class="literal">.if</code> or 6787 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> (for example <code class="literal">.if</code> or
6788 <code class="literal">.for</code>), you need to include the file 6788 <code class="literal">.for</code>), you need to include the file
6789 <code class="filename">../../mk/bsd.prefs.mk</code> before, which in turn 6789 <code class="filename">../../mk/bsd.prefs.mk</code> before, which in turn
6790 loads the user preferences.</p> 6790 loads the user preferences.</p>
6791<p>But note that some variables may not be completely defined 6791<p>But note that some variables may not be completely defined
6792 after <code class="filename">../../mk/bsd.prefs.mk</code> has been 6792 after <code class="filename">../../mk/bsd.prefs.mk</code> has been
6793 included, as they may contain references to variables that are 6793 included, as they may contain references to variables that are
6794 not yet defined. In shell commands (the lines in 6794 not yet defined. In shell commands (the lines in
6795 <code class="filename">Makefile</code> that are indented with a tab) this 6795 <code class="filename">Makefile</code> that are indented with a tab) this
6796 is no problem, since variables are only expanded when they are 6796 is no problem, since variables are only expanded when they are
6797 used. But in the preprocessor directives mentioned above and in 6797 used. But in the preprocessor directives mentioned above and in
6798 dependency lines (of the form <code class="literal">target: 6798 dependency lines (of the form <code class="literal">target:
6799 dependencies</code>) the variables are expanded at load 6799 dependencies</code>) the variables are expanded at load
6800 time.</p> 6800 time.</p>
6801<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 6801<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
6802<h3 class="title">Note</h3> 6802<h3 class="title">Note</h3>
6803<p>To check whether a variable can be used at load time, 6803<p>To check whether a variable can be used at load time,
6804 run <span class="command"><strong>pkglint -Wall</strong></span> on your package.</p> 6804 run <span class="command"><strong>pkglint -Wall</strong></span> on your package.</p>
6805</div> 6805</div>
6806</div> 6806</div>
6807<div class="sect2"> 6807<div class="sect2">
6808<div class="titlepage"><div><div><h3 class="title"> 6808<div class="titlepage"><div><div><h3 class="title">
6809<a name="user-interaction"></a>19.1.2. User interaction</h3></div></div></div> 6809<a name="user-interaction"></a>19.1.2. User interaction</h3></div></div></div>
6810<p>Occasionally, packages require interaction from the user, 6810<p>Occasionally, packages require interaction from the user,
6811 and this can be in a number of ways:</p> 6811 and this can be in a number of ways:</p>
6812<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6812<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6813<li class="listitem"><p>When fetching the distfiles, some packages require user 6813<li class="listitem"><p>When fetching the distfiles, some packages require user
6814 interaction such as entering username/password or accepting a 6814 interaction such as entering username/password or accepting a
6815 license on a web page.</p></li> 6815 license on a web page.</p></li>
6816<li class="listitem"><p>When extracting the distfiles, some packages may ask for 6816<li class="listitem"><p>When extracting the distfiles, some packages may ask for
6817 passwords.</p></li> 6817 passwords.</p></li>
6818<li class="listitem"><p>help to configure the package before it is built</p></li> 6818<li class="listitem"><p>help to configure the package before it is built</p></li>
6819<li class="listitem"><p>help during the build process</p></li> 6819<li class="listitem"><p>help during the build process</p></li>
6820<li class="listitem"><p>help during the installation of a package</p></li> 6820<li class="listitem"><p>help during the installation of a package</p></li>
6821</ul></div> 6821</ul></div>
6822<p>A package can set the <code class="varname">INTERACTIVE_STAGE</code> 6822<p>A package can set the <code class="varname">INTERACTIVE_STAGE</code>
6823 variable to define which stages need interaction. This should be 6823 variable to define which stages need interaction. This should be
6824 done in the package's <code class="filename">Makefile</code>, e.g.:</p> 6824 done in the package's <code class="filename">Makefile</code>, e.g.:</p>
6825<pre class="programlisting"> 6825<pre class="programlisting">
6826INTERACTIVE_STAGE= configure install 6826INTERACTIVE_STAGE= configure install
6827</pre> 6827</pre>
6828<p>The user can then decide to skip this package by setting the 6828<p>The user can then decide to skip this package by setting the
6829 <code class="varname">BATCH</code> variable. Packages that require interaction 6829 <code class="varname">BATCH</code> variable. Packages that require interaction
6830 are also excluded from bulk builds.</p> 6830 are also excluded from bulk builds.</p>
6831</div> 6831</div>
6832<div class="sect2"> 6832<div class="sect2">
6833<div class="titlepage"><div><div><h3 class="title"> 6833<div class="titlepage"><div><div><h3 class="title">
6834<a name="handling-licenses"></a>19.1.3. Handling licenses</h3></div></div></div> 6834<a name="handling-licenses"></a>19.1.3. Handling licenses</h3></div></div></div>
6835<p>Authors of software can choose the licence under which software 6835<p>Authors of software can choose the licence under which software
6836 can be copied. The Free Software Foundation has declared some 6836 can be copied. The Free Software Foundation has declared some
6837 licenses "Free", and the Open Source Initiative has a definition of 6837 licenses "Free", and the Open Source Initiative has a definition of
6838 "Open Source".</p> 6838 "Open Source".</p>
6839<p>By default, pkgsrc allows packages with Free or Open Source 6839<p>By default, pkgsrc allows packages with Free or Open Source
6840 licenses to be built. To allow packages with other licenses to be 6840 licenses to be built. To allow packages with other licenses to be
6841 built as well, the pkgsrc user needs to add these licenses to the 6841 built as well, the pkgsrc user needs to add these licenses to the
6842 <code class="varname">ACCEPTABLE_LICENSES</code> variable in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. Note 6842 <code class="varname">ACCEPTABLE_LICENSES</code> variable in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. Note
6843 that this variable only affects which packages may be 6843 that this variable only affects which packages may be
6844 <span class="emphasis"><em>built</em></span>, while the license terms often also 6844 <span class="emphasis"><em>built</em></span>, while the license terms often also
6845 restrict the actual use of the package and its redistribution.</p> 6845 restrict the actual use of the package and its redistribution.</p>
6846<p>One might want to only install packages with a BSD license, 6846<p>One might want to only install packages with a BSD license,
6847 or the GPL, and not the other. The free licenses are added to the 6847 or the GPL, and not the other. The free licenses are added to the
6848 default <code class="varname">ACCEPTABLE_LICENSES</code> variable. The pkgsrc 6848 default <code class="varname">ACCEPTABLE_LICENSES</code> variable. The pkgsrc
6849 user can override the default by setting the 6849 user can override the default by setting the
6850 <code class="varname">ACCEPTABLE_LICENSES</code> variable with "=" instead 6850 <code class="varname">ACCEPTABLE_LICENSES</code> variable with "=" instead
6851 of "+=". The licenses accepted by default are defined in the 6851 of "+=". The licenses accepted by default are defined in the
6852 <code class="varname">DEFAULT_ACCEPTABLE_LICENSES</code> variable in the file 6852 <code class="varname">DEFAULT_ACCEPTABLE_LICENSES</code> variable in the file
6853 <code class="filename">pkgsrc/mk/license.mk</code>.</p> 6853 <code class="filename">pkgsrc/mk/license.mk</code>.</p>
6854<p>The license tag mechanism is intended to address 6854<p>The license tag mechanism is intended to address
6855 copyright-related issues surrounding building, installing and 6855 copyright-related issues surrounding building, installing and
6856 using a package, and not to address redistribution issues (see 6856 using a package, and not to address redistribution issues (see
6857 <code class="varname">RESTRICTED</code> and 6857 <code class="varname">RESTRICTED</code> and
6858 <code class="varname">NO_SRC_ON_FTP</code>, etc.). 6858 <code class="varname">NO_SRC_ON_FTP</code>, etc.).
6859 Packages with redistribution restrictions should set these 6859 Packages with redistribution restrictions should set these
6860 tags.</p> 6860 tags.</p>
6861<p>Denoting that a package may be copied according to a 6861<p>Denoting that a package may be copied according to a
6862 particular license is done by placing the license in 6862 particular license is done by placing the license in
6863 <code class="filename">pkgsrc/licenses</code> and setting the 6863 <code class="filename">pkgsrc/licenses</code> and setting the
6864 <code class="varname">LICENSE</code> variable to a string identifying the 6864 <code class="varname">LICENSE</code> variable to a string identifying the
6865 license, e.g. in <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/graphics/xv/README.html" target="_top"><code class="filename">graphics/xv</code></a>:</p> 6865 license, e.g. in <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/graphics/xv/README.html" target="_top"><code class="filename">graphics/xv</code></a>:</p>
6866<pre class="programlisting"> 6866<pre class="programlisting">
6867LICENSE= xv-license 6867LICENSE= xv-license
6868</pre> 6868</pre>
6869<p>When trying to build, the user will get a notice that the 6869<p>When trying to build, the user will get a notice that the
6870 package is covered by a license which has not been placed in the 6870 package is covered by a license which has not been placed in the
6871 <code class="varname">ACCEPTABLE_LICENSES</code> variable:</p> 6871 <code class="varname">ACCEPTABLE_LICENSES</code> variable:</p>
6872<pre class="programlisting"> 6872<pre class="programlisting">
6873<code class="prompt">%</code> <strong class="userinput"><code>make</code></strong> 6873<code class="prompt">%</code> <strong class="userinput"><code>make</code></strong>
6874===&gt; xv-3.10anb9 has an unacceptable license: xv-license. 6874===&gt; xv-3.10anb9 has an unacceptable license: xv-license.
6875===&gt; To view the license, enter "/usr/bin/make show-license". 6875===&gt; To view the license, enter "/usr/bin/make show-license".
6876===&gt; To indicate acceptance, add this line to your /etc/mk.conf: 6876===&gt; To indicate acceptance, add this line to your /etc/mk.conf:
6877===&gt; ACCEPTABLE_LICENSES+=xv-license 6877===&gt; ACCEPTABLE_LICENSES+=xv-license
6878*** Error code 1 6878*** Error code 1
6879</pre> 6879</pre>
6880<p>The license can be viewed with <span class="command"><strong>make 6880<p>The license can be viewed with <span class="command"><strong>make
6881 show-license</strong></span>, and if the user so chooses, the line 6881 show-license</strong></span>, and if the user so chooses, the line
6882 printed above can be added to <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to 6882 printed above can be added to <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to
6883 convey to pkgsrc that it should not in the future fail because of 6883 convey to pkgsrc that it should not in the future fail because of
6884 that license:</p> 6884 that license:</p>
6885<pre class="programlisting"> 6885<pre class="programlisting">
6886ACCEPTABLE_LICENSES+=xv-license 6886ACCEPTABLE_LICENSES+=xv-license
6887</pre> 6887</pre>
6888<p>The use of <code class="varname">LICENSE=shareware</code>, 6888<p>The use of <code class="varname">LICENSE=shareware</code>,
6889 <code class="varname">LICENSE=no-commercial-use</code>, and similar language 6889 <code class="varname">LICENSE=no-commercial-use</code>, and similar language
6890 is deprecated because it does not crisply refer to a particular 6890 is deprecated because it does not crisply refer to a particular
6891 license text. Another problem with such usage is that it does not 6891 license text. Another problem with such usage is that it does not
6892 enable a user to tell pkgsrc to proceed for a single package 6892 enable a user to tell pkgsrc to proceed for a single package
6893 without also telling pkgsrc to proceed for all packages with that 6893 without also telling pkgsrc to proceed for all packages with that
6894 tag.</p> 6894 tag.</p>
6895<div class="sect3"> 6895<div class="sect3">
6896<div class="titlepage"><div><div><h4 class="title"> 6896<div class="titlepage"><div><div><h4 class="title">
6897<a name="new-license"></a>19.1.3.1. Adding a package with a new license</h4></div></div></div> 6897<a name="new-license"></a>19.1.3.1. Adding a package with a new license</h4></div></div></div>
6898<p>When adding a package with a new license, the following steps 6898<p>When adding a package with a new license, the following steps
6899 are required:</p> 6899 are required:</p>
6900<div class="orderedlist"><ol class="orderedlist" type="1"> 6900<div class="orderedlist"><ol class="orderedlist" type="1">
6901<li class="listitem"> 6901<li class="listitem">
6902<p>Check whether the license qualifies as Free or Open 6902<p>Check whether the license qualifies as Free or Open
6903 Source by referencing <a class="ulink" href="http://www.gnu.org/licenses/license-list.en.html" target="_top">Various Licenses 6903 Source by referencing <a class="ulink" href="http://www.gnu.org/licenses/license-list.en.html" target="_top">Various Licenses
6904 and Comments about Them</a> and <a class="ulink" href="http://opensource.org/licenses/alphabetical" target="_top">Licenses by Name | 6904 and Comments about Them</a> and <a class="ulink" href="http://opensource.org/licenses/alphabetical" target="_top">Licenses by Name |
6905 Open Source Initiative</a>. If this is the case, the filename in 6905 Open Source Initiative</a>. If this is the case, the filename in
6906 <code class="filename">pkgsrc/licenses/</code> does not need the 6906 <code class="filename">pkgsrc/licenses/</code> does not need the
6907 <code class="filename">-license</code> suffix, and the license name should be 6907 <code class="filename">-license</code> suffix, and the license name should be
6908 added to:</p> 6908 added to:</p>
6909<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6909<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6910<li class="listitem"><p>DEFAULT_ACCEPTABLE_LICENSES in <code class="filename">pkgsrc/mk/license.mk</code></p></li> 6910<li class="listitem"><p>DEFAULT_ACCEPTABLE_LICENSES in <code class="filename">pkgsrc/mk/license.mk</code></p></li>
6911<li class="listitem"><p>default_acceptable_licenses in <code class="filename">pkgsrc/pkgtools/pkg_install/files/lib/license.c</code></p></li> 6911<li class="listitem"><p>default_acceptable_licenses in <code class="filename">pkgsrc/pkgtools/pkg_install/files/lib/license.c</code></p></li>
6912</ul></div> 6912</ul></div>
6913</li> 6913</li>
6914<li class="listitem"><p>The license text should be added to <code class="filename">pkgsrc/licenses</code> for displaying. A list of known licenses can be seen in this directory.</p></li> 6914<li class="listitem"><p>The license text should be added to <code class="filename">pkgsrc/licenses</code> for displaying. A list of known licenses can be seen in this directory.</p></li>
6915</ol></div> 6915</ol></div>
6916</div> 6916</div>
6917<div class="sect3"> 6917<div class="sect3">
6918<div class="titlepage"><div><div><h4 class="title"> 6918<div class="titlepage"><div><div><h4 class="title">
6919<a name="change-license"></a>19.1.3.2. Change to the license</h4></div></div></div> 6919<a name="change-license"></a>19.1.3.2. Change to the license</h4></div></div></div>
6920<p>When the license changes (in a way other than formatting), 6920<p>When the license changes (in a way other than formatting),
6921 make sure that the new license has a different name (e.g., 6921 make sure that the new license has a different name (e.g.,
6922 append the version number if it exists, or the date). Just 6922 append the version number if it exists, or the date). Just
6923 because a user told pkgsrc to build programs under a previous 6923 because a user told pkgsrc to build programs under a previous
6924 version of a license does not mean that pkgsrc should build 6924 version of a license does not mean that pkgsrc should build
6925 programs under the new licenses. The higher-level point is that 6925 programs under the new licenses. The higher-level point is that
6926 pkgsrc does not evaluate licenses for reasonableness; the only 6926 pkgsrc does not evaluate licenses for reasonableness; the only
6927 test is a mechanistic test of whether a particular text has been 6927 test is a mechanistic test of whether a particular text has been
6928 approved by either of two bodies (FSF or OSI).</p> 6928 approved by either of two bodies (FSF or OSI).</p>
6929</div> 6929</div>
6930</div> 6930</div>
6931<div class="sect2"> 6931<div class="sect2">
6932<div class="titlepage"><div><div><h3 class="title"> 6932<div class="titlepage"><div><div><h3 class="title">
6933<a name="restricted-packages"></a>19.1.4. Restricted packages</h3></div></div></div> 6933<a name="restricted-packages"></a>19.1.4. Restricted packages</h3></div></div></div>
6934<p>Some licenses restrict how software may be re-distributed. 6934<p>Some licenses restrict how software may be re-distributed.
6935 By declaring the restrictions, package tools can 6935 By declaring the restrictions, package tools can
6936 automatically refrain from e.g. placing binary packages on FTP 6936 automatically refrain from e.g. placing binary packages on FTP
6937 sites.</p> 6937 sites.</p>
6938<p>There are four possible restrictions, which are 6938<p>There are four possible restrictions, which are
6939 the cross product of sources (distfiles) and binaries not being 6939 the cross product of sources (distfiles) and binaries not being
6940 placed on FTP sites and CD-ROMs. Because this is rarely the exact 6940 placed on FTP sites and CD-ROMs. Because this is rarely the exact
6941 language in any license, and because non-Free licenses tend to be 6941 language in any license, and because non-Free licenses tend to be
6942 different from each other, pkgsrc adopts a definition of FTP and 6942 different from each other, pkgsrc adopts a definition of FTP and
6943 CD-ROM. 6943 CD-ROM.
6944 6944
6945 "FTP" means making the source or binary file available over the 6945 "FTP" means making the source or binary file available over the
6946 Internet at no charge. 6946 Internet at no charge.
6947 6947
6948 "CD-ROM" means making the source or binary available on some kind of 6948 "CD-ROM" means making the source or binary available on some kind of
6949 media, together with other source and binary packages, which is sold 6949 media, together with other source and binary packages, which is sold
6950 for a distribution charge. 6950 for a distribution charge.
6951 </p> 6951 </p>
6952<p>In order to encode these restrictions, the package system 6952<p>In order to encode these restrictions, the package system
6953 defines five make variables that can be set to note these 6953 defines five make variables that can be set to note these
6954 restrictions:</p> 6954 restrictions:</p>
6955<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6955<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6956<li class="listitem"> 6956<li class="listitem">
6957<p><code class="varname">RESTRICTED</code></p> 6957<p><code class="varname">RESTRICTED</code></p>
6958<p>This variable should be set whenever a restriction 6958<p>This variable should be set whenever a restriction
6959 exists (regardless of its kind). Set this variable to a 6959 exists (regardless of its kind). Set this variable to a
6960 string containing the reason for the restriction. It should 6960 string containing the reason for the restriction. It should
6961 be understood that those wanting to understand the restriction 6961 be understood that those wanting to understand the restriction
6962 will have to read the license, and perhaps seek advice of 6962 will have to read the license, and perhaps seek advice of
6963 counsel.</p> 6963 counsel.</p>
6964</li> 6964</li>
6965<li class="listitem"> 6965<li class="listitem">
6966<p><code class="varname">NO_BIN_ON_CDROM</code></p> 6966<p><code class="varname">NO_BIN_ON_CDROM</code></p>
6967<p>Binaries may not be placed on CD-ROM containing other 6967<p>Binaries may not be placed on CD-ROM containing other
6968 binary packages, for which a distribution charge may be made. 6968 binary packages, for which a distribution charge may be made.
6969 In this case, set this variable to 6969 In this case, set this variable to
6970 <code class="varname">${RESTRICTED}</code>.</p> 6970 <code class="varname">${RESTRICTED}</code>.</p>
6971</li> 6971</li>
6972<li class="listitem"> 6972<li class="listitem">
6973<p><code class="varname">NO_BIN_ON_FTP</code></p> 6973<p><code class="varname">NO_BIN_ON_FTP</code></p>
6974<p>Binaries may not made available on the Internet without 6974<p>Binaries may not made available on the Internet without
6975 charge. In this case, set this variable to 6975 charge. In this case, set this variable to
6976 <code class="varname">${RESTRICTED}</code>. If this variable is set, 6976 <code class="varname">${RESTRICTED}</code>. If this variable is set,
6977 binary packages will not be included on ftp.NetBSD.org.</p> 6977 binary packages will not be included on ftp.NetBSD.org.</p>
6978</li> 6978</li>
6979<li class="listitem"> 6979<li class="listitem">
6980<p><code class="varname">NO_SRC_ON_CDROM</code></p> 6980<p><code class="varname">NO_SRC_ON_CDROM</code></p>
6981<p>Distfiles may not be placed on CD-ROM, together with 6981<p>Distfiles may not be placed on CD-ROM, together with
6982 other distfiles, for which a fee may be charged. In this 6982 other distfiles, for which a fee may be charged. In this
6983 case, set this variable to <code class="varname">${RESTRICTED}</code>. 6983 case, set this variable to <code class="varname">${RESTRICTED}</code>.
6984 </p> 6984 </p>
6985</li> 6985</li>
6986<li class="listitem"> 6986<li class="listitem">
6987<p><code class="varname">NO_SRC_ON_FTP</code></p> 6987<p><code class="varname">NO_SRC_ON_FTP</code></p>
6988<p>Distfiles may not made available via FTP at no charge. 6988<p>Distfiles may not made available via FTP at no charge.
6989 In this case, set this variable to 6989 In this case, set this variable to
6990 <code class="varname">${RESTRICTED}</code>. If this variable is set, 6990 <code class="varname">${RESTRICTED}</code>. If this variable is set,
6991 the distfile(s) will not be mirrored on ftp.NetBSD.org.</p> 6991 the distfile(s) will not be mirrored on ftp.NetBSD.org.</p>
6992</li> 6992</li>
6993</ul></div> 6993</ul></div>
6994<p>Please note that packages will be removed from pkgsrc when the 6994<p>Please note that packages will be removed from pkgsrc when the
6995 distfiles are not distributable and cannot be obtained for a period 6995 distfiles are not distributable and cannot be obtained for a period
6996 of one full quarter branch. Packages with manual/interactive fetch 6996 of one full quarter branch. Packages with manual/interactive fetch
6997 must have a maintainer and it is his/her responsibility to ensure 6997 must have a maintainer and it is his/her responsibility to ensure
6998 this.</p> 6998 this.</p>
6999</div> 6999</div>
7000<div class="sect2"> 7000<div class="sect2">
7001<div class="titlepage"><div><div><h3 class="title"> 7001<div class="titlepage"><div><div><h3 class="title">
7002<a name="dependencies"></a>19.1.5. Handling dependencies</h3></div></div></div> 7002<a name="dependencies"></a>19.1.5. Handling dependencies</h3></div></div></div>
7003<p>Your package may depend on some other package being present 7003<p>Your package may depend on some other package being present
7004 - and there are various ways of expressing this dependency. 7004 - and there are various ways of expressing this dependency.
7005 pkgsrc supports the <code class="varname">BUILD_DEPENDS</code> and 7005 pkgsrc supports the <code class="varname">BUILD_DEPENDS</code> and
7006 <code class="varname">DEPENDS</code> definitions, the 7006 <code class="varname">DEPENDS</code> definitions, the
7007 <code class="varname">USE_TOOLS</code> definition, as well as dependencies 7007 <code class="varname">USE_TOOLS</code> definition, as well as dependencies
7008 via <code class="filename">buildlink3.mk</code>, which is the preferred way 7008 via <code class="filename">buildlink3.mk</code>, which is the preferred way
7009 to handle dependencies, and which uses the variables named above. 7009 to handle dependencies, and which uses the variables named above.
7010 See <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a> for more information.</p> 7010 See <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a> for more information.</p>
7011<p>The basic difference between the two variables is as 7011<p>The basic difference between the two variables is as
7012 follows: The <code class="varname">DEPENDS</code> definition registers 7012 follows: The <code class="varname">DEPENDS</code> definition registers
7013 that pre-requisite in the binary package so it will be pulled in 7013 that pre-requisite in the binary package so it will be pulled in
7014 when the binary package is later installed, whilst the 7014 when the binary package is later installed, whilst the
7015 <code class="varname">BUILD_DEPENDS</code> definition does not, marking a 7015 <code class="varname">BUILD_DEPENDS</code> definition does not, marking a
7016 dependency that is only needed for building the package.</p> 7016 dependency that is only needed for building the package.</p>
7017<p>This means that if you only need a package present whilst 7017<p>This means that if you only need a package present whilst
7018 you are building, it should be noted as a 7018 you are building, it should be noted as a
7019 <code class="varname">BUILD_DEPENDS</code>.</p> 7019 <code class="varname">BUILD_DEPENDS</code>.</p>
7020<p>The format for a <code class="varname">BUILD_DEPENDS</code> and a 7020<p>The format for a <code class="varname">BUILD_DEPENDS</code> and a
7021 <code class="varname">DEPENDS</code> definition is:</p> 7021 <code class="varname">DEPENDS</code> definition is:</p>
7022<pre class="programlisting"> 7022<pre class="programlisting">
7023&lt;pre-req-package-name&gt;:../../&lt;category&gt;/&lt;pre-req-package&gt; 7023&lt;pre-req-package-name&gt;:../../&lt;category&gt;/&lt;pre-req-package&gt;
7024</pre> 7024</pre>
7025<p>Please note that the <span class="quote">&#8220;<span class="quote">pre-req-package-name</span>&#8221;</span> 7025<p>Please note that the <span class="quote">&#8220;<span class="quote">pre-req-package-name</span>&#8221;</span>
7026 may include any of the wildcard version numbers recognized by 7026 may include any of the wildcard version numbers recognized by
7027 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_info+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_info</span>(1)</span></a>.</p> 7027 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_info+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_info</span>(1)</span></a>.</p>
7028<div class="orderedlist"><ol class="orderedlist" type="1"> 7028<div class="orderedlist"><ol class="orderedlist" type="1">
7029<li class="listitem"> 7029<li class="listitem">
7030<p>If your package needs another package's binaries or 7030<p>If your package needs another package's binaries or
7031 libraries to build and run, and if that package has a 7031 libraries to build and run, and if that package has a
7032 <code class="filename">buildlink3.mk</code> file available, use it:</p> 7032 <code class="filename">buildlink3.mk</code> file available, use it:</p>
7033<pre class="programlisting"> 7033<pre class="programlisting">
7034.include "../../graphics/jpeg/buildlink3.mk" 7034.include "../../graphics/jpeg/buildlink3.mk"
7035</pre> 7035</pre>
7036</li> 7036</li>
7037<li class="listitem"> 7037<li class="listitem">
7038<p>If your package needs another package's binaries or 7038<p>If your package needs another package's binaries or
7039 libraries only for building, and if that package has a 7039 libraries only for building, and if that package has a
7040 <code class="filename">buildlink3.mk</code> file available, use it:</p> 7040 <code class="filename">buildlink3.mk</code> file available, use it:</p>
7041<pre class="programlisting"> 7041<pre class="programlisting">
7042.include "../../graphics/jpeg/buildlink3.mk" 7042.include "../../graphics/jpeg/buildlink3.mk"
7043</pre> 7043</pre>
7044<p>but set 7044<p>but set
7045 <code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>jpeg</code></em>?=build</code> 7045 <code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>jpeg</code></em>?=build</code>
7046 to make it a build dependency only. This case is rather 7046 to make it a build dependency only. This case is rather
7047 rare.</p> 7047 rare.</p>
7048</li> 7048</li>
7049<li class="listitem"> 7049<li class="listitem">
7050<p>If your package needs binaries from another package to build, 7050<p>If your package needs binaries from another package to build,
7051 use the <code class="varname">BUILD_DEPENDS</code> definition:</p> 7051 use the <code class="varname">BUILD_DEPENDS</code> definition:</p>
7052<pre class="programlisting"> 7052<pre class="programlisting">
7053BUILD_DEPENDS+= scons-[0-9]*:../../devel/scons 7053BUILD_DEPENDS+= scons-[0-9]*:../../devel/scons
7054</pre> 7054</pre>
7055</li> 7055</li>
7056<li class="listitem"><p>If your package needs a library with which to link and 7056<li class="listitem"><p>If your package needs a library with which to link and
7057 there is no <code class="filename">buildlink3.mk</code> file 7057 there is no <code class="filename">buildlink3.mk</code> file
7058 available, create one. Using 7058 available, create one. Using
7059 <code class="varname">DEPENDS</code> won't be sufficient because the 7059 <code class="varname">DEPENDS</code> won't be sufficient because the
7060 include files and libraries will be hidden from the compiler.</p></li> 7060 include files and libraries will be hidden from the compiler.</p></li>
7061<li class="listitem"> 7061<li class="listitem">
7062<p>If your package needs some executable to be able to run 7062<p>If your package needs some executable to be able to run
7063 correctly and if there's no 7063 correctly and if there's no
7064 <code class="filename">buildlink3.mk</code> file, this is specified 7064 <code class="filename">buildlink3.mk</code> file, this is specified
7065 using the <code class="varname">DEPENDS</code> variable. The 7065 using the <code class="varname">DEPENDS</code> variable. The
7066 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/lyx/README.html" target="_top"><code class="filename">print/lyx</code></a> package needs to 7066 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/lyx/README.html" target="_top"><code class="filename">print/lyx</code></a> package needs to
7067 be able to execute the latex binary from the tex-latex-bin package 7067 be able to execute the latex binary from the tex-latex-bin package
7068 when it runs, and that is specified:</p> 7068 when it runs, and that is specified:</p>
7069<pre class="programlisting"> 7069<pre class="programlisting">
7070DEPENDS+= tex-latex-bin-[0-9]*:../../print/tex-latex-bin 7070DEPENDS+= tex-latex-bin-[0-9]*:../../print/tex-latex-bin
7071</pre> 7071</pre>
7072</li> 7072</li>
7073<li class="listitem"> 7073<li class="listitem">
7074<p>You can use wildcards in package dependencies. Note that 7074<p>You can use wildcards in package dependencies. Note that
7075 such wildcard dependencies are retained when creating binary 7075 such wildcard dependencies are retained when creating binary
7076 packages. The dependency is checked when installing the binary 7076 packages. The dependency is checked when installing the binary
7077 package and any package which matches the pattern will be 7077 package and any package which matches the pattern will be
7078 used. Wildcard dependencies should be used with care.</p> 7078 used. Wildcard dependencies should be used with care.</p>
7079<p>The <span class="quote">&#8220;<span class="quote">-[0-9]*</span>&#8221;</span> should be used instead of 7079<p>The <span class="quote">&#8220;<span class="quote">-[0-9]*</span>&#8221;</span> should be used instead of
7080 <span class="quote">&#8220;<span class="quote">-*</span>&#8221;</span> to avoid potentially ambiguous matches 7080 <span class="quote">&#8220;<span class="quote">-*</span>&#8221;</span> to avoid potentially ambiguous matches
7081 such as <span class="quote">&#8220;<span class="quote">tk-postgresql</span>&#8221;</span> matching a 7081 such as <span class="quote">&#8220;<span class="quote">tk-postgresql</span>&#8221;</span> matching a
7082 <span class="quote">&#8220;<span class="quote">tk-*</span>&#8221;</span> <code class="varname">DEPENDS</code>.</p> 7082 <span class="quote">&#8220;<span class="quote">tk-*</span>&#8221;</span> <code class="varname">DEPENDS</code>.</p>
7083<p>Wildcards can also be used to specify that a package 7083<p>Wildcards can also be used to specify that a package
7084 will only build against a certain minimum version of a 7084 will only build against a certain minimum version of a
7085 pre-requisite:</p> 7085 pre-requisite:</p>
7086<pre class="programlisting"> 7086<pre class="programlisting">
7087DEPENDS+= ImageMagick&gt;=6.0:../../graphics/ImageMagick 7087DEPENDS+= ImageMagick&gt;=6.0:../../graphics/ImageMagick
7088</pre> 7088</pre>
7089<p>This means that the package will build using version 6.0 7089<p>This means that the package will build using version 6.0
7090 of ImageMagick or newer. Such a dependency may be warranted 7090 of ImageMagick or newer. Such a dependency may be warranted
7091 if, for example, the command line options of an executable 7091 if, for example, the command line options of an executable
7092 have changed.</p> 7092 have changed.</p>
7093<p>If you need to depend on minimum versions of libraries, 7093<p>If you need to depend on minimum versions of libraries,
7094 see the buildlink section of the pkgsrc guide.</p> 7094 see the buildlink section of the pkgsrc guide.</p>
7095<p>For security fixes, please update the package 7095<p>For security fixes, please update the package
7096 vulnerabilities file. See <a class="xref" href="#security-handling" title="19.1.9. Handling packages with security problems">Section 19.1.9, &#8220;Handling packages with security problems&#8221;</a> for more 7096 vulnerabilities file. See <a class="xref" href="#security-handling" title="19.1.9. Handling packages with security problems">Section 19.1.9, &#8220;Handling packages with security problems&#8221;</a> for more
7097 information.</p> 7097 information.</p>
7098</li> 7098</li>
7099</ol></div> 7099</ol></div>
7100<p>If your package needs files from another package to build, 7100<p>If your package needs files from another package to build,
7101 add the relevant distribution files to 7101 add the relevant distribution files to
7102 <code class="varname">DISTFILES</code>, so they will be extracted 7102 <code class="varname">DISTFILES</code>, so they will be extracted
7103 automatically. See the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/ghostscript/README.html" target="_top"><code class="filename">print/ghostscript</code></a> package for an example. 7103 automatically. See the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/ghostscript/README.html" target="_top"><code class="filename">print/ghostscript</code></a> package for an example.
7104 (It relies on the jpeg sources being present in source form 7104 (It relies on the jpeg sources being present in source form
7105 during the build.)</p> 7105 during the build.)</p>
7106</div> 7106</div>
7107<div class="sect2"> 7107<div class="sect2">
7108<div class="titlepage"><div><div><h3 class="title"> 7108<div class="titlepage"><div><div><h3 class="title">
7109<a name="conflicts"></a>19.1.6. Handling conflicts with other packages</h3></div></div></div> 7109<a name="conflicts"></a>19.1.6. Handling conflicts with other packages</h3></div></div></div>
7110<p>Your package may conflict with other packages a user might 7110<p>Your package may conflict with other packages a user might
7111 already have installed on his system, e.g. if your package 7111 already have installed on his system, e.g. if your package
7112 installs the same set of files as another package in the pkgsrc 7112 installs the same set of files as another package in the pkgsrc
7113 tree or has the same <code class="varname">PKGNAME</code>.</p> 7113 tree or has the same <code class="varname">PKGNAME</code>.</p>
7114<p>These cases are handled automatically by the packaging tools 7114<p>These cases are handled automatically by the packaging tools
7115 at package installation time and do not need to be handled 7115 at package installation time and do not need to be handled
7116 manually.</p> 7116 manually.</p>
7117<p>In case the conflicts can not be recognized automatically 7117<p>In case the conflicts can not be recognized automatically
7118 (e.g., packages using the same config file location but no other 7118 (e.g., packages using the same config file location but no other
7119 shared files), you can set <code class="varname">CONFLICTS</code> to a 7119 shared files), you can set <code class="varname">CONFLICTS</code> to a
7120 space-separated list of packages (including version string) your 7120 space-separated list of packages (including version string) your
7121 package conflicts with.</p> 7121 package conflicts with.</p>
7122<p>For example, if both <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/foo/bar/README.html" target="_top"><code class="filename">foo/bar</code></a> 7122<p>For example, if both <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/foo/bar/README.html" target="_top"><code class="filename">foo/bar</code></a>
7123 and <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/foo/baz/README.html" target="_top"><code class="filename">foo/baz</code></a> 7123 and <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/foo/baz/README.html" target="_top"><code class="filename">foo/baz</code></a>
7124 use the same config file, you would set in 7124 use the same config file, you would set in
7125 <code class="filename">foo/bar/Makefile</code>:</p> 7125 <code class="filename">foo/bar/Makefile</code>:</p>
7126<pre class="programlisting"> 7126<pre class="programlisting">
7127CONFLICTS= baz-[0-9]* 7127CONFLICTS= baz-[0-9]*
7128</pre> 7128</pre>
7129<p>and in <code class="filename">pkgsrc/foo/baz/Makefile</code>:</p> 7129<p>and in <code class="filename">pkgsrc/foo/baz/Makefile</code>:</p>
7130<pre class="programlisting"> 7130<pre class="programlisting">
7131CONFLICTS= bar-[0-9]* 7131CONFLICTS= bar-[0-9]*
7132</pre> 7132</pre>
7133</div> 7133</div>
7134<div class="sect2"> 7134<div class="sect2">
7135<div class="titlepage"><div><div><h3 class="title"> 7135<div class="titlepage"><div><div><h3 class="title">
7136<a name="not-building-packages"></a>19.1.7. Packages that cannot or should not be built</h3></div></div></div> 7136<a name="not-building-packages"></a>19.1.7. Packages that cannot or should not be built</h3></div></div></div>
7137<p>There are several reasons why a package might be 7137<p>There are several reasons why a package might be
7138 instructed to not build under certain circumstances. If the 7138 instructed to not build under certain circumstances. If the
7139 package builds and runs on most platforms, the exceptions 7139 package builds and runs on most platforms, the exceptions
7140 should be noted with <code class="varname">BROKEN_ON_PLATFORM</code>. If 7140 should be noted with <code class="varname">BROKEN_ON_PLATFORM</code>. If
7141 the package builds and runs on a small handful of platforms, 7141 the package builds and runs on a small handful of platforms,
7142 set <code class="varname">BROKEN_EXCEPT_ON_PLATFORM</code> instead. 7142 set <code class="varname">BROKEN_EXCEPT_ON_PLATFORM</code> instead.
7143 Both <code class="varname">BROKEN_ON_PLATFORM</code> and 7143 Both <code class="varname">BROKEN_ON_PLATFORM</code> and
7144 <code class="varname">BROKEN_EXCEPT_ON_PLATFORM</code> are OS triples 7144 <code class="varname">BROKEN_EXCEPT_ON_PLATFORM</code> are OS triples
7145 (OS-version-platform) that can use glob-style 7145 (OS-version-platform) that can use glob-style
7146 wildcards.</p> 7146 wildcards.</p>
7147<p>If a package is not appropriate for some platforms (as 7147<p>If a package is not appropriate for some platforms (as
7148 opposed to merely broken), a different set of variables should be 7148 opposed to merely broken), a different set of variables should be
7149 used as this affects failure reporting and statistics. 7149 used as this affects failure reporting and statistics.
7150 If the package is appropriate for most platforms, the exceptions 7150 If the package is appropriate for most platforms, the exceptions
7151 should be noted with <code class="varname">NOT_FOR_PLATFORM</code>. If 7151 should be noted with <code class="varname">NOT_FOR_PLATFORM</code>. If
7152 the package is appropriate for only a small handful of platforms 7152 the package is appropriate for only a small handful of platforms
7153 (often exactly one), set <code class="varname">ONLY_FOR_PLATFORM</code> instead. 7153 (often exactly one), set <code class="varname">ONLY_FOR_PLATFORM</code> instead.
7154 Both <code class="varname">ONLY_FOR_PLATFORM</code> and 7154 Both <code class="varname">ONLY_FOR_PLATFORM</code> and
7155 <code class="varname">NOT_FOR_PLATFORM</code> are OS triples 7155 <code class="varname">NOT_FOR_PLATFORM</code> are OS triples
7156 (OS-version-platform) that can use glob-style 7156 (OS-version-platform) that can use glob-style
7157 wildcards.</p> 7157 wildcards.</p>
7158<p>Some packages are tightly bound to a specific version of an 7158<p>Some packages are tightly bound to a specific version of an
7159 operating system, e.g. LKMs or <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/sysutils/lsof/README.html" target="_top"><code class="filename">sysutils/lsof</code></a>. Such binary packages are not 7159 operating system, e.g. LKMs or <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/sysutils/lsof/README.html" target="_top"><code class="filename">sysutils/lsof</code></a>. Such binary packages are not
7160 backwards compatible with other versions of the OS, and should be 7160 backwards compatible with other versions of the OS, and should be
7161 uploaded to a version specific directory on the FTP server. Mark 7161 uploaded to a version specific directory on the FTP server. Mark
7162 these packages by setting <code class="varname">OSVERSION_SPECIFIC</code> to 7162 these packages by setting <code class="varname">OSVERSION_SPECIFIC</code> to
7163 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This variable is not currently used by any of 7163 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This variable is not currently used by any of
7164 the package system internals, but may be used in the 7164 the package system internals, but may be used in the
7165 future.</p> 7165 future.</p>
7166<p>If the package should be skipped (for example, because it 7166<p>If the package should be skipped (for example, because it
7167 provides functionality already provided by the system), set 7167 provides functionality already provided by the system), set
7168 <code class="varname">PKG_SKIP_REASON</code> to a descriptive message. If 7168 <code class="varname">PKG_SKIP_REASON</code> to a descriptive message. If
7169 the package should fail because some preconditions are not met, 7169 the package should fail because some preconditions are not met,
7170 set <code class="varname">PKG_FAIL_REASON</code> to a descriptive 7170 set <code class="varname">PKG_FAIL_REASON</code> to a descriptive
7171 message.</p> 7171 message.</p>
7172</div> 7172</div>
7173<div class="sect2"> 7173<div class="sect2">
7174<div class="titlepage"><div><div><h3 class="title"> 7174<div class="titlepage"><div><div><h3 class="title">
7175<a name="undeletable-packages"></a>19.1.8. Packages which should not be deleted, once installed</h3></div></div></div> 7175<a name="undeletable-packages"></a>19.1.8. Packages which should not be deleted, once installed</h3></div></div></div>
7176<p>To ensure that a package may not be deleted, once it has been 7176<p>To ensure that a package may not be deleted, once it has been
7177 installed, the <code class="varname">PKG_PRESERVE</code> definition should 7177 installed, the <code class="varname">PKG_PRESERVE</code> definition should
7178 be set in the package Makefile. This will be carried into any 7178 be set in the package Makefile. This will be carried into any
7179 binary package that is made from this pkgsrc entry. A 7179 binary package that is made from this pkgsrc entry. A
7180 <span class="quote">&#8220;<span class="quote">preserved</span>&#8221;</span> package will 7180 <span class="quote">&#8220;<span class="quote">preserved</span>&#8221;</span> package will
7181 not be deleted using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> unless the 7181 not be deleted using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> unless the
7182 <span class="quote">&#8220;<span class="quote">-f</span>&#8221;</span> option is used.</p> 7182 <span class="quote">&#8220;<span class="quote">-f</span>&#8221;</span> option is used.</p>
7183</div> 7183</div>
7184<div class="sect2"> 7184<div class="sect2">
7185<div class="titlepage"><div><div><h3 class="title"> 7185<div class="titlepage"><div><div><h3 class="title">
7186<a name="security-handling"></a>19.1.9. Handling packages with security problems</h3></div></div></div> 7186<a name="security-handling"></a>19.1.9. Handling packages with security problems</h3></div></div></div>
7187<p>When a vulnerability is found, this should be noted in 7187<p>When a vulnerability is found, this should be noted in
7188 <code class="filename">localsrc/security/advisories/pkg-vulnerabilities</code>, 7188 <code class="filename">localsrc/security/advisories/pkg-vulnerabilities</code>,
7189 and after committing that file, ask pkgsrc-security@NetBSD.org to 7189 and after committing that file, ask pkgsrc-security@NetBSD.org to
7190 update the file on ftp.NetBSD.org.</p> 7190 update the file on ftp.NetBSD.org.</p>
7191<p>After fixing the vulnerability by a patch, its 7191<p>After fixing the vulnerability by a patch, its
7192 <code class="varname">PKGREVISION</code> should be increased (this is of 7192 <code class="varname">PKGREVISION</code> should be increased (this is of
7193 course not necessary if the problem is fixed by using a newer 7193 course not necessary if the problem is fixed by using a newer
7194 release of the software), and the pattern in the 7194 release of the software), and the pattern in the
7195 pkg-vulnerabilities file must be updated.</p> 7195 pkg-vulnerabilities file must be updated.</p>
7196<p>Also, if the fix should be applied to the stable pkgsrc 7196<p>Also, if the fix should be applied to the stable pkgsrc
7197 branch, be sure to submit a pullup request!</p> 7197 branch, be sure to submit a pullup request!</p>
7198<p>Binary packages already on ftp.NetBSD.org will be handled 7198<p>Binary packages already on ftp.NetBSD.org will be handled
7199 semi-automatically by a weekly cron job.</p> 7199 semi-automatically by a weekly cron job.</p>
7200</div> 7200</div>
7201<div class="sect2"> 7201<div class="sect2">
7202<div class="titlepage"><div><div><h3 class="title"> 7202<div class="titlepage"><div><div><h3 class="title">
7203<a name="bumping-pkgrevision"></a>19.1.10. How to handle incrementing versions when fixing an existing package</h3></div></div></div> 7203<a name="bumping-pkgrevision"></a>19.1.10. How to handle incrementing versions when fixing an existing package</h3></div></div></div>
7204<p>When making fixes to an existing package it can be useful 7204<p>When making fixes to an existing package it can be useful
7205 to change the version number in <code class="varname">PKGNAME</code>. To 7205 to change the version number in <code class="varname">PKGNAME</code>. To
7206 avoid conflicting with future versions by the original author, a 7206 avoid conflicting with future versions by the original author, a
7207 <span class="quote">&#8220;<span class="quote">nb1</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">nb2</span>&#8221;</span>, ... suffix can be used 7207 <span class="quote">&#8220;<span class="quote">nb1</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">nb2</span>&#8221;</span>, ... suffix can be used
7208 on package versions by setting <code class="varname">PKGREVISION=1</code> 7208 on package versions by setting <code class="varname">PKGREVISION=1</code>
7209 (2, ...). The <span class="quote">&#8220;<span class="quote">nb</span>&#8221;</span> is treated like a 7209 (2, ...). The <span class="quote">&#8220;<span class="quote">nb</span>&#8221;</span> is treated like a
7210 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> by the package tools. e.g.</p> 7210 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> by the package tools. e.g.</p>
7211<pre class="programlisting"> 7211<pre class="programlisting">
7212DISTNAME= foo-17.42 7212DISTNAME= foo-17.42
7213PKGREVISION= 9 7213PKGREVISION= 9
7214</pre> 7214</pre>
7215<p>will result in a <code class="varname">PKGNAME</code> of 7215<p>will result in a <code class="varname">PKGNAME</code> of
7216 <span class="quote">&#8220;<span class="quote">foo-17.42nb9</span>&#8221;</span>. If you want to use the original 7216 <span class="quote">&#8220;<span class="quote">foo-17.42nb9</span>&#8221;</span>. If you want to use the original
7217 value of <code class="varname">PKGNAME</code> without the <span class="quote">&#8220;<span class="quote">nbX</span>&#8221;</span> 7217 value of <code class="varname">PKGNAME</code> without the <span class="quote">&#8220;<span class="quote">nbX</span>&#8221;</span>
7218 suffix, e.g. for setting <code class="varname">DIST_SUBDIR</code>, use 7218 suffix, e.g. for setting <code class="varname">DIST_SUBDIR</code>, use
7219 <code class="varname">PKGNAME_NOREV</code>.</p> 7219 <code class="varname">PKGNAME_NOREV</code>.</p>
7220<p>When a new release of the package is released, the 7220<p>When a new release of the package is released, the
7221 <code class="varname">PKGREVISION</code> should be removed, e.g. on a new 7221 <code class="varname">PKGREVISION</code> should be removed, e.g. on a new
7222 minor release of the above package, things should be like:</p> 7222 minor release of the above package, things should be like:</p>
7223<pre class="programlisting"> 7223<pre class="programlisting">
7224DISTNAME= foo-17.43 7224DISTNAME= foo-17.43
7225</pre> 7225</pre>
7226<p><code class="varname">PKGREVISION</code> should be incremented for any 7226<p><code class="varname">PKGREVISION</code> should be incremented for any
7227 non-trivial change in the resulting binary package. Without a 7227 non-trivial change in the resulting binary package. Without a
7228 <code class="varname">PKGREVISION</code> bump, someone with the previous 7228 <code class="varname">PKGREVISION</code> bump, someone with the previous
7229 version installed has no way of knowing that their package is out 7229 version installed has no way of knowing that their package is out
7230 of date. Thus, changes without increasing 7230 of date. Thus, changes without increasing
7231 <code class="varname">PKGREVISION</code> are essentially labeled "this is so 7231 <code class="varname">PKGREVISION</code> are essentially labeled "this is so
7232 trivial that no reasonable person would want to upgrade", and this 7232 trivial that no reasonable person would want to upgrade", and this
7233 is the rough test for when increasing 7233 is the rough test for when increasing
7234 <code class="varname">PKGREVISION</code> is appropriate. Examples of 7234 <code class="varname">PKGREVISION</code> is appropriate. Examples of
7235 changes that do not merit increasing 7235 changes that do not merit increasing
7236 <code class="varname">PKGREVISION</code> are:</p> 7236 <code class="varname">PKGREVISION</code> are:</p>
7237<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7237<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7238<li class="listitem"><p>Changing <code class="varname">HOMEPAGE</code>, 7238<li class="listitem"><p>Changing <code class="varname">HOMEPAGE</code>,
7239 <code class="varname">MAINTAINER</code>, <code class="varname">OWNER</code>, 7239 <code class="varname">MAINTAINER</code>, <code class="varname">OWNER</code>,
7240 or comments in Makefile.</p></li> 7240 or comments in Makefile.</p></li>
7241<li class="listitem"><p> 7241<li class="listitem"><p>
7242 Changing build variables if the resulting binary package is the same.</p></li> 7242 Changing build variables if the resulting binary package is the same.</p></li>
7243<li class="listitem"><p> 7243<li class="listitem"><p>
7244 Changing <code class="filename">DESCR</code>.</p></li> 7244 Changing <code class="filename">DESCR</code>.</p></li>
7245<li class="listitem"><p> 7245<li class="listitem"><p>
7246 Adding <code class="varname">PKG_OPTIONS</code> if the default options don't change.</p></li> 7246 Adding <code class="varname">PKG_OPTIONS</code> if the default options don't change.</p></li>
7247</ul></div> 7247</ul></div>
7248<p>Examples of changes that do merit an increase to 7248<p>Examples of changes that do merit an increase to
7249 <code class="varname">PKGREVISION</code> include:</p> 7249 <code class="varname">PKGREVISION</code> include:</p>
7250<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7250<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7251<li class="listitem"><p> 7251<li class="listitem"><p>
7252 Security fixes</p></li> 7252 Security fixes</p></li>
7253<li class="listitem"><p> 7253<li class="listitem"><p>
7254 Changes or additions to a patch file</p></li> 7254 Changes or additions to a patch file</p></li>
7255<li class="listitem"><p> 7255<li class="listitem"><p>
7256 Changes to the <code class="filename">PLIST</code></p></li> 7256 Changes to the <code class="filename">PLIST</code></p></li>
7257<li class="listitem"><p>A dependency is changed or renamed.</p></li> 7257<li class="listitem"><p>A dependency is changed or renamed.</p></li>
7258</ul></div> 7258</ul></div>
7259<p>PKGREVISION must also be incremented when dependencies have ABI 7259<p>PKGREVISION must also be incremented when dependencies have ABI
7260 changes.</p> 7260 changes.</p>
7261</div> 7261</div>
7262<div class="sect2"> 7262<div class="sect2">
7263<div class="titlepage"><div><div><h3 class="title"> 7263<div class="titlepage"><div><div><h3 class="title">
7264<a name="fixes.subst"></a>19.1.11. Substituting variable text in the package files (the SUBST framework)</h3></div></div></div> 7264<a name="fixes.subst"></a>19.1.11. Substituting variable text in the package files (the SUBST framework)</h3></div></div></div>
7265<p>When you want to replace the same text in multiple files 7265<p>When you want to replace the same text in multiple files
7266 or when the replacement text varies, patches alone cannot help. 7266 or when the replacement text varies, patches alone cannot help.
7267 This is where the SUBST framework comes in. It provides an 7267 This is where the SUBST framework comes in. It provides an
7268 easy-to-use interface for replacing text in files. 7268 easy-to-use interface for replacing text in files.
7269 Example:</p> 7269 Example:</p>
7270<pre class="programlisting"> 7270<pre class="programlisting">
7271SUBST_CLASSES+= fix-paths 7271SUBST_CLASSES+= fix-paths
7272SUBST_STAGE.fix-paths= pre-configure 7272SUBST_STAGE.fix-paths= pre-configure
7273SUBST_MESSAGE.fix-paths= Fixing absolute paths. 7273SUBST_MESSAGE.fix-paths= Fixing absolute paths.
7274SUBST_FILES.fix-paths= src/*.c 7274SUBST_FILES.fix-paths= src/*.c
7275SUBST_FILES.fix-paths+= scripts/*.sh 7275SUBST_FILES.fix-paths+= scripts/*.sh
7276SUBST_SED.fix-paths= -e 's,"/usr/local,"${PREFIX},g' 7276SUBST_SED.fix-paths= -e 's,"/usr/local,"${PREFIX},g'
7277SUBST_SED.fix-paths+= -e 's,"/var/log,"${VARBASE}/log,g' 7277SUBST_SED.fix-paths+= -e 's,"/var/log,"${VARBASE}/log,g'
7278</pre> 7278</pre>
7279<p><code class="varname">SUBST_CLASSES</code> is a list of identifiers 7279<p><code class="varname">SUBST_CLASSES</code> is a list of identifiers
7280 that are used to identify the different SUBST blocks that are 7280 that are used to identify the different SUBST blocks that are
7281 defined. The SUBST framework is heavily used by pkgsrc, so it is 7281 defined. The SUBST framework is heavily used by pkgsrc, so it is
7282 important to always use the <code class="literal">+=</code> operator with 7282 important to always use the <code class="literal">+=</code> operator with
7283 this variable. Otherwise some substitutions may be 7283 this variable. Otherwise some substitutions may be
7284 skipped.</p> 7284 skipped.</p>
7285<p>The remaining variables of each SUBST block are 7285<p>The remaining variables of each SUBST block are
7286 parameterized with the identifier from the first line 7286 parameterized with the identifier from the first line
7287 (<code class="literal">fix-paths</code> in this case.) They can be seen as 7287 (<code class="literal">fix-paths</code> in this case.) They can be seen as
7288 parameters to a function call.</p> 7288 parameters to a function call.</p>
7289<p><code class="varname">SUBST_STAGE.*</code> specifies the stage at 7289<p><code class="varname">SUBST_STAGE.*</code> specifies the stage at
7290 which the replacement will take place. All combinations of 7290 which the replacement will take place. All combinations of
7291 <code class="literal">pre-</code>, <code class="literal">do-</code> and 7291 <code class="literal">pre-</code>, <code class="literal">do-</code> and
7292 <code class="literal">post-</code> together with a phase name are 7292 <code class="literal">post-</code> together with a phase name are
7293 possible, though only few are actually used. Most commonly used 7293 possible, though only few are actually used. Most commonly used
7294 are <code class="literal">post-patch</code> and 7294 are <code class="literal">post-patch</code> and
7295 <code class="literal">pre-configure</code>. Of these two, 7295 <code class="literal">pre-configure</code>. Of these two,
7296 <code class="literal">pre-configure</code> should be preferred because 7296 <code class="literal">pre-configure</code> should be preferred because
7297 then it is possible to run <span class="command"><strong>bmake patch</strong></span> and 7297 then it is possible to run <span class="command"><strong>bmake patch</strong></span> and
7298 have the state after applying the patches but before making any 7298 have the state after applying the patches but before making any
7299 other changes. This is especially useful when you are debugging 7299 other changes. This is especially useful when you are debugging
7300 a package in order to create new patches for it. Similarly, 7300 a package in order to create new patches for it. Similarly,
7301 <code class="literal">post-build</code> is preferred over 7301 <code class="literal">post-build</code> is preferred over
7302 <code class="literal">pre-install</code>, because the install phase should 7302 <code class="literal">pre-install</code>, because the install phase should
7303 generally be kept as simple as possible. When you use 7303 generally be kept as simple as possible. When you use
7304 <code class="literal">post-build</code>, you have the same files in the 7304 <code class="literal">post-build</code>, you have the same files in the
7305 working directory that will be installed later, so you can check 7305 working directory that will be installed later, so you can check
7306 if the substitution has succeeded.</p> 7306 if the substitution has succeeded.</p>
7307<p><code class="varname">SUBST_MESSAGE.*</code> is an optional text 7307<p><code class="varname">SUBST_MESSAGE.*</code> is an optional text
7308 that is printed just before the substitution is done.</p> 7308 that is printed just before the substitution is done.</p>
7309<p><code class="varname">SUBST_FILES.*</code> is the list of shell 7309<p><code class="varname">SUBST_FILES.*</code> is the list of shell
7310 globbing patterns that specifies the files in which the 7310 globbing patterns that specifies the files in which the
7311 substitution will take place. The patterns are interpreted 7311 substitution will take place. The patterns are interpreted
7312 relatively to the <code class="varname">WRKSRC</code> directory.</p> 7312 relatively to the <code class="varname">WRKSRC</code> directory.</p>
7313<p><code class="varname">SUBST_SED.*</code> is a list of arguments to 7313<p><code class="varname">SUBST_SED.*</code> is a list of arguments to
7314 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?sed+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">sed</span>(1)</span></a> that specify the actual substitution. Every sed 7314 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?sed+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">sed</span>(1)</span></a> that specify the actual substitution. Every sed
7315 command should be prefixed with <code class="literal">-e</code>, so that 7315 command should be prefixed with <code class="literal">-e</code>, so that
7316 all SUBST blocks look uniform.</p> 7316 all SUBST blocks look uniform.</p>
7317<p>There are some more variables, but they are so seldomly 7317<p>There are some more variables, but they are so seldomly
7318 used that they are only documented in the 7318 used that they are only documented in the
7319 <code class="filename">mk/subst.mk</code> file.</p> 7319 <code class="filename">mk/subst.mk</code> file.</p>
7320</div> 7320</div>
7321</div> 7321</div>
7322<div class="sect1"> 7322<div class="sect1">
7323<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 7323<div class="titlepage"><div><div><h2 class="title" style="clear: both">
7324<a name="fixes.fetch"></a>19.2. The <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div> 7324<a name="fixes.fetch"></a>19.2. The <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div>
7325<div class="sect2"> 7325<div class="sect2">
7326<div class="titlepage"><div><div><h3 class="title"> 7326<div class="titlepage"><div><div><h3 class="title">
7327<a name="no-plain-download"></a>19.2.1. Packages whose distfiles aren't available for plain downloading</h3></div></div></div> 7327<a name="no-plain-download"></a>19.2.1. Packages whose distfiles aren't available for plain downloading</h3></div></div></div>
7328<p>If you need to download from a dynamic URL you can set 7328<p>If you need to download from a dynamic URL you can set
7329 <code class="varname">DYNAMIC_MASTER_SITES</code> and a <span class="command"><strong>make 7329 <code class="varname">DYNAMIC_MASTER_SITES</code> and a <span class="command"><strong>make
7330 fetch</strong></span> will call <code class="filename">files/getsite.sh</code> 7330 fetch</strong></span> will call <code class="filename">files/getsite.sh</code>
7331 with the name of each file to download as an argument, expecting 7331 with the name of each file to download as an argument, expecting
7332 it to output the URL of the directory from which to download 7332 it to output the URL of the directory from which to download
7333 it. <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/graphics/ns-cult3d/README.html" target="_top"><code class="filename">graphics/ns-cult3d</code></a> is an 7333 it. <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/graphics/ns-cult3d/README.html" target="_top"><code class="filename">graphics/ns-cult3d</code></a> is an
7334 example of this usage.</p> 7334 example of this usage.</p>
7335<p>If the download can't be automated, because the user must 7335<p>If the download can't be automated, because the user must
7336 submit personal information to apply for a password, or must pay 7336 submit personal information to apply for a password, or must pay
7337 for the source, or whatever, you can set 7337 for the source, or whatever, you can set
7338 <code class="varname">FETCH_MESSAGE</code> to a list of lines that are 7338 <code class="varname">FETCH_MESSAGE</code> to a list of lines that are
7339 displayed to the user before aborting the build. Example:</p> 7339 displayed to the user before aborting the build. Example:</p>
7340<pre class="programlisting"> 7340<pre class="programlisting">
7341FETCH_MESSAGE= "Please download the files" 7341FETCH_MESSAGE= "Please download the files"
7342FETCH_MESSAGE+= " "${DISTFILES:Q} 7342FETCH_MESSAGE+= " "${DISTFILES:Q}
7343FETCH_MESSAGE+= "manually from "${MASTER_SITES:Q}"." 7343FETCH_MESSAGE+= "manually from "${MASTER_SITES:Q}"."
7344</pre> 7344</pre>
7345</div> 7345</div>
7346<div class="sect2"> 7346<div class="sect2">
7347<div class="titlepage"><div><div><h3 class="title"> 7347<div class="titlepage"><div><div><h3 class="title">
7348<a name="modified-distfiles-same-name"></a>19.2.2. How to handle modified distfiles with the 'old' name</h3></div></div></div> 7348<a name="modified-distfiles-same-name"></a>19.2.2. How to handle modified distfiles with the 'old' name</h3></div></div></div>
7349<p>Sometimes authors of a software package make some 7349<p>Sometimes authors of a software package make some
7350 modifications after the software was released, and they put up a 7350 modifications after the software was released, and they put up a
7351 new distfile without changing the package's version number. If a 7351 new distfile without changing the package's version number. If a
7352 package is already in pkgsrc at that time, the checksum will 7352 package is already in pkgsrc at that time, the checksum will
7353 no longer match. The contents of the new distfile should be 7353 no longer match. The contents of the new distfile should be
7354 compared against the old one before changing anything, to make 7354 compared against the old one before changing anything, to make
7355 sure the distfile was really updated on purpose, and that 7355 sure the distfile was really updated on purpose, and that
7356 no trojan horse or so crept in. 7356 no trojan horse or so crept in.
7357 Please mention that the distfiles were compared and what was found 7357 Please mention that the distfiles were compared and what was found
7358 in your commit message.</p> 7358 in your commit message.</p>
7359<p>Then, the correct way to work around this is to set 7359<p>Then, the correct way to work around this is to set
7360 <code class="varname">DIST_SUBDIR</code> to a unique directory name, usually 7360 <code class="varname">DIST_SUBDIR</code> to a unique directory name, usually
7361 based on <code class="varname">PKGNAME_NOREV</code> (but take care with 7361 based on <code class="varname">PKGNAME_NOREV</code> (but take care with
7362 python or ruby packages, where <code class="varname">PKGNAME</code> includes 7362 python or ruby packages, where <code class="varname">PKGNAME</code> includes
7363 a variable prefix). All <code class="varname">DISTFILES</code> and 7363 a variable prefix). All <code class="varname">DISTFILES</code> and
7364 <code class="varname">PATCHFILES</code> for this package will be put in that 7364 <code class="varname">PATCHFILES</code> for this package will be put in that
7365 subdirectory of the local distfiles directory. (See <a class="xref" href="#bumping-pkgrevision" title="19.1.10. How to handle incrementing versions when fixing an existing package">Section 19.1.10, &#8220;How to handle incrementing versions when fixing an existing package&#8221;</a> for more details.) In case this 7365 subdirectory of the local distfiles directory. (See <a class="xref" href="#bumping-pkgrevision" title="19.1.10. How to handle incrementing versions when fixing an existing package">Section 19.1.10, &#8220;How to handle incrementing versions when fixing an existing package&#8221;</a> for more details.) In case this
7366 happens more often, <code class="varname">PKGNAME</code> can be used (thus 7366 happens more often, <code class="varname">PKGNAME</code> can be used (thus
7367 including the <code class="filename">nbX</code> suffix) or a date stamp can 7367 including the <code class="filename">nbX</code> suffix) or a date stamp can
7368 be appended, like 7368 be appended, like
7369 <code class="varname">${PKGNAME_NOREV}-YYYYMMDD</code>.</p> 7369 <code class="varname">${PKGNAME_NOREV}-YYYYMMDD</code>.</p>
7370<p><code class="varname">DIST_SUBDIR</code> is also used when a distfile's name does not contain a version and the distfile is apt to change. In cases where the likelihood of this is very small, <code class="varname">DIST_SUBDIR</code> might not be required. Additionally, <code class="varname">DIST_SUBDIR</code> must not be removed unless the distfile name changes, even if a package is being moved or renamed.</p> 7370<p><code class="varname">DIST_SUBDIR</code> is also used when a distfile's name does not contain a version and the distfile is apt to change. In cases where the likelihood of this is very small, <code class="varname">DIST_SUBDIR</code> might not be required. Additionally, <code class="varname">DIST_SUBDIR</code> must not be removed unless the distfile name changes, even if a package is being moved or renamed.</p>
7371<p>Do not forget regenerating the <code class="filename">distinfo</code> file 7371<p>Do not forget regenerating the <code class="filename">distinfo</code> file
7372 after that, since it contains the <code class="varname">DIST_SUBDIR</code> 7372 after that, since it contains the <code class="varname">DIST_SUBDIR</code>
7373 path in the filenames. 7373 path in the filenames.
7374 Also, increase the PKGREVISION if the installed package is different. 7374 Also, increase the PKGREVISION if the installed package is different.
7375 Furthermore, a mail to the package's authors seems appropriate 7375 Furthermore, a mail to the package's authors seems appropriate
7376 telling them that changing distfiles after releases without 7376 telling them that changing distfiles after releases without
7377 changing the file names is not good practice.</p> 7377 changing the file names is not good practice.</p>
7378</div> 7378</div>
7379<div class="sect2"> 7379<div class="sect2">
7380<div class="titlepage"><div><div><h3 class="title"> 7380<div class="titlepage"><div><div><h3 class="title">
7381<a name="build.fetch.github"></a>19.2.3. Packages hosted on github.com</h3></div></div></div> 7381<a name="build.fetch.github"></a>19.2.3. Packages hosted on github.com</h3></div></div></div>
7382<p>Helper methods exist for packages hosted on github.com which will often have distfile names that clash with other packages, for example <code class="filename">1.0.tar.gz</code>. Use one of the three recipes from below: 7382<p>Helper methods exist for packages hosted on github.com which will often have distfile names that clash with other packages, for example <code class="filename">1.0.tar.gz</code>. Use one of the three recipes from below:
7383 </p> 7383 </p>
7384<div class="sect3"> 7384<div class="sect3">
7385<div class="titlepage"><div><div><h4 class="title"> 7385<div class="titlepage"><div><div><h4 class="title">
7386<a name="build.fetch.github.tag"></a>19.2.3.1. Fetch based on a tagged release</h4></div></div></div> 7386<a name="build.fetch.github.tag"></a>19.2.3.1. Fetch based on a tagged release</h4></div></div></div>
7387<p> 7387<p>
7388 If your distfile URL looks similar to <code class="literal">http://github.com/username/exampleproject/archive/v1.0.zip</code>, then you are packaging a tagged release. 7388 If your distfile URL looks similar to <code class="literal">http://github.com/username/exampleproject/archive/v1.0.zip</code>, then you are packaging a tagged release.
7389 </p> 7389 </p>
7390<pre class="programlisting"> 7390<pre class="programlisting">
7391DISTNAME= exampleproject-1.0 7391DISTNAME= exampleproject-1.0
7392MASTER_SITES= ${MASTER_SITE_GITHUB:=username/} 7392MASTER_SITES= ${MASTER_SITE_GITHUB:=username/}
7393#GITHUB_PROJECT= # can be omitted if same as DISTNAME 7393#GITHUB_PROJECT= # can be omitted if same as DISTNAME
7394GITHUB_TAG= v${PKGVERSION_NOREV} 7394GITHUB_TAG= v${PKGVERSION_NOREV}
7395EXTRACT_SUFX= .zip 7395EXTRACT_SUFX= .zip
7396</pre> 7396</pre>
7397</div> 7397</div>
7398<div class="sect3"> 7398<div class="sect3">
7399<div class="titlepage"><div><div><h4 class="title"> 7399<div class="titlepage"><div><div><h4 class="title">
7400<a name="build.fetch.github.commit"></a>19.2.3.2. Fetch based on a specific commit</h4></div></div></div> 7400<a name="build.fetch.github.commit"></a>19.2.3.2. Fetch based on a specific commit</h4></div></div></div>
7401<p> 7401<p>
7402 If your distfile URL looks similar to <code class="literal">http://github.com/example/example/archive/988881adc9fc3655077dc2d4d757d480b5ea0e11.tar.gz</code>, then you are packaging a specific commit not tied to a release. 7402 If your distfile URL looks similar to <code class="literal">http://github.com/example/example/archive/988881adc9fc3655077dc2d4d757d480b5ea0e11.tar.gz</code>, then you are packaging a specific commit not tied to a release.
7403 </p> 7403 </p>
7404<pre class="programlisting"> 7404<pre class="programlisting">
7405DISTNAME= example-1.0 7405DISTNAME= example-1.0
7406MASTER_SITES= ${MASTER_SITE_GITHUB:=example/} 7406MASTER_SITES= ${MASTER_SITE_GITHUB:=example/}
7407#GITHUB_PROJECT= # can be omitted if same as DISTNAME 7407#GITHUB_PROJECT= # can be omitted if same as DISTNAME
7408GITHUB_TAG= 988881adc9fc3655077dc2d4d757d480b5ea0e11 7408GITHUB_TAG= 988881adc9fc3655077dc2d4d757d480b5ea0e11
7409</pre> 7409</pre>
7410</div> 7410</div>
7411<div class="sect3"> 7411<div class="sect3">
7412<div class="titlepage"><div><div><h4 class="title"> 7412<div class="titlepage"><div><div><h4 class="title">
7413<a name="build.fetch.github.release"></a>19.2.3.3. Fetch based on release</h4></div></div></div> 7413<a name="build.fetch.github.release"></a>19.2.3.3. Fetch based on release</h4></div></div></div>
7414<p> 7414<p>
7415 If your distfile URL looks similar to <code class="literal">http://github.com/username/exampleproject/releases/download/rel-1.6/offensive-1.6.zip</code>, then you are packaging a release. 7415 If your distfile URL looks similar to <code class="literal">http://github.com/username/exampleproject/releases/download/rel-1.6/offensive-1.6.zip</code>, then you are packaging a release.
7416 </p> 7416 </p>
7417<pre class="programlisting"> 7417<pre class="programlisting">
7418DISTNAME= offensive-1.6 7418DISTNAME= offensive-1.6
7419PKGNAME= ${DISTNAME:S/offensive/proper/} 7419PKGNAME= ${DISTNAME:S/offensive/proper/}
7420MASTER_SITES= ${MASTER_SITE_GITHUB:=username/} 7420MASTER_SITES= ${MASTER_SITE_GITHUB:=username/}
7421GITHUB_PROJECT= exampleproject 7421GITHUB_PROJECT= exampleproject
7422GITHUB_RELEASE= rel-${PKGVERSION_NOREV} # usually just set this to ${DISTNAME} 7422GITHUB_RELEASE= rel-${PKGVERSION_NOREV} # usually just set this to ${DISTNAME}
7423EXTRACT_SUFX= .zip 7423EXTRACT_SUFX= .zip
7424</pre> 7424</pre>
7425</div> 7425</div>
7426</div> 7426</div>
7427</div> 7427</div>
7428<div class="sect1"> 7428<div class="sect1">
7429<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 7429<div class="titlepage"><div><div><h2 class="title" style="clear: both">
7430<a name="fixes.configure"></a>19.3. The <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div> 7430<a name="fixes.configure"></a>19.3. The <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div>
7431<div class="sect2"> 7431<div class="sect2">
7432<div class="titlepage"><div><div><h3 class="title"> 7432<div class="titlepage"><div><div><h3 class="title">
7433<a name="fixes.libtool"></a>19.3.1. Shared libraries - libtool</h3></div></div></div> 7433<a name="fixes.libtool"></a>19.3.1. Shared libraries - libtool</h3></div></div></div>
7434<p>pkgsrc supports many different machines, with different 7434<p>pkgsrc supports many different machines, with different
7435 object formats like a.out and ELF, and varying abilities to do 7435 object formats like a.out and ELF, and varying abilities to do
7436 shared library and dynamic loading at all. To accompany this, 7436 shared library and dynamic loading at all. To accompany this,
7437 varying commands and options have to be passed to the 7437 varying commands and options have to be passed to the
7438 compiler, linker, etc. to get the Right Thing, which can be 7438 compiler, linker, etc. to get the Right Thing, which can be
7439 pretty annoying especially if you don't have all the machines 7439 pretty annoying especially if you don't have all the machines
7440 at your hand to test things. The 7440 at your hand to test things. The
7441 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/libtool/README.html" target="_top"><code class="filename">devel/libtool</code></a> pkg 7441 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/libtool/README.html" target="_top"><code class="filename">devel/libtool</code></a> pkg
7442 can help here, as it just <span class="quote">&#8220;<span class="quote">knows</span>&#8221;</span> how to build 7442 can help here, as it just <span class="quote">&#8220;<span class="quote">knows</span>&#8221;</span> how to build
7443 both static and dynamic libraries from a set of source files, 7443 both static and dynamic libraries from a set of source files,
7444 thus being platform-independent.</p> 7444 thus being platform-independent.</p>
7445<p>Here's how to use libtool in a package in seven simple 7445<p>Here's how to use libtool in a package in seven simple
7446 steps:</p> 7446 steps:</p>
7447<div class="orderedlist"><ol class="orderedlist" type="1"> 7447<div class="orderedlist"><ol class="orderedlist" type="1">
7448<li class="listitem"><p>Add <code class="varname">USE_LIBTOOL=yes</code> to the package 7448<li class="listitem"><p>Add <code class="varname">USE_LIBTOOL=yes</code> to the package
7449 Makefile.</p></li> 7449 Makefile.</p></li>
7450<li class="listitem"><p>For library objects, use <span class="quote">&#8220;<span class="quote">${LIBTOOL} --mode=compile 7450<li class="listitem"><p>For library objects, use <span class="quote">&#8220;<span class="quote">${LIBTOOL} --mode=compile
7451 ${CC}</span>&#8221;</span> in place of <span class="quote">&#8220;<span class="quote">${CC}</span>&#8221;</span>. You could even 7451 ${CC}</span>&#8221;</span> in place of <span class="quote">&#8220;<span class="quote">${CC}</span>&#8221;</span>. You could even
7452 add it to the definition of <code class="varname">CC</code>, if only 7452 add it to the definition of <code class="varname">CC</code>, if only
7453 libraries are being built in a given Makefile. This one command 7453 libraries are being built in a given Makefile. This one command
7454 will build both PIC and non-PIC library objects, so you need not 7454 will build both PIC and non-PIC library objects, so you need not
7455 have separate shared and non-shared library rules.</p></li> 7455 have separate shared and non-shared library rules.</p></li>
7456<li class="listitem"> 7456<li class="listitem">
7457<p>For the linking of the library, remove any 7457<p>For the linking of the library, remove any
7458 <span class="quote">&#8220;<span class="quote">ar</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">ranlib</span>&#8221;</span>, and <span class="quote">&#8220;<span class="quote">ld 7458 <span class="quote">&#8220;<span class="quote">ar</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">ranlib</span>&#8221;</span>, and <span class="quote">&#8220;<span class="quote">ld
7459 -Bshareable</span>&#8221;</span> commands, and instead use:</p> 7459 -Bshareable</span>&#8221;</span> commands, and instead use:</p>
7460<pre class="programlisting"> 7460<pre class="programlisting">
7461${LIBTOOL} --mode=link \ 7461${LIBTOOL} --mode=link \
7462 ${CC} -o ${.TARGET:.a=.la} \ 7462 ${CC} -o ${.TARGET:.a=.la} \
7463 ${OBJS:.o=.lo} \ 7463 ${OBJS:.o=.lo} \
7464 -rpath ${PREFIX}/lib \ 7464 -rpath ${PREFIX}/lib \
7465 -version-info major:minor 7465 -version-info major:minor
7466</pre> 7466</pre>
7467<p>Note that the library is changed to have a 7467<p>Note that the library is changed to have a
7468 <code class="filename">.la</code> extension, and the objects are 7468 <code class="filename">.la</code> extension, and the objects are
7469 changed to have a <code class="filename">.lo</code> 7469 changed to have a <code class="filename">.lo</code>
7470 extension. Change <code class="varname">OBJS</code> as 7470 extension. Change <code class="varname">OBJS</code> as
7471 necessary. This automatically creates all of the 7471 necessary. This automatically creates all of the
7472 <code class="filename">.a</code>, 7472 <code class="filename">.a</code>,
7473 <code class="filename">.so.major.minor</code>, and ELF symlinks (if 7473 <code class="filename">.so.major.minor</code>, and ELF symlinks (if
7474 necessary) in the build directory. Be sure to include 7474 necessary) in the build directory. Be sure to include
7475 <span class="quote">&#8220;<span class="quote">-version-info</span>&#8221;</span>, especially when major and 7475 <span class="quote">&#8220;<span class="quote">-version-info</span>&#8221;</span>, especially when major and
7476 minor are zero, as libtool will otherwise strip off the 7476 minor are zero, as libtool will otherwise strip off the
7477 shared library version.</p> 7477 shared library version.</p>
7478<p>From the libtool manual:</p> 7478<p>From the libtool manual:</p>
7479<pre class="programlisting"> 7479<pre class="programlisting">
7480So, libtool library versions are described by three integers: 7480So, libtool library versions are described by three integers:
7481 7481
7482CURRENT 7482CURRENT
7483The most recent interface number that this library implements. 7483The most recent interface number that this library implements.
7484 7484
7485REVISION 7485REVISION
7486The implementation number of the CURRENT interface. 7486The implementation number of the CURRENT interface.
7487 7487
7488AGE 7488AGE
7489The difference between the newest and oldest interfaces that 7489The difference between the newest and oldest interfaces that
7490this library implements. In other words, the library implements 7490this library implements. In other words, the library implements
7491all the interface numbers in the range from number `CURRENT - 7491all the interface numbers in the range from number `CURRENT -
7492AGE' to `CURRENT'. 7492AGE' to `CURRENT'.
7493 7493
7494If two libraries have identical CURRENT and AGE numbers, then the 7494If two libraries have identical CURRENT and AGE numbers, then the
7495dynamic linker chooses the library with the greater REVISION number. 7495dynamic linker chooses the library with the greater REVISION number.
7496</pre> 7496</pre>
7497<p>The <span class="quote">&#8220;<span class="quote">-release</span>&#8221;</span> option will produce 7497<p>The <span class="quote">&#8220;<span class="quote">-release</span>&#8221;</span> option will produce
7498 different results for a.out and ELF (excluding symlinks) 7498 different results for a.out and ELF (excluding symlinks)
7499 in only one case. An ELF library of the form 7499 in only one case. An ELF library of the form
7500 <span class="quote">&#8220;<span class="quote">libfoo-release.so.<span class="emphasis"><em>x</em></span>.<span class="emphasis"><em>y</em></span></span>&#8221;</span> 7500 <span class="quote">&#8220;<span class="quote">libfoo-release.so.<span class="emphasis"><em>x</em></span>.<span class="emphasis"><em>y</em></span></span>&#8221;</span>
7501 will have a symlink of 7501 will have a symlink of
7502 <span class="quote">&#8220;<span class="quote">libfoo.so.<span class="emphasis"><em>x</em></span>.<span class="emphasis"><em>y</em></span></span>&#8221;</span> 7502 <span class="quote">&#8220;<span class="quote">libfoo.so.<span class="emphasis"><em>x</em></span>.<span class="emphasis"><em>y</em></span></span>&#8221;</span>
7503 on an a.out platform. This is handled 7503 on an a.out platform. This is handled
7504 automatically.</p> 7504 automatically.</p>
7505<p>The <span class="quote">&#8220;<span class="quote">-rpath argument</span>&#8221;</span> is the install 7505<p>The <span class="quote">&#8220;<span class="quote">-rpath argument</span>&#8221;</span> is the install
7506 directory of the library being built.</p> 7506 directory of the library being built.</p>
7507<p>In the <code class="filename">PLIST</code>, include only the 7507<p>In the <code class="filename">PLIST</code>, include only the
7508 <code class="filename">.la</code> file, the other files will be 7508 <code class="filename">.la</code> file, the other files will be
7509 added automatically.</p> 7509 added automatically.</p>
7510</li> 7510</li>
7511<li class="listitem"> 7511<li class="listitem">
7512<p>When linking shared object (<code class="filename">.so</code>) 7512<p>When linking shared object (<code class="filename">.so</code>)
7513 files, i.e. files that are loaded via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?dlopen+3.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">dlopen</span>(3)</span></a>, NOT 7513 files, i.e. files that are loaded via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?dlopen+3.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">dlopen</span>(3)</span></a>, NOT
7514 shared libraries, use <span class="quote">&#8220;<span class="quote">-module 7514 shared libraries, use <span class="quote">&#8220;<span class="quote">-module
7515 -avoid-version</span>&#8221;</span> to prevent them getting version 7515 -avoid-version</span>&#8221;</span> to prevent them getting version
7516 tacked on.</p> 7516 tacked on.</p>
7517<p>The <code class="filename">PLIST</code> file gets the 7517<p>The <code class="filename">PLIST</code> file gets the
7518 <code class="filename">foo.so</code> entry.</p> 7518 <code class="filename">foo.so</code> entry.</p>
7519</li> 7519</li>
7520<li class="listitem"> 7520<li class="listitem">
7521<p>When linking programs that depend on these libraries 7521<p>When linking programs that depend on these libraries
7522 <span class="emphasis"><em>before</em></span> they are installed, preface 7522 <span class="emphasis"><em>before</em></span> they are installed, preface
7523 the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cc+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">cc</span>(1)</span></a> or <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ld+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">ld</span>(1)</span></a> line with <span class="quote">&#8220;<span class="quote">${LIBTOOL} 7523 the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cc+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">cc</span>(1)</span></a> or <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ld+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">ld</span>(1)</span></a> line with <span class="quote">&#8220;<span class="quote">${LIBTOOL}
7524 --mode=link</span>&#8221;</span>, and it will find the correct 7524 --mode=link</span>&#8221;</span>, and it will find the correct
7525 libraries (static or shared), but please be aware that 7525 libraries (static or shared), but please be aware that
7526 libtool will not allow you to specify a relative path in 7526 libtool will not allow you to specify a relative path in
7527 -L (such as <span class="quote">&#8220;<span class="quote">-L../somelib</span>&#8221;</span>), because it 7527 -L (such as <span class="quote">&#8220;<span class="quote">-L../somelib</span>&#8221;</span>), because it
7528 expects you to change that argument to be the 7528 expects you to change that argument to be the
7529 <code class="filename">.la</code> file. e.g.</p> 7529 <code class="filename">.la</code> file. e.g.</p>
7530<pre class="programlisting"> 7530<pre class="programlisting">
7531${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib 7531${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib
7532</pre> 7532</pre>
7533<p>should be changed to:</p> 7533<p>should be changed to:</p>
7534<pre class="programlisting"> 7534<pre class="programlisting">
7535${LIBTOOL} --mode=link ${CC} -o <em class="replaceable"><code>someprog</code></em> <em class="replaceable"><code>../somelib/somelib.la</code></em> 7535${LIBTOOL} --mode=link ${CC} -o <em class="replaceable"><code>someprog</code></em> <em class="replaceable"><code>../somelib/somelib.la</code></em>
7536</pre> 7536</pre>
7537<p>and it will do the right thing with the libraries.</p> 7537<p>and it will do the right thing with the libraries.</p>
7538</li> 7538</li>
7539<li class="listitem"> 7539<li class="listitem">
7540<p>When installing libraries, preface the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?install+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a> 7540<p>When installing libraries, preface the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?install+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a>
7541 or <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cp+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">cp</span>(1)</span></a> command with <span class="quote">&#8220;<span class="quote">${LIBTOOL} 7541 or <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cp+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">cp</span>(1)</span></a> command with <span class="quote">&#8220;<span class="quote">${LIBTOOL}
7542 --mode=install</span>&#8221;</span>, and change the library name to 7542 --mode=install</span>&#8221;</span>, and change the library name to
7543 <code class="filename">.la</code>. e.g.</p> 7543 <code class="filename">.la</code>. e.g.</p>
7544<pre class="programlisting"> 7544<pre class="programlisting">
7545${LIBTOOL} --mode=install ${BSD_INSTALL_LIB} ${SOMELIB:.a=.la} ${PREFIX}/lib 7545${LIBTOOL} --mode=install ${BSD_INSTALL_LIB} ${SOMELIB:.a=.la} ${PREFIX}/lib
7546</pre> 7546</pre>
7547<p>This will install the static <code class="filename">.a</code>, 7547<p>This will install the static <code class="filename">.a</code>,
7548 shared library, any needed symlinks, and run 7548 shared library, any needed symlinks, and run
7549 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ldconfig+8.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">ldconfig</span>(8)</span></a>.</p> 7549 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ldconfig+8.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">ldconfig</span>(8)</span></a>.</p>
7550</li> 7550</li>
7551<li class="listitem"><p>In your <code class="filename">PLIST</code>, include only 7551<li class="listitem"><p>In your <code class="filename">PLIST</code>, include only
7552 the <code class="filename">.la</code> 7552 the <code class="filename">.la</code>
7553 file (this is a change from previous behaviour).</p></li> 7553 file (this is a change from previous behaviour).</p></li>
7554</ol></div> 7554</ol></div>
7555</div> 7555</div>
7556<div class="sect2"> 7556<div class="sect2">
7557<div class="titlepage"><div><div><h3 class="title"> 7557<div class="titlepage"><div><div><h3 class="title">
7558<a name="using-libtool"></a>19.3.2. Using libtool on GNU packages that already support libtool</h3></div></div></div> 7558<a name="using-libtool"></a>19.3.2. Using libtool on GNU packages that already support libtool</h3></div></div></div>
7559<p>Add <code class="varname">USE_LIBTOOL=yes</code> to the 7559<p>Add <code class="varname">USE_LIBTOOL=yes</code> to the
7560 package Makefile. This will override the package's own libtool 7560 package Makefile. This will override the package's own libtool
7561 in most cases. For older libtool using packages, libtool is 7561 in most cases. For older libtool using packages, libtool is
7562 made by ltconfig script during the do-configure step; you can 7562 made by ltconfig script during the do-configure step; you can
7563 check the libtool script location by doing <span class="command"><strong>make 7563 check the libtool script location by doing <span class="command"><strong>make
7564 configure; find work*/ -name libtool</strong></span>.</p> 7564 configure; find work*/ -name libtool</strong></span>.</p>
7565<p><code class="varname">LIBTOOL_OVERRIDE</code> specifies which libtool 7565<p><code class="varname">LIBTOOL_OVERRIDE</code> specifies which libtool
7566 scripts, relative to <code class="varname">WRKSRC</code>, to override. By 7566 scripts, relative to <code class="varname">WRKSRC</code>, to override. By
7567 default, it is set to <span class="quote">&#8220;<span class="quote">libtool */libtool 7567 default, it is set to <span class="quote">&#8220;<span class="quote">libtool */libtool
7568 */*/libtool</span>&#8221;</span>. If this does not match the location of the 7568 */*/libtool</span>&#8221;</span>. If this does not match the location of the
7569 package's libtool script(s), set it as appropriate.</p> 7569 package's libtool script(s), set it as appropriate.</p>
7570<p>If you do not need <code class="filename">*.a</code> static 7570<p>If you do not need <code class="filename">*.a</code> static
7571 libraries built and installed, then use 7571 libraries built and installed, then use
7572 <code class="varname">SHLIBTOOL_OVERRIDE</code> instead.</p> 7572 <code class="varname">SHLIBTOOL_OVERRIDE</code> instead.</p>
7573<p>If your package makes use of the platform-independent library 7573<p>If your package makes use of the platform-independent library
7574 for loading dynamic shared objects, that comes with libtool 7574 for loading dynamic shared objects, that comes with libtool
7575 (libltdl), you should include devel/libltdl/buildlink3.mk.</p> 7575 (libltdl), you should include devel/libltdl/buildlink3.mk.</p>
7576<p>Some packages use libtool incorrectly so that the package 7576<p>Some packages use libtool incorrectly so that the package
7577 may not work or build in some circumstances. Some of the more 7577 may not work or build in some circumstances. Some of the more
7578 common errors are:</p> 7578 common errors are:</p>
7579<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7579<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7580<li class="listitem"> 7580<li class="listitem">
7581<p>The inclusion of a shared object (-module) as a dependent library in an 7581<p>The inclusion of a shared object (-module) as a dependent library in an
7582 executable or library. This in itself isn't a problem if one of two things 7582 executable or library. This in itself isn't a problem if one of two things
7583 has been done:</p> 7583 has been done:</p>
7584<div class="orderedlist"><ol class="orderedlist" type="1"> 7584<div class="orderedlist"><ol class="orderedlist" type="1">
7585<li class="listitem"><p>The shared object is named correctly, i.e. 7585<li class="listitem"><p>The shared object is named correctly, i.e.
7586 <code class="filename">libfoo.la</code>, not 7586 <code class="filename">libfoo.la</code>, not
7587 <code class="filename">foo.la</code></p></li> 7587 <code class="filename">foo.la</code></p></li>
7588<li class="listitem"><p>The -dlopen option is used when linking an executable.</p></li> 7588<li class="listitem"><p>The -dlopen option is used when linking an executable.</p></li>
7589</ol></div> 7589</ol></div>
7590</li> 7590</li>
7591<li class="listitem"><p>The use of libltdl without the correct calls to initialisation routines. 7591<li class="listitem"><p>The use of libltdl without the correct calls to initialisation routines.
7592 The function lt_dlinit() should be called and the macro 7592 The function lt_dlinit() should be called and the macro
7593 <code class="varname">LTDL_SET_PRELOADED_SYMBOLS</code> included in 7593 <code class="varname">LTDL_SET_PRELOADED_SYMBOLS</code> included in
7594 executables.</p></li> 7594 executables.</p></li>
7595</ul></div> 7595</ul></div>
7596</div> 7596</div>
7597<div class="sect2"> 7597<div class="sect2">
7598<div class="titlepage"><div><div><h3 class="title"> 7598<div class="titlepage"><div><div><h3 class="title">
7599<a name="autoconf-automake"></a>19.3.3. GNU Autoconf/Automake</h3></div></div></div> 7599<a name="autoconf-automake"></a>19.3.3. GNU Autoconf/Automake</h3></div></div></div>
7600<p>If a package needs GNU autoconf or automake to be executed 7600<p>If a package needs GNU autoconf or automake to be executed
7601 to regenerate the configure script and Makefile.in makefile 7601 to regenerate the configure script and Makefile.in makefile
7602 templates, then they should be executed in a pre-configure 7602 templates, then they should be executed in a pre-configure
7603 target.</p> 7603 target.</p>
7604<p>For packages that need only autoconf:</p> 7604<p>For packages that need only autoconf:</p>
7605<pre class="programlisting"> 7605<pre class="programlisting">
7606AUTOCONF_REQD= 2.50 # if default version is not good enough 7606AUTOCONF_REQD= 2.50 # if default version is not good enough
7607USE_TOOLS+= autoconf # use "autoconf213" for autoconf-2.13 7607USE_TOOLS+= autoconf # use "autoconf213" for autoconf-2.13
7608... 7608...
7609 7609
7610pre-configure: 7610pre-configure:
7611 cd ${WRKSRC} &amp;&amp; autoconf 7611 cd ${WRKSRC} &amp;&amp; autoconf
7612 7612
7613... 7613...
7614</pre> 7614</pre>
7615<p>and for packages that need automake and autoconf:</p> 7615<p>and for packages that need automake and autoconf:</p>
7616<pre class="programlisting"> 7616<pre class="programlisting">
7617AUTOMAKE_REQD= 1.7.1 # if default version is not good enough 7617AUTOMAKE_REQD= 1.7.1 # if default version is not good enough
7618USE_TOOLS+= automake # use "automake14" for automake-1.4 7618USE_TOOLS+= automake # use "automake14" for automake-1.4
7619... 7619...
7620 7620
7621pre-configure: 7621pre-configure:
7622 set -e; cd ${WRKSRC}; \ 7622 set -e; cd ${WRKSRC}; \
7623 aclocal; autoheader; automake -a --foreign -i; autoconf 7623 aclocal; autoheader; automake -a --foreign -i; autoconf
7624 7624
7625... 7625...
7626</pre> 7626</pre>
7627<p>Packages which use GNU Automake will almost certainly 7627<p>Packages which use GNU Automake will almost certainly
7628 require GNU Make.</p> 7628 require GNU Make.</p>
7629<p>There are times when the configure process makes 7629<p>There are times when the configure process makes
7630 additional changes to the generated files, which then causes 7630 additional changes to the generated files, which then causes
7631 the build process to try to re-execute the automake sequence. 7631 the build process to try to re-execute the automake sequence.
7632 This is prevented by touching various files in the configure 7632 This is prevented by touching various files in the configure
7633 stage. If this causes problems with your package you can set 7633 stage. If this causes problems with your package you can set
7634 <code class="varname">AUTOMAKE_OVERRIDE=NO</code> in the package 7634 <code class="varname">AUTOMAKE_OVERRIDE=NO</code> in the package
7635 Makefile.</p> 7635 Makefile.</p>
7636</div> 7636</div>
7637</div> 7637</div>
7638<div class="sect1"> 7638<div class="sect1">
7639<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 7639<div class="titlepage"><div><div><h2 class="title" style="clear: both">
7640<a name="programming-languages"></a>19.4. Programming languages</h2></div></div></div> 7640<a name="programming-languages"></a>19.4. Programming languages</h2></div></div></div>
7641<div class="sect2"> 7641<div class="sect2">
7642<div class="titlepage"><div><div><h3 class="title"> 7642<div class="titlepage"><div><div><h3 class="title">
7643<a name="basic-programming-languages"></a>19.4.1. C, C++, and Fortran</h3></div></div></div> 7643<a name="basic-programming-languages"></a>19.4.1. C, C++, and Fortran</h3></div></div></div>
7644<p>Compilers for the C, C++, and Fortran languages comes with 7644<p>Compilers for the C, C++, and Fortran languages comes with
7645 the NetBSD base system. By default, pkgsrc assumes that a package 7645 the NetBSD base system. By default, pkgsrc assumes that a package
7646 is written in C and will hide all other compilers (via the wrapper 7646 is written in C and will hide all other compilers (via the wrapper
7647 framework, see <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a>).</p> 7647 framework, see <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a>).</p>
7648<p>To declare which language's compiler a package needs, set 7648<p>To declare which language's compiler a package needs, set
7649 the <code class="varname">USE_LANGUAGES</code> variable. Allowed values 7649 the <code class="varname">USE_LANGUAGES</code> variable. Allowed values
7650 currently are <span class="quote">&#8220;<span class="quote">c</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">c++</span>&#8221;</span>, and 7650 currently are <span class="quote">&#8220;<span class="quote">c</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">c++</span>&#8221;</span>, and
7651 <span class="quote">&#8220;<span class="quote">fortran</span>&#8221;</span> (and any combination). The default is 7651 <span class="quote">&#8220;<span class="quote">fortran</span>&#8221;</span> (and any combination). The default is
7652 <span class="quote">&#8220;<span class="quote">c</span>&#8221;</span>. Packages using GNU configure scripts, even if 7652 <span class="quote">&#8220;<span class="quote">c</span>&#8221;</span>. Packages using GNU configure scripts, even if
7653 written in C++, usually need a C compiler for the configure 7653 written in C++, usually need a C compiler for the configure
7654 phase.</p> 7654 phase.</p>
7655</div> 7655</div>
7656<div class="sect2"> 7656<div class="sect2">
7657<div class="titlepage"><div><div><h3 class="title"> 7657<div class="titlepage"><div><div><h3 class="title">
7658<a name="java-programming-language"></a>19.4.2. Java</h3></div></div></div> 7658<a name="java-programming-language"></a>19.4.2. Java</h3></div></div></div>
7659<p>If a program is written in Java, use the Java framework in 7659<p>If a program is written in Java, use the Java framework in
7660 pkgsrc. The package must include 7660 pkgsrc. The package must include
7661 <code class="filename">../../mk/java-vm.mk</code>. This Makefile fragment 7661 <code class="filename">../../mk/java-vm.mk</code>. This Makefile fragment
7662 provides the following variables:</p> 7662 provides the following variables:</p>
7663<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7663<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7664<li class="listitem"><p><code class="varname">USE_JAVA</code> defines if a build 7664<li class="listitem"><p><code class="varname">USE_JAVA</code> defines if a build
7665 dependency on the JDK is added. If 7665 dependency on the JDK is added. If
7666 <code class="varname">USE_JAVA</code> is set to <span class="quote">&#8220;<span class="quote">run</span>&#8221;</span>, then 7666 <code class="varname">USE_JAVA</code> is set to <span class="quote">&#8220;<span class="quote">run</span>&#8221;</span>, then
7667 there is only a runtime dependency on the JDK. The default is 7667 there is only a runtime dependency on the JDK. The default is
7668 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, which also adds a build dependency on the 7668 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, which also adds a build dependency on the
7669 JDK.</p></li> 7669 JDK.</p></li>
7670<li class="listitem"><p>Set <code class="varname">USE_JAVA2</code> to declare that 7670<li class="listitem"><p>Set <code class="varname">USE_JAVA2</code> to declare that
7671 a package needs a Java2 implementation. The supported values 7671 a package needs a Java2 implementation. The supported values
7672 are <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">1.4</span>&#8221;</span>, and 7672 are <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">1.4</span>&#8221;</span>, and
7673 <span class="quote">&#8220;<span class="quote">1.5</span>&#8221;</span>. <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> accepts any Java2 7673 <span class="quote">&#8220;<span class="quote">1.5</span>&#8221;</span>. <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> accepts any Java2
7674 implementation, <span class="quote">&#8220;<span class="quote">1.4</span>&#8221;</span> insists on versions 1.4 or 7674 implementation, <span class="quote">&#8220;<span class="quote">1.4</span>&#8221;</span> insists on versions 1.4 or
7675 above, and <span class="quote">&#8220;<span class="quote">1.5</span>&#8221;</span> only accepts versions 1.5 or 7675 above, and <span class="quote">&#8220;<span class="quote">1.5</span>&#8221;</span> only accepts versions 1.5 or
7676 above. This variable is not set by default.</p></li> 7676 above. This variable is not set by default.</p></li>
7677<li class="listitem"><p><code class="varname">PKG_JAVA_HOME</code> is 7677<li class="listitem"><p><code class="varname">PKG_JAVA_HOME</code> is
7678 automatically set to the runtime location of the used Java 7678 automatically set to the runtime location of the used Java
7679 implementation dependency. It may be used to set 7679 implementation dependency. It may be used to set
7680 <code class="varname">JAVA_HOME</code> to a good value if the program 7680 <code class="varname">JAVA_HOME</code> to a good value if the program
7681 needs this variable to be defined. 7681 needs this variable to be defined.
7682 </p></li> 7682 </p></li>
7683</ul></div> 7683</ul></div>
7684</div> 7684</div>
7685<div class="sect2"> 7685<div class="sect2">
7686<div class="titlepage"><div><div><h3 class="title"> 7686<div class="titlepage"><div><div><h3 class="title">
7687<a name="perl-scripts"></a>19.4.3. Packages containing perl scripts</h3></div></div></div> 7687<a name="perl-scripts"></a>19.4.3. Packages containing perl scripts</h3></div></div></div>
7688<p>If your package contains interpreted perl scripts, add 7688<p>If your package contains interpreted perl scripts, add
7689 <span class="quote">&#8220;<span class="quote">perl</span>&#8221;</span> to the <code class="varname">USE_TOOLS</code> variable 7689 <span class="quote">&#8220;<span class="quote">perl</span>&#8221;</span> to the <code class="varname">USE_TOOLS</code> variable
7690 and set <code class="varname">REPLACE_PERL</code> to ensure that the proper 7690 and set <code class="varname">REPLACE_PERL</code> to ensure that the proper
7691 interpreter path is set. <code class="varname">REPLACE_PERL</code> should 7691 interpreter path is set. <code class="varname">REPLACE_PERL</code> should
7692 contain a list of scripts, relative to <code class="varname">WRKSRC</code>, 7692 contain a list of scripts, relative to <code class="varname">WRKSRC</code>,
7693 that you want adjusted. Every occurrence of 7693 that you want adjusted. Every occurrence of
7694 <code class="filename">*/bin/perl</code> in a she-bang line will be 7694 <code class="filename">*/bin/perl</code> in a she-bang line will be
7695 replaced with the full path to the perl executable.</p> 7695 replaced with the full path to the perl executable.</p>
7696<p>If a particular version of perl is needed, set the 7696<p>If a particular version of perl is needed, set the
7697 <code class="varname">PERL5_REQD</code> variable to the version number. The 7697 <code class="varname">PERL5_REQD</code> variable to the version number. The
7698 default is <span class="quote">&#8220;<span class="quote">5.0</span>&#8221;</span>.</p> 7698 default is <span class="quote">&#8220;<span class="quote">5.0</span>&#8221;</span>.</p>
7699<p>See <a class="xref" href="#perl-modules" title="19.6.6. Packages installing perl modules">Section 19.6.6, &#8220;Packages installing perl modules&#8221;</a> for information 7699<p>See <a class="xref" href="#perl-modules" title="19.6.6. Packages installing perl modules">Section 19.6.6, &#8220;Packages installing perl modules&#8221;</a> for information
7700 about handling perl modules.</p> 7700 about handling perl modules.</p>
7701</div> 7701</div>
7702<div class="sect2"> 7702<div class="sect2">
7703<div class="titlepage"><div><div><h3 class="title"> 7703<div class="titlepage"><div><div><h3 class="title">
7704<a name="shell-scripts"></a>19.4.4. Packages containing shell scripts</h3></div></div></div> 7704<a name="shell-scripts"></a>19.4.4. Packages containing shell scripts</h3></div></div></div>
7705<p><code class="varname">REPLACE_SH</code>, 7705<p><code class="varname">REPLACE_SH</code>,
7706 <code class="varname">REPLACE_BASH</code>, <code class="varname">REPLACE_CSH</code>, 7706 <code class="varname">REPLACE_BASH</code>, <code class="varname">REPLACE_CSH</code>,
7707 and <code class="varname">REPLACE_KSH</code> can be used to replace shell 7707 and <code class="varname">REPLACE_KSH</code> can be used to replace shell
7708 hash bangs in files. Please use the appropriate one, prefering 7708 hash bangs in files. Please use the appropriate one, prefering
7709 <code class="varname">REPLACE_SH</code> in case this shell is sufficient. 7709 <code class="varname">REPLACE_SH</code> in case this shell is sufficient.
7710 Each should contain a list of scripts, relative to 7710 Each should contain a list of scripts, relative to
7711 <code class="varname">WRKSRC</code>, that you want adjusted. Every 7711 <code class="varname">WRKSRC</code>, that you want adjusted. Every
7712 occurrence of the matching shell in a she-bang line will be 7712 occurrence of the matching shell in a she-bang line will be
7713 replaced with the full path to the shell executable. 7713 replaced with the full path to the shell executable.
7714 When using <code class="varname">REPLACE_BASH</code>, don't forget to add 7714 When using <code class="varname">REPLACE_BASH</code>, don't forget to add
7715 <code class="filename">bash</code> to <code class="varname">USE_TOOLS</code>.</p> 7715 <code class="filename">bash</code> to <code class="varname">USE_TOOLS</code>.</p>
7716</div> 7716</div>
7717<div class="sect2"> 7717<div class="sect2">
7718<div class="titlepage"><div><div><h3 class="title"> 7718<div class="titlepage"><div><div><h3 class="title">
7719<a name="other-programming-languages"></a>19.4.5. Other programming languages</h3></div></div></div> 7719<a name="other-programming-languages"></a>19.4.5. Other programming languages</h3></div></div></div>
7720<p>Currently, there is no special handling for other languages 7720<p>Currently, there is no special handling for other languages
7721 in pkgsrc. If a compiler package provides a 7721 in pkgsrc. If a compiler package provides a
7722 <code class="filename">buildlink3.mk</code> file, include that, otherwise 7722 <code class="filename">buildlink3.mk</code> file, include that, otherwise
7723 just add a (build) dependency on the appropriate compiler 7723 just add a (build) dependency on the appropriate compiler
7724 package.</p> 7724 package.</p>
7725</div> 7725</div>
7726</div> 7726</div>
7727<div class="sect1"> 7727<div class="sect1">
7728<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 7728<div class="titlepage"><div><div><h2 class="title" style="clear: both">
7729<a name="fixes.build"></a>19.5. The <span class="emphasis"><em>build</em></span> phase</h2></div></div></div> 7729<a name="fixes.build"></a>19.5. The <span class="emphasis"><em>build</em></span> phase</h2></div></div></div>
7730<p>The most common failures when building a package are that 7730<p>The most common failures when building a package are that
7731 some platforms do not provide certain header files, functions or 7731 some platforms do not provide certain header files, functions or
7732 libraries, or they provide the functions in a library that the 7732 libraries, or they provide the functions in a library that the
7733 original package author didn't know. To work around this, you 7733 original package author didn't know. To work around this, you
7734 can rewrite the source code in most cases so that it does not 7734 can rewrite the source code in most cases so that it does not
7735 use the missing functions or provides a replacement function.</p> 7735 use the missing functions or provides a replacement function.</p>
7736<div class="sect2"> 7736<div class="sect2">
7737<div class="titlepage"><div><div><h3 class="title"> 7737<div class="titlepage"><div><div><h3 class="title">
7738<a name="fixes.build.cpp"></a>19.5.1. Compiling C and C++ code conditionally</h3></div></div></div> 7738<a name="fixes.build.cpp"></a>19.5.1. Compiling C and C++ code conditionally</h3></div></div></div>
7739<p>If a package already comes with a GNU configure script, the 7739<p>If a package already comes with a GNU configure script, the
7740 preferred way to fix the build failure is to change the 7740 preferred way to fix the build failure is to change the
7741 configure script, not the code. In the other cases, you can 7741 configure script, not the code. In the other cases, you can
7742 utilize the C preprocessor, which defines certain macros 7742 utilize the C preprocessor, which defines certain macros
7743 depending on the operating system and hardware architecture it 7743 depending on the operating system and hardware architecture it
7744 compiles for. These macros can be queried using for example 7744 compiles for. These macros can be queried using for example
7745 <code class="varname">#if defined(__i386)</code>. Almost every operating 7745 <code class="varname">#if defined(__i386)</code>. Almost every operating
7746 system, hardware architecture and compiler has its own macro. 7746 system, hardware architecture and compiler has its own macro.
7747 For example, if the macros <code class="varname">__GNUC__</code>, 7747 For example, if the macros <code class="varname">__GNUC__</code>,
7748 <code class="varname">__i386__</code> and <code class="varname">__NetBSD__</code> 7748 <code class="varname">__i386__</code> and <code class="varname">__NetBSD__</code>
7749 are all defined, you know that you are using NetBSD on an i386 7749 are all defined, you know that you are using NetBSD on an i386
7750 compatible CPU, and your compiler is GCC.</p> 7750 compatible CPU, and your compiler is GCC.</p>
7751<p>The list of the following macros for hardware and 7751<p>The list of the following macros for hardware and
7752 operating system depends on the compiler that is used. For 7752 operating system depends on the compiler that is used. For
7753 example, if you want to conditionally compile code on Solaris, 7753 example, if you want to conditionally compile code on Solaris,
7754 don't use <code class="varname">__sun__</code>, as the SunPro compiler 7754 don't use <code class="varname">__sun__</code>, as the SunPro compiler
7755 does not define it. Use <code class="varname">__sun</code> instead.</p> 7755 does not define it. Use <code class="varname">__sun</code> instead.</p>
7756<div class="sect3"> 7756<div class="sect3">
7757<div class="titlepage"><div><div><h4 class="title"> 7757<div class="titlepage"><div><div><h4 class="title">
7758<a name="fixes.build.cpp.os"></a>19.5.1.1. C preprocessor macros to identify the operating system</h4></div></div></div> 7758<a name="fixes.build.cpp.os"></a>19.5.1.1. C preprocessor macros to identify the operating system</h4></div></div></div>
7759<p>To distinguish between 4.4 BSD-derived systems and the 7759<p>To distinguish between 4.4 BSD-derived systems and the
7760 rest of the world, you should use the following code.</p> 7760 rest of the world, you should use the following code.</p>
7761<pre class="programlisting"> 7761<pre class="programlisting">
7762#include &lt;sys/param.h&gt; 7762#include &lt;sys/param.h&gt;
7763#if (defined(BSD) &amp;&amp; BSD &gt;= 199306) 7763#if (defined(BSD) &amp;&amp; BSD &gt;= 199306)
7764/* BSD-specific code goes here */ 7764/* BSD-specific code goes here */
7765#else 7765#else
7766/* non-BSD-specific code goes here */ 7766/* non-BSD-specific code goes here */
7767#endif 7767#endif
7768</pre> 7768</pre>
7769<p>If this distinction is not fine enough, you can also test 7769<p>If this distinction is not fine enough, you can also test
7770 for the following macros.</p> 7770 for the following macros.</p>
7771<pre class="programlisting"> 7771<pre class="programlisting">
7772Cygwin __CYGWIN__ 7772Cygwin __CYGWIN__
7773DragonFly __DragonFly__ 7773DragonFly __DragonFly__
7774FreeBSD __FreeBSD__ 7774FreeBSD __FreeBSD__
7775Haiku __HAIKU__ 7775Haiku __HAIKU__
7776Interix __INTERIX 7776Interix __INTERIX
7777IRIX __sgi (TODO: get a definite source for this) 7777IRIX __sgi (TODO: get a definite source for this)
7778Linux linux, __linux, __linux__ 7778Linux linux, __linux, __linux__
7779Mac OS X __APPLE__ 7779Mac OS X __APPLE__
7780MirBSD __MirBSD__ (__OpenBSD__ is also defined) 7780MirBSD __MirBSD__ (__OpenBSD__ is also defined)
7781Minix3 __minix 7781Minix3 __minix
7782NetBSD __NetBSD__ 7782NetBSD __NetBSD__
7783OpenBSD __OpenBSD__ 7783OpenBSD __OpenBSD__
7784Solaris sun, __sun 7784Solaris sun, __sun
7785</pre> 7785</pre>
7786</div> 7786</div>
7787<div class="sect3"> 7787<div class="sect3">
7788<div class="titlepage"><div><div><h4 class="title"> 7788<div class="titlepage"><div><div><h4 class="title">
7789<a name="fixes.build.cpp.arch"></a>19.5.1.2. C preprocessor macros to identify the hardware architecture</h4></div></div></div> 7789<a name="fixes.build.cpp.arch"></a>19.5.1.2. C preprocessor macros to identify the hardware architecture</h4></div></div></div>
7790<pre class="programlisting"> 7790<pre class="programlisting">
7791i386 i386, __i386, __i386__ 7791i386 i386, __i386, __i386__
7792MIPS __mips 7792MIPS __mips
7793SPARC sparc, __sparc 7793SPARC sparc, __sparc
7794</pre> 7794</pre>
7795</div> 7795</div>
7796<div class="sect3"> 7796<div class="sect3">
7797<div class="titlepage"><div><div><h4 class="title"> 7797<div class="titlepage"><div><div><h4 class="title">
7798<a name="fixes.build.cpp.compiler"></a>19.5.1.3. C preprocessor macros to identify the compiler</h4></div></div></div> 7798<a name="fixes.build.cpp.compiler"></a>19.5.1.3. C preprocessor macros to identify the compiler</h4></div></div></div>
7799<pre class="programlisting"> 7799<pre class="programlisting">
7800GCC __GNUC__ (major version), __GNUC_MINOR__ 7800GCC __GNUC__ (major version), __GNUC_MINOR__
7801MIPSpro _COMPILER_VERSION (0x741 for MIPSpro 7.41) 7801MIPSpro _COMPILER_VERSION (0x741 for MIPSpro 7.41)
7802SunPro __SUNPRO_C (0x570 for Sun C 5.7) 7802SunPro __SUNPRO_C (0x570 for Sun C 5.7)
7803SunPro C++ __SUNPRO_CC (0x580 for Sun C++ 5.8) 7803SunPro C++ __SUNPRO_CC (0x580 for Sun C++ 5.8)
7804</pre> 7804</pre>
7805</div> 7805</div>
7806</div> 7806</div>
7807<div class="sect2"> 7807<div class="sect2">
7808<div class="titlepage"><div><div><h3 class="title"> 7808<div class="titlepage"><div><div><h3 class="title">
7809<a name="compiler-bugs"></a>19.5.2. How to handle compiler bugs</h3></div></div></div> 7809<a name="compiler-bugs"></a>19.5.2. How to handle compiler bugs</h3></div></div></div>
7810<p>Some source files trigger bugs in the compiler, based on 7810<p>Some source files trigger bugs in the compiler, based on
7811 combinations of compiler version and architecture and almost 7811 combinations of compiler version and architecture and almost
7812 always relation to optimisation being enabled. Common symptoms 7812 always relation to optimisation being enabled. Common symptoms
7813 are gcc internal errors or never finishing compiling a 7813 are gcc internal errors or never finishing compiling a
7814 file.</p> 7814 file.</p>
7815<p>Typically, a workaround involves testing the 7815<p>Typically, a workaround involves testing the
7816 <code class="varname">MACHINE_ARCH</code> and compiler version, disabling 7816 <code class="varname">MACHINE_ARCH</code> and compiler version, disabling
7817 optimisation for that combination of file, 7817 optimisation for that combination of file,
7818 <code class="varname">MACHINE_ARCH</code> and compiler.</p> 7818 <code class="varname">MACHINE_ARCH</code> and compiler.</p>
7819<p>This used to be a big problem in the past, but is rarely 7819<p>This used to be a big problem in the past, but is rarely
7820 needed now as compiler technology has matured. If you still need 7820 needed now as compiler technology has matured. If you still need
7821 to add a compiler specific workaround, please do so in the file 7821 to add a compiler specific workaround, please do so in the file
7822 <code class="filename">hacks.mk</code> and describe the symptom and 7822 <code class="filename">hacks.mk</code> and describe the symptom and
7823 compiler version as detailed as possible.</p> 7823 compiler version as detailed as possible.</p>
7824</div> 7824</div>
7825<div class="sect2"> 7825<div class="sect2">
7826<div class="titlepage"><div><div><h3 class="title"> 7826<div class="titlepage"><div><div><h3 class="title">
7827<a name="undefined-reference"></a>19.5.3. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span> 7827<a name="undefined-reference"></a>19.5.3. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span>
7828</h3></div></div></div> 7828</h3></div></div></div>
7829<p>This error message often means that a package did not 7829<p>This error message often means that a package did not
7830 link to a shared library it needs. The following functions are 7830 link to a shared library it needs. The following functions are
7831 known to cause this error message over and over.</p> 7831 known to cause this error message over and over.</p>
7832<div class="informaltable"> 7832<div class="informaltable">
7833<a name="undefined-reference-functions"></a><table class="informaltable" border="1"> 7833<a name="undefined-reference-functions"></a><table class="informaltable" border="1">
7834<colgroup> 7834<colgroup>
7835<col> 7835<col>
7836<col> 7836<col>
7837<col> 7837<col>
7838</colgroup> 7838</colgroup>
7839<thead><tr> 7839<thead><tr>
7840<th>Function</th> 7840<th>Function</th>
7841<th>Library</th> 7841<th>Library</th>
7842<th>Affected platforms</th> 7842<th>Affected platforms</th>
7843</tr></thead> 7843</tr></thead>
7844<tbody> 7844<tbody>
7845<tr> 7845<tr>
7846<td>accept, bind, connect</td> 7846<td>accept, bind, connect</td>
7847<td>-lsocket</td> 7847<td>-lsocket</td>
7848<td>Solaris</td> 7848<td>Solaris</td>
7849</tr> 7849</tr>
7850<tr> 7850<tr>
7851<td>crypt</td> 7851<td>crypt</td>
7852<td>-lcrypt</td> 7852<td>-lcrypt</td>
7853<td>DragonFly, NetBSD</td> 7853<td>DragonFly, NetBSD</td>
7854</tr> 7854</tr>
7855<tr> 7855<tr>
7856<td>dlopen, dlsym</td> 7856<td>dlopen, dlsym</td>
7857<td>-ldl</td> 7857<td>-ldl</td>
7858<td>Linux</td> 7858<td>Linux</td>
7859</tr> 7859</tr>
7860<tr> 7860<tr>
7861<td>gethost*</td> 7861<td>gethost*</td>
7862<td>-lnsl</td> 7862<td>-lnsl</td>
7863<td>Solaris</td> 7863<td>Solaris</td>
7864</tr> 7864</tr>
7865<tr> 7865<tr>
7866<td>inet_aton</td> 7866<td>inet_aton</td>
7867<td>-lresolv</td> 7867<td>-lresolv</td>
7868<td>Solaris</td> 7868<td>Solaris</td>
7869</tr> 7869</tr>
7870<tr> 7870<tr>
7871<td>nanosleep, sem_*, timer_*</td> 7871<td>nanosleep, sem_*, timer_*</td>
7872<td>-lrt</td> 7872<td>-lrt</td>
7873<td>Solaris</td> 7873<td>Solaris</td>
7874</tr> 7874</tr>
7875<tr> 7875<tr>
7876<td>openpty</td> 7876<td>openpty</td>
7877<td>-lutil</td> 7877<td>-lutil</td>
7878<td>Linux</td> 7878<td>Linux</td>
7879</tr> 7879</tr>
7880</tbody> 7880</tbody>
7881</table> 7881</table>
7882</div> 7882</div>
7883<p>To fix these linker errors, it is often sufficient to say 7883<p>To fix these linker errors, it is often sufficient to say
7884 <code class="literal">LIBS.<em class="replaceable"><code>OperatingSystem</code></em>+= 7884 <code class="literal">LIBS.<em class="replaceable"><code>OperatingSystem</code></em>+=
7885 -l<em class="replaceable"><code>foo</code></em></code> to the package 7885 -l<em class="replaceable"><code>foo</code></em></code> to the package
7886 <code class="filename">Makefile</code> and then say <span class="command"><strong>bmake clean; 7886 <code class="filename">Makefile</code> and then say <span class="command"><strong>bmake clean;
7887 bmake</strong></span>.</p> 7887 bmake</strong></span>.</p>
7888<div class="sect3"> 7888<div class="sect3">
7889<div class="titlepage"><div><div><h4 class="title"> 7889<div class="titlepage"><div><div><h4 class="title">
7890<a name="undefined-reference-sunpro"></a>19.5.3.1. Special issue: The SunPro compiler</h4></div></div></div> 7890<a name="undefined-reference-sunpro"></a>19.5.3.1. Special issue: The SunPro compiler</h4></div></div></div>
7891<p>When you are using the SunPro compiler, there is another 7891<p>When you are using the SunPro compiler, there is another
7892possibility. That compiler cannot handle the following code:</p> 7892possibility. That compiler cannot handle the following code:</p>
7893<pre class="programlisting"> 7893<pre class="programlisting">
7894extern int extern_func(int); 7894extern int extern_func(int);
7895 7895
7896static inline int 7896static inline int
7897inline_func(int x) 7897inline_func(int x)
7898{ 7898{
7899 return extern_func(x); 7899 return extern_func(x);
7900} 7900}
7901 7901
7902int main(void) 7902int main(void)
7903{ 7903{
7904 return 0; 7904 return 0;
7905} 7905}
7906</pre> 7906</pre>
7907<p>It generates the code for <code class="function">inline_func</code> even if 7907<p>It generates the code for <code class="function">inline_func</code> even if
7908that function is never used. This code then refers to 7908that function is never used. This code then refers to
7909<code class="function">extern_func</code>, which can usually not be resolved. To 7909<code class="function">extern_func</code>, which can usually not be resolved. To
7910solve this problem you can try to tell the package to disable inlining 7910solve this problem you can try to tell the package to disable inlining
7911of functions.</p> 7911of functions.</p>
7912</div> 7912</div>
7913</div> 7913</div>
7914<div class="sect2"> 7914<div class="sect2">
7915<div class="titlepage"><div><div><h3 class="title"> 7915<div class="titlepage"><div><div><h3 class="title">
7916<a name="out-of-memory"></a>19.5.4. Running out of memory</h3></div></div></div> 7916<a name="out-of-memory"></a>19.5.4. Running out of memory</h3></div></div></div>
7917<p>Sometimes packages fail to build because the compiler runs 7917<p>Sometimes packages fail to build because the compiler runs
7918 into an operating system specific soft limit. With the 7918 into an operating system specific soft limit. With the
7919 <code class="varname">UNLIMIT_RESOURCES</code> variable pkgsrc can be told 7919 <code class="varname">UNLIMIT_RESOURCES</code> variable pkgsrc can be told
7920 to unlimit the resources. Currently, the allowed values are any combination of 7920 to unlimit the resources. Currently, the allowed values are any combination of
7921 <span class="quote">&#8220;<span class="quote">cputime</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">datasize</span>&#8221;</span>, 7921 <span class="quote">&#8220;<span class="quote">cputime</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">datasize</span>&#8221;</span>,
7922 <span class="quote">&#8220;<span class="quote">memorysize</span>&#8221;</span>, and <span class="quote">&#8220;<span class="quote">stacksize</span>&#8221;</span>. 7922 <span class="quote">&#8220;<span class="quote">memorysize</span>&#8221;</span>, and <span class="quote">&#8220;<span class="quote">stacksize</span>&#8221;</span>.
7923 Setting this variable is similar to running the shell builtin 7923 Setting this variable is similar to running the shell builtin
7924 <span class="command"><strong>ulimit</strong></span> command to raise the maximum data 7924 <span class="command"><strong>ulimit</strong></span> command to raise the maximum data
7925 segment size or maximum stack size of a process, respectively, to 7925 segment size or maximum stack size of a process, respectively, to
7926 their hard limits.</p> 7926 their hard limits.</p>
7927</div> 7927</div>
7928</div> 7928</div>
7929<div class="sect1"> 7929<div class="sect1">
7930<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 7930<div class="titlepage"><div><div><h2 class="title" style="clear: both">
7931<a name="fixes.install"></a>19.6. The <span class="emphasis"><em>install</em></span> phase</h2></div></div></div> 7931<a name="fixes.install"></a>19.6. The <span class="emphasis"><em>install</em></span> phase</h2></div></div></div>
7932<div class="sect2"> 7932<div class="sect2">
7933<div class="titlepage"><div><div><h3 class="title"> 7933<div class="titlepage"><div><div><h3 class="title">
7934<a name="install-scripts"></a>19.6.1. Creating needed directories</h3></div></div></div> 7934<a name="install-scripts"></a>19.6.1. Creating needed directories</h3></div></div></div>
7935<p>The BSD-compatible <span class="command"><strong>install</strong></span> supplied 7935<p>The BSD-compatible <span class="command"><strong>install</strong></span> supplied
7936 with some operating systems cannot create more than one 7936 with some operating systems cannot create more than one
7937 directory at a time. As such, you should call 7937 directory at a time. As such, you should call
7938 <code class="literal">${INSTALL_*_DIR}</code> like this:</p> 7938 <code class="literal">${INSTALL_*_DIR}</code> like this:</p>
7939<pre class="programlisting"> 7939<pre class="programlisting">
7940${INSTALL_DATA_DIR} ${PREFIX}/dir1 7940${INSTALL_DATA_DIR} ${PREFIX}/dir1
7941${INSTALL_DATA_DIR} ${PREFIX}/dir2 7941${INSTALL_DATA_DIR} ${PREFIX}/dir2
7942</pre> 7942</pre>
7943<p>You can also just append <span class="quote">&#8220;<span class="quote"><code class="literal">dir1 7943<p>You can also just append <span class="quote">&#8220;<span class="quote"><code class="literal">dir1
7944 dir2</code></span>&#8221;</span> to the 7944 dir2</code></span>&#8221;</span> to the
7945 <code class="varname">INSTALLATION_DIRS</code> variable, which will 7945 <code class="varname">INSTALLATION_DIRS</code> variable, which will
7946 automatically do the right thing.</p> 7946 automatically do the right thing.</p>
7947</div> 7947</div>
7948<div class="sect2"> 7948<div class="sect2">
7949<div class="titlepage"><div><div><h3 class="title"> 7949<div class="titlepage"><div><div><h3 class="title">
7950<a name="where-to-install-documentation"></a>19.6.2. Where to install documentation</h3></div></div></div> 7950<a name="where-to-install-documentation"></a>19.6.2. Where to install documentation</h3></div></div></div>
7951<p>In general, documentation should be installed into 7951<p>In general, documentation should be installed into
7952 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or 7952 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or
7953 <code class="filename">${PREFIX}/share/doc/${PKGNAME}</code> (the latter 7953 <code class="filename">${PREFIX}/share/doc/${PKGNAME}</code> (the latter
7954 includes the version number of the package).</p> 7954 includes the version number of the package).</p>
7955<p>Many modern packages using GNU autoconf allow to set the 7955<p>Many modern packages using GNU autoconf allow to set the
7956 directory where HTML documentation is installed with the 7956 directory where HTML documentation is installed with the
7957 <span class="quote">&#8220;<span class="quote">--with-html-dir</span>&#8221;</span> option. Sometimes using this flag 7957 <span class="quote">&#8220;<span class="quote">--with-html-dir</span>&#8221;</span> option. Sometimes using this flag
7958 is needed because otherwise the documentation ends up in 7958 is needed because otherwise the documentation ends up in
7959 <code class="filename">${PREFIX}/share/doc/html</code> or other 7959 <code class="filename">${PREFIX}/share/doc/html</code> or other
7960 places.</p> 7960 places.</p>
7961<p>An exception to the above is that library API documentation 7961<p>An exception to the above is that library API documentation
7962 generated with the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/textproc/gtk-doc/README.html" target="_top"><code class="filename">textproc/gtk-doc</code></a> tools, for use by special 7962 generated with the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/textproc/gtk-doc/README.html" target="_top"><code class="filename">textproc/gtk-doc</code></a> tools, for use by special
7963 browsers (devhelp) should be left at their default location, which 7963 browsers (devhelp) should be left at their default location, which
7964 is <code class="filename">${PREFIX}/share/gtk-doc</code>. Such 7964 is <code class="filename">${PREFIX}/share/gtk-doc</code>. Such
7965 documentation can be recognized from files ending in 7965 documentation can be recognized from files ending in
7966 <code class="filename">.devhelp</code> or <code class="filename">.devhelp2</code>. 7966 <code class="filename">.devhelp</code> or <code class="filename">.devhelp2</code>.
7967 (It is also acceptable to install such files in 7967 (It is also acceptable to install such files in
7968 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or 7968 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or
7969 <code class="filename">${PREFIX}/share/doc/${PKGNAME}</code>; the 7969 <code class="filename">${PREFIX}/share/doc/${PKGNAME}</code>; the
7970 <code class="filename">.devhelp*</code> file must be directly in that 7970 <code class="filename">.devhelp*</code> file must be directly in that
7971 directory then, no additional subdirectory level is allowed in 7971 directory then, no additional subdirectory level is allowed in
7972 this case. This is usually achieved by using 7972 this case. This is usually achieved by using
7973 <span class="quote">&#8220;<span class="quote">--with-html-dir=${PREFIX}/share/doc</span>&#8221;</span>. 7973 <span class="quote">&#8220;<span class="quote">--with-html-dir=${PREFIX}/share/doc</span>&#8221;</span>.
7974 <code class="filename">${PREFIX}/share/gtk-doc</code> is preferred 7974 <code class="filename">${PREFIX}/share/gtk-doc</code> is preferred
7975 though.)</p> 7975 though.)</p>
7976</div> 7976</div>
7977<div class="sect2"> 7977<div class="sect2">
7978<div class="titlepage"><div><div><h3 class="title"> 7978<div class="titlepage"><div><div><h3 class="title">
7979<a name="installing-score-files"></a>19.6.3. Installing highscore files</h3></div></div></div> 7979<a name="installing-score-files"></a>19.6.3. Installing highscore files</h3></div></div></div>
7980<p>Certain packages, most of them in the games category, install 7980<p>Certain packages, most of them in the games category, install
7981 a score file that allows all users on the system to record their 7981 a score file that allows all users on the system to record their
7982 highscores. In order for this to work, the binaries need to be 7982 highscores. In order for this to work, the binaries need to be
7983 installed setgid and the score files owned by the appropriate 7983 installed setgid and the score files owned by the appropriate
7984 group and/or owner (traditionally the "games" user/group). Set 7984 group and/or owner (traditionally the "games" user/group). Set
7985 <code class="varname">USE_GAMESGROUP</code> to yes to support this. The 7985 <code class="varname">USE_GAMESGROUP</code> to yes to support this. The
7986 following variables, documented in more detail in 7986 following variables, documented in more detail in
7987 <code class="filename">mk/defaults/mk.conf</code>, control this 7987 <code class="filename">mk/defaults/mk.conf</code>, control this
7988 behaviour: <code class="varname">GAMEDATAMODE</code>, 7988 behaviour: <code class="varname">GAMEDATAMODE</code>,
7989 <code class="varname">GAMEDIRMODE</code>, <code class="varname">GAMES_GROUP</code>, 7989 <code class="varname">GAMEDIRMODE</code>, <code class="varname">GAMES_GROUP</code>,
7990 <code class="varname">GAMEMODE</code>, <code class="varname">GAME_USER</code>. 7990 <code class="varname">GAMEMODE</code>, <code class="varname">GAME_USER</code>.
7991 Other useful variables are: <code class="varname">GAMEDIR_PERMS</code>, 7991 Other useful variables are: <code class="varname">GAMEDIR_PERMS</code>,
7992 <code class="varname">GAMEDATA_PERMS</code> and 7992 <code class="varname">GAMEDATA_PERMS</code> and
7993 <code class="varname">SETGID_GAMES_PERMS</code>.</p> 7993 <code class="varname">SETGID_GAMES_PERMS</code>.</p>
7994<p>An example that illustrates some of the variables described above is 7994<p>An example that illustrates some of the variables described above is
7995 <code class="filename">games/moon-buggy</code>. <code class="varname">OWN_DIRS_PERMS</code> is 7995 <code class="filename">games/moon-buggy</code>. <code class="varname">OWN_DIRS_PERMS</code> is
7996 used to properly set directory permissions of the directory where the 7996 used to properly set directory permissions of the directory where the
7997 scorefile is saved, <code class="varname">REQD_FILES_PERMS</code> is used to create a 7997 scorefile is saved, <code class="varname">REQD_FILES_PERMS</code> is used to create a
7998 dummy scorefile (<code class="filename">mbscore</code>) with the proper permissions 7998 dummy scorefile (<code class="filename">mbscore</code>) with the proper permissions
7999 and <code class="varname">SPECIAL_PERMS</code> is used to install setgid the game 7999 and <code class="varname">SPECIAL_PERMS</code> is used to install setgid the game
8000 binary:</p> 8000 binary:</p>
8001<pre class="programlisting"> 8001<pre class="programlisting">
8002USE_GAMESGROUP= yes 8002USE_GAMESGROUP= yes
8003 8003
8004BUILD_DEFS+= VARBASE 8004BUILD_DEFS+= VARBASE
8005 8005
8006OWN_DIRS_PERMS+= ${VARBASE}/games/moon-buggy ${GAMEDIR_PERMS} 8006OWN_DIRS_PERMS+= ${VARBASE}/games/moon-buggy ${GAMEDIR_PERMS}
8007REQD_FILES_PERMS+= /dev/null ${VARBASE}/games/moon-buggy/mbscore ${GAMEDATA_PERMS} 8007REQD_FILES_PERMS+= /dev/null ${VARBASE}/games/moon-buggy/mbscore ${GAMEDATA_PERMS}
8008SPECIAL_PERMS+= ${PREFIX}/bin/moon-buggy ${SETGID_GAMES_PERMS} 8008SPECIAL_PERMS+= ${PREFIX}/bin/moon-buggy ${SETGID_GAMES_PERMS}
8009</pre> 8009</pre>
8010<p>Various <code class="varname">INSTALL_*</code> variables are also available: 8010<p>Various <code class="varname">INSTALL_*</code> variables are also available:
8011 <code class="varname">INSTALL_GAME</code> to install setgid game binaries, 8011 <code class="varname">INSTALL_GAME</code> to install setgid game binaries,
8012 <code class="varname">INSTALL_GAME_DIR</code> to install game directories that are 8012 <code class="varname">INSTALL_GAME_DIR</code> to install game directories that are
8013 needed to be accessed by setgid games and 8013 needed to be accessed by setgid games and
8014 <code class="varname">INSTALL_GAME_DATA</code> to install scorefiles.</p> 8014 <code class="varname">INSTALL_GAME_DATA</code> to install scorefiles.</p>
8015<p>A package should therefore never hard code file ownership or 8015<p>A package should therefore never hard code file ownership or
8016 access permissions but rely on <code class="varname">*_PERMS</code> as described above 8016 access permissions but rely on <code class="varname">*_PERMS</code> as described above
8017 or alternatively on <code class="varname">INSTALL_GAME</code>, 8017 or alternatively on <code class="varname">INSTALL_GAME</code>,
8018 <code class="varname">INSTALL_GAME_DATA</code> and 8018 <code class="varname">INSTALL_GAME_DATA</code> and
8019 <code class="varname">INSTALL_GAME_DIR</code> to set these correctly.</p> 8019 <code class="varname">INSTALL_GAME_DIR</code> to set these correctly.</p>
8020</div> 8020</div>
8021<div class="sect2"> 8021<div class="sect2">
8022<div class="titlepage"><div><div><h3 class="title"> 8022<div class="titlepage"><div><div><h3 class="title">
8023<a name="destdir-support"></a>19.6.4. Adding DESTDIR support to packages</h3></div></div></div> 8023<a name="destdir-support"></a>19.6.4. Adding DESTDIR support to packages</h3></div></div></div>
8024<p><code class="varname">DESTDIR</code> support means that a package 8024<p><code class="varname">DESTDIR</code> support means that a package
8025 installs into a staging directory, not the final location of the 8025 installs into a staging directory, not the final location of the
8026 files. Then a binary package is created which can be used for 8026 files. Then a binary package is created which can be used for
8027 installation as usual. There are two ways: Either the package must 8027 installation as usual. There are two ways: Either the package must
8028 install as root (<span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span>) or the package can 8028 install as root (<span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span>) or the package can
8029 install as non-root user (<span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>).</p> 8029 install as non-root user (<span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>).</p>
8030<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8030<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8031<li class="listitem"><p><code class="varname">PKG_DESTDIR_SUPPORT</code> has to be 8031<li class="listitem"><p><code class="varname">PKG_DESTDIR_SUPPORT</code> has to be
8032 set to <span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>. 8032 set to <span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>.
8033 By default <code class="varname">PKG_DESTDIR_SUPPORT</code> 8033 By default <code class="varname">PKG_DESTDIR_SUPPORT</code>
8034 is set to <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span> to help catching more 8034 is set to <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span> to help catching more
8035 potential packaging problems. If bsd.prefs.mk is included in the Makefile, 8035 potential packaging problems. If bsd.prefs.mk is included in the Makefile,
8036 <code class="varname">PKG_DESTDIR_SUPPORT</code> needs to be set before 8036 <code class="varname">PKG_DESTDIR_SUPPORT</code> needs to be set before
8037 the inclusion.</p></li> 8037 the inclusion.</p></li>
8038<li class="listitem"><p>All installation operations have to be prefixed with 8038<li class="listitem"><p>All installation operations have to be prefixed with
8039 <code class="filename">${DESTDIR}</code>.</p></li> 8039 <code class="filename">${DESTDIR}</code>.</p></li>
8040<li class="listitem"><p>automake gets this DESTDIR mostly right 8040<li class="listitem"><p>automake gets this DESTDIR mostly right
8041 automatically. Many manual rules and pre/post-install often are 8041 automatically. Many manual rules and pre/post-install often are
8042 incorrect; fix them.</p></li> 8042 incorrect; fix them.</p></li>
8043<li class="listitem"><p>If files are installed with special owner/group 8043<li class="listitem"><p>If files are installed with special owner/group
8044 use <code class="varname">SPECIAL_PERMS</code>.</p></li> 8044 use <code class="varname">SPECIAL_PERMS</code>.</p></li>
8045<li class="listitem"><p>In general, packages should support 8045<li class="listitem"><p>In general, packages should support
8046 <code class="varname">UNPRIVILEGED</code> to be able to use 8046 <code class="varname">UNPRIVILEGED</code> to be able to use
8047 DESTDIR.</p></li> 8047 DESTDIR.</p></li>
8048</ul></div> 8048</ul></div>
8049</div> 8049</div>
8050<div class="sect2"> 8050<div class="sect2">
8051<div class="titlepage"><div><div><h3 class="title"> 8051<div class="titlepage"><div><div><h3 class="title">
8052<a name="hardcoded-paths"></a>19.6.5. Packages with hardcoded paths to other interpreters</h3></div></div></div> 8052<a name="hardcoded-paths"></a>19.6.5. Packages with hardcoded paths to other interpreters</h3></div></div></div>
8053<p>Your package may also contain scripts with hardcoded paths to 8053<p>Your package may also contain scripts with hardcoded paths to
8054 other interpreters besides (or as well as) perl. To correct the 8054 other interpreters besides (or as well as) perl. To correct the
8055 full pathname to the script interpreter, you need to set the 8055 full pathname to the script interpreter, you need to set the
8056 following definitions in your <code class="filename">Makefile</code> (we 8056 following definitions in your <code class="filename">Makefile</code> (we
8057 shall use <span class="command"><strong>tclsh</strong></span> in this example):</p> 8057 shall use <span class="command"><strong>tclsh</strong></span> in this example):</p>
8058<pre class="programlisting"> 8058<pre class="programlisting">
8059REPLACE_INTERPRETER+= tcl 8059REPLACE_INTERPRETER+= tcl
8060REPLACE.tcl.old= .*/bin/tclsh 8060REPLACE.tcl.old= .*/bin/tclsh
8061REPLACE.tcl.new= ${PREFIX}/bin/tclsh 8061REPLACE.tcl.new= ${PREFIX}/bin/tclsh
8062REPLACE_FILES.tcl= # list of tcl scripts which need to be fixed, 8062REPLACE_FILES.tcl= # list of tcl scripts which need to be fixed,
8063# relative to ${WRKSRC}, just as in REPLACE_PERL 8063# relative to ${WRKSRC}, just as in REPLACE_PERL
8064</pre> 8064</pre>
8065<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 8065<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
8066<h3 class="title">Note</h3> 8066<h3 class="title">Note</h3>
8067<p>Before March 2006, these variables were called 8067<p>Before March 2006, these variables were called
8068 <code class="varname">_REPLACE.*</code> and 8068 <code class="varname">_REPLACE.*</code> and
8069 <code class="varname">_REPLACE_FILES.*</code>.</p> 8069 <code class="varname">_REPLACE_FILES.*</code>.</p>
8070</div> 8070</div>
8071</div> 8071</div>
8072<div class="sect2"> 8072<div class="sect2">
8073<div class="titlepage"><div><div><h3 class="title"> 8073<div class="titlepage"><div><div><h3 class="title">
8074<a name="perl-modules"></a>19.6.6. Packages installing perl modules</h3></div></div></div> 8074<a name="perl-modules"></a>19.6.6. Packages installing perl modules</h3></div></div></div>
8075<p>Makefiles of packages providing perl5 modules should include 8075<p>Makefiles of packages providing perl5 modules should include
8076 the Makefile fragment 8076 the Makefile fragment
8077 <code class="filename">../../lang/perl5/module.mk</code>. It provides a 8077 <code class="filename">../../lang/perl5/module.mk</code>. It provides a
8078 <span class="command"><strong>do-configure</strong></span> target for the standard perl 8078 <span class="command"><strong>do-configure</strong></span> target for the standard perl
8079 configuration for such modules as well as various hooks to tune 8079 configuration for such modules as well as various hooks to tune
8080 this configuration. See comments in this file for 8080 this configuration. See comments in this file for
8081 details.</p> 8081 details.</p>
8082<p>Perl5 modules will install into different places depending 8082<p>Perl5 modules will install into different places depending
8083 on the version of perl used during the build process. To 8083 on the version of perl used during the build process. To
8084 address this, pkgsrc will append lines to the 8084 address this, pkgsrc will append lines to the
8085 <code class="filename">PLIST</code> corresponding to the files listed in 8085 <code class="filename">PLIST</code> corresponding to the files listed in
8086 the installed <code class="filename">.packlist</code> file generated by 8086 the installed <code class="filename">.packlist</code> file generated by
8087 most perl5 modules. This is invoked by defining 8087 most perl5 modules. This is invoked by defining
8088 <code class="varname">PERL5_PACKLIST</code> to a space-separated list of 8088 <code class="varname">PERL5_PACKLIST</code> to a space-separated list of
8089 packlist files relative to <code class="varname">PERL5_PACKLIST_DIR</code> 8089 packlist files relative to <code class="varname">PERL5_PACKLIST_DIR</code>
8090 (<code class="varname">PERL5_INSTALLVENDORARCH</code> by default), 8090 (<code class="varname">PERL5_INSTALLVENDORARCH</code> by default),
8091 e.g.:</p> 8091 e.g.:</p>
8092<pre class="programlisting"> 8092<pre class="programlisting">
8093PERL5_PACKLIST= auto/Pg/.packlist 8093PERL5_PACKLIST= auto/Pg/.packlist
8094</pre> 8094</pre>
8095<p>The perl5 config variables 8095<p>The perl5 config variables
8096 <code class="varname">installarchlib</code>, 8096 <code class="varname">installarchlib</code>,
8097 <code class="varname">installscript</code>, 8097 <code class="varname">installscript</code>,
8098 <code class="varname">installvendorbin</code>, 8098 <code class="varname">installvendorbin</code>,
8099 <code class="varname">installvendorscript</code>, 8099 <code class="varname">installvendorscript</code>,
8100 <code class="varname">installvendorarch</code>, 8100 <code class="varname">installvendorarch</code>,
8101 <code class="varname">installvendorlib</code>, 8101 <code class="varname">installvendorlib</code>,
8102 <code class="varname">installvendorman1dir</code>, and 8102 <code class="varname">installvendorman1dir</code>, and
8103 <code class="varname">installvendorman3dir</code> represent those 8103 <code class="varname">installvendorman3dir</code> represent those
8104 locations in which components of perl5 modules may be installed, 8104 locations in which components of perl5 modules may be installed,
8105 provided as variable with uppercase and prefixed with 8105 provided as variable with uppercase and prefixed with
8106 <code class="varname">PERL5_</code>, e.g. <code class="varname">PERL5_INSTALLARCHLIB</code> 8106 <code class="varname">PERL5_</code>, e.g. <code class="varname">PERL5_INSTALLARCHLIB</code>
8107 and may be used by perl5 packages that don't have a packlist. 8107 and may be used by perl5 packages that don't have a packlist.
8108 These variables are also substituted for in the 8108 These variables are also substituted for in the
8109 <code class="filename">PLIST</code> as uppercase prefixed with 8109 <code class="filename">PLIST</code> as uppercase prefixed with
8110 <code class="varname">PERL5_SUB_</code>.</p> 8110 <code class="varname">PERL5_SUB_</code>.</p>
8111</div> 8111</div>
8112<div class="sect2"> 8112<div class="sect2">
8113<div class="titlepage"><div><div><h3 class="title"> 8113<div class="titlepage"><div><div><h3 class="title">
8114<a name="faq.info-files"></a>19.6.7. Packages installing info files</h3></div></div></div> 8114<a name="faq.info-files"></a>19.6.7. Packages installing info files</h3></div></div></div>
8115<p>Some packages install info files or use the 8115<p>Some packages install info files or use the
8116 <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span> 8116 <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span>
8117 commands. <code class="varname">INFO_FILES</code> should be defined in 8117 commands. <code class="varname">INFO_FILES</code> should be defined in
8118 the package Makefile so that <code class="filename">INSTALL</code> and 8118 the package Makefile so that <code class="filename">INSTALL</code> and
8119 <code class="filename">DEINSTALL</code> scripts will be generated to 8119 <code class="filename">DEINSTALL</code> scripts will be generated to
8120 handle registration of the info files in the Info directory 8120 handle registration of the info files in the Info directory
8121 file. The <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span> command used for the info 8121 file. The <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span> command used for the info
8122 files registration is either provided by the system, or by a 8122 files registration is either provided by the system, or by a
8123 special purpose package automatically added as dependency if 8123 special purpose package automatically added as dependency if
8124 needed.</p> 8124 needed.</p>
8125<p><code class="varname">PKGINFODIR</code> is the directory under 8125<p><code class="varname">PKGINFODIR</code> is the directory under
8126 <code class="filename">${PREFIX}</code> where info files are primarily 8126 <code class="filename">${PREFIX}</code> where info files are primarily
8127 located. <code class="varname">PKGINFODIR</code> defaults to 8127 located. <code class="varname">PKGINFODIR</code> defaults to
8128 <span class="quote">&#8220;<span class="quote">info</span>&#8221;</span> and can be overridden by the user.</p> 8128 <span class="quote">&#8220;<span class="quote">info</span>&#8221;</span> and can be overridden by the user.</p>
8129<p>The info files for the package should be listed in the 8129<p>The info files for the package should be listed in the
8130 package <code class="filename">PLIST</code>; however any split info files 8130 package <code class="filename">PLIST</code>; however any split info files
8131 need not be listed.</p> 8131 need not be listed.</p>
8132<p>A package which needs the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command 8132<p>A package which needs the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command
8133 at build time must add <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> to 8133 at build time must add <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> to
8134 <code class="varname">USE_TOOLS</code> in its Makefile. If a minimum 8134 <code class="varname">USE_TOOLS</code> in its Makefile. If a minimum
8135 version of the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command is needed it 8135 version of the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command is needed it
8136 should be noted with the <code class="varname">TEXINFO_REQD</code> 8136 should be noted with the <code class="varname">TEXINFO_REQD</code>
8137 variable in the package <code class="filename">Makefile</code>. By 8137 variable in the package <code class="filename">Makefile</code>. By
8138 default, a minimum version of 3.12 is required. If the system 8138 default, a minimum version of 3.12 is required. If the system
8139 does not provide a <span class="command"><strong>makeinfo</strong></span> command or if it 8139 does not provide a <span class="command"><strong>makeinfo</strong></span> command or if it
8140 does not match the required minimum, a build dependency on the 8140 does not match the required minimum, a build dependency on the
8141 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/gtexinfo/README.html" target="_top"><code class="filename">devel/gtexinfo</code></a> package will 8141 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/gtexinfo/README.html" target="_top"><code class="filename">devel/gtexinfo</code></a> package will
8142 be added automatically.</p> 8142 be added automatically.</p>
8143<p>The build and installation process of the software provided 8143<p>The build and installation process of the software provided
8144 by the package should not use the 8144 by the package should not use the
8145 <span class="command"><strong>install-info</strong></span> command as the registration of 8145 <span class="command"><strong>install-info</strong></span> command as the registration of
8146 info files is the task of the package 8146 info files is the task of the package
8147 <code class="filename">INSTALL</code> script, and it must use the 8147 <code class="filename">INSTALL</code> script, and it must use the
8148 appropriate <span class="command"><strong>makeinfo</strong></span> command.</p> 8148 appropriate <span class="command"><strong>makeinfo</strong></span> command.</p>
8149<p>To achieve this goal, the pkgsrc infrastructure creates 8149<p>To achieve this goal, the pkgsrc infrastructure creates
8150 overriding scripts for the <span class="command"><strong>install-info</strong></span> and 8150 overriding scripts for the <span class="command"><strong>install-info</strong></span> and
8151 <span class="command"><strong>makeinfo</strong></span> commands in a directory listed early 8151 <span class="command"><strong>makeinfo</strong></span> commands in a directory listed early
8152 in <code class="varname">PATH</code>.</p> 8152 in <code class="varname">PATH</code>.</p>
8153<p>The script overriding <span class="command"><strong>install-info</strong></span> has 8153<p>The script overriding <span class="command"><strong>install-info</strong></span> has
8154 no effect except the logging of a message. The script overriding 8154 no effect except the logging of a message. The script overriding
8155 <span class="command"><strong>makeinfo</strong></span> logs a message and according to the 8155 <span class="command"><strong>makeinfo</strong></span> logs a message and according to the
8156 value of <code class="varname">TEXINFO_REQD</code> either runs the appropriate 8156 value of <code class="varname">TEXINFO_REQD</code> either runs the appropriate
8157 <span class="command"><strong>makeinfo</strong></span> command or exit on error.</p> 8157 <span class="command"><strong>makeinfo</strong></span> command or exit on error.</p>
8158</div> 8158</div>
8159<div class="sect2"> 8159<div class="sect2">
8160<div class="titlepage"><div><div><h3 class="title"> 8160<div class="titlepage"><div><div><h3 class="title">
8161<a name="manpages"></a>19.6.8. Packages installing man pages</h3></div></div></div> 8161<a name="manpages"></a>19.6.8. Packages installing man pages</h3></div></div></div>
8162<p>All packages that install manual pages should install them 8162<p>All packages that install manual pages should install them
8163 into the same directory, so that there is one common place to look 8163 into the same directory, so that there is one common place to look
8164 for them. In pkgsrc, this place is 8164 for them. In pkgsrc, this place is
8165 <code class="literal">${PREFIX}/${PKGMANDIR}</code>, and this expression 8165 <code class="literal">${PREFIX}/${PKGMANDIR}</code>, and this expression
8166 should be used in packages. The default for 8166 should be used in packages. The default for
8167 <code class="varname">PKGMANDIR</code> is 8167 <code class="varname">PKGMANDIR</code> is
8168 <span class="quote">&#8220;<span class="quote"><code class="filename">man</code></span>&#8221;</span>. Another often-used value 8168 <span class="quote">&#8220;<span class="quote"><code class="filename">man</code></span>&#8221;</span>. Another often-used value
8169 is <span class="quote">&#8220;<span class="quote"><code class="filename">share/man</code></span>&#8221;</span>.</p> 8169 is <span class="quote">&#8220;<span class="quote"><code class="filename">share/man</code></span>&#8221;</span>.</p>
8170<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 8170<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
8171<h3 class="title">Note</h3> 8171<h3 class="title">Note</h3>
8172<p>The support for a custom <code class="varname">PKGMANDIR</code> 8172<p>The support for a custom <code class="varname">PKGMANDIR</code>
8173 is far from complete.</p> 8173 is far from complete.</p>
8174</div> 8174</div>
8175<p>The <code class="filename">PLIST</code> files can just use 8175<p>The <code class="filename">PLIST</code> files can just use
8176 <code class="filename">man/</code> as the top level directory for the man 8176 <code class="filename">man/</code> as the top level directory for the man
8177 page file entries, and the pkgsrc framework will convert as 8177 page file entries, and the pkgsrc framework will convert as
8178 needed. In all other places, the correct 8178 needed. In all other places, the correct
8179 <code class="varname">PKGMANDIR</code> must be used.</p> 8179 <code class="varname">PKGMANDIR</code> must be used.</p>
8180<p>Packages that are 8180<p>Packages that are
8181 configured with <code class="varname">GNU_CONFIGURE</code> set as 8181 configured with <code class="varname">GNU_CONFIGURE</code> set as
8182 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, by default will use the 8182 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, by default will use the
8183 <code class="filename">./configure</code> 8183 <code class="filename">./configure</code>
8184 --mandir switch to set where the man pages should be installed. 8184 --mandir switch to set where the man pages should be installed.
8185 The path is <code class="varname">GNU_CONFIGURE_MANDIR</code> which defaults 8185 The path is <code class="varname">GNU_CONFIGURE_MANDIR</code> which defaults
8186 to <code class="varname">${PREFIX}/${PKGMANDIR}</code>.</p> 8186 to <code class="varname">${PREFIX}/${PKGMANDIR}</code>.</p>
8187<p>Packages that use <code class="varname">GNU_CONFIGURE</code> but do not 8187<p>Packages that use <code class="varname">GNU_CONFIGURE</code> but do not
8188 use --mandir, can set <code class="varname">CONFIGURE_HAS_MANDIR</code> 8188 use --mandir, can set <code class="varname">CONFIGURE_HAS_MANDIR</code>
8189 to <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span>. 8189 to <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span>.
8190 Or if the <code class="filename">./configure</code> script uses 8190 Or if the <code class="filename">./configure</code> script uses
8191 a non-standard use of --mandir, you can set 8191 a non-standard use of --mandir, you can set
8192 <code class="varname">GNU_CONFIGURE_MANDIR</code> as needed.</p> 8192 <code class="varname">GNU_CONFIGURE_MANDIR</code> as needed.</p>
8193<p>See <a class="xref" href="#manpage-compression" title="13.5. Man page compression">Section 13.5, &#8220;Man page compression&#8221;</a> for 8193<p>See <a class="xref" href="#manpage-compression" title="13.5. Man page compression">Section 13.5, &#8220;Man page compression&#8221;</a> for
8194 information on installation of compressed manual pages.</p> 8194 information on installation of compressed manual pages.</p>
8195</div> 8195</div>
8196<div class="sect2"> 8196<div class="sect2">
8197<div class="titlepage"><div><div><h3 class="title"> 8197<div class="titlepage"><div><div><h3 class="title">
8198<a name="gconf-data-files"></a>19.6.9. Packages installing GConf data files</h3></div></div></div> 8198<a name="gconf-data-files"></a>19.6.9. Packages installing GConf data files</h3></div></div></div>
8199<p>If a package installs <code class="filename">.schemas</code> or 8199<p>If a package installs <code class="filename">.schemas</code> or
8200 <code class="filename">.entries</code> files, used by GConf, 8200 <code class="filename">.entries</code> files, used by GConf,
8201 you need to take some extra steps to make sure they get registered 8201 you need to take some extra steps to make sure they get registered
8202 in the database:</p> 8202 in the database:</p>
8203<div class="orderedlist"><ol class="orderedlist" type="1"> 8203<div class="orderedlist"><ol class="orderedlist" type="1">
8204<li class="listitem"><p>Include <code class="filename">../../devel/GConf/schemas.mk</code> 8204<li class="listitem"><p>Include <code class="filename">../../devel/GConf/schemas.mk</code>
8205 instead of its <code class="filename">buildlink3.mk</code> file. This 8205 instead of its <code class="filename">buildlink3.mk</code> file. This
8206 takes care of rebuilding the GConf database at installation and 8206 takes care of rebuilding the GConf database at installation and
8207 deinstallation time, and tells the package where to install 8207 deinstallation time, and tells the package where to install
8208 GConf data files using some standard configure arguments. It 8208 GConf data files using some standard configure arguments. It
8209 also disallows any access to the database directly from the 8209 also disallows any access to the database directly from the
8210 package.</p></li> 8210 package.</p></li>
8211<li class="listitem"><p>Ensure that the package installs its 8211<li class="listitem"><p>Ensure that the package installs its
8212 <code class="filename">.schemas</code> files under 8212 <code class="filename">.schemas</code> files under
8213 <code class="filename">${PREFIX}/share/gconf/schemas</code>. If they get 8213 <code class="filename">${PREFIX}/share/gconf/schemas</code>. If they get
8214 installed under <code class="filename">${PREFIX}/etc</code>, you will 8214 installed under <code class="filename">${PREFIX}/etc</code>, you will
8215 need to manually patch the package.</p></li> 8215 need to manually patch the package.</p></li>
8216<li class="listitem"><p>Check the PLIST and remove any entries under the etc/gconf 8216<li class="listitem"><p>Check the PLIST and remove any entries under the etc/gconf
8217 directory, as they will be handled automatically. See 8217 directory, as they will be handled automatically. See
8218 <a class="xref" href="#faq.conf" title="9.13. How do I change the location of configuration files?">Section 9.13, &#8220;How do I change the location of configuration files?&#8221;</a> for more information.</p></li> 8218 <a class="xref" href="#faq.conf" title="9.13. How do I change the location of configuration files?">Section 9.13, &#8220;How do I change the location of configuration files?&#8221;</a> for more information.</p></li>
8219<li class="listitem"><p>Define the <code class="varname">GCONF_SCHEMAS</code> variable in 8219<li class="listitem"><p>Define the <code class="varname">GCONF_SCHEMAS</code> variable in
8220 your <code class="filename">Makefile</code> with a list of all 8220 your <code class="filename">Makefile</code> with a list of all
8221 <code class="filename">.schemas</code> files installed by the package, if 8221 <code class="filename">.schemas</code> files installed by the package, if
8222 any. Names must not contain any directories in them.</p></li> 8222 any. Names must not contain any directories in them.</p></li>
8223<li class="listitem"><p>Define the <code class="varname">GCONF_ENTRIES</code> variable in 8223<li class="listitem"><p>Define the <code class="varname">GCONF_ENTRIES</code> variable in
8224 your <code class="filename">Makefile</code> with a 8224 your <code class="filename">Makefile</code> with a
8225 list of all <code class="filename">.entries</code> files installed by the 8225 list of all <code class="filename">.entries</code> files installed by the
8226 package, if any. Names must not contain any directories in 8226 package, if any. Names must not contain any directories in
8227 them.</p></li> 8227 them.</p></li>
8228</ol></div> 8228</ol></div>
8229</div> 8229</div>
8230<div class="sect2"> 8230<div class="sect2">
8231<div class="titlepage"><div><div><h3 class="title"> 8231<div class="titlepage"><div><div><h3 class="title">
8232<a name="scrollkeeper-data-files"></a>19.6.10. Packages installing scrollkeeper/rarian data files</h3></div></div></div> 8232<a name="scrollkeeper-data-files"></a>19.6.10. Packages installing scrollkeeper/rarian data files</h3></div></div></div>
8233<p>If a package installs <code class="filename">.omf</code> files, used by 8233<p>If a package installs <code class="filename">.omf</code> files, used by
8234 scrollkeeper/rarian, you need to take some extra steps to make sure they 8234 scrollkeeper/rarian, you need to take some extra steps to make sure they
8235 get registered in the database:</p> 8235 get registered in the database:</p>
8236<div class="orderedlist"><ol class="orderedlist" type="1"> 8236<div class="orderedlist"><ol class="orderedlist" type="1">
8237<li class="listitem"><p>Include 8237<li class="listitem"><p>Include
8238 <code class="filename">../../mk/omf-scrollkeeper.mk</code> 8238 <code class="filename">../../mk/omf-scrollkeeper.mk</code>
8239 instead of rarian's <code class="filename">buildlink3.mk</code> file. This 8239 instead of rarian's <code class="filename">buildlink3.mk</code> file. This
8240 takes care of rebuilding the scrollkeeper database at 8240 takes care of rebuilding the scrollkeeper database at
8241 installation and deinstallation time, and disallows any access 8241 installation and deinstallation time, and disallows any access
8242 to it directly from the package.</p></li> 8242 to it directly from the package.</p></li>
8243<li class="listitem"><p>Check the PLIST and remove any entries under the 8243<li class="listitem"><p>Check the PLIST and remove any entries under the
8244 <code class="filename">libdata/scrollkeeper</code> directory, as they 8244 <code class="filename">libdata/scrollkeeper</code> directory, as they
8245 will be handled automatically.</p></li> 8245 will be handled automatically.</p></li>
8246<li class="listitem"><p>Remove the <code class="filename">share/omf</code> directory from 8246<li class="listitem"><p>Remove the <code class="filename">share/omf</code> directory from
8247 the PLIST. It will be handled by rarian. (<span class="command"><strong>make 8247 the PLIST. It will be handled by rarian. (<span class="command"><strong>make
8248 print-PLIST</strong></span> does this automatically.)</p></li> 8248 print-PLIST</strong></span> does this automatically.)</p></li>
8249</ol></div> 8249</ol></div>
8250</div> 8250</div>
8251<div class="sect2"> 8251<div class="sect2">
8252<div class="titlepage"><div><div><h3 class="title"> 8252<div class="titlepage"><div><div><h3 class="title">
8253<a name="x11-fonts"></a>19.6.11. Packages installing X11 fonts</h3></div></div></div> 8253<a name="x11-fonts"></a>19.6.11. Packages installing X11 fonts</h3></div></div></div>
8254<p>If a package installs font files, you will need to rebuild 8254<p>If a package installs font files, you will need to rebuild
8255 the fonts database in the directory where they get installed at 8255 the fonts database in the directory where they get installed at
8256 installation and deinstallation time. This can be automatically 8256 installation and deinstallation time. This can be automatically
8257 done by using the pkginstall framework.</p> 8257 done by using the pkginstall framework.</p>
8258<p>You can list the directories where fonts are installed in the 8258<p>You can list the directories where fonts are installed in the
8259 <code class="varname">FONTS_DIRS.<em class="replaceable"><code>type</code></em></code> 8259 <code class="varname">FONTS_DIRS.<em class="replaceable"><code>type</code></em></code>
8260 variables, where <em class="replaceable"><code>type</code></em> can be one of 8260 variables, where <em class="replaceable"><code>type</code></em> can be one of
8261 <span class="quote">&#8220;<span class="quote">ttf</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">type1</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">x11</span>&#8221;</span>. 8261 <span class="quote">&#8220;<span class="quote">ttf</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">type1</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">x11</span>&#8221;</span>.
8262 Also make sure that the database file 8262 Also make sure that the database file
8263 <code class="filename">fonts.dir</code> is not listed in the PLIST.</p> 8263 <code class="filename">fonts.dir</code> is not listed in the PLIST.</p>
8264<p>Note that you should not create new directories for fonts; 8264<p>Note that you should not create new directories for fonts;
8265 instead use the standard ones to avoid that the user needs to 8265 instead use the standard ones to avoid that the user needs to
8266 manually configure his X server to find them.</p> 8266 manually configure his X server to find them.</p>
8267</div> 8267</div>
8268<div class="sect2"> 8268<div class="sect2">
8269<div class="titlepage"><div><div><h3 class="title"> 8269<div class="titlepage"><div><div><h3 class="title">
8270<a name="gtk2-modules"></a>19.6.12. Packages installing GTK2 modules</h3></div></div></div> 8270<a name="gtk2-modules"></a>19.6.12. Packages installing GTK2 modules</h3></div></div></div>
8271<p>If a package installs GTK2 immodules or loaders, you need to 8271<p>If a package installs GTK2 immodules or loaders, you need to
8272 take some extra steps to get them registered in the GTK2 database 8272 take some extra steps to get them registered in the GTK2 database
8273 properly:</p> 8273 properly:</p>
8274<div class="orderedlist"><ol class="orderedlist" type="1"> 8274<div class="orderedlist"><ol class="orderedlist" type="1">
8275<li class="listitem"><p>Include 8275<li class="listitem"><p>Include
8276 <code class="filename">../../x11/gtk2/modules.mk</code> instead of its 8276 <code class="filename">../../x11/gtk2/modules.mk</code> instead of its
8277 <code class="filename">buildlink3.mk</code> file. This takes care of 8277 <code class="filename">buildlink3.mk</code> file. This takes care of
8278 rebuilding the database at installation and deinstallation time.</p></li> 8278 rebuilding the database at installation and deinstallation time.</p></li>
8279<li class="listitem"><p>Set <code class="varname">GTK2_IMMODULES=YES</code> if 8279<li class="listitem"><p>Set <code class="varname">GTK2_IMMODULES=YES</code> if
8280 your package installs GTK2 immodules.</p></li> 8280 your package installs GTK2 immodules.</p></li>
8281<li class="listitem"><p>Set <code class="varname">GTK2_LOADERS=YES</code> if your package installs 8281<li class="listitem"><p>Set <code class="varname">GTK2_LOADERS=YES</code> if your package installs
8282 GTK2 loaders.</p></li> 8282 GTK2 loaders.</p></li>
8283<li class="listitem"> 8283<li class="listitem">
8284<p>Patch the package to not touch any of the GTK2 8284<p>Patch the package to not touch any of the GTK2
8285 databases directly. These are:</p> 8285 databases directly. These are:</p>
8286<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8286<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8287<li class="listitem"><p><code class="filename">libdata/gtk-2.0/gdk-pixbuf.loaders</code></p></li> 8287<li class="listitem"><p><code class="filename">libdata/gtk-2.0/gdk-pixbuf.loaders</code></p></li>
8288<li class="listitem"><p><code class="filename">libdata/gtk-2.0/gtk.immodules</code></p></li> 8288<li class="listitem"><p><code class="filename">libdata/gtk-2.0/gtk.immodules</code></p></li>
8289</ul></div> 8289</ul></div>
8290</li> 8290</li>
8291<li class="listitem"><p>Check the <code class="filename">PLIST</code> and remove 8291<li class="listitem"><p>Check the <code class="filename">PLIST</code> and remove
8292 any entries under the <code class="filename">libdata/gtk-2.0</code> 8292 any entries under the <code class="filename">libdata/gtk-2.0</code>
8293 directory, as they will be handled automatically.</p></li> 8293 directory, as they will be handled automatically.</p></li>
8294</ol></div> 8294</ol></div>
8295</div> 8295</div>
8296<div class="sect2"> 8296<div class="sect2">
8297<div class="titlepage"><div><div><h3 class="title"> 8297<div class="titlepage"><div><div><h3 class="title">
8298<a name="sgml-xml-data"></a>19.6.13. Packages installing SGML or XML data</h3></div></div></div> 8298<a name="sgml-xml-data"></a>19.6.13. Packages installing SGML or XML data</h3></div></div></div>
8299<p>If a package installs SGML or XML data files that need to be 8299<p>If a package installs SGML or XML data files that need to be
8300 registered in system-wide catalogs (like DTDs, sub-catalogs, 8300 registered in system-wide catalogs (like DTDs, sub-catalogs,
8301 etc.), you need to take some extra steps:</p> 8301 etc.), you need to take some extra steps:</p>
8302<div class="orderedlist"><ol class="orderedlist" type="1"> 8302<div class="orderedlist"><ol class="orderedlist" type="1">
8303<li class="listitem"><p>Include 8303<li class="listitem"><p>Include
8304 <code class="filename">../../textproc/xmlcatmgr/catalogs.mk</code> in 8304 <code class="filename">../../textproc/xmlcatmgr/catalogs.mk</code> in
8305 your <code class="filename">Makefile</code>, which takes care of 8305 your <code class="filename">Makefile</code>, which takes care of
8306 registering those files in system-wide catalogs at 8306 registering those files in system-wide catalogs at
8307 installation and deinstallation time.</p></li> 8307 installation and deinstallation time.</p></li>
8308<li class="listitem"><p>Set <code class="varname">SGML_CATALOGS</code> to the full path of 8308<li class="listitem"><p>Set <code class="varname">SGML_CATALOGS</code> to the full path of
8309 any SGML catalogs installed by the package.</p></li> 8309 any SGML catalogs installed by the package.</p></li>
8310<li class="listitem"><p>Set <code class="varname">XML_CATALOGS</code> to the full path of 8310<li class="listitem"><p>Set <code class="varname">XML_CATALOGS</code> to the full path of
8311 any XML catalogs installed by the package.</p></li> 8311 any XML catalogs installed by the package.</p></li>
8312<li class="listitem"><p>Set <code class="varname">SGML_ENTRIES</code> to individual entries 8312<li class="listitem"><p>Set <code class="varname">SGML_ENTRIES</code> to individual entries
8313 to be added to the SGML catalog. These come in groups of 8313 to be added to the SGML catalog. These come in groups of
8314 three strings; see xmlcatmgr(1) for more information 8314 three strings; see xmlcatmgr(1) for more information
8315 (specifically, arguments recognized by the 'add' action). 8315 (specifically, arguments recognized by the 'add' action).
8316 Note that you will normally not use this variable.</p></li> 8316 Note that you will normally not use this variable.</p></li>
8317<li class="listitem"><p>Set <code class="varname">XML_ENTRIES</code> to individual entries 8317<li class="listitem"><p>Set <code class="varname">XML_ENTRIES</code> to individual entries
8318 to be added to the XML catalog. These come in groups of three 8318 to be added to the XML catalog. These come in groups of three
8319 strings; see xmlcatmgr(1) for more information (specifically, 8319 strings; see xmlcatmgr(1) for more information (specifically,
8320 arguments recognized by the 'add' action). Note that you will 8320 arguments recognized by the 'add' action). Note that you will
8321 normally not use this variable.</p></li> 8321 normally not use this variable.</p></li>
8322</ol></div> 8322</ol></div>
8323</div> 8323</div>
8324<div class="sect2"> 8324<div class="sect2">
8325<div class="titlepage"><div><div><h3 class="title"> 8325<div class="titlepage"><div><div><h3 class="title">
8326<a name="mime-database"></a>19.6.14. Packages installing extensions to the MIME database</h3></div></div></div> 8326<a name="mime-database"></a>19.6.14. Packages installing extensions to the MIME database</h3></div></div></div>
8327<p>If a package provides extensions to the MIME database by 8327<p>If a package provides extensions to the MIME database by
8328 installing <code class="filename">.xml</code> files inside 8328 installing <code class="filename">.xml</code> files inside
8329 <code class="filename">${PREFIX}/share/mime/packages</code>, you 8329 <code class="filename">${PREFIX}/share/mime/packages</code>, you
8330 need to take some extra steps to ensure that the database is kept 8330 need to take some extra steps to ensure that the database is kept
8331 consistent with respect to these new files:</p> 8331 consistent with respect to these new files:</p>
8332<div class="orderedlist"><ol class="orderedlist" type="1"> 8332<div class="orderedlist"><ol class="orderedlist" type="1">
8333<li class="listitem"><p>Include 8333<li class="listitem"><p>Include
8334 <code class="filename">../../databases/shared-mime-info/mimedb.mk</code> 8334 <code class="filename">../../databases/shared-mime-info/mimedb.mk</code>
8335 (avoid using the <code class="filename">buildlink3.mk</code> file from 8335 (avoid using the <code class="filename">buildlink3.mk</code> file from
8336 this same directory, which is reserved for inclusion from 8336 this same directory, which is reserved for inclusion from
8337 other <code class="filename">buildlink3.mk</code> files). It takes 8337 other <code class="filename">buildlink3.mk</code> files). It takes
8338 care of rebuilding the MIME database at installation and 8338 care of rebuilding the MIME database at installation and
8339 deinstallation time, and disallows any access to it directly 8339 deinstallation time, and disallows any access to it directly
8340 from the package.</p></li> 8340 from the package.</p></li>
8341<li class="listitem"><p>Check the PLIST and remove any entries under the 8341<li class="listitem"><p>Check the PLIST and remove any entries under the
8342 <code class="filename">share/mime</code> directory, 8342 <code class="filename">share/mime</code> directory,
8343 <span class="emphasis"><em>except</em></span> for files saved under 8343 <span class="emphasis"><em>except</em></span> for files saved under
8344 <code class="filename">share/mime/packages</code>. The former are 8344 <code class="filename">share/mime/packages</code>. The former are
8345 handled automatically by 8345 handled automatically by
8346 the update-mime-database program, but the latter are 8346 the update-mime-database program, but the latter are
8347 package-dependent and must be removed by the package that 8347 package-dependent and must be removed by the package that
8348 installed them in the first place.</p></li> 8348 installed them in the first place.</p></li>
8349<li class="listitem"><p>Remove any <code class="filename">share/mime/*</code> directories 8349<li class="listitem"><p>Remove any <code class="filename">share/mime/*</code> directories
8350 from the PLIST. They will be handled by the shared-mime-info 8350 from the PLIST. They will be handled by the shared-mime-info
8351 package.</p></li> 8351 package.</p></li>
8352</ol></div> 8352</ol></div>
8353</div> 8353</div>
8354<div class="sect2"> 8354<div class="sect2">
8355<div class="titlepage"><div><div><h3 class="title"> 8355<div class="titlepage"><div><div><h3 class="title">
8356<a name="intltool"></a>19.6.15. Packages using intltool</h3></div></div></div> 8356<a name="intltool"></a>19.6.15. Packages using intltool</h3></div></div></div>
8357<p>If a package uses intltool during its build, add 8357<p>If a package uses intltool during its build, add
8358 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code>, 8358 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code>,
8359 which forces it to use the intltool package provided by pkgsrc, 8359 which forces it to use the intltool package provided by pkgsrc,
8360 instead of the one bundled with the distribution file.</p> 8360 instead of the one bundled with the distribution file.</p>
8361<p>This tracks intltool's build-time dependencies and uses the 8361<p>This tracks intltool's build-time dependencies and uses the
8362 latest available version; this way, the package benefits of any 8362 latest available version; this way, the package benefits of any
8363 bug fixes that may have appeared since it was released.</p> 8363 bug fixes that may have appeared since it was released.</p>
8364</div> 8364</div>
8365<div class="sect2"> 8365<div class="sect2">
8366<div class="titlepage"><div><div><h3 class="title"> 8366<div class="titlepage"><div><div><h3 class="title">
8367<a name="startup-scripts"></a>19.6.16. Packages installing startup scripts</h3></div></div></div> 8367<a name="startup-scripts"></a>19.6.16. Packages installing startup scripts</h3></div></div></div>
8368<p>If a package contains a rc.d script, it won't be copied into 8368<p>If a package contains a rc.d script, it won't be copied into
8369 the startup directory by default, but you can enable it, by adding 8369 the startup directory by default, but you can enable it, by adding
8370 the option <code class="varname">PKG_RCD_SCRIPTS=YES</code> in 8370 the option <code class="varname">PKG_RCD_SCRIPTS=YES</code> in
8371 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. This option will copy the scripts 8371 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. This option will copy the scripts
8372 into <code class="filename">/etc/rc.d</code> when a package is installed, and 8372 into <code class="filename">/etc/rc.d</code> when a package is installed, and
8373 it will automatically remove the scripts when the package is 8373 it will automatically remove the scripts when the package is
8374 deinstalled.</p> 8374 deinstalled.</p>
8375</div> 8375</div>
8376<div class="sect2"> 8376<div class="sect2">
8377<div class="titlepage"><div><div><h3 class="title"> 8377<div class="titlepage"><div><div><h3 class="title">
8378<a name="tex-packages"></a>19.6.17. Packages installing TeX modules</h3></div></div></div> 8378<a name="tex-packages"></a>19.6.17. Packages installing TeX modules</h3></div></div></div>
8379<p>If a package installs TeX packages into the texmf tree, 8379<p>If a package installs TeX packages into the texmf tree,
8380 the <code class="filename">ls-R</code> database of the tree needs to be 8380 the <code class="filename">ls-R</code> database of the tree needs to be
8381 updated.</p> 8381 updated.</p>
8382<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 8382<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
8383<h3 class="title">Note</h3> 8383<h3 class="title">Note</h3>
8384<p>Except the main TeX packages such as kpathsea, 8384<p>Except the main TeX packages such as kpathsea,
8385 packages should install files 8385 packages should install files
8386 into <code class="filename">${PREFIX}/share/texmf-dist</code>, 8386 into <code class="filename">${PREFIX}/share/texmf-dist</code>,
8387 not <code class="filename">${PREFIX}/share/texmf</code>.</p> 8387 not <code class="filename">${PREFIX}/share/texmf</code>.</p>
8388</div> 8388</div>
8389<div class="orderedlist"><ol class="orderedlist" type="1"> 8389<div class="orderedlist"><ol class="orderedlist" type="1">
8390<li class="listitem"><p>Include 8390<li class="listitem"><p>Include
8391 <code class="filename">../../print/kpathsea/texmf.mk</code>. This 8391 <code class="filename">../../print/kpathsea/texmf.mk</code>. This
8392 takes care of rebuilding the <code class="filename">ls-R</code> 8392 takes care of rebuilding the <code class="filename">ls-R</code>
8393 database at installation and deinstallation time.</p></li> 8393 database at installation and deinstallation time.</p></li>
8394<li class="listitem"> 8394<li class="listitem">
8395<p>If your package installs files into a texmf 8395<p>If your package installs files into a texmf
8396 tree other than the one 8396 tree other than the one
8397 at <code class="filename">${PREFIX}/share/texmf-dist</code>, 8397 at <code class="filename">${PREFIX}/share/texmf-dist</code>,
8398 set <code class="varname">TEX_TEXMF_DIRS</code> to the list of all texmf 8398 set <code class="varname">TEX_TEXMF_DIRS</code> to the list of all texmf
8399 trees that need database update.</p> 8399 trees that need database update.</p>
8400<p>If your package also installs font map files that need 8400<p>If your package also installs font map files that need
8401 to be registered using <span class="command"><strong>updmap</strong></span>, 8401 to be registered using <span class="command"><strong>updmap</strong></span>,
8402 include <code class="filename">../../print/tex-tetex/map.mk</code> and 8402 include <code class="filename">../../print/tex-tetex/map.mk</code> and
8403 set <code class="varname">TEX_MAP_FILES</code> and/or 8403 set <code class="varname">TEX_MAP_FILES</code> and/or
8404 <code class="varname">TEX_MIXEDMAP_FILES</code> to the list of all 8404 <code class="varname">TEX_MIXEDMAP_FILES</code> to the list of all
8405 such font map files. Then <span class="command"><strong>updmap</strong></span> will 8405 such font map files. Then <span class="command"><strong>updmap</strong></span> will
8406 be run automatically at installation/deinstallation to 8406 be run automatically at installation/deinstallation to
8407 enable/disable font map files for TeX output 8407 enable/disable font map files for TeX output
8408 drivers.</p> 8408 drivers.</p>
8409</li> 8409</li>
8410<li class="listitem"><p>Make sure that none of <code class="filename">ls-R</code> 8410<li class="listitem"><p>Make sure that none of <code class="filename">ls-R</code>
8411 databases are included in <code class="filename">PLIST</code>, as 8411 databases are included in <code class="filename">PLIST</code>, as
8412 they will be removed only by the kpathsea package.</p></li> 8412 they will be removed only by the kpathsea package.</p></li>
8413</ol></div> 8413</ol></div>
8414</div> 8414</div>
8415<div class="sect2"> 8415<div class="sect2">
8416<div class="titlepage"><div><div><h3 class="title"> 8416<div class="titlepage"><div><div><h3 class="title">
8417<a name="emulation-packages"></a>19.6.18. Packages supporting running binaries in 8417<a name="emulation-packages"></a>19.6.18. Packages supporting running binaries in
8418 emulation</h3></div></div></div> 8418 emulation</h3></div></div></div>
8419<p>There are some packages that provide libraries and 8419<p>There are some packages that provide libraries and
8420 executables for running binaries from a one operating system 8420 executables for running binaries from a one operating system
8421 on a different one (if the latter supports it). One example 8421 on a different one (if the latter supports it). One example
8422 is running Linux binaries on NetBSD.</p> 8422 is running Linux binaries on NetBSD.</p>
8423<p>The <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/rpm2pkg/README.html" target="_top"><code class="filename">pkgtools/rpm2pkg</code></a> 8423<p>The <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/rpm2pkg/README.html" target="_top"><code class="filename">pkgtools/rpm2pkg</code></a>
8424 helps in extracting and packaging Linux rpm packages.</p> 8424 helps in extracting and packaging Linux rpm packages.</p>
8425<p>The <code class="varname">CHECK_SHLIBS</code> can be set to no to 8425<p>The <code class="varname">CHECK_SHLIBS</code> can be set to no to
8426 avoid the <span class="command"><strong>check-shlibs</strong></span> target, which tests 8426 avoid the <span class="command"><strong>check-shlibs</strong></span> target, which tests
8427 if all libraries for each installed executable can be found by 8427 if all libraries for each installed executable can be found by
8428 the dynamic linker. Since the standard dynamic linker is run, 8428 the dynamic linker. Since the standard dynamic linker is run,
8429 this fails for emulation packages, because the libraries used 8429 this fails for emulation packages, because the libraries used
8430 by the emulation are not in the standard directories.</p> 8430 by the emulation are not in the standard directories.</p>
8431</div> 8431</div>
8432<div class="sect2"> 8432<div class="sect2">
8433<div class="titlepage"><div><div><h3 class="title"> 8433<div class="titlepage"><div><div><h3 class="title">
8434<a name="hicolor-theme"></a>19.6.19. Packages installing hicolor theme icons</h3></div></div></div> 8434<a name="hicolor-theme"></a>19.6.19. Packages installing hicolor theme icons</h3></div></div></div>
8435<p>If a package installs images under the 8435<p>If a package installs images under the
8436 <code class="filename">share/icons/hicolor</code> and/or updates the 8436 <code class="filename">share/icons/hicolor</code> and/or updates the
8437 <code class="filename">share/icons/hicolor/icon-theme.cache</code> 8437 <code class="filename">share/icons/hicolor/icon-theme.cache</code>
8438 database, you need to take some extra steps to make sure that the 8438 database, you need to take some extra steps to make sure that the
8439 shared theme directory is handled appropriately and that the cache 8439 shared theme directory is handled appropriately and that the cache
8440 database is rebuilt:</p> 8440 database is rebuilt:</p>
8441<div class="orderedlist"><ol class="orderedlist" type="1"> 8441<div class="orderedlist"><ol class="orderedlist" type="1">
8442<li class="listitem"><p>Include 8442<li class="listitem"><p>Include
8443 <code class="filename">../../graphics/hicolor-icon-theme/buildlink3.mk</code>.</p></li> 8443 <code class="filename">../../graphics/hicolor-icon-theme/buildlink3.mk</code>.</p></li>
8444<li class="listitem"><p>Check the <code class="filename">PLIST</code> and remove the 8444<li class="listitem"><p>Check the <code class="filename">PLIST</code> and remove the
8445 entry that refers to the theme cache.</p></li> 8445 entry that refers to the theme cache.</p></li>
8446<li class="listitem"><p>Ensure that the PLIST does not remove the shared icon 8446<li class="listitem"><p>Ensure that the PLIST does not remove the shared icon
8447 directories from the <code class="filename">share/icons/hicolor</code> 8447 directories from the <code class="filename">share/icons/hicolor</code>
8448 hierarchy because they will be handled automatically.</p></li> 8448 hierarchy because they will be handled automatically.</p></li>
8449</ol></div> 8449</ol></div>
8450<p>The best way to verify that the PLIST is correct with 8450<p>The best way to verify that the PLIST is correct with
8451 respect to the last two points is to regenerate it using 8451 respect to the last two points is to regenerate it using
8452 <span class="command"><strong>make print-PLIST</strong></span>.</p> 8452 <span class="command"><strong>make print-PLIST</strong></span>.</p>
8453</div> 8453</div>
8454<div class="sect2"> 8454<div class="sect2">
8455<div class="titlepage"><div><div><h3 class="title"> 8455<div class="titlepage"><div><div><h3 class="title">
8456<a name="desktop-files"></a>19.6.20. Packages installing desktop files</h3></div></div></div> 8456<a name="desktop-files"></a>19.6.20. Packages installing desktop files</h3></div></div></div>
8457<p>If a package installs <code class="filename">.desktop</code> files 8457<p>If a package installs <code class="filename">.desktop</code> files
8458 under <code class="filename">share/applications</code> and these include 8458 under <code class="filename">share/applications</code> and these include
8459 MIME information (MimeType key), you need to take extra steps to 8459 MIME information (MimeType key), you need to take extra steps to
8460 ensure that they are registered into the MIME database:</p> 8460 ensure that they are registered into the MIME database:</p>
8461<div class="orderedlist"><ol class="orderedlist" type="1"> 8461<div class="orderedlist"><ol class="orderedlist" type="1">
8462<li class="listitem"><p>Include 8462<li class="listitem"><p>Include
8463 <code class="filename">../../sysutils/desktop-file-utils/desktopdb.mk</code>.</p></li> 8463 <code class="filename">../../sysutils/desktop-file-utils/desktopdb.mk</code>.</p></li>
8464<li class="listitem"><p>Check the PLIST and remove the entry that refers to the 8464<li class="listitem"><p>Check the PLIST and remove the entry that refers to the
8465 <code class="filename">share/applications/mimeinfo.cache</code> file. 8465 <code class="filename">share/applications/mimeinfo.cache</code> file.
8466 It will be handled automatically.</p></li> 8466 It will be handled automatically.</p></li>
8467</ol></div> 8467</ol></div>
8468<p>The best way to verify that the PLIST is correct with 8468<p>The best way to verify that the PLIST is correct with
8469 respect to the last point is to regenerate it using <span class="command"><strong>make 8469 respect to the last point is to regenerate it using <span class="command"><strong>make
8470 print-PLIST</strong></span>.</p> 8470 print-PLIST</strong></span>.</p>
8471</div> 8471</div>
8472</div> 8472</div>
8473<div class="sect1"> 8473<div class="sect1">
8474<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8474<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8475<a name="punting"></a>19.7. Marking packages as having problems</h2></div></div></div> 8475<a name="punting"></a>19.7. Marking packages as having problems</h2></div></div></div>
8476<p>In some cases one does not have the time to solve a problem 8476<p>In some cases one does not have the time to solve a problem
8477 immediately. In this case, one can plainly mark a package as broken. For 8477 immediately. In this case, one can plainly mark a package as broken. For
8478 this, one just sets the variable <code class="varname">BROKEN</code> to the 8478 this, one just sets the variable <code class="varname">BROKEN</code> to the
8479 reason why the package is broken (similar to the 8479 reason why the package is broken (similar to the
8480 <code class="varname">RESTRICTED</code> variable). A user trying to build 8480 <code class="varname">RESTRICTED</code> variable). A user trying to build
8481 the package will immediately be shown this message, and the build 8481 the package will immediately be shown this message, and the build
8482 will not be even tried.</p> 8482 will not be even tried.</p>
8483<p><code class="varname">BROKEN</code> packages are removed from pkgsrc in irregular 8483<p><code class="varname">BROKEN</code> packages are removed from pkgsrc in irregular
8484 intervals.</p> 8484 intervals.</p>
8485</div> 8485</div>
8486</div> 8486</div>
8487<div class="chapter"> 8487<div class="chapter">
8488<div class="titlepage"><div><div><h2 class="title"> 8488<div class="titlepage"><div><div><h2 class="title">
8489<a name="debug"></a>Chapter 20. Debugging</h2></div></div></div> 8489<a name="debug"></a>Chapter 20. Debugging</h2></div></div></div>
8490<p>To check out all the gotchas when building a package, here are 8490<p>To check out all the gotchas when building a package, here are
8491 the steps that I do in order to get a package working. Please note 8491 the steps that I do in order to get a package working. Please note
8492 this is basically the same as what was explained in the previous 8492 this is basically the same as what was explained in the previous
8493 sections, only with some debugging aids.</p> 8493 sections, only with some debugging aids.</p>
8494<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8494<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8495<li class="listitem"><p>Be sure to set <code class="varname">PKG_DEVELOPER=yes</code> in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p></li> 8495<li class="listitem"><p>Be sure to set <code class="varname">PKG_DEVELOPER=yes</code> in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p></li>
8496<li class="listitem"> 8496<li class="listitem">
8497<p>Install <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a>, 8497<p>Install <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a>,
8498 create a directory for a new package, change into it, then run 8498 create a directory for a new package, change into it, then run
8499 <span class="command"><strong>url2pkg</strong></span>:</p> 8499 <span class="command"><strong>url2pkg</strong></span>:</p>
8500<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>mkdir /usr/pkgsrc/<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>examplepkg</code></em></code></strong> 8500<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>mkdir /usr/pkgsrc/<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>examplepkg</code></em></code></strong>
8501<code class="prompt">%</code> <strong class="userinput"><code>cd /usr/pkgsrc/<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>examplepkg</code></em></code></strong> 8501<code class="prompt">%</code> <strong class="userinput"><code>cd /usr/pkgsrc/<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>examplepkg</code></em></code></strong>
8502<code class="prompt">%</code> <strong class="userinput"><code>url2pkg http://www.example.com/path/to/distfile.tar.gz</code></strong></pre> 8502<code class="prompt">%</code> <strong class="userinput"><code>url2pkg http://www.example.com/path/to/distfile.tar.gz</code></strong></pre>
8503</li> 8503</li>
8504<li class="listitem"><p>Edit the <code class="filename">Makefile</code> as requested.</p></li> 8504<li class="listitem"><p>Edit the <code class="filename">Makefile</code> as requested.</p></li>
8505<li class="listitem"><p>Fill in the <code class="filename">DESCR</code> file</p></li> 8505<li class="listitem"><p>Fill in the <code class="filename">DESCR</code> file</p></li>
8506<li class="listitem"><p>Run <span class="command"><strong>make configure</strong></span></p></li> 8506<li class="listitem"><p>Run <span class="command"><strong>make configure</strong></span></p></li>
8507<li class="listitem"><p>Add any dependencies glimpsed from documentation and the 8507<li class="listitem"><p>Add any dependencies glimpsed from documentation and the
8508 configure step to the package's 8508 configure step to the package's
8509 <code class="filename">Makefile</code>.</p></li> 8509 <code class="filename">Makefile</code>.</p></li>
8510<li class="listitem"> 8510<li class="listitem">
8511<p>Make the package compile, doing multiple rounds of</p> 8511<p>Make the package compile, doing multiple rounds of</p>
8512<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make</code></strong> 8512<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make</code></strong>
8513<code class="prompt">%</code> <strong class="userinput"><code>pkgvi ${WRKSRC}/some/file/that/does/not/compile</code></strong> 8513<code class="prompt">%</code> <strong class="userinput"><code>pkgvi ${WRKSRC}/some/file/that/does/not/compile</code></strong>
8514<code class="prompt">%</code> <strong class="userinput"><code>mkpatches</code></strong> 8514<code class="prompt">%</code> <strong class="userinput"><code>mkpatches</code></strong>
8515<code class="prompt">%</code> <strong class="userinput"><code>patchdiff</code></strong> 8515<code class="prompt">%</code> <strong class="userinput"><code>patchdiff</code></strong>
8516<code class="prompt">%</code> <strong class="userinput"><code>mv ${WRKDIR}/.newpatches/* patches</code></strong> 8516<code class="prompt">%</code> <strong class="userinput"><code>mv ${WRKDIR}/.newpatches/* patches</code></strong>
8517<code class="prompt">%</code> <strong class="userinput"><code>make mps</code></strong> 8517<code class="prompt">%</code> <strong class="userinput"><code>make mps</code></strong>
8518<code class="prompt">%</code> <strong class="userinput"><code>make clean</code></strong></pre> 8518<code class="prompt">%</code> <strong class="userinput"><code>make clean</code></strong></pre>
8519<p>Doing this step as non-root user will ensure that no files 8519<p>Doing this step as non-root user will ensure that no files
8520 are modified that shouldn't be, especially during the build 8520 are modified that shouldn't be, especially during the build
8521 phase. <span class="command"><strong>mkpatches</strong></span>, 8521 phase. <span class="command"><strong>mkpatches</strong></span>,
8522 <span class="command"><strong>patchdiff</strong></span> and <span class="command"><strong>pkgvi</strong></span> are 8522 <span class="command"><strong>patchdiff</strong></span> and <span class="command"><strong>pkgvi</strong></span> are
8523 from the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> 8523 from the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a>
8524 package.</p> 8524 package.</p>
8525</li> 8525</li>
8526<li class="listitem"><p>Look at the <code class="filename">Makefile</code>, fix if 8526<li class="listitem"><p>Look at the <code class="filename">Makefile</code>, fix if
8527 necessary; see <a class="xref" href="#components.Makefile" title="11.1. Makefile">Section 11.1, &#8220;<code class="filename">Makefile</code>&#8221;</a>.</p></li> 8527 necessary; see <a class="xref" href="#components.Makefile" title="11.1. Makefile">Section 11.1, &#8220;<code class="filename">Makefile</code>&#8221;</a>.</p></li>
8528<li class="listitem"> 8528<li class="listitem">
8529<p>Generate a <code class="filename">PLIST</code>:</p> 8529<p>Generate a <code class="filename">PLIST</code>:</p>
8530<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong> 8530<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong>
8531<code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST &gt;PLIST</code></strong> 8531<code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST &gt;PLIST</code></strong>
8532<code class="prompt">#</code> <strong class="userinput"><code>make deinstall</code></strong> 8532<code class="prompt">#</code> <strong class="userinput"><code>make deinstall</code></strong>
8533<code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong> 8533<code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong>
8534<code class="prompt">#</code> <strong class="userinput"><code>make deinstall</code></strong></pre> 8534<code class="prompt">#</code> <strong class="userinput"><code>make deinstall</code></strong></pre>
8535<p>You usually need to be <code class="username">root</code> to do 8535<p>You usually need to be <code class="username">root</code> to do
8536 this. Look if there are any files left:</p> 8536 this. Look if there are any files left:</p>
8537<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST</code></strong></pre> 8537<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST</code></strong></pre>
8538<p>If this reveals any files that are missing in 8538<p>If this reveals any files that are missing in
8539 <code class="filename">PLIST</code>, add them.</p> 8539 <code class="filename">PLIST</code>, add them.</p>
8540</li> 8540</li>
8541<li class="listitem"> 8541<li class="listitem">
8542<p>Now that the <code class="filename">PLIST</code> is OK, install the 8542<p>Now that the <code class="filename">PLIST</code> is OK, install the
8543 package again and make a binary package:</p> 8543 package again and make a binary package:</p>
8544<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make reinstall</code></strong> 8544<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make reinstall</code></strong>
8545<code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong></pre> 8545<code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong></pre>
8546</li> 8546</li>
8547<li class="listitem"> 8547<li class="listitem">
8548<p>Delete the installed package:</p> 8548<p>Delete the installed package:</p>
8549<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkg_delete <em class="replaceable"><code>examplepkg</code></em></code></strong></pre> 8549<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkg_delete <em class="replaceable"><code>examplepkg</code></em></code></strong></pre>
8550</li> 8550</li>
8551<li class="listitem"> 8551<li class="listitem">
8552<p>Repeat the above <span class="command"><strong>make print-PLIST</strong></span> 8552<p>Repeat the above <span class="command"><strong>make print-PLIST</strong></span>
8553 command, which shouldn't find anything now:</p> 8553 command, which shouldn't find anything now:</p>
8554<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST</code></strong></pre> 8554<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST</code></strong></pre>
8555</li> 8555</li>
8556<li class="listitem"> 8556<li class="listitem">
8557<p>Reinstall the binary package:</p> 8557<p>Reinstall the binary package:</p>
8558<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkg_add .../<em class="replaceable"><code>examplepkg</code></em>.tgz</code></strong></pre> 8558<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkg_add .../<em class="replaceable"><code>examplepkg</code></em>.tgz</code></strong></pre>
8559</li> 8559</li>
8560<li class="listitem"><p>Play with it. Make sure everything works.</p></li> 8560<li class="listitem"><p>Play with it. Make sure everything works.</p></li>
8561<li class="listitem"> 8561<li class="listitem">
8562<p>Run <span class="command"><strong>pkglint</strong></span> from <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>, and fix the problems it 8562<p>Run <span class="command"><strong>pkglint</strong></span> from <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>, and fix the problems it
8563 reports:</p> 8563 reports:</p>
8564<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkglint</code></strong></pre> 8564<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkglint</code></strong></pre>
8565</li> 8565</li>
8566<li class="listitem"><p>Submit (or commit, if you have cvs access); see <a class="xref" href="#submit" title="Chapter 21. Submitting and Committing">Chapter 21, <i>Submitting and Committing</i></a>.</p></li> 8566<li class="listitem"><p>Submit (or commit, if you have cvs access); see <a class="xref" href="#submit" title="Chapter 21. Submitting and Committing">Chapter 21, <i>Submitting and Committing</i></a>.</p></li>
8567</ul></div> 8567</ul></div>
8568</div> 8568</div>
8569<div class="chapter"> 8569<div class="chapter">
8570<div class="titlepage"><div><div><h2 class="title"> 8570<div class="titlepage"><div><div><h2 class="title">
8571<a name="submit"></a>Chapter 21. Submitting and Committing</h2></div></div></div> 8571<a name="submit"></a>Chapter 21. Submitting and Committing</h2></div></div></div>
8572<div class="toc"> 8572<div class="toc">
8573<p><b>Table of Contents</b></p> 8573<p><b>Table of Contents</b></p>
8574<dl class="toc"> 8574<dl class="toc">
8575<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt> 8575<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt>
8576<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt> 8576<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt>
8577<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt> 8577<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt>
8578<dt><span class="sect1"><a href="#commit-messages">21.4. Commit Messages</a></span></dt> 8578<dt><span class="sect1"><a href="#commit-messages">21.4. Commit Messages</a></span></dt>
8579<dt><span class="sect1"><a href="#committing-importing">21.5. Committing: Adding a package to CVS</a></span></dt> 8579<dt><span class="sect1"><a href="#committing-importing">21.5. Committing: Adding a package to CVS</a></span></dt>
8580<dt><span class="sect1"><a href="#updating-package">21.6. Updating a package to a newer version</a></span></dt> 8580<dt><span class="sect1"><a href="#updating-package">21.6. Updating a package to a newer version</a></span></dt>
8581<dt><span class="sect1"><a href="#renaming-package">21.7. Renaming a package in pkgsrc</a></span></dt> 8581<dt><span class="sect1"><a href="#renaming-package">21.7. Renaming a package in pkgsrc</a></span></dt>
8582<dt><span class="sect1"><a href="#moving-package">21.8. Moving a package in pkgsrc</a></span></dt> 8582<dt><span class="sect1"><a href="#moving-package">21.8. Moving a package in pkgsrc</a></span></dt>
8583</dl> 8583</dl>
8584</div> 8584</div>
8585<div class="sect1"> 8585<div class="sect1">
8586<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8586<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8587<a name="submitting-binary-packages"></a>21.1. Submitting binary packages</h2></div></div></div> 8587<a name="submitting-binary-packages"></a>21.1. Submitting binary packages</h2></div></div></div>
8588<p>Our policy is that we accept binaries only from pkgsrc 8588<p>Our policy is that we accept binaries only from pkgsrc
8589 developers to guarantee that the packages don't contain any 8589 developers to guarantee that the packages don't contain any
8590 trojan horses etc. This is not to annoy anyone but rather to 8590 trojan horses etc. This is not to annoy anyone but rather to
8591 protect our users! You're still free to put up your home-made 8591 protect our users! You're still free to put up your home-made
8592 binary packages and tell the world where to get them. NetBSD 8592 binary packages and tell the world where to get them. NetBSD
8593 developers doing bulk builds and wanting to upload them please 8593 developers doing bulk builds and wanting to upload them please
8594 see <a class="xref" href="#bulk" title="Chapter 7. Creating binary packages for everything in pkgsrc (bulk builds)">Chapter 7, <i>Creating binary packages for everything in pkgsrc (bulk 8594 see <a class="xref" href="#bulk" title="Chapter 7. Creating binary packages for everything in pkgsrc (bulk builds)">Chapter 7, <i>Creating binary packages for everything in pkgsrc (bulk
8595builds)</i></a>.</p> 8595builds)</i></a>.</p>
8596</div> 8596</div>
8597<div class="sect1"> 8597<div class="sect1">
8598<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8598<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8599<a name="submitting-your-package"></a>21.2. Submitting source packages (for non-NetBSD-developers)</h2></div></div></div> 8599<a name="submitting-your-package"></a>21.2. Submitting source packages (for non-NetBSD-developers)</h2></div></div></div>
8600<p>First, check that your package is complete, compiles and 8600<p>First, check that your package is complete, compiles and
8601 runs well; see <a class="xref" href="#debug" title="Chapter 20. Debugging">Chapter 20, <i>Debugging</i></a> and the rest of this 8601 runs well; see <a class="xref" href="#debug" title="Chapter 20. Debugging">Chapter 20, <i>Debugging</i></a> and the rest of this
8602 document. Next, generate an uuencoded gzipped <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?tar+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a> 8602 document. Next, generate an uuencoded gzipped <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?tar+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a>
8603 archive that contains all files that make up the package. 8603 archive that contains all files that make up the package.
8604 Finally, send this package to the pkgsrc bug tracking system, 8604 Finally, send this package to the pkgsrc bug tracking system,
8605 either with the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a> command, or if you don't have 8605 either with the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a> command, or if you don't have
8606 that, go to the web page 8606 that, go to the web page
8607 <a class="ulink" href="http://www.NetBSD.org/support/send-pr.html" target="_top">http://www.NetBSD.org/support/send-pr.html</a>, 8607 <a class="ulink" href="http://www.NetBSD.org/support/send-pr.html" target="_top">http://www.NetBSD.org/support/send-pr.html</a>,
8608 which contains some instructions and a link to a form where you 8608 which contains some instructions and a link to a form where you
8609 can submit packages. The 8609 can submit packages. The
8610 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/sysutils/gtk-send-pr/README.html" target="_top"><code class="filename">sysutils/gtk-send-pr</code></a> package is 8610 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/sysutils/gtk-send-pr/README.html" target="_top"><code class="filename">sysutils/gtk-send-pr</code></a> package is
8611 also available as a substitute for either of the above two tools. 8611 also available as a substitute for either of the above two tools.
8612 </p> 8612 </p>
8613<p>In the form of the problem report, the category should be 8613<p>In the form of the problem report, the category should be
8614 <span class="quote">&#8220;<span class="quote">pkg</span>&#8221;</span>, the synopsis should include the package name 8614 <span class="quote">&#8220;<span class="quote">pkg</span>&#8221;</span>, the synopsis should include the package name
8615 and version number, and the description field should contain a 8615 and version number, and the description field should contain a
8616 short description of your package (contents of the COMMENT 8616 short description of your package (contents of the COMMENT
8617 variable or DESCR file are OK). The uuencoded package data should 8617 variable or DESCR file are OK). The uuencoded package data should
8618 go into the <span class="quote">&#8220;<span class="quote">fix</span>&#8221;</span> field.</p> 8618 go into the <span class="quote">&#8220;<span class="quote">fix</span>&#8221;</span> field.</p>
8619<p>If you want to submit several packages, please send a 8619<p>If you want to submit several packages, please send a
8620 separate PR for each one, it's easier for us to track things 8620 separate PR for each one, it's easier for us to track things
8621 that way.</p> 8621 that way.</p>
8622<p>Alternatively, you can also import new packages into 8622<p>Alternatively, you can also import new packages into
8623 pkgsrc-wip (<span class="quote">&#8220;<span class="quote">pkgsrc work-in-progress</span>&#8221;</span>); see the 8623 pkgsrc-wip (<span class="quote">&#8220;<span class="quote">pkgsrc work-in-progress</span>&#8221;</span>); see the
8624 homepage at <a class="ulink" href="http://pkgsrc.org/wip/" target="_top">http://pkgsrc.org/wip/</a> 8624 homepage at <a class="ulink" href="http://pkgsrc.org/wip/" target="_top">http://pkgsrc.org/wip/</a>
8625 for details.</p> 8625 for details.</p>
8626</div> 8626</div>
8627<div class="sect1"> 8627<div class="sect1">
8628<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8628<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8629<a name="general-notes-for-changes"></a>21.3. General notes when adding, updating, or removing packages</h2></div></div></div> 8629<a name="general-notes-for-changes"></a>21.3. General notes when adding, updating, or removing packages</h2></div></div></div>
8630<p>Please note all package additions, updates, moves, and 8630<p>Please note all package additions, updates, moves, and
8631 removals in <code class="filename">pkgsrc/doc/CHANGES-<em class="replaceable"><code>YYYY</code></em></code>. It's very 8631 removals in <code class="filename">pkgsrc/doc/CHANGES-<em class="replaceable"><code>YYYY</code></em></code>. It's very
8632 important to keep this file up to date and conforming to the 8632 important to keep this file up to date and conforming to the
8633 existing format, because it will be used by scripts to 8633 existing format, because it will be used by scripts to
8634 automatically update pages on <a class="ulink" href="http://www.NetBSD.org/" target="_top">www.NetBSD.org</a> and other 8634 automatically update pages on <a class="ulink" href="http://www.NetBSD.org/" target="_top">www.NetBSD.org</a> and other
8635 sites. Additionally, check the 8635 sites. Additionally, check the
8636 <code class="filename">pkgsrc/doc/TODO</code> file and remove the entry 8636 <code class="filename">pkgsrc/doc/TODO</code> file and remove the entry
8637 for the package you updated or removed, in case it was mentioned 8637 for the package you updated or removed, in case it was mentioned
8638 there.</p> 8638 there.</p>
8639<p>When the <code class="varname">PKGREVISION</code> of a package is 8639<p>When the <code class="varname">PKGREVISION</code> of a package is
8640 bumped, the change should appear in 8640 bumped, the change should appear in
8641 <code class="filename">pkgsrc/doc/CHANGES-<em class="replaceable"><code>YYYY</code></em></code> if it is security 8641 <code class="filename">pkgsrc/doc/CHANGES-<em class="replaceable"><code>YYYY</code></em></code> if it is security
8642 related or otherwise relevant. Mass bumps that result from a 8642 related or otherwise relevant. Mass bumps that result from a
8643 dependency being updated should not be mentioned. In all other 8643 dependency being updated should not be mentioned. In all other
8644 cases it's the developer's decision.</p> 8644 cases it's the developer's decision.</p>
8645<p>There is a make target that helps in creating proper 8645<p>There is a make target that helps in creating proper
8646 <code class="filename">CHANGES-<em class="replaceable"><code>YYYY</code></em></code> entries: <span class="command"><strong>make 8646 <code class="filename">CHANGES-<em class="replaceable"><code>YYYY</code></em></code> entries: <span class="command"><strong>make
8647 changes-entry</strong></span>. It uses the optional <code class="varname">CTYPE</code> 8647 changes-entry</strong></span>. It uses the optional <code class="varname">CTYPE</code>
8648 and <code class="varname">NETBSD_LOGIN_NAME</code> variables. The general 8648 and <code class="varname">NETBSD_LOGIN_NAME</code> variables. The general
8649 usage is to first make sure that your <code class="filename">CHANGES-<em class="replaceable"><code>YYYY</code></em></code> 8649 usage is to first make sure that your <code class="filename">CHANGES-<em class="replaceable"><code>YYYY</code></em></code>
8650 file is up-to-date (to avoid having to resolve conflicts later-on) 8650 file is up-to-date (to avoid having to resolve conflicts later-on)
8651 and then to <span class="command"><strong>cd</strong></span> to the package directory. For 8651 and then to <span class="command"><strong>cd</strong></span> to the package directory. For
8652 package updates, <span class="command"><strong>make changes-entry</strong></span> is enough. 8652 package updates, <span class="command"><strong>make changes-entry</strong></span> is enough.
8653 For new packages, or package moves or removals, set the 8653 For new packages, or package moves or removals, set the
8654 <code class="varname">CTYPE</code> variable on the command line to "Added", 8654 <code class="varname">CTYPE</code> variable on the command line to "Added",
8655 "Moved", or "Removed". You can set <code class="varname">NETBSD_LOGIN_NAME</code> 8655 "Moved", or "Removed". You can set <code class="varname">NETBSD_LOGIN_NAME</code>
8656 in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> if your local login name is 8656 in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> if your local login name is
8657 not the same as your NetBSD login name. The target also automatically 8657 not the same as your NetBSD login name. The target also automatically
8658 removes possibly existing entries for the package in the 8658 removes possibly existing entries for the package in the
8659 <code class="filename">TODO</code> file. Don't forget to commit 8659 <code class="filename">TODO</code> file. Don't forget to commit
8660 the changes, e.g. by using <span class="command"><strong>make commit-changes-entry</strong></span>! 8660 the changes, e.g. by using <span class="command"><strong>make commit-changes-entry</strong></span>!
8661 If you are not using a checkout directly from cvs.NetBSD.org, but e.g. 8661 If you are not using a checkout directly from cvs.NetBSD.org, but e.g.
8662 a local copy of the repository, you can set USE_NETBSD_REPO=yes. This 8662 a local copy of the repository, you can set USE_NETBSD_REPO=yes. This
8663 makes the cvs commands use the main repository. 8663 makes the cvs commands use the main repository.
8664 </p> 8664 </p>
8665</div> 8665</div>
8666<div class="sect1"> 8666<div class="sect1">
8667<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8667<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8668<a name="commit-messages"></a>21.4. Commit Messages</h2></div></div></div> 8668<a name="commit-messages"></a>21.4. Commit Messages</h2></div></div></div>
8669<p>For several years, there have been mirrors of pkgsrc in 8669<p>For several years, there have been mirrors of pkgsrc in
8670 fossil, git, and hg. Standard practise when using these tools is to 8670 fossil, git, and hg. Standard practise when using these tools is to
8671 make the first line of a commit message function as a summary that 8671 make the first line of a commit message function as a summary that
8672 can be read without the rest, such as is commonly done with "git log 8672 can be read without the rest, such as is commonly done with "git log
8673 --oneline". For this reason, we have the following guidelines for 8673 --oneline". For this reason, we have the following guidelines for
8674 pkgsrc commit messages:</p> 8674 pkgsrc commit messages:</p>
8675<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8675<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8676<li class="listitem"><p>Start the commit message with a line that explains the 8676<li class="listitem"><p>Start the commit message with a line that explains the
8677 big picture in 65 characters or less. When a commit is for one 8677 big picture in 65 characters or less. When a commit is for one
8678 package, include the name of the package. For updates, include the 8678 package, include the name of the package. For updates, include the
8679 version to which it is updated.</p></li> 8679 version to which it is updated.</p></li>
8680<li class="listitem"><p>Leave the next line empty.</p></li> 8680<li class="listitem"><p>Leave the next line empty.</p></li>
8681<li class="listitem"><p>Then come the details for the commit (changes in that 8681<li class="listitem"><p>Then come the details for the commit (changes in that
8682 package, reason for a change) and any relevant PRs. Wrap this 8682 package, reason for a change) and any relevant PRs. Wrap this
8683 section.</p></li> 8683 section.</p></li>
8684</ul></div> 8684</ul></div>
8685<p>Here is an example: 8685<p>Here is an example:
8686 </p> 8686 </p>
8687<pre class="programlisting"> 8687<pre class="programlisting">
8688 libxslt: update to 1.0.30 8688 libxslt: update to 1.0.30
8689 8689
8690 Changes since 1.0.29: 8690 Changes since 1.0.29:
8691 ... 8691 ...
8692 </pre> 8692 </pre>
8693<p> 8693<p>
8694 </p> 8694 </p>
8695<p>Here is another example: 8695<p>Here is another example:
8696 </p> 8696 </p>
8697<pre class="programlisting"> 8697<pre class="programlisting">
8698 mk/bsd.pkg.mk: enable SSP by default on NetBSD 8698 mk/bsd.pkg.mk: enable SSP by default on NetBSD
8699 8699
8700 (rationale) 8700 (rationale)
8701 </pre> 8701 </pre>
8702<p> 8702<p>
8703 </p> 8703 </p>
8704<p>Commit messages are final: no <span class="quote">&#8220;<span class="quote">cvs admin</span>&#8221;</span> is 8704<p>Commit messages are final: no <span class="quote">&#8220;<span class="quote">cvs admin</span>&#8221;</span> is
8705 allowed on the pkgsrc repository to change commit messages.</p> 8705 allowed on the pkgsrc repository to change commit messages.</p>
8706</div> 8706</div>
8707<div class="sect1"> 8707<div class="sect1">
8708<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8708<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8709<a name="committing-importing"></a>21.5. Committing: Adding a package to CVS</h2></div></div></div> 8709<a name="committing-importing"></a>21.5. Committing: Adding a package to CVS</h2></div></div></div>
8710<p>This section is only of interest for pkgsrc developers with write 8710<p>This section is only of interest for pkgsrc developers with write
8711 access to the pkgsrc repository.</p> 8711 access to the pkgsrc repository.</p>
8712<p>When the package is finished, <span class="quote">&#8220;<span class="quote">cvs add</span>&#8221;</span> the files. 8712<p>When the package is finished, <span class="quote">&#8220;<span class="quote">cvs add</span>&#8221;</span> the files.
8713Start by adding the directory and then files in the directory. Don't 8713Start by adding the directory and then files in the directory. Don't
8714forget to add the new package to the category's 8714forget to add the new package to the category's
8715<code class="filename">Makefile</code>. Make sure you don't forget any files; 8715<code class="filename">Makefile</code>. Make sure you don't forget any files;
8716you can check by running <span class="quote">&#8220;<span class="quote">cvs status</span>&#8221;</span>. An example:</p> 8716you can check by running <span class="quote">&#8220;<span class="quote">cvs status</span>&#8221;</span>. An example:</p>
8717<pre class="programlisting"> 8717<pre class="programlisting">
8718<code class="prompt">$</code> cd .../pkgsrc/category 8718<code class="prompt">$</code> cd .../pkgsrc/category
8719<code class="prompt">$</code> cvs add pkgname 8719<code class="prompt">$</code> cvs add pkgname
8720<code class="prompt">$</code> cd pkgname 8720<code class="prompt">$</code> cd pkgname
8721<code class="prompt">$</code> cvs add DESCR Makefile PLIST distinfo buildlink3.mk patches 8721<code class="prompt">$</code> cvs add DESCR Makefile PLIST distinfo buildlink3.mk patches
8722<code class="prompt">$</code> cvs add patches/p* 8722<code class="prompt">$</code> cvs add patches/p*
8723<code class="prompt">$</code> cvs status | less 8723<code class="prompt">$</code> cvs status | less
8724<code class="prompt">$</code> cvs commit 8724<code class="prompt">$</code> cvs commit
8725<code class="prompt">$</code> cd .. 8725<code class="prompt">$</code> cd ..
8726<code class="prompt">$</code> vi Makefile # add SUBDIRS+=pkgname line 8726<code class="prompt">$</code> vi Makefile # add SUBDIRS+=pkgname line
8727<code class="prompt">$</code> cvs commit Makefile 8727<code class="prompt">$</code> cvs commit Makefile
8728<code class="prompt">$</code> cd pkgname 8728<code class="prompt">$</code> cd pkgname
8729<code class="prompt">$</code> make CTYPE=Added commit-changes-entry 8729<code class="prompt">$</code> make CTYPE=Added commit-changes-entry
8730</pre> 8730</pre>
8731<p>The commit message of the initial import should include part of the 8731<p>The commit message of the initial import should include part of the
8732 <code class="filename">DESCR</code> file, so people reading the mailing lists know 8732 <code class="filename">DESCR</code> file, so people reading the mailing lists know
8733 what the package is/does.</p> 8733 what the package is/does.</p>
8734<p>Also mention the new package in 8734<p>Also mention the new package in
8735<code class="filename">pkgsrc/doc/CHANGES-20xx</code>.</p> 8735<code class="filename">pkgsrc/doc/CHANGES-20xx</code>.</p>
8736<p>Previously, <span class="quote">&#8220;<span class="quote">cvs import</span>&#8221;</span> was suggested, but it was 8736<p>Previously, <span class="quote">&#8220;<span class="quote">cvs import</span>&#8221;</span> was suggested, but it was
8737much easier to get wrong than <span class="quote">&#8220;<span class="quote">cvs add</span>&#8221;</span>.</p> 8737much easier to get wrong than <span class="quote">&#8220;<span class="quote">cvs add</span>&#8221;</span>.</p>
8738</div> 8738</div>
8739<div class="sect1"> 8739<div class="sect1">
8740<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8740<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8741<a name="updating-package"></a>21.6. Updating a package to a newer version</h2></div></div></div> 8741<a name="updating-package"></a>21.6. Updating a package to a newer version</h2></div></div></div>
8742<p>Please always put a concise, appropriate and relevant summary of the 8742<p>Please always put a concise, appropriate and relevant summary of the
8743 changes between old and new versions into the commit log when updating 8743 changes between old and new versions into the commit log when updating
8744 a package. There are various reasons for this:</p> 8744 a package. There are various reasons for this:</p>
8745<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8745<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8746<li class="listitem"><p>A URL is volatile, and can change over time. It may go away completely 8746<li class="listitem"><p>A URL is volatile, and can change over time. It may go away completely
8747 or its information may be overwritten by newer information.</p></li> 8747 or its information may be overwritten by newer information.</p></li>
8748<li class="listitem"><p>Having the change information between old and new versions in our CVS 8748<li class="listitem"><p>Having the change information between old and new versions in our CVS
8749 repository is very useful for people who use either cvs or anoncvs.</p></li> 8749 repository is very useful for people who use either cvs or anoncvs.</p></li>
8750<li class="listitem"><p>Having the change information between old and new versions in our CVS 8750<li class="listitem"><p>Having the change information between old and new versions in our CVS
8751 repository is very useful for people who read the pkgsrc-changes mailing 8751 repository is very useful for people who read the pkgsrc-changes mailing
8752 list, so that they can make tactical decisions about when to upgrade 8752 list, so that they can make tactical decisions about when to upgrade
8753 the package.</p></li> 8753 the package.</p></li>
8754</ul></div> 8754</ul></div>
8755<p>Please also recognize that, just because a new version of a package 8755<p>Please also recognize that, just because a new version of a package
8756 has been released, it should not automatically be upgraded in the CVS 8756 has been released, it should not automatically be upgraded in the CVS
8757 repository. We prefer to be conservative in the packages that are 8757 repository. We prefer to be conservative in the packages that are
8758 included in pkgsrc - development or beta packages are not really the 8758 included in pkgsrc - development or beta packages are not really the
8759 best thing for most places in which pkgsrc is used. Please use your 8759 best thing for most places in which pkgsrc is used. Please use your
8760 judgement about what should go into pkgsrc, and bear in mind that 8760 judgement about what should go into pkgsrc, and bear in mind that
8761 stability is to be preferred above new and possibly untested features.</p> 8761 stability is to be preferred above new and possibly untested features.</p>
8762</div> 8762</div>
8763<div class="sect1"> 8763<div class="sect1">
8764<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8764<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8765<a name="renaming-package"></a>21.7. Renaming a package in pkgsrc</h2></div></div></div> 8765<a name="renaming-package"></a>21.7. Renaming a package in pkgsrc</h2></div></div></div>
8766<p>Renaming packages is not recommended.</p> 8766<p>Renaming packages is not recommended.</p>
8767<p>When renaming packages, be sure to fix any references to old name 8767<p>When renaming packages, be sure to fix any references to old name
8768 in other Makefiles, options, buildlink files, etc.</p> 8768 in other Makefiles, options, buildlink files, etc.</p>
8769<p>Also When renaming a package, please define 8769<p>Also When renaming a package, please define
8770 <code class="varname">SUPERSEDES</code> to the package name and dewey version 8770 <code class="varname">SUPERSEDES</code> to the package name and dewey version
8771 pattern(s) of the previous package name. 8771 pattern(s) of the previous package name.
8772 This may be repeated for multiple renames. 8772 This may be repeated for multiple renames.
8773 The new package would be an exact replacement. 8773 The new package would be an exact replacement.
8774</p> 8774</p>
8775<p>Note that <span class="quote">&#8220;<span class="quote">successor</span>&#8221;</span> in the 8775<p>Note that <span class="quote">&#8220;<span class="quote">successor</span>&#8221;</span> in the
8776 CHANGES-<em class="replaceable"><code>YYYY</code></em> file doesn't necessarily 8776 CHANGES-<em class="replaceable"><code>YYYY</code></em> file doesn't necessarily
8777 mean that it <span class="emphasis"><em>supersedes</em></span>, as that successor may 8777 mean that it <span class="emphasis"><em>supersedes</em></span>, as that successor may
8778 not be an exact replacement but is a suggestion for the replaced 8778 not be an exact replacement but is a suggestion for the replaced
8779 functionality.</p> 8779 functionality.</p>
8780</div> 8780</div>
8781<div class="sect1"> 8781<div class="sect1">
8782<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8782<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8783<a name="moving-package"></a>21.8. Moving a package in pkgsrc</h2></div></div></div> 8783<a name="moving-package"></a>21.8. Moving a package in pkgsrc</h2></div></div></div>
8784<p>It is preferred that packages are not renamed or moved, but if needed 8784<p>It is preferred that packages are not renamed or moved, but if needed
8785 please follow these steps. 8785 please follow these steps.
8786</p> 8786</p>
8787<div class="orderedlist"><ol class="orderedlist" type="1"> 8787<div class="orderedlist"><ol class="orderedlist" type="1">
8788<li class="listitem"><p>Make a copy of the directory somewhere else.</p></li> 8788<li class="listitem"><p>Make a copy of the directory somewhere else.</p></li>
8789<li class="listitem"> 8789<li class="listitem">
8790<p>Remove all CVS dirs.</p> 8790<p>Remove all CVS dirs.</p>
8791<p>Alternatively to the first two steps you can also do:</p> 8791<p>Alternatively to the first two steps you can also do:</p>
8792<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cvs -d user@cvs.NetBSD.org:/cvsroot export -D today pkgsrc/category/package</code></strong></pre> 8792<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cvs -d user@cvs.NetBSD.org:/cvsroot export -D today pkgsrc/category/package</code></strong></pre>
8793<p>and use that for further work.</p> 8793<p>and use that for further work.</p>
8794</li> 8794</li>
8795<li class="listitem"><p>Fix <code class="varname">CATEGORIES</code> and any 8795<li class="listitem"><p>Fix <code class="varname">CATEGORIES</code> and any
8796<code class="varname">DEPENDS</code> paths that just did <span class="quote">&#8220;<span class="quote">../package</span>&#8221;</span> 8796<code class="varname">DEPENDS</code> paths that just did <span class="quote">&#8220;<span class="quote">../package</span>&#8221;</span>
8797instead of <span class="quote">&#8220;<span class="quote">../../category/package</span>&#8221;</span>.</p></li> 8797instead of <span class="quote">&#8220;<span class="quote">../../category/package</span>&#8221;</span>.</p></li>
8798<li class="listitem"><p>In the modified package's Makefile, consider setting 8798<li class="listitem"><p>In the modified package's Makefile, consider setting
8799<code class="varname">PREV_PKGPATH</code> to the previous category/package 8799<code class="varname">PREV_PKGPATH</code> to the previous category/package
8800pathname. The <code class="varname">PREV_PKGPATH</code> can be used by tools 8800pathname. The <code class="varname">PREV_PKGPATH</code> can be used by tools
8801for doing an update using pkgsrc building; for example, it can 8801for doing an update using pkgsrc building; for example, it can
8802search the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_summary+5.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">pkg_summary</span>(5)</span></a> database for <code class="varname">PREV_PKGPATH</code> 8802search the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_summary+5.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">pkg_summary</span>(5)</span></a> database for <code class="varname">PREV_PKGPATH</code>
8803(if no <code class="varname">SUPERSEDES</code>) and then use the corresponding 8803(if no <code class="varname">SUPERSEDES</code>) and then use the corresponding
8804new <code class="varname">PKGPATH</code> for that moved package. Note that 8804new <code class="varname">PKGPATH</code> for that moved package. Note that
8805it may have multiple matches, so the tool should also check on the 8805it may have multiple matches, so the tool should also check on the
8806<code class="varname">PKGBASE</code> too. The <code class="varname">PREV_PKGPATH</code> 8806<code class="varname">PKGBASE</code> too. The <code class="varname">PREV_PKGPATH</code>
8807probably has no value unless <code class="varname">SUPERSEDES</code> is not 8807probably has no value unless <code class="varname">SUPERSEDES</code> is not
8808set, i.e. <code class="varname">PKGBASE</code> stays the same. </p></li> 8808set, i.e. <code class="varname">PKGBASE</code> stays the same. </p></li>
8809<li class="listitem"><p><span class="command"><strong>cvs import</strong></span> the modified package in the new 8809<li class="listitem"><p><span class="command"><strong>cvs import</strong></span> the modified package in the new
8810place.</p></li> 8810place.</p></li>
8811<li class="listitem"> 8811<li class="listitem">
8812<p>Check if any package depends on it: 8812<p>Check if any package depends on it:
8813</p> 8813</p>
8814<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cd /usr/pkgsrc</code></strong> 8814<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cd /usr/pkgsrc</code></strong>
8815<code class="prompt">%</code> <strong class="userinput"><code>grep /package */*/Makefile* */*/buildlink*</code></strong></pre> 8815<code class="prompt">%</code> <strong class="userinput"><code>grep /package */*/Makefile* */*/buildlink*</code></strong></pre>
8816</li> 8816</li>
8817<li class="listitem"><p>Fix paths in packages from step 5 to point to new location.</p></li> 8817<li class="listitem"><p>Fix paths in packages from step 5 to point to new location.</p></li>
8818<li class="listitem"><p><span class="command"><strong>cvs rm (-f)</strong></span> the package at the old location.</p></li> 8818<li class="listitem"><p><span class="command"><strong>cvs rm (-f)</strong></span> the package at the old location.</p></li>
8819<li class="listitem"><p>Remove from <code class="filename">oldcategory/Makefile</code>.</p></li> 8819<li class="listitem"><p>Remove from <code class="filename">oldcategory/Makefile</code>.</p></li>
8820<li class="listitem"><p>Add to <code class="filename">newcategory/Makefile</code>.</p></li> 8820<li class="listitem"><p>Add to <code class="filename">newcategory/Makefile</code>.</p></li>
8821<li class="listitem"> 8821<li class="listitem">
8822<p>Commit the changed and removed files:</p> 8822<p>Commit the changed and removed files:</p>
8823<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cvs commit oldcategory/package oldcategory/Makefile newcategory/Makefile</code></strong></pre> 8823<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cvs commit oldcategory/package oldcategory/Makefile newcategory/Makefile</code></strong></pre>
8824<p>(and any packages from step 5, of course).</p> 8824<p>(and any packages from step 5, of course).</p>
8825</li> 8825</li>
8826</ol></div> 8826</ol></div>
8827</div> 8827</div>
8828</div> 8828</div>
8829<div class="chapter"> 8829<div class="chapter">
8830<div class="titlepage"><div><div><h2 class="title"> 8830<div class="titlepage"><div><div><h2 class="title">
8831<a name="devfaq"></a>Chapter 22. Frequently Asked Questions</h2></div></div></div> 8831<a name="devfaq"></a>Chapter 22. Frequently Asked Questions</h2></div></div></div>
8832<p>This section contains the answers to questions that may 8832<p>This section contains the answers to questions that may
8833 arise when you are writing a package. If you don't find your 8833 arise when you are writing a package. If you don't find your
8834 question answered here, first have a look in the other chapters, 8834 question answered here, first have a look in the other chapters,
8835 and if you still don't have the answer, ask on the 8835 and if you still don't have the answer, ask on the
8836 <code class="literal">pkgsrc-users</code> mailing list.</p> 8836 <code class="literal">pkgsrc-users</code> mailing list.</p>
8837<div class="qandaset"> 8837<div class="qandaset">
8838<a name="idm79078192"></a><dl> 8838<a name="idm80785232"></a><dl>
8839<dt>22.1. <a href="#devfaq.makeflags">What is the difference between 8839<dt>22.1. <a href="#devfaq.makeflags">What is the difference between
8840 MAKEFLAGS, .MAKEFLAGS and 8840 MAKEFLAGS, .MAKEFLAGS and
8841 MAKE_FLAGS?</a> 8841 MAKE_FLAGS?</a>
8842</dt> 8842</dt>
8843<dt>22.2. <a href="#devfaq.make">What is the difference between 8843<dt>22.2. <a href="#devfaq.make">What is the difference between
8844 MAKE, GMAKE and 8844 MAKE, GMAKE and
8845 MAKE_PROGRAM?</a> 8845 MAKE_PROGRAM?</a>
8846</dt> 8846</dt>
8847<dt>22.3. <a href="#devfaq.cc">What is the difference between 8847<dt>22.3. <a href="#devfaq.cc">What is the difference between
8848 CC, PKG_CC and 8848 CC, PKG_CC and
8849 PKGSRC_COMPILER?</a> 8849 PKGSRC_COMPILER?</a>
8850</dt> 8850</dt>
8851<dt>22.4. <a href="#devfaq.bl3flags">What is the difference between 8851<dt>22.4. <a href="#devfaq.bl3flags">What is the difference between
8852 BUILDLINK_LDFLAGS, 8852 BUILDLINK_LDFLAGS,
8853 BUILDLINK_LDADD and 8853 BUILDLINK_LDADD and
8854 BUILDLINK_LIBS?</a> 8854 BUILDLINK_LIBS?</a>
8855</dt> 8855</dt>
8856<dt>22.5. <a href="#devfaq.bl3prefix">Why does make show-var 8856<dt>22.5. <a href="#devfaq.bl3prefix">Why does make show-var
8857 VARNAME=BUILDLINK_PREFIX.foo 8857 VARNAME=BUILDLINK_PREFIX.foo
8858 say it's empty?</a> 8858 say it's empty?</a>
8859</dt> 8859</dt>
8860<dt>22.6. <a href="#devfaq.master_sites">What does 8860<dt>22.6. <a href="#devfaq.master_sites">What does
8861 ${MASTER_SITE_SOURCEFORGE:=package/} mean? I 8861 ${MASTER_SITE_SOURCEFORGE:=package/} mean? I
8862 don't understand the := inside 8862 don't understand the := inside
8863 it.</a> 8863 it.</a>
8864</dt> 8864</dt>
8865<dt>22.7. <a href="#devfaq.mailinglists">Which mailing lists are there for package 8865<dt>22.7. <a href="#devfaq.mailinglists">Which mailing lists are there for package
8866 developers?</a> 8866 developers?</a>
8867</dt> 8867</dt>
8868<dt>22.8. <a href="#devfaq.documentation">Where is the pkgsrc 8868<dt>22.8. <a href="#devfaq.documentation">Where is the pkgsrc
8869 documentation?</a> 8869 documentation?</a>
8870</dt> 8870</dt>
8871<dt>22.9. <a href="#devfaq.too-much-time">I have a little time to kill. What shall I 8871<dt>22.9. <a href="#devfaq.too-much-time">I have a little time to kill. What shall I
8872do?</a> 8872do?</a>
8873</dt> 8873</dt>
8874</dl> 8874</dl>
8875<table border="0" style="width: 100%;"> 8875<table border="0" style="width: 100%;">
8876<colgroup> 8876<colgroup>
8877<col align="left" width="1%"> 8877<col align="left" width="1%">
8878<col> 8878<col>
8879</colgroup> 8879</colgroup>
8880<tbody> 8880<tbody>
8881<tr class="question"> 8881<tr class="question">
8882<td align="left" valign="top"> 8882<td align="left" valign="top">
8883<a name="devfaq.makeflags"></a><a name="idm79077808"></a><p><b>22.1.</b></p> 8883<a name="devfaq.makeflags"></a><a name="idm80784848"></a><p><b>22.1.</b></p>
8884</td> 8884</td>
8885<td align="left" valign="top"><p>What is the difference between 8885<td align="left" valign="top"><p>What is the difference between
8886 <code class="varname">MAKEFLAGS</code>, <code class="varname">.MAKEFLAGS</code> and 8886 <code class="varname">MAKEFLAGS</code>, <code class="varname">.MAKEFLAGS</code> and
8887 <code class="varname">MAKE_FLAGS</code>?</p></td> 8887 <code class="varname">MAKE_FLAGS</code>?</p></td>
8888</tr> 8888</tr>
8889<tr class="answer"> 8889<tr class="answer">
8890<td align="left" valign="top"></td> 8890<td align="left" valign="top"></td>
8891<td align="left" valign="top"><p><code class="varname">MAKEFLAGS</code> are the flags passed 8891<td align="left" valign="top"><p><code class="varname">MAKEFLAGS</code> are the flags passed
8892 to the pkgsrc-internal invocations of <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>, while 8892 to the pkgsrc-internal invocations of <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>, while
8893 <code class="varname">MAKE_FLAGS</code> are the flags that are passed to 8893 <code class="varname">MAKE_FLAGS</code> are the flags that are passed to
8894 the <code class="varname">MAKE_PROGRAM</code> when building the 8894 the <code class="varname">MAKE_PROGRAM</code> when building the
8895 package. [FIXME: What is .MAKEFLAGS for?]</p></td> 8895 package. [FIXME: What is .MAKEFLAGS for?]</p></td>
8896</tr> 8896</tr>
8897<tr class="question"> 8897<tr class="question">
8898<td align="left" valign="top"> 8898<td align="left" valign="top">
8899<a name="devfaq.make"></a><a name="idm79073712"></a><p><b>22.2.</b></p> 8899<a name="devfaq.make"></a><a name="idm80780880"></a><p><b>22.2.</b></p>
8900</td> 8900</td>
8901<td align="left" valign="top"><p>What is the difference between 8901<td align="left" valign="top"><p>What is the difference between
8902 <code class="varname">MAKE</code>, <code class="varname">GMAKE</code> and 8902 <code class="varname">MAKE</code>, <code class="varname">GMAKE</code> and
8903 <code class="varname">MAKE_PROGRAM</code>?</p></td> 8903 <code class="varname">MAKE_PROGRAM</code>?</p></td>
8904</tr> 8904</tr>
8905<tr class="answer"> 8905<tr class="answer">
8906<td align="left" valign="top"></td> 8906<td align="left" valign="top"></td>
8907<td align="left" valign="top"><p><code class="varname">MAKE</code> is the path to the 8907<td align="left" valign="top"><p><code class="varname">MAKE</code> is the path to the
8908 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> program that is used in the pkgsrc 8908 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> program that is used in the pkgsrc
8909 infrastructure. <code class="varname">GMAKE</code> is the path to GNU 8909 infrastructure. <code class="varname">GMAKE</code> is the path to GNU
8910 Make, but you need to say <code class="varname">USE_TOOLS+=gmake</code> to 8910 Make, but you need to say <code class="varname">USE_TOOLS+=gmake</code> to
8911 use that. <code class="varname">MAKE_PROGRAM</code> is the path to the 8911 use that. <code class="varname">MAKE_PROGRAM</code> is the path to the
8912 Make program that is used for building the 8912 Make program that is used for building the
8913 package.</p></td> 8913 package.</p></td>
8914</tr> 8914</tr>
8915<tr class="question"> 8915<tr class="question">
8916<td align="left" valign="top"> 8916<td align="left" valign="top">
8917<a name="devfaq.cc"></a><a name="idm79069360"></a><p><b>22.3.</b></p> 8917<a name="devfaq.cc"></a><a name="idm80776400"></a><p><b>22.3.</b></p>
8918</td> 8918</td>
8919<td align="left" valign="top"><p>What is the difference between 8919<td align="left" valign="top"><p>What is the difference between
8920 <code class="varname">CC</code>, <code class="varname">PKG_CC</code> and 8920 <code class="varname">CC</code>, <code class="varname">PKG_CC</code> and
8921 <code class="varname">PKGSRC_COMPILER</code>?</p></td> 8921 <code class="varname">PKGSRC_COMPILER</code>?</p></td>
8922</tr> 8922</tr>
8923<tr class="answer"> 8923<tr class="answer">
8924<td align="left" valign="top"></td> 8924<td align="left" valign="top"></td>
8925<td align="left" valign="top"><p><code class="varname">CC</code> is the path to the real C 8925<td align="left" valign="top"><p><code class="varname">CC</code> is the path to the real C
8926 compiler, which can be configured by the pkgsrc user. 8926 compiler, which can be configured by the pkgsrc user.
8927 <code class="varname">PKG_CC</code> is the path to the compiler wrapper. 8927 <code class="varname">PKG_CC</code> is the path to the compiler wrapper.
8928 <code class="varname">PKGSRC_COMPILER</code> is <span class="emphasis"><em>not</em></span> a 8928 <code class="varname">PKGSRC_COMPILER</code> is <span class="emphasis"><em>not</em></span> a
8929 path to a compiler, but the type of compiler that should be 8929 path to a compiler, but the type of compiler that should be
8930 used. See <code class="filename">mk/compiler.mk</code> for more 8930 used. See <code class="filename">mk/compiler.mk</code> for more
8931 information about the latter variable.</p></td> 8931 information about the latter variable.</p></td>
8932</tr> 8932</tr>
8933<tr class="question"> 8933<tr class="question">
8934<td align="left" valign="top"> 8934<td align="left" valign="top">
8935<a name="devfaq.bl3flags"></a><a name="idm79065136"></a><p><b>22.4.</b></p> 8935<a name="devfaq.bl3flags"></a><a name="idm80772304"></a><p><b>22.4.</b></p>
8936</td> 8936</td>
8937<td align="left" valign="top"><p>What is the difference between 8937<td align="left" valign="top"><p>What is the difference between
8938 <code class="varname">BUILDLINK_LDFLAGS</code>, 8938 <code class="varname">BUILDLINK_LDFLAGS</code>,
8939 <code class="varname">BUILDLINK_LDADD</code> and 8939 <code class="varname">BUILDLINK_LDADD</code> and
8940 <code class="varname">BUILDLINK_LIBS</code>?</p></td> 8940 <code class="varname">BUILDLINK_LIBS</code>?</p></td>
8941</tr> 8941</tr>
8942<tr class="answer"> 8942<tr class="answer">
8943<td align="left" valign="top"></td> 8943<td align="left" valign="top"></td>
8944<td align="left" valign="top"><p>[FIXME]</p></td> 8944<td align="left" valign="top"><p>[FIXME]</p></td>
8945</tr> 8945</tr>
8946<tr class="question"> 8946<tr class="question">
8947<td align="left" valign="top"> 8947<td align="left" valign="top">
8948<a name="devfaq.bl3prefix"></a><a name="idm79062960"></a><p><b>22.5.</b></p> 8948<a name="devfaq.bl3prefix"></a><a name="idm80770000"></a><p><b>22.5.</b></p>
8949</td> 8949</td>
8950<td align="left" valign="top"><p>Why does <span class="command"><strong>make show-var 8950<td align="left" valign="top"><p>Why does <span class="command"><strong>make show-var
8951 VARNAME=BUILDLINK_PREFIX.<em class="replaceable"><code>foo</code></em></strong></span> 8951 VARNAME=BUILDLINK_PREFIX.<em class="replaceable"><code>foo</code></em></strong></span>
8952 say it's empty?</p></td> 8952 say it's empty?</p></td>
8953</tr> 8953</tr>
8954<tr class="answer"> 8954<tr class="answer">
8955<td align="left" valign="top"></td> 8955<td align="left" valign="top"></td>
8956<td align="left" valign="top"><p>For optimization reasons, some variables are only 8956<td align="left" valign="top"><p>For optimization reasons, some variables are only
8957 available in the <span class="quote">&#8220;<span class="quote">wrapper</span>&#8221;</span> phase and later. To 8957 available in the <span class="quote">&#8220;<span class="quote">wrapper</span>&#8221;</span> phase and later. To
8958 <span class="quote">&#8220;<span class="quote">simulate</span>&#8221;</span> the wrapper phase, append 8958 <span class="quote">&#8220;<span class="quote">simulate</span>&#8221;</span> the wrapper phase, append
8959 <span class="command"><strong>PKG_PHASE=wrapper</strong></span> to the above 8959 <span class="command"><strong>PKG_PHASE=wrapper</strong></span> to the above
8960 command.</p></td> 8960 command.</p></td>
8961</tr> 8961</tr>
8962<tr class="question"> 8962<tr class="question">
8963<td align="left" valign="top"> 8963<td align="left" valign="top">
8964<a name="devfaq.master_sites"></a><a name="idm79059888"></a><p><b>22.6.</b></p> 8964<a name="devfaq.master_sites"></a><a name="idm80766928"></a><p><b>22.6.</b></p>
8965</td> 8965</td>
8966<td align="left" valign="top"><p>What does 8966<td align="left" valign="top"><p>What does
8967 <code class="code">${MASTER_SITE_SOURCEFORGE:=package/}</code> mean? I 8967 <code class="code">${MASTER_SITE_SOURCEFORGE:=package/}</code> mean? I
8968 don't understand the <code class="code">:=</code> inside 8968 don't understand the <code class="code">:=</code> inside
8969 it.</p></td> 8969 it.</p></td>
8970</tr> 8970</tr>
8971<tr class="answer"> 8971<tr class="answer">
8972<td align="left" valign="top"></td> 8972<td align="left" valign="top"></td>
8973<td align="left" valign="top"><p>The <code class="code">:=</code> is not really an 8973<td align="left" valign="top"><p>The <code class="code">:=</code> is not really an
8974 assignment operator, although it looks like it. 8974 assignment operator, although it looks like it.
8975 Instead, it is a degenerate form of 8975 Instead, it is a degenerate form of
8976 <code class="code">${LIST:<em class="replaceable"><code>old_string</code></em>=<em class="replaceable"><code>new_string</code></em>}</code>, 8976 <code class="code">${LIST:<em class="replaceable"><code>old_string</code></em>=<em class="replaceable"><code>new_string</code></em>}</code>,
8977 which is documented in the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> man page and which is 8977 which is documented in the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> man page and which is
8978 commonly used in the form <code class="code">${SRCS:.c=.o}</code>. In the 8978 commonly used in the form <code class="code">${SRCS:.c=.o}</code>. In the
8979 case of <code class="varname">MASTER_SITE_*</code>, 8979 case of <code class="varname">MASTER_SITE_*</code>,
8980 <em class="replaceable"><code>old_string</code></em> is the empty string and 8980 <em class="replaceable"><code>old_string</code></em> is the empty string and
8981 <em class="replaceable"><code>new_string</code></em> is 8981 <em class="replaceable"><code>new_string</code></em> is
8982 <code class="code">package/</code>. That's where the 8982 <code class="code">package/</code>. That's where the
8983 <code class="code">:</code> and the <code class="code">=</code> fall 8983 <code class="code">:</code> and the <code class="code">=</code> fall
8984 together.</p></td> 8984 together.</p></td>
8985</tr> 8985</tr>
8986<tr class="question"> 8986<tr class="question">
8987<td align="left" valign="top"> 8987<td align="left" valign="top">
8988<a name="devfaq.mailinglists"></a><a name="idm79044784"></a><p><b>22.7.</b></p> 8988<a name="devfaq.mailinglists"></a><a name="idm80760016"></a><p><b>22.7.</b></p>
8989</td> 8989</td>
8990<td align="left" valign="top"><p>Which mailing lists are there for package 8990<td align="left" valign="top"><p>Which mailing lists are there for package
8991 developers?</p></td> 8991 developers?</p></td>
8992</tr> 8992</tr>
8993<tr class="answer"> 8993<tr class="answer">
8994<td align="left" valign="top"></td> 8994<td align="left" valign="top"></td>
8995<td align="left" valign="top"><div class="variablelist"><dl class="variablelist"> 8995<td align="left" valign="top"><div class="variablelist"><dl class="variablelist">
8996<dt><span class="term"><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#tech-pkg" target="_top">tech-pkg</a></span></dt> 8996<dt><span class="term"><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#tech-pkg" target="_top">tech-pkg</a></span></dt>
8997<dd><p>This is a list for technical discussions related 8997<dd><p>This is a list for technical discussions related
8998 to pkgsrc development, e.g. soliciting feedback for changes to 8998 to pkgsrc development, e.g. soliciting feedback for changes to
8999 pkgsrc infrastructure, proposed new features, questions related 8999 pkgsrc infrastructure, proposed new features, questions related
9000 to porting pkgsrc to a new platform, advice for maintaining a 9000 to porting pkgsrc to a new platform, advice for maintaining a
9001 package, patches that affect many packages, help requests moved 9001 package, patches that affect many packages, help requests moved
9002 from pkgsrc-users when an infrastructure bug is found, 9002 from pkgsrc-users when an infrastructure bug is found,
9003 etc.</p></dd> 9003 etc.</p></dd>
9004<dt><span class="term"><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-bugs" target="_top">pkgsrc-bugs</a></span></dt> 9004<dt><span class="term"><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-bugs" target="_top">pkgsrc-bugs</a></span></dt>
9005<dd><p>All bug reports in category "pkg" sent with 9005<dd><p>All bug reports in category "pkg" sent with
9006 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a> appear here. Please do not report your bugs here 9006 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a> appear here. Please do not report your bugs here
9007 directly; use one of the other mailing 9007 directly; use one of the other mailing
9008 lists.</p></dd> 9008 lists.</p></dd>
9009</dl></div></td> 9009</dl></div></td>
9010</tr> 9010</tr>
9011<tr class="question"> 9011<tr class="question">
9012<td align="left" valign="top"> 9012<td align="left" valign="top">
9013<a name="devfaq.documentation"></a><a name="idm79040944"></a><p><b>22.8.</b></p> 9013<a name="devfaq.documentation"></a><a name="idm80756304"></a><p><b>22.8.</b></p>
9014</td> 9014</td>
9015<td align="left" valign="top"><p>Where is the pkgsrc 9015<td align="left" valign="top"><p>Where is the pkgsrc
9016 documentation?</p></td> 9016 documentation?</p></td>
9017</tr> 9017</tr>
9018<tr class="answer"> 9018<tr class="answer">
9019<td align="left" valign="top"></td> 9019<td align="left" valign="top"></td>
9020<td align="left" valign="top"> 9020<td align="left" valign="top">
9021<p>There are many places where you can find 9021<p>There are many places where you can find
9022 documentation about pkgsrc:</p> 9022 documentation about pkgsrc:</p>
9023<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9023<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9024<li class="listitem"><p>The pkgsrc guide (this document) is a collection 9024<li class="listitem"><p>The pkgsrc guide (this document) is a collection
9025 of chapters that explain large parts of pkgsrc, but some 9025 of chapters that explain large parts of pkgsrc, but some
9026 chapters tend to be outdated. Which ones they are is hard to 9026 chapters tend to be outdated. Which ones they are is hard to
9027 say.</p></li> 9027 say.</p></li>
9028<li class="listitem"><p>On the mailing list archives (see <a class="ulink" href="http://mail-index.NetBSD.org/" target="_top">http://mail-index.NetBSD.org/</a>), you can find discussions 9028<li class="listitem"><p>On the mailing list archives (see <a class="ulink" href="http://mail-index.NetBSD.org/" target="_top">http://mail-index.NetBSD.org/</a>), you can find discussions
9029 about certain features, announcements of new parts of the pkgsrc 9029 about certain features, announcements of new parts of the pkgsrc
9030 infrastructure and sometimes even announcements that a certain 9030 infrastructure and sometimes even announcements that a certain
9031 feature has been marked as obsolete. The benefit here is that 9031 feature has been marked as obsolete. The benefit here is that
9032 each message has a date appended to it.</p></li> 9032 each message has a date appended to it.</p></li>
9033<li class="listitem"><p>Many of the files in the 9033<li class="listitem"><p>Many of the files in the
9034 <code class="filename">mk/</code> directory start with a comment that 9034 <code class="filename">mk/</code> directory start with a comment that
9035 describes the purpose of the file and how it can be used by the 9035 describes the purpose of the file and how it can be used by the
9036 pkgsrc user and package authors. An easy way to find this 9036 pkgsrc user and package authors. An easy way to find this
9037 documentation is to run <span class="command"><strong>bmake 9037 documentation is to run <span class="command"><strong>bmake
9038 help</strong></span>.</p></li> 9038 help</strong></span>.</p></li>
9039<li class="listitem"><p>The CVS log messages are a rich source of 9039<li class="listitem"><p>The CVS log messages are a rich source of
9040 information, but they tend to be highly abbreviated, especially 9040 information, but they tend to be highly abbreviated, especially
9041 for actions that occur often. Some contain a detailed 9041 for actions that occur often. Some contain a detailed
9042 description of what has changed, but they are geared towards the 9042 description of what has changed, but they are geared towards the
9043 other pkgsrc developers, not towards an average pkgsrc user. 9043 other pkgsrc developers, not towards an average pkgsrc user.
9044 They also only document <span class="emphasis"><em>changes</em></span>, so if you 9044 They also only document <span class="emphasis"><em>changes</em></span>, so if you
9045 don't know what has been before, these messages may not be worth 9045 don't know what has been before, these messages may not be worth
9046 too much to you.</p></li> 9046 too much to you.</p></li>
9047<li class="listitem"><p>Some parts of pkgsrc are only <span class="quote">&#8220;<span class="quote">implicitly 9047<li class="listitem"><p>Some parts of pkgsrc are only <span class="quote">&#8220;<span class="quote">implicitly
9048 documented</span>&#8221;</span>, that is the documentation exists only in the 9048 documented</span>&#8221;</span>, that is the documentation exists only in the
9049 mind of the developer who wrote the code. To get this 9049 mind of the developer who wrote the code. To get this
9050 information, use the <span class="command"><strong>cvs annotate</strong></span> command 9050 information, use the <span class="command"><strong>cvs annotate</strong></span> command
9051 to see who has written it and ask on the 9051 to see who has written it and ask on the
9052 <code class="literal">tech-pkg</code> mailing list, so that others can 9052 <code class="literal">tech-pkg</code> mailing list, so that others can
9053 find your questions later (see above). To be sure that the 9053 find your questions later (see above). To be sure that the
9054 developer in charge reads the mail, you may CC him or 9054 developer in charge reads the mail, you may CC him or
9055 her.</p></li> 9055 her.</p></li>
9056</ul></div> 9056</ul></div>
9057</td> 9057</td>
9058</tr> 9058</tr>
9059<tr class="question"> 9059<tr class="question">
9060<td align="left" valign="top"> 9060<td align="left" valign="top">
9061<a name="devfaq.too-much-time"></a><a name="idm79034416"></a><p><b>22.9.</b></p> 9061<a name="devfaq.too-much-time"></a><a name="idm80749776"></a><p><b>22.9.</b></p>
9062</td> 9062</td>
9063<td align="left" valign="top"><p>I have a little time to kill. What shall I 9063<td align="left" valign="top"><p>I have a little time to kill. What shall I
9064do?</p></td> 9064do?</p></td>
9065</tr> 9065</tr>
9066<tr class="answer"> 9066<tr class="answer">
9067<td align="left" valign="top"></td> 9067<td align="left" valign="top"></td>
9068<td align="left" valign="top"> 9068<td align="left" valign="top">
9069<p>This is not really an FAQ yet, but here's the answer 9069<p>This is not really an FAQ yet, but here's the answer
9070anyway.</p> 9070anyway.</p>
9071<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9071<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9072<li class="listitem"><p>Run <span class="command"><strong>pkg_chk -N</strong></span> (from the 9072<li class="listitem"><p>Run <span class="command"><strong>pkg_chk -N</strong></span> (from the
9073 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_chk/README.html" target="_top"><code class="filename">pkgtools/pkg_chk</code></a> package). It 9073 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_chk/README.html" target="_top"><code class="filename">pkgtools/pkg_chk</code></a> package). It
9074 will tell you about newer versions of installed packages that are 9074 will tell you about newer versions of installed packages that are
9075 available, but not yet updated in pkgsrc.</p></li> 9075 available, but not yet updated in pkgsrc.</p></li>
9076<li class="listitem"><p>Browse <code class="filename">pkgsrc/doc/TODO</code> 9076<li class="listitem"><p>Browse <code class="filename">pkgsrc/doc/TODO</code>
9077 &mdash; it contains a list of suggested new packages and a list of 9077 &mdash; it contains a list of suggested new packages and a list of
9078 cleanups and enhancements for pkgsrc that would be nice to 9078 cleanups and enhancements for pkgsrc that would be nice to
9079 have.</p></li> 9079 have.</p></li>
9080<li class="listitem"><p>Review packages for which review was requested on 9080<li class="listitem"><p>Review packages for which review was requested on
9081 the <a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#tech-pkg" target="_top">tech-pkg</a> 9081 the <a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#tech-pkg" target="_top">tech-pkg</a>
9082 mailing list.</p></li> 9082 mailing list.</p></li>
9083</ul></div> 9083</ul></div>
9084</td> 9084</td>
9085</tr> 9085</tr>
9086</tbody> 9086</tbody>
9087</table> 9087</table>
9088</div> 9088</div>
9089</div> 9089</div>
9090<div class="chapter"> 9090<div class="chapter">
9091<div class="titlepage"><div><div><h2 class="title"> 9091<div class="titlepage"><div><div><h2 class="title">
9092<a name="gnome"></a>Chapter 23. GNOME packaging and porting</h2></div></div></div> 9092<a name="gnome"></a>Chapter 23. GNOME packaging and porting</h2></div></div></div>
9093<div class="toc"> 9093<div class="toc">
9094<p><b>Table of Contents</b></p> 9094<p><b>Table of Contents</b></p>
9095<dl class="toc"> 9095<dl class="toc">
9096<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt> 9096<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt>
9097<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt> 9097<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt>
9098<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt> 9098<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt>
9099<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt> 9099<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt>
9100</dl> 9100</dl>
9101</div> 9101</div>
9102<p>Quoting <a class="ulink" href="http://www.gnome.org/" target="_top">GNOME's web 9102<p>Quoting <a class="ulink" href="http://www.gnome.org/" target="_top">GNOME's web
9103site</a>:</p> 9103site</a>:</p>
9104<div class="blockquote"><blockquote class="blockquote"><p>The GNOME project provides two things: The GNOME desktop 9104<div class="blockquote"><blockquote class="blockquote"><p>The GNOME project provides two things: The GNOME desktop
9105 environment, an intuitive and attractive desktop for users, and the 9105 environment, an intuitive and attractive desktop for users, and the
9106 GNOME development platform, an extensive framework for building 9106 GNOME development platform, an extensive framework for building
9107 applications that integrate into the rest of the desktop.</p></blockquote></div> 9107 applications that integrate into the rest of the desktop.</p></blockquote></div>
9108<p>pkgsrc provides a seamless way to automatically build and install 9108<p>pkgsrc provides a seamless way to automatically build and install
9109a complete GNOME environment <span class="emphasis"><em>under many different 9109a complete GNOME environment <span class="emphasis"><em>under many different
9110platforms</em></span>. We can say with confidence that pkgsrc is one of 9110platforms</em></span>. We can say with confidence that pkgsrc is one of
9111the most advanced build and packaging systems for GNOME due to its 9111the most advanced build and packaging systems for GNOME due to its
9112included technologies buildlink3, the wrappers and tools framework and 9112included technologies buildlink3, the wrappers and tools framework and
9113automatic configuration file management. Lots of efforts are put into 9113automatic configuration file management. Lots of efforts are put into
9114achieving a completely clean deinstallation of installed software 9114achieving a completely clean deinstallation of installed software
9115components.</p> 9115components.</p>
9116<p>Given that pkgsrc is <a class="ulink" href="http://www.NetBSD.org/" target="_top">NetBSD</a>'s official packaging system, 9116<p>Given that pkgsrc is <a class="ulink" href="http://www.NetBSD.org/" target="_top">NetBSD</a>'s official packaging system,
9117the above also means that great efforts are put into making GNOME work 9117the above also means that great efforts are put into making GNOME work
9118under this operating system. Recently, <a class="ulink" href="http://www.dragonflybsd.org/" target="_top">DragonFly BSD</a> also adopted 9118under this operating system. Recently, <a class="ulink" href="http://www.dragonflybsd.org/" target="_top">DragonFly BSD</a> also adopted
9119pkgsrc as its preferred packaging system, contributing lots of 9119pkgsrc as its preferred packaging system, contributing lots of
9120portability fixes to make GNOME build and install under it.</p> 9120portability fixes to make GNOME build and install under it.</p>
9121<p>This chapter is aimed at pkgsrc developers and other people 9121<p>This chapter is aimed at pkgsrc developers and other people
9122interested in helping our GNOME porting and packaging efforts. It 9122interested in helping our GNOME porting and packaging efforts. It
9123provides instructions on how to manage the existing packages and some 9123provides instructions on how to manage the existing packages and some
9124important information regarding their internals.</p> 9124important information regarding their internals.</p>
9125<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 9125<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
9126<h3 class="title">We need your help!</h3> 9126<h3 class="title">We need your help!</h3>
9127<p>Should you have some spare cycles to devote to NetBSD, pkgsrc 9127<p>Should you have some spare cycles to devote to NetBSD, pkgsrc
9128 and GNOME and are willing to learn new exciting stuff, please jump 9128 and GNOME and are willing to learn new exciting stuff, please jump
9129 straight to the <a class="ulink" href="http://www.NetBSD.org/contrib/projects.html#gnome" target="_top">pending 9129 straight to the <a class="ulink" href="http://www.NetBSD.org/contrib/projects.html#gnome" target="_top">pending
9130 work</a> list! There is still a long way to go to get a 9130 work</a> list! There is still a long way to go to get a
9131 fully-functional GNOME desktop under NetBSD and we need your help to 9131 fully-functional GNOME desktop under NetBSD and we need your help to
9132 achieve it!</p> 9132 achieve it!</p>
9133</div> 9133</div>
9134<div class="sect1"> 9134<div class="sect1">
9135<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9135<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9136<a name="meta-packages"></a>23.1. Meta packages</h2></div></div></div> 9136<a name="meta-packages"></a>23.1. Meta packages</h2></div></div></div>
9137<p>pkgsrc includes three GNOME-related meta packages:</p> 9137<p>pkgsrc includes three GNOME-related meta packages:</p>
9138<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9138<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9139<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-base/README.html" target="_top"><code class="filename">meta-pkgs/gnome-base</code></a>: Provides 9139<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-base/README.html" target="_top"><code class="filename">meta-pkgs/gnome-base</code></a>: Provides
9140 the core GNOME desktop environment. It only includes the necessary 9140 the core GNOME desktop environment. It only includes the necessary
9141 bits to get it to boot correctly, although it may lack important 9141 bits to get it to boot correctly, although it may lack important
9142 functionality for daily operation. The idea behind this package is 9142 functionality for daily operation. The idea behind this package is
9143 to let end users build their own configurations on top of this one, 9143 to let end users build their own configurations on top of this one,
9144 first installing this meta package to achieve a functional setup and 9144 first installing this meta package to achieve a functional setup and
9145 then adding individual applications.</p></li> 9145 then adding individual applications.</p></li>
9146<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome/README.html" target="_top"><code class="filename">meta-pkgs/gnome</code></a>: Provides a 9146<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome/README.html" target="_top"><code class="filename">meta-pkgs/gnome</code></a>: Provides a
9147 complete installation of the GNOME platform and desktop as defined 9147 complete installation of the GNOME platform and desktop as defined
9148 by the GNOME project; this is based on the components distributed in 9148 by the GNOME project; this is based on the components distributed in
9149 the <code class="filename">platform/x.y/x.y.z/sources</code> and 9149 the <code class="filename">platform/x.y/x.y.z/sources</code> and
9150 <code class="filename">desktop/x.y/x.y.z/sources</code> directories of the 9150 <code class="filename">desktop/x.y/x.y.z/sources</code> directories of the
9151 official FTP server. Developer-only tools found in those 9151 official FTP server. Developer-only tools found in those
9152 directories are not installed unless required by some other 9152 directories are not installed unless required by some other
9153 component to work properly. Similarly, packages from the bindings 9153 component to work properly. Similarly, packages from the bindings
9154 set (<code class="filename">bindings/x.y/x.y.z/sources</code>) are not pulled 9154 set (<code class="filename">bindings/x.y/x.y.z/sources</code>) are not pulled
9155 in unless required as a dependency for an end-user component. This 9155 in unless required as a dependency for an end-user component. This
9156 package "extends" <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-base/README.html" target="_top"><code class="filename">meta-pkgs/gnome-base</code></a>.</p></li> 9156 package "extends" <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-base/README.html" target="_top"><code class="filename">meta-pkgs/gnome-base</code></a>.</p></li>
9157<li class="listitem"><p><a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-devel/README.html" target="_top"><code class="filename">meta-pkgs/gnome-devel</code></a>: 9157<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-devel/README.html" target="_top"><code class="filename">meta-pkgs/gnome-devel</code></a>:
9158 Installs all the tools required to build a GNOME component when 9158 Installs all the tools required to build a GNOME component when
9159 fetched from the CVS repository. These are required to let the 9159 fetched from the CVS repository. These are required to let the
9160 <span class="command"><strong>autogen.sh</strong></span> scripts work appropriately.</p></li> 9160 <span class="command"><strong>autogen.sh</strong></span> scripts work appropriately.</p></li>
9161</ul></div> 9161</ul></div>
9162<p>In all these packages, the <code class="varname">DEPENDS</code> lines are 9162<p>In all these packages, the <code class="varname">DEPENDS</code> lines are
9163sorted in a way that eases updates: a package may depend on other 9163sorted in a way that eases updates: a package may depend on other
9164packages listed before it but not on any listed after it. It is very 9164packages listed before it but not on any listed after it. It is very
9165important to keep this order to ease updates so... <span class="emphasis"><em>do not 9165important to keep this order to ease updates so... <span class="emphasis"><em>do not
9166change it to alphabetical sorting!</em></span></p> 9166change it to alphabetical sorting!</em></span></p>
9167</div> 9167</div>
9168<div class="sect1"> 9168<div class="sect1">
9169<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9169<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9170<a name="new-package"></a>23.2. Packaging a GNOME application</h2></div></div></div> 9170<a name="new-package"></a>23.2. Packaging a GNOME application</h2></div></div></div>
9171<p>Almost all GNOME applications are written in C and use a common 9171<p>Almost all GNOME applications are written in C and use a common
9172set of tools as their build system. Things get different with the new 9172set of tools as their build system. Things get different with the new
9173bindings to other languages (such as Python), but the following will 9173bindings to other languages (such as Python), but the following will
9174give you a general idea on the minimum required tools:</p> 9174give you a general idea on the minimum required tools:</p>
9175<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9175<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9176<li class="listitem"> 9176<li class="listitem">
9177<p>Almost all GNOME applications use the GNU Autotools as their 9177<p>Almost all GNOME applications use the GNU Autotools as their
9178 build system. As a general rule you will need to tell this to your 9178 build system. As a general rule you will need to tell this to your
9179 package:</p> 9179 package:</p>
9180<pre class="programlisting"> 9180<pre class="programlisting">
9181GNU_CONFIGURE=yes 9181GNU_CONFIGURE=yes
9182USE_LIBTOOL=yes 9182USE_LIBTOOL=yes
9183USE_TOOLS+=gmake 9183USE_TOOLS+=gmake
9184</pre> 9184</pre>
9185</li> 9185</li>
9186<li class="listitem"> 9186<li class="listitem">
9187<p>If the package uses pkg-config to detect dependencies, add this 9187<p>If the package uses pkg-config to detect dependencies, add this
9188 tool to the list of required utilities:</p> 9188 tool to the list of required utilities:</p>
9189<pre class="programlisting"> 9189<pre class="programlisting">
9190USE_TOOLS+=pkg-config 9190USE_TOOLS+=pkg-config
9191</pre> 9191</pre>
9192<p>Also use <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/verifypc/README.html" target="_top"><code class="filename">pkgtools/verifypc</code></a> at 9192<p>Also use <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/verifypc/README.html" target="_top"><code class="filename">pkgtools/verifypc</code></a> at
9193 the end of the build process to ensure that you did not miss to 9193 the end of the build process to ensure that you did not miss to
9194 specify any dependency in your package and that the version 9194 specify any dependency in your package and that the version
9195 requirements are all correct.</p> 9195 requirements are all correct.</p>
9196</li> 9196</li>
9197<li class="listitem"><p>If the package uses intltool, be sure to add 9197<li class="listitem"><p>If the package uses intltool, be sure to add
9198 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code> 9198 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code>
9199 to handle dependencies and to force the package to use the latest 9199 to handle dependencies and to force the package to use the latest
9200 available version.</p></li> 9200 available version.</p></li>
9201<li class="listitem"> 9201<li class="listitem">
9202<p>If the package uses gtk-doc (a documentation generation 9202<p>If the package uses gtk-doc (a documentation generation
9203 utility), do <span class="emphasis"><em>not</em></span> add a dependency on it. The 9203 utility), do <span class="emphasis"><em>not</em></span> add a dependency on it. The
9204 tool is rather big and the distfile should come with pregenerated 9204 tool is rather big and the distfile should come with pregenerated
9205 documentation anyway; if it does not, it is a bug that you ought to 9205 documentation anyway; if it does not, it is a bug that you ought to
9206 report. For such packages you should disable gtk-doc (unless it is 9206 report. For such packages you should disable gtk-doc (unless it is
9207 the default):</p> 9207 the default):</p>
9208<pre class="programlisting"> 9208<pre class="programlisting">
9209CONFIGURE_ARGS+=--disable-gtk-doc 9209CONFIGURE_ARGS+=--disable-gtk-doc
9210</pre> 9210</pre>
9211<p>The default location of installed HTML files 9211<p>The default location of installed HTML files
9212 (<code class="filename">share/gtk-doc/&lt;package-name&gt;</code>) is correct 9212 (<code class="filename">share/gtk-doc/&lt;package-name&gt;</code>) is correct
9213 and should not be changed unless the package insists on installing 9213 and should not be changed unless the package insists on installing
9214 them somewhere else. Otherwise programs as 9214 them somewhere else. Otherwise programs as
9215 <span class="command"><strong>devhelp</strong></span> will not be able to open them. You can 9215 <span class="command"><strong>devhelp</strong></span> will not be able to open them. You can
9216 do that with an entry similar to:</p> 9216 do that with an entry similar to:</p>
9217<pre class="programlisting"> 9217<pre class="programlisting">
9218CONFIGURE_ARGS+=--with-html-dir=${PREFIX}/share/gtk-doc/... 9218CONFIGURE_ARGS+=--with-html-dir=${PREFIX}/share/gtk-doc/...
9219</pre> 9219</pre>
9220</li> 9220</li>
9221</ul></div> 9221</ul></div>
9222<p>GNOME uses multiple <span class="emphasis"><em>shared</em></span> directories and 9222<p>GNOME uses multiple <span class="emphasis"><em>shared</em></span> directories and
9223files under the installation prefix to maintain databases. In this 9223files under the installation prefix to maintain databases. In this
9224context, shared means that those exact same directories and files are 9224context, shared means that those exact same directories and files are
9225used among several different packages, leading to conflicts in the 9225used among several different packages, leading to conflicts in the
9226<code class="filename">PLIST</code>. pkgsrc currently includes functionality to 9226<code class="filename">PLIST</code>. pkgsrc currently includes functionality to
9227handle the most common cases, so you have to forget about using 9227handle the most common cases, so you have to forget about using
9228<code class="literal">@unexec ${RMDIR}</code> lines in your file lists and 9228<code class="literal">@unexec ${RMDIR}</code> lines in your file lists and
9229omitting shared files from them. If you find yourself doing those, 9229omitting shared files from them. If you find yourself doing those,
9230<span class="emphasis"><em>your package is most likely incorrect</em></span>.</p> 9230<span class="emphasis"><em>your package is most likely incorrect</em></span>.</p>
9231<p>The following table lists the common situations that result in 9231<p>The following table lists the common situations that result in
9232using shared directories or files. For each of them, the appropriate 9232using shared directories or files. For each of them, the appropriate
9233solution is given. After applying the solution be sure to 9233solution is given. After applying the solution be sure to
9234<span class="emphasis"><em>regenerate the package's file list</em></span> with 9234<span class="emphasis"><em>regenerate the package's file list</em></span> with
9235<span class="command"><strong>make print-PLIST</strong></span> and ensure it is correct.</p> 9235<span class="command"><strong>make print-PLIST</strong></span> and ensure it is correct.</p>
9236<div class="table"> 9236<div class="table">
9237<a name="plist-handling"></a><p class="title"><b>Table 23.1. PLIST handling for GNOME packages</b></p> 9237<a name="plist-handling"></a><p class="title"><b>Table 23.1. PLIST handling for GNOME packages</b></p>
9238<div class="table-contents"><table class="table" summary="PLIST handling for GNOME packages" border="1"> 9238<div class="table-contents"><table class="table" summary="PLIST handling for GNOME packages" border="1">
9239<colgroup> 9239<colgroup>
9240<col> 9240<col>
9241<col> 9241<col>
9242</colgroup> 9242</colgroup>
9243<thead><tr> 9243<thead><tr>
9244<th>If the package...</th> 9244<th>If the package...</th>
9245<th>Then...</th> 9245<th>Then...</th>
9246</tr></thead> 9246</tr></thead>
9247<tbody> 9247<tbody>
9248<tr> 9248<tr>
9249<td>Installs OMF files under <code class="filename">share/omf</code>.</td> 9249<td>Installs OMF files under <code class="filename">share/omf</code>.</td>
9250<td>See <a class="xref" href="#scrollkeeper-data-files" title="19.6.10. Packages installing scrollkeeper/rarian data files">Section 19.6.10, &#8220;Packages installing scrollkeeper/rarian data files&#8221;</a>.</td> 9250<td>See <a class="xref" href="#scrollkeeper-data-files" title="19.6.10. Packages installing scrollkeeper/rarian data files">Section 19.6.10, &#8220;Packages installing scrollkeeper/rarian data files&#8221;</a>.</td>
9251</tr> 9251</tr>
9252<tr> 9252<tr>
9253<td>Installs icons under the 9253<td>Installs icons under the
9254 <code class="filename">share/icons/hicolor</code> hierarchy or updates 9254 <code class="filename">share/icons/hicolor</code> hierarchy or updates
9255 <code class="filename">share/icons/hicolor/icon-theme.cache</code>.</td> 9255 <code class="filename">share/icons/hicolor/icon-theme.cache</code>.</td>
9256<td>See <a class="xref" href="#hicolor-theme" title="19.6.19. Packages installing hicolor theme icons">Section 19.6.19, &#8220;Packages installing hicolor theme icons&#8221;</a>.</td> 9256<td>See <a class="xref" href="#hicolor-theme" title="19.6.19. Packages installing hicolor theme icons">Section 19.6.19, &#8220;Packages installing hicolor theme icons&#8221;</a>.</td>
9257</tr> 9257</tr>
9258<tr> 9258<tr>
9259<td>Installs files under 9259<td>Installs files under
9260 <code class="filename">share/mime/packages</code>.</td> 9260 <code class="filename">share/mime/packages</code>.</td>
9261<td>See <a class="xref" href="#mime-database" title="19.6.14. Packages installing extensions to the MIME database">Section 19.6.14, &#8220;Packages installing extensions to the MIME database&#8221;</a>.</td> 9261<td>See <a class="xref" href="#mime-database" title="19.6.14. Packages installing extensions to the MIME database">Section 19.6.14, &#8220;Packages installing extensions to the MIME database&#8221;</a>.</td>
9262</tr> 9262</tr>
9263<tr> 9263<tr>
9264<td>Installs <code class="filename">.desktop</code> files under 9264<td>Installs <code class="filename">.desktop</code> files under
9265 <code class="filename">share/applications</code> and these include MIME 9265 <code class="filename">share/applications</code> and these include MIME
9266 information.</td> 9266 information.</td>
9267<td>See <a class="xref" href="#desktop-files" title="19.6.20. Packages installing desktop files">Section 19.6.20, &#8220;Packages installing desktop files&#8221;</a>.</td> 9267<td>See <a class="xref" href="#desktop-files" title="19.6.20. Packages installing desktop files">Section 19.6.20, &#8220;Packages installing desktop files&#8221;</a>.</td>
9268</tr> 9268</tr>
9269</tbody> 9269</tbody>
9270</table></div> 9270</table></div>
9271</div> 9271</div>
9272<br class="table-break"> 9272<br class="table-break">
9273</div> 9273</div>
9274<div class="sect1"> 9274<div class="sect1">
9275<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9275<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9276<a name="full-update"></a>23.3. Updating GNOME to a newer version</h2></div></div></div> 9276<a name="full-update"></a>23.3. Updating GNOME to a newer version</h2></div></div></div>
9277<p>When seeing GNOME as a whole, there are two kinds of 9277<p>When seeing GNOME as a whole, there are two kinds of
9278updates:</p> 9278updates:</p>
9279<div class="variablelist"><dl class="variablelist"> 9279<div class="variablelist"><dl class="variablelist">
9280<dt><span class="term">Major update</span></dt> 9280<dt><span class="term">Major update</span></dt>
9281<dd> 9281<dd>
9282<p>Given that there is still a very long way for GNOME 3 (if it 9282<p>Given that there is still a very long way for GNOME 3 (if it
9283 ever appears), we consider a major update one that goes from a 9283 ever appears), we consider a major update one that goes from a
9284 <code class="literal">2.X</code> version to a <code class="literal">2.Y</code> one, 9284 <code class="literal">2.X</code> version to a <code class="literal">2.Y</code> one,
9285 where <code class="literal">Y</code> is even and greater than 9285 where <code class="literal">Y</code> is even and greater than
9286 <code class="literal">X</code>. These are hard to achieve because they 9286 <code class="literal">X</code>. These are hard to achieve because they
9287 introduce lots of changes in the components' code and almost all 9287 introduce lots of changes in the components' code and almost all
9288 GNOME distfiles are updated to newer versions. Some of them can 9288 GNOME distfiles are updated to newer versions. Some of them can
9289 even break API and ABI compatibility with the previous major 9289 even break API and ABI compatibility with the previous major
9290 version series. As a result, the update needs to be done all at 9290 version series. As a result, the update needs to be done all at
9291 once to minimize breakage.</p> 9291 once to minimize breakage.</p>
9292<p>A major update typically consists of around 80 package 9292<p>A major update typically consists of around 80 package
9293 updates and the addition of some new ones.</p> 9293 updates and the addition of some new ones.</p>
9294</dd> 9294</dd>
9295<dt><span class="term">Minor update</span></dt> 9295<dt><span class="term">Minor update</span></dt>
9296<dd> 9296<dd>
9297<p>We consider a minor update one that goes from a 9297<p>We consider a minor update one that goes from a
9298 <code class="literal">2.A.X</code> version to a <code class="literal">2.A.Y</code> 9298 <code class="literal">2.A.X</code> version to a <code class="literal">2.A.Y</code>
9299 one where <code class="literal">Y</code> is greater than 9299 one where <code class="literal">Y</code> is greater than
9300 <code class="literal">X</code>. These are easy to achieve because they do 9300 <code class="literal">X</code>. These are easy to achieve because they do
9301 not update all GNOME components, can be done in an incremental way 9301 not update all GNOME components, can be done in an incremental way
9302 and do not break API nor ABI compatibility.</p> 9302 and do not break API nor ABI compatibility.</p>
9303<p>A minor update typically consists of around 50 package 9303<p>A minor update typically consists of around 50 package
9304 updates, although the numbers here may vary a lot.</p> 9304 updates, although the numbers here may vary a lot.</p>
9305</dd> 9305</dd>
9306</dl></div> 9306</dl></div>
9307<p>In order to update the GNOME components in pkgsrc to a new stable 9307<p>In order to update the GNOME components in pkgsrc to a new stable
9308release (either major or minor), the following steps should be 9308release (either major or minor), the following steps should be
9309followed:</p> 9309followed:</p>
9310<div class="orderedlist"><ol class="orderedlist" type="1"> 9310<div class="orderedlist"><ol class="orderedlist" type="1">
9311<li class="listitem"> 9311<li class="listitem">
9312<p>Get a list of all the tarballs that form the new release by 9312<p>Get a list of all the tarballs that form the new release by
9313 using the following commands. These will leave the full list of the 9313 using the following commands. These will leave the full list of the
9314 components' distfiles into the <code class="filename">list.txt</code> 9314 components' distfiles into the <code class="filename">list.txt</code>
9315 file:</p> 9315 file:</p>
9316<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>echo ls "*.tar.bz2" | \ 9316<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>echo ls "*.tar.bz2" | \
9317 ftp -V ftp://ftp.gnome.org/pub/gnome/platform/x.y/x.y.z/sources/ | \ 9317 ftp -V ftp://ftp.gnome.org/pub/gnome/platform/x.y/x.y.z/sources/ | \
9318 awk '{ print $9 }' &gt;list.txt</code></strong> 9318 awk '{ print $9 }' &gt;list.txt</code></strong>
9319<code class="prompt">%</code> <strong class="userinput"><code>echo ls "*.tar.bz2" | \ 9319<code class="prompt">%</code> <strong class="userinput"><code>echo ls "*.tar.bz2" | \
9320 ftp -V ftp://ftp.gnome.org/pub/gnome/desktop/x.y/x.y.z/sources/ | \ 9320 ftp -V ftp://ftp.gnome.org/pub/gnome/desktop/x.y/x.y.z/sources/ | \
9321 awk '{ print $9 }' &gt;&gt;list.txt</code></strong></pre> 9321 awk '{ print $9 }' &gt;&gt;list.txt</code></strong></pre>
9322</li> 9322</li>
9323<li class="listitem"><p>Open each meta package's <code class="filename">Makefile</code> and 9323<li class="listitem"><p>Open each meta package's <code class="filename">Makefile</code> and
9324 bump their version to the release you are updating them to. The 9324 bump their version to the release you are updating them to. The
9325 three meta packages should be always consistent with versioning. 9325 three meta packages should be always consistent with versioning.
9326 Obviously remove any <code class="varname">PKGREVISION</code>s that might be 9326 Obviously remove any <code class="varname">PKGREVISION</code>s that might be
9327 in them.</p></li> 9327 in them.</p></li>
9328<li class="listitem"> 9328<li class="listitem">
9329<p>For each meta package, update all its 9329<p>For each meta package, update all its
9330 <code class="varname">DEPENDS</code> lines to match the latest versions as 9330 <code class="varname">DEPENDS</code> lines to match the latest versions as
9331 shown by the above commands. Do <span class="emphasis"><em>not</em></span> list any 9331 shown by the above commands. Do <span class="emphasis"><em>not</em></span> list any
9332 newer version (even if found in the FTP) because the meta packages 9332 newer version (even if found in the FTP) because the meta packages
9333 are supposed to list the exact versions that form a specific GNOME 9333 are supposed to list the exact versions that form a specific GNOME
9334 release. Exceptions are permitted here if a newer version solves a 9334 release. Exceptions are permitted here if a newer version solves a
9335 serious issue in the overall desktop experience; these typically 9335 serious issue in the overall desktop experience; these typically
9336 come in the form of a revision bump in pkgsrc, not in newer versions 9336 come in the form of a revision bump in pkgsrc, not in newer versions
9337 from the developers.</p> 9337 from the developers.</p>
9338<p>Packages not listed in the <code class="filename">list.txt</code> file 9338<p>Packages not listed in the <code class="filename">list.txt</code> file
9339 should be updated to the latest version available (if found in 9339 should be updated to the latest version available (if found in
9340 pkgsrc). This is the case, for example, of the dependencies on the 9340 pkgsrc). This is the case, for example, of the dependencies on the
9341 GNU Autotools in the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-devel/README.html" target="_top"><code class="filename">meta-pkgs/gnome-devel</code></a> meta package.</p> 9341 GNU Autotools in the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-devel/README.html" target="_top"><code class="filename">meta-pkgs/gnome-devel</code></a> meta package.</p>
9342</li> 9342</li>
9343<li class="listitem"> 9343<li class="listitem">
9344<p>Generate a patch from the modified meta packages and extract the 9344<p>Generate a patch from the modified meta packages and extract the
9345 list of "new" lines. This will provide you an outline on what 9345 list of "new" lines. This will provide you an outline on what
9346 packages need to be updated in pkgsrc and in what order:</p> 9346 packages need to be updated in pkgsrc and in what order:</p>
9347<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cvs diff -u gnome-devel gnome-base gnome | grep '^+D' &gt;todo.txt</code></strong></pre> 9347<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cvs diff -u gnome-devel gnome-base gnome | grep '^+D' &gt;todo.txt</code></strong></pre>
9348</li> 9348</li>
9349<li class="listitem"><p>For major desktop updates it is recommended to zap all your 9349<li class="listitem"><p>For major desktop updates it is recommended to zap all your
9350 installed packages and start over from scratch at this point.</p></li> 9350 installed packages and start over from scratch at this point.</p></li>
9351<li class="listitem"><p>Now comes the longest step by far: iterate over the contents 9351<li class="listitem"><p>Now comes the longest step by far: iterate over the contents
9352 of <code class="filename">todo.txt</code> and update the packages listed in 9352 of <code class="filename">todo.txt</code> and update the packages listed in
9353 it in order. For major desktop updates none of these should be 9353 it in order. For major desktop updates none of these should be
9354 committed until the entire set is completed because there are chances 9354 committed until the entire set is completed because there are chances
9355 of breaking not-yet-updated packages.</p></li> 9355 of breaking not-yet-updated packages.</p></li>
9356<li class="listitem"><p>Once the packages are up to date and working, commit them to 9356<li class="listitem"><p>Once the packages are up to date and working, commit them to
9357 the tree one by one with appropriate log messages. At the end, 9357 the tree one by one with appropriate log messages. At the end,
9358 commit the three meta package updates and all the corresponding 9358 commit the three meta package updates and all the corresponding
9359 changes to the <code class="filename">doc/CHANGES-&lt;YEAR&gt;</code> and 9359 changes to the <code class="filename">doc/CHANGES-&lt;YEAR&gt;</code> and
9360 <a href="http://cvsweb.NetBSD.org/bsdweb.cgi/pkgsrc/doc/TODO?rev=HEAD&amp;content-type=text/x-cvsweb-markup" target="_top"><code class="filename">pkgsrc/doc/TODO</code></a> files.</p></li> 9360 <a href="http://cvsweb.NetBSD.org/bsdweb.cgi/pkgsrc/doc/TODO?rev=HEAD&amp;content-type=text/x-cvsweb-markup" target="_top"><code class="filename">pkgsrc/doc/TODO</code></a> files.</p></li>
9361</ol></div> 9361</ol></div>
9362</div> 9362</div>
9363<div class="sect1"> 9363<div class="sect1">
9364<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9364<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9365<a name="patching"></a>23.4. Patching guidelines</h2></div></div></div> 9365<a name="patching"></a>23.4. Patching guidelines</h2></div></div></div>
9366<p>GNOME is a very big component in pkgsrc which approaches 100 9366<p>GNOME is a very big component in pkgsrc which approaches 100
9367packages. Please, it is very important that you always, always, 9367packages. Please, it is very important that you always, always,
9368<span class="strong"><strong>always</strong></span> feed back any portability 9368<span class="strong"><strong>always</strong></span> feed back any portability
9369fixes you do to a GNOME package to the mainstream developers (see <a class="xref" href="#components.patches.feedback" title="11.3.5. Feedback to the author">Section 11.3.5, &#8220;Feedback to the author&#8221;</a>). This is the only way to get 9369fixes you do to a GNOME package to the mainstream developers (see <a class="xref" href="#components.patches.feedback" title="11.3.5. Feedback to the author">Section 11.3.5, &#8220;Feedback to the author&#8221;</a>). This is the only way to get
9370their attention on portability issues and to ensure that future versions 9370their attention on portability issues and to ensure that future versions
9371can be built out-of-the box on NetBSD. The less custom patches in 9371can be built out-of-the box on NetBSD. The less custom patches in
9372pkgsrc, the easier further updates are. Those developers in charge of 9372pkgsrc, the easier further updates are. Those developers in charge of
9373issuing major GNOME updates will be grateful if you do that.</p> 9373issuing major GNOME updates will be grateful if you do that.</p>
9374<p>The most common places to report bugs are the <a class="ulink" href="http://bugzilla.gnome.org/" target="_top">GNOME's Bugzilla</a> and the <a class="ulink" href="http://bugzilla.freedesktop.org/" target="_top">freedesktop.org's 9374<p>The most common places to report bugs are the <a class="ulink" href="http://bugzilla.gnome.org/" target="_top">GNOME's Bugzilla</a> and the <a class="ulink" href="http://bugzilla.freedesktop.org/" target="_top">freedesktop.org's
9375Bugzilla</a>. Not all components use these to track bugs, but most 9375Bugzilla</a>. Not all components use these to track bugs, but most
9376of them do. Do not be short on your reports: always provide detailed 9376of them do. Do not be short on your reports: always provide detailed
9377explanations of the current failure, how it can be improved to achieve 9377explanations of the current failure, how it can be improved to achieve
9378maximum portability and, if at all possible, provide a patch against CVS 9378maximum portability and, if at all possible, provide a patch against CVS
9379head. The more verbose you are, the higher chances of your patch being 9379head. The more verbose you are, the higher chances of your patch being
9380accepted.</p> 9380accepted.</p>
9381<p>Also, please avoid using preprocessor magic to fix portability 9381<p>Also, please avoid using preprocessor magic to fix portability
9382issues. While the FreeBSD GNOME people are doing a great job in porting 9382issues. While the FreeBSD GNOME people are doing a great job in porting
9383GNOME to their operating system, the official GNOME sources are now 9383GNOME to their operating system, the official GNOME sources are now
9384plagued by conditionals that check for <code class="varname">__FreeBSD__</code> 9384plagued by conditionals that check for <code class="varname">__FreeBSD__</code>
9385and similar macros. This hurts portability. Please see our patching 9385and similar macros. This hurts portability. Please see our patching
9386guidelines (<a class="xref" href="#components.patches.guidelines" title="11.3.4. Patching guidelines">Section 11.3.4, &#8220;Patching guidelines&#8221;</a>) for more 9386guidelines (<a class="xref" href="#components.patches.guidelines" title="11.3.4. Patching guidelines">Section 11.3.4, &#8220;Patching guidelines&#8221;</a>) for more
9387details.</p> 9387details.</p>
9388</div> 9388</div>
9389</div> 9389</div>
9390</div> 9390</div>
9391<div class="part"> 9391<div class="part">
9392<div class="titlepage"><div><div><h1 class="title"> 9392<div class="titlepage"><div><div><h1 class="title">
9393<a name="infrastructure"></a>Part III. The pkgsrc infrastructure internals</h1></div></div></div> 9393<a name="infrastructure"></a>Part III. The pkgsrc infrastructure internals</h1></div></div></div>
9394<div class="partintro"> 9394<div class="partintro">
9395<div></div> 9395<div></div>
9396<p>This part of the guide deals with everything 9396<p>This part of the guide deals with everything
9397 from the infrastructure that is behind the interfaces described 9397 from the infrastructure that is behind the interfaces described
9398 in the developer's guide. A casual package maintainer should not 9398 in the developer's guide. A casual package maintainer should not
9399 need anything from this part.</p> 9399 need anything from this part.</p>
9400<div class="toc"> 9400<div class="toc">
9401<p><b>Table of Contents</b></p> 9401<p><b>Table of Contents</b></p>
9402<dl class="toc"> 9402<dl class="toc">
9403<dt><span class="chapter"><a href="#infr.design">24. Design of the pkgsrc infrastructure</a></span></dt> 9403<dt><span class="chapter"><a href="#infr.design">24. Design of the pkgsrc infrastructure</a></span></dt>
9404<dd><dl> 9404<dd><dl>
9405<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt> 9405<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt>
9406<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt> 9406<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt>
9407<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt> 9407<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt>
9408<dd><dl> 9408<dd><dl>
9409<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt> 9409<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt>
9410<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt> 9410<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt>
9411</dl></dd> 9411</dl></dd>
9412<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt> 9412<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt>
9413<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt> 9413<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt>
9414<dd><dl> 9414<dd><dl>
9415<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt> 9415<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt>
9416<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt> 9416<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt>
9417</dl></dd> 9417</dl></dd>
9418<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt> 9418<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt>
9419<dd><dl> 9419<dd><dl>
9420<dt><span class="sect2"><a href="#infr.order.prefs">24.6.1. The order in <code class="filename">bsd.prefs.mk</code></a></span></dt> 9420<dt><span class="sect2"><a href="#infr.order.prefs">24.6.1. The order in <code class="filename">bsd.prefs.mk</code></a></span></dt>
9421<dt><span class="sect2"><a href="#infr.order.pkg">24.6.2. The order in <code class="filename">bsd.pkg.mk</code></a></span></dt> 9421<dt><span class="sect2"><a href="#infr.order.pkg">24.6.2. The order in <code class="filename">bsd.pkg.mk</code></a></span></dt>
9422</dl></dd> 9422</dl></dd>
9423</dl></dd> 9423</dl></dd>
9424<dt><span class="chapter"><a href="#regression">25. Regression tests</a></span></dt> 9424<dt><span class="chapter"><a href="#regression">25. Regression tests</a></span></dt>
9425<dd><dl> 9425<dd><dl>
9426<dt><span class="sect1"><a href="#regression.run">25.1. Running the regression tests</a></span></dt> 9426<dt><span class="sect1"><a href="#regression.run">25.1. Running the regression tests</a></span></dt>
9427<dt><span class="sect1"><a href="#regression.new">25.2. Adding a new regression test</a></span></dt> 9427<dt><span class="sect1"><a href="#regression.new">25.2. Adding a new regression test</a></span></dt>
9428<dd><dl> 9428<dd><dl>
9429<dt><span class="sect2"><a href="#regression.fun.override">25.2.1. Overridable functions</a></span></dt> 9429<dt><span class="sect2"><a href="#regression.fun.override">25.2.1. Overridable functions</a></span></dt>
9430<dt><span class="sect2"><a href="#regression.fun.helper">25.2.2. Helper functions</a></span></dt> 9430<dt><span class="sect2"><a href="#regression.fun.helper">25.2.2. Helper functions</a></span></dt>
9431</dl></dd> 9431</dl></dd>
9432</dl></dd> 9432</dl></dd>
9433<dt><span class="chapter"><a href="#porting">26. Porting pkgsrc</a></span></dt> 9433<dt><span class="chapter"><a href="#porting">26. Porting pkgsrc</a></span></dt>
9434<dd><dl><dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt></dl></dd> 9434<dd><dl><dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt></dl></dd>
9435</dl> 9435</dl>
9436</div> 9436</div>
9437</div> 9437</div>
9438<div class="chapter"> 9438<div class="chapter">
9439<div class="titlepage"><div><div><h2 class="title"> 9439<div class="titlepage"><div><div><h2 class="title">
9440<a name="infr.design"></a>Chapter 24. Design of the pkgsrc infrastructure</h2></div></div></div> 9440<a name="infr.design"></a>Chapter 24. Design of the pkgsrc infrastructure</h2></div></div></div>
9441<div class="toc"> 9441<div class="toc">
9442<p><b>Table of Contents</b></p> 9442<p><b>Table of Contents</b></p>
9443<dl class="toc"> 9443<dl class="toc">
9444<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt> 9444<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt>
9445<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt> 9445<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt>
9446<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt> 9446<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt>
9447<dd><dl> 9447<dd><dl>
9448<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt> 9448<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt>
9449<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt> 9449<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt>
9450</dl></dd> 9450</dl></dd>
9451<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt> 9451<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt>
9452<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt> 9452<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt>
9453<dd><dl> 9453<dd><dl>
9454<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt> 9454<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt>
9455<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt> 9455<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt>
9456</dl></dd> 9456</dl></dd>
9457<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt> 9457<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt>
9458<dd><dl> 9458<dd><dl>
9459<dt><span class="sect2"><a href="#infr.order.prefs">24.6.1. The order in <code class="filename">bsd.prefs.mk</code></a></span></dt> 9459<dt><span class="sect2"><a href="#infr.order.prefs">24.6.1. The order in <code class="filename">bsd.prefs.mk</code></a></span></dt>
9460<dt><span class="sect2"><a href="#infr.order.pkg">24.6.2. The order in <code class="filename">bsd.pkg.mk</code></a></span></dt> 9460<dt><span class="sect2"><a href="#infr.order.pkg">24.6.2. The order in <code class="filename">bsd.pkg.mk</code></a></span></dt>
9461</dl></dd> 9461</dl></dd>
9462</dl> 9462</dl>
9463</div> 9463</div>
9464<p>The pkgsrc infrastructure consists of many small Makefile 9464<p>The pkgsrc infrastructure consists of many small Makefile
9465 fragments. Each such fragment needs a properly specified 9465 fragments. Each such fragment needs a properly specified
9466 interface. This chapter explains how such an interface looks 9466 interface. This chapter explains how such an interface looks
9467 like.</p> 9467 like.</p>
9468<div class="sect1"> 9468<div class="sect1">
9469<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9469<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9470<a name="infr.vardef"></a>24.1. The meaning of variable definitions</h2></div></div></div> 9470<a name="infr.vardef"></a>24.1. The meaning of variable definitions</h2></div></div></div>
9471<p>Whenever a variable is defined in the pkgsrc 9471<p>Whenever a variable is defined in the pkgsrc
9472 infrastructure, the location and the way of definition provide 9472 infrastructure, the location and the way of definition provide
9473 much information about the intended use of that variable. 9473 much information about the intended use of that variable.
9474 Additionally, more documentation may be found in a header 9474 Additionally, more documentation may be found in a header
9475 comment or in this pkgsrc guide.</p> 9475 comment or in this pkgsrc guide.</p>
9476<p>A special file is 9476<p>A special file is
9477 <code class="filename">mk/defaults/mk.conf</code>, which lists all 9477 <code class="filename">mk/defaults/mk.conf</code>, which lists all
9478 variables that are intended to be user-defined. They are either 9478 variables that are intended to be user-defined. They are either
9479 defined using the <code class="literal">?=</code> operator or they are 9479 defined using the <code class="literal">?=</code> operator or they are
9480 left undefined because defining them to anything would 9480 left undefined because defining them to anything would
9481 effectively mean <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. All these variables may be 9481 effectively mean <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. All these variables may be
9482 overridden by the pkgsrc user in the <code class="varname">MAKECONF</code> 9482 overridden by the pkgsrc user in the <code class="varname">MAKECONF</code>
9483 file.</p> 9483 file.</p>
9484<p>Outside this file, the following conventions apply: 9484<p>Outside this file, the following conventions apply:
9485 Variables that are defined using the <code class="literal">?=</code> 9485 Variables that are defined using the <code class="literal">?=</code>
9486 operator may be overridden by a package.</p> 9486 operator may be overridden by a package.</p>
9487<p>Variables that are defined using the <code class="literal">=</code> 9487<p>Variables that are defined using the <code class="literal">=</code>
9488 operator may be used read-only at run-time.</p> 9488 operator may be used read-only at run-time.</p>
9489<p>Variables whose name starts with an underscore must not be 9489<p>Variables whose name starts with an underscore must not be
9490 accessed outside the pkgsrc infrastructure at all. They may 9490 accessed outside the pkgsrc infrastructure at all. They may
9491 change without further notice.</p> 9491 change without further notice.</p>
9492<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 9492<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
9493<h3 class="title">Note</h3> 9493<h3 class="title">Note</h3>
9494<p>These conventions are currently not applied 9494<p>These conventions are currently not applied
9495 consistently to the complete pkgsrc 9495 consistently to the complete pkgsrc
9496 infrastructure.</p> 9496 infrastructure.</p>
9497</div> 9497</div>
9498</div> 9498</div>
9499<div class="sect1"> 9499<div class="sect1">
9500<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9500<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9501<a name="infr.vardef.problems"></a>24.2. Avoiding problems before they arise</h2></div></div></div> 9501<a name="infr.vardef.problems"></a>24.2. Avoiding problems before they arise</h2></div></div></div>
9502<p>All variables that contain lists of things should default 9502<p>All variables that contain lists of things should default
9503 to being empty. Two examples that do not follow this rule are 9503 to being empty. Two examples that do not follow this rule are
9504 <code class="varname">USE_LANGUAGES</code> and 9504 <code class="varname">USE_LANGUAGES</code> and
9505 <code class="varname">DISTFILES</code>. These variables cannot simply be 9505 <code class="varname">DISTFILES</code>. These variables cannot simply be
9506 modified using the <code class="literal">+=</code> operator in package 9506 modified using the <code class="literal">+=</code> operator in package
9507 <code class="filename">Makefile</code>s (or other files included by 9507 <code class="filename">Makefile</code>s (or other files included by
9508 them), since there is no guarantee whether the variable is 9508 them), since there is no guarantee whether the variable is
9509 already set or not, and what its value is. In the case of 9509 already set or not, and what its value is. In the case of
9510 <code class="varname">DISTFILES</code>, the packages <span class="quote">&#8220;<span class="quote">know</span>&#8221;</span> 9510 <code class="varname">DISTFILES</code>, the packages <span class="quote">&#8220;<span class="quote">know</span>&#8221;</span>
9511 the default value and just define it as in the following 9511 the default value and just define it as in the following
9512 example.</p> 9512 example.</p>
9513<pre class="programlisting"> 9513<pre class="programlisting">
9514DISTFILES= ${DISTNAME}${EXTRACT_SUFX} additional-files.tar.gz 9514DISTFILES= ${DISTNAME}${EXTRACT_SUFX} additional-files.tar.gz
9515</pre> 9515</pre>
9516<p>Because of the selection of this default value, the same 9516<p>Because of the selection of this default value, the same
9517 value appears in many package Makefiles. Similarly for 9517 value appears in many package Makefiles. Similarly for
9518 <code class="varname">USE_LANGUAGES</code>, but in this case the default 9518 <code class="varname">USE_LANGUAGES</code>, but in this case the default
9519 value (<span class="quote">&#8220;<span class="quote"><code class="literal">c</code></span>&#8221;</span>) is so short that it 9519 value (<span class="quote">&#8220;<span class="quote"><code class="literal">c</code></span>&#8221;</span>) is so short that it
9520 doesn't stand out. Nevertheless it is mentioned in many 9520 doesn't stand out. Nevertheless it is mentioned in many
9521 files.</p> 9521 files.</p>
9522</div> 9522</div>
9523<div class="sect1"> 9523<div class="sect1">
9524<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9524<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9525<a name="infr.var"></a>24.3. Variable evaluation</h2></div></div></div> 9525<a name="infr.var"></a>24.3. Variable evaluation</h2></div></div></div>
9526<div class="sect2"> 9526<div class="sect2">
9527<div class="titlepage"><div><div><h3 class="title"> 9527<div class="titlepage"><div><div><h3 class="title">
9528<a name="infr.var.load"></a>24.3.1. At load time</h3></div></div></div> 9528<a name="infr.var.load"></a>24.3.1. At load time</h3></div></div></div>
9529<p>Variable evaluation takes place either at load time or at 9529<p>Variable evaluation takes place either at load time or at
9530 runtime, depending on the context in which they occur. The 9530 runtime, depending on the context in which they occur. The
9531 contexts where variables are evaluated at load time are:</p> 9531 contexts where variables are evaluated at load time are:</p>
9532<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9532<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9533<li class="listitem"><p>The right hand side of the <code class="literal">:=</code> 9533<li class="listitem"><p>The right hand side of the <code class="literal">:=</code>
9534 and <code class="literal">!=</code> operators,</p></li> 9534 and <code class="literal">!=</code> operators,</p></li>
9535<li class="listitem"><p>Make directives like <code class="literal">.if</code> or 9535<li class="listitem"><p>Make directives like <code class="literal">.if</code> or
9536 <code class="literal">.for</code>,</p></li> 9536 <code class="literal">.for</code>,</p></li>
9537<li class="listitem"><p>Dependency lines.</p></li> 9537<li class="listitem"><p>Dependency lines.</p></li>
9538</ul></div> 9538</ul></div>
9539<p>A special exception are references to the iteration 9539<p>A special exception are references to the iteration
9540 variables of <code class="literal">.for</code> loops, which are expanded 9540 variables of <code class="literal">.for</code> loops, which are expanded
9541 inline, no matter in which context they appear.</p> 9541 inline, no matter in which context they appear.</p>
9542<p>As the values of variables may change during load time, 9542<p>As the values of variables may change during load time,
9543 care must be taken not to evaluate them by accident. Typical 9543 care must be taken not to evaluate them by accident. Typical
9544 examples for variables that should not be evaluated at load time 9544 examples for variables that should not be evaluated at load time
9545 are <code class="varname">DEPENDS</code> and 9545 are <code class="varname">DEPENDS</code> and
9546 <code class="varname">CONFIGURE_ARGS</code>. To make the effect more 9546 <code class="varname">CONFIGURE_ARGS</code>. To make the effect more
9547 clear, here is an example:</p> 9547 clear, here is an example:</p>
9548<pre class="programlisting"> 9548<pre class="programlisting">
9549CONFIGURE_ARGS= # none 9549CONFIGURE_ARGS= # none
9550CFLAGS= -O 9550CFLAGS= -O
9551CONFIGURE_ARGS+= CFLAGS=${CFLAGS:Q} 9551CONFIGURE_ARGS+= CFLAGS=${CFLAGS:Q}
9552 9552
9553CONFIGURE_ARGS:= ${CONFIGURE_ARGS} 9553CONFIGURE_ARGS:= ${CONFIGURE_ARGS}
9554 9554
9555CFLAGS+= -Wall 9555CFLAGS+= -Wall
9556</pre> 9556</pre>
9557<p>This code shows how the use of the <code class="literal">:=</code> 9557<p>This code shows how the use of the <code class="literal">:=</code>
9558 operator can quickly lead to unexpected results. The first 9558 operator can quickly lead to unexpected results. The first
9559 paragraph is fairly common code. The second paragraph evaluates 9559 paragraph is fairly common code. The second paragraph evaluates
9560 the <code class="varname">CONFIGURE_ARGS</code> variable, which results in 9560 the <code class="varname">CONFIGURE_ARGS</code> variable, which results in
9561 <code class="literal">CFLAGS=-O</code>. In the third paragraph, the 9561 <code class="literal">CFLAGS=-O</code>. In the third paragraph, the
9562 <code class="literal">-Wall</code> is appended to the 9562 <code class="literal">-Wall</code> is appended to the
9563 <code class="varname">CFLAGS</code>, but this addition will not appear in 9563 <code class="varname">CFLAGS</code>, but this addition will not appear in
9564 <code class="varname">CONFIGURE_ARGS</code>. In actual code, the three 9564 <code class="varname">CONFIGURE_ARGS</code>. In actual code, the three
9565 paragraphs from above typically occur in completely unrelated 9565 paragraphs from above typically occur in completely unrelated
9566 files.</p> 9566 files.</p>
9567</div> 9567</div>
9568<div class="sect2"> 9568<div class="sect2">
9569<div class="titlepage"><div><div><h3 class="title"> 9569<div class="titlepage"><div><div><h3 class="title">
9570<a name="infr.var.run"></a>24.3.2. At runtime</h3></div></div></div> 9570<a name="infr.var.run"></a>24.3.2. At runtime</h3></div></div></div>
9571<p>After all the files have been loaded, the values of the 9571<p>After all the files have been loaded, the values of the
9572 variables cannot be changed anymore. Variables that are used in 9572 variables cannot be changed anymore. Variables that are used in
9573 the shell commands are expanded at this point.</p> 9573 the shell commands are expanded at this point.</p>
9574</div> 9574</div>
9575</div> 9575</div>
9576<div class="sect1"> 9576<div class="sect1">
9577<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9577<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9578<a name="infr.varspec"></a>24.4. How can variables be specified?</h2></div></div></div> 9578<a name="infr.varspec"></a>24.4. How can variables be specified?</h2></div></div></div>
9579<p>There are many ways in which the definition and use of a 9579<p>There are many ways in which the definition and use of a
9580 variable can be restricted in order to detect bugs and violations 9580 variable can be restricted in order to detect bugs and violations
9581 of the (mostly unwritten) policies. A package can be checked with 9581 of the (mostly unwritten) policies. A package can be checked with
9582 <code class="literal">pkglint -Wall</code> to see whether it meets these 9582 <code class="literal">pkglint -Wall</code> to see whether it meets these
9583 rules.</p> 9583 rules.</p>
9584</div> 9584</div>
9585<div class="sect1"> 9585<div class="sect1">
9586<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9586<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9587<a name="infr.design.intf"></a>24.5. Designing interfaces for Makefile fragments</h2></div></div></div> 9587<a name="infr.design.intf"></a>24.5. Designing interfaces for Makefile fragments</h2></div></div></div>
9588<p>Most of the <code class="filename">.mk</code> files fall into one 9588<p>Most of the <code class="filename">.mk</code> files fall into one
9589 of the following classes. Cases where a file falls into more 9589 of the following classes. Cases where a file falls into more
9590 than one class should be avoided as it often leads to subtle 9590 than one class should be avoided as it often leads to subtle
9591 bugs.</p> 9591 bugs.</p>
9592<div class="sect2"> 9592<div class="sect2">
9593<div class="titlepage"><div><div><h3 class="title"> 9593<div class="titlepage"><div><div><h3 class="title">
9594<a name="infr.design.intf.proc"></a>24.5.1. Procedures with parameters</h3></div></div></div> 9594<a name="infr.design.intf.proc"></a>24.5.1. Procedures with parameters</h3></div></div></div>
9595<p>In a traditional imperative programming language some of 9595<p>In a traditional imperative programming language some of
9596 the <code class="filename">.mk</code> files could be described as 9596 the <code class="filename">.mk</code> files could be described as
9597 procedures. They take some input parameters and&mdash;after 9597 procedures. They take some input parameters and&mdash;after
9598 inclusion&mdash;provide a result in output parameters. Since all 9598 inclusion&mdash;provide a result in output parameters. Since all
9599 variables in <code class="filename">Makefile</code>s have global scope 9599 variables in <code class="filename">Makefile</code>s have global scope
9600 care must be taken not to use parameter names that have already 9600 care must be taken not to use parameter names that have already
9601 another meaning. For example, <code class="varname">PKGNAME</code> is a 9601 another meaning. For example, <code class="varname">PKGNAME</code> is a
9602 bad choice for a parameter name.</p> 9602 bad choice for a parameter name.</p>
9603<p>Procedures are completely evaluated at preprocessing time. 9603<p>Procedures are completely evaluated at preprocessing time.
9604 That is, when calling a procedure all input parameters must be 9604 That is, when calling a procedure all input parameters must be
9605 completely resolvable. For example, 9605 completely resolvable. For example,
9606 <code class="varname">CONFIGURE_ARGS</code> should never be an input 9606 <code class="varname">CONFIGURE_ARGS</code> should never be an input
9607 parameter since it is very likely that further text will be 9607 parameter since it is very likely that further text will be
9608 added after calling the procedure, which would effectively apply 9608 added after calling the procedure, which would effectively apply
9609 the procedure to only a part of the variable. Also, references 9609 the procedure to only a part of the variable. Also, references
9610 to other variables will be modified after calling the 9610 to other variables will be modified after calling the
9611 procedure.</p> 9611 procedure.</p>
9612<p>A procedure can declare its output parameters either as 9612<p>A procedure can declare its output parameters either as
9613 suitable for use in preprocessing directives or as only 9613 suitable for use in preprocessing directives or as only
9614 available at runtime. The latter alternative is for variables 9614 available at runtime. The latter alternative is for variables
9615 that contain references to other runtime variables.</p> 9615 that contain references to other runtime variables.</p>
9616<p>Procedures shall be written such that it is possible to 9616<p>Procedures shall be written such that it is possible to
9617 call the procedure more than once. That is, the file must not 9617 call the procedure more than once. That is, the file must not
9618 contain multiple-inclusion guards.</p> 9618 contain multiple-inclusion guards.</p>
9619<p>Examples for procedures are 9619<p>Examples for procedures are
9620 <code class="filename">mk/bsd.options.mk</code> and 9620 <code class="filename">mk/bsd.options.mk</code> and
9621 <code class="filename">mk/buildlink3/bsd.builtin.mk</code>. To express 9621 <code class="filename">mk/buildlink3/bsd.builtin.mk</code>. To express
9622 that the parameters are evaluated at load time, they should be 9622 that the parameters are evaluated at load time, they should be
9623 assigned using the <code class="literal">:=</code> operator, which should 9623 assigned using the <code class="literal">:=</code> operator, which should
9624 be used only for this purpose.</p> 9624 be used only for this purpose.</p>
9625</div> 9625</div>
9626<div class="sect2"> 9626<div class="sect2">
9627<div class="titlepage"><div><div><h3 class="title"> 9627<div class="titlepage"><div><div><h3 class="title">
9628<a name="infr.design.intf.action"></a>24.5.2. Actions taken on behalf of parameters</h3></div></div></div> 9628<a name="infr.design.intf.action"></a>24.5.2. Actions taken on behalf of parameters</h3></div></div></div>
9629<p>Action files take some input parameters and may define 9629<p>Action files take some input parameters and may define
9630 runtime variables. They shall not define loadtime variables. 9630 runtime variables. They shall not define loadtime variables.
9631 There are action files that are included implicitly by the 9631 There are action files that are included implicitly by the
9632 pkgsrc infrastructure, while other must be included 9632 pkgsrc infrastructure, while other must be included
9633 explicitly.</p> 9633 explicitly.</p>
9634<p>An example for action files is 9634<p>An example for action files is
9635 <code class="filename">mk/subst.mk</code>.</p> 9635 <code class="filename">mk/subst.mk</code>.</p>
9636</div> 9636</div>
9637</div> 9637</div>
9638<div class="sect1"> 9638<div class="sect1">
9639<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9639<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9640<a name="infr.order"></a>24.6. The order in which files are loaded</h2></div></div></div> 9640<a name="infr.order"></a>24.6. The order in which files are loaded</h2></div></div></div>
9641<p>Package <code class="filename">Makefile</code>s usually consist of 9641<p>Package <code class="filename">Makefile</code>s usually consist of
9642 a set of variable definitions, and include the file 9642 a set of variable definitions, and include the file
9643 <code class="filename">../../mk/bsd.pkg.mk</code> in the very last line. 9643 <code class="filename">../../mk/bsd.pkg.mk</code> in the very last line.
9644 Before that, they may also include various other 9644 Before that, they may also include various other
9645 <code class="filename">*.mk</code> files if they need to query the 9645 <code class="filename">*.mk</code> files if they need to query the
9646 availability of certain features like the type of compiler or 9646 availability of certain features like the type of compiler or
9647 the X11 implementation. Due to the heavy use of preprocessor 9647 the X11 implementation. Due to the heavy use of preprocessor
9648 directives like <code class="literal">.if</code> and 9648 directives like <code class="literal">.if</code> and
9649 <code class="literal">.for</code>, the order in which the files are loaded 9649 <code class="literal">.for</code>, the order in which the files are loaded
9650 matters.</p> 9650 matters.</p>
9651<p>This section describes at which point the various files 9651<p>This section describes at which point the various files
9652 are loaded and gives reasons for that order.</p> 9652 are loaded and gives reasons for that order.</p>
9653<div class="sect2"> 9653<div class="sect2">
9654<div class="titlepage"><div><div><h3 class="title"> 9654<div class="titlepage"><div><div><h3 class="title">
9655<a name="infr.order.prefs"></a>24.6.1. The order in <code class="filename">bsd.prefs.mk</code> 9655<a name="infr.order.prefs"></a>24.6.1. The order in <code class="filename">bsd.prefs.mk</code>
9656</h3></div></div></div> 9656</h3></div></div></div>
9657<p>The very first action in <code class="filename">bsd.prefs.mk</code> 9657<p>The very first action in <code class="filename">bsd.prefs.mk</code>
9658 is to define some essential variables like 9658 is to define some essential variables like
9659 <code class="varname">OPSYS</code>, <code class="varname">OS_VERSION</code> and 9659 <code class="varname">OPSYS</code>, <code class="varname">OS_VERSION</code> and
9660 <code class="varname">MACHINE_ARCH</code>.</p> 9660 <code class="varname">MACHINE_ARCH</code>.</p>
9661<p>Then, the user settings are loaded from the file specified 9661<p>Then, the user settings are loaded from the file specified
9662 in <code class="varname">MAKECONF</code>, which is usually <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. 9662 in <code class="varname">MAKECONF</code>, which is usually <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.
9663 After that, those variables 9663 After that, those variables
9664 that have not been overridden by the user are loaded from 9664 that have not been overridden by the user are loaded from
9665 <code class="filename">mk/defaults/mk.conf</code>.</p> 9665 <code class="filename">mk/defaults/mk.conf</code>.</p>
9666<p>After the user settings, the system settings and platform 9666<p>After the user settings, the system settings and platform
9667 settings are loaded, which may override the user 9667 settings are loaded, which may override the user
9668 settings.</p> 9668 settings.</p>
9669<p>Then, the tool definitions are loaded. The tool wrappers 9669<p>Then, the tool definitions are loaded. The tool wrappers
9670 are not yet in effect. This only happens when building a 9670 are not yet in effect. This only happens when building a
9671 package, so the proper variables must be used instead of the 9671 package, so the proper variables must be used instead of the
9672 direct tool names.</p> 9672 direct tool names.</p>
9673<p>As the last steps, some essential variables from the 9673<p>As the last steps, some essential variables from the
9674 wrapper and the package system flavor are loaded, as well as the 9674 wrapper and the package system flavor are loaded, as well as the
9675 variables that have been cached in earlier phases of a package 9675 variables that have been cached in earlier phases of a package
9676 build.</p> 9676 build.</p>
9677</div> 9677</div>
9678<div class="sect2"> 9678<div class="sect2">
9679<div class="titlepage"><div><div><h3 class="title"> 9679<div class="titlepage"><div><div><h3 class="title">
9680<a name="infr.order.pkg"></a>24.6.2. The order in <code class="filename">bsd.pkg.mk</code> 9680<a name="infr.order.pkg"></a>24.6.2. The order in <code class="filename">bsd.pkg.mk</code>
9681</h3></div></div></div> 9681</h3></div></div></div>
9682<p>First, <code class="filename">bsd.prefs.mk</code> is loaded.</p> 9682<p>First, <code class="filename">bsd.prefs.mk</code> is loaded.</p>
9683<p>Then, the various <code class="filename">*-vars.mk</code> files are 9683<p>Then, the various <code class="filename">*-vars.mk</code> files are
9684 loaded, which fill default values for those variables that have 9684 loaded, which fill default values for those variables that have
9685 not been defined by the package. These variables may later 9685 not been defined by the package. These variables may later
9686 be used even in unrelated files.</p> 9686 be used even in unrelated files.</p>
9687<p>Then, the file <code class="filename">bsd.pkg.error.mk</code> 9687<p>Then, the file <code class="filename">bsd.pkg.error.mk</code>
9688 provides the target <code class="literal">error-check</code> that is added 9688 provides the target <code class="literal">error-check</code> that is added
9689 as a special dependency to all other targets that use 9689 as a special dependency to all other targets that use
9690 <code class="varname">DELAYED_ERROR_MSG</code> or 9690 <code class="varname">DELAYED_ERROR_MSG</code> or
9691 <code class="varname">DELAYED_WARNING_MSG</code>.</p> 9691 <code class="varname">DELAYED_WARNING_MSG</code>.</p>
9692<p>Then, the package-specific hacks from 9692<p>Then, the package-specific hacks from
9693 <code class="filename">hacks.mk</code> are included.</p> 9693 <code class="filename">hacks.mk</code> are included.</p>
9694<p>Then, various other files follow. Most of them don't have 9694<p>Then, various other files follow. Most of them don't have
9695 any dependencies on what they need to have included before or 9695 any dependencies on what they need to have included before or
9696 after them, though some do.</p> 9696 after them, though some do.</p>
9697<p>The code to check <code class="varname">PKG_FAIL_REASON</code> and 9697<p>The code to check <code class="varname">PKG_FAIL_REASON</code> and
9698 <code class="varname">PKG_SKIP_REASON</code> is then executed, which 9698 <code class="varname">PKG_SKIP_REASON</code> is then executed, which
9699 restricts the use of these variables to all the files that have 9699 restricts the use of these variables to all the files that have
9700 been included before. Appearances in later files will be 9700 been included before. Appearances in later files will be
9701 silently ignored.</p> 9701 silently ignored.</p>
9702<p>Then, the files for the main targets are included, in the 9702<p>Then, the files for the main targets are included, in the
9703 order of later execution, though the actual order should not 9703 order of later execution, though the actual order should not
9704 matter.</p> 9704 matter.</p>
9705<p>At last, some more files are included that don't set any 9705<p>At last, some more files are included that don't set any
9706 interesting variables but rather just define make targets to be 9706 interesting variables but rather just define make targets to be
9707 executed.</p> 9707 executed.</p>
9708</div> 9708</div>
9709</div> 9709</div>
9710</div> 9710</div>
9711<div class="chapter"> 9711<div class="chapter">
9712<div class="titlepage"><div><div><h2 class="title"> 9712<div class="titlepage"><div><div><h2 class="title">
9713<a name="regression"></a>Chapter 25. Regression tests</h2></div></div></div> 9713<a name="regression"></a>Chapter 25. Regression tests</h2></div></div></div>
9714<div class="toc"> 9714<div class="toc">
9715<p><b>Table of Contents</b></p> 9715<p><b>Table of Contents</b></p>
9716<dl class="toc"> 9716<dl class="toc">
9717<dt><span class="sect1"><a href="#regression.run">25.1. Running the regression tests</a></span></dt> 9717<dt><span class="sect1"><a href="#regression.run">25.1. Running the regression tests</a></span></dt>
9718<dt><span class="sect1"><a href="#regression.new">25.2. Adding a new regression test</a></span></dt> 9718<dt><span class="sect1"><a href="#regression.new">25.2. Adding a new regression test</a></span></dt>
9719<dd><dl> 9719<dd><dl>
9720<dt><span class="sect2"><a href="#regression.fun.override">25.2.1. Overridable functions</a></span></dt> 9720<dt><span class="sect2"><a href="#regression.fun.override">25.2.1. Overridable functions</a></span></dt>
9721<dt><span class="sect2"><a href="#regression.fun.helper">25.2.2. Helper functions</a></span></dt> 9721<dt><span class="sect2"><a href="#regression.fun.helper">25.2.2. Helper functions</a></span></dt>
9722</dl></dd> 9722</dl></dd>
9723</dl> 9723</dl>
9724</div> 9724</div>
9725<p>The pkgsrc infrastructure consists of a large codebase, 9725<p>The pkgsrc infrastructure consists of a large codebase,
9726 and there are many corners where every little bit of a file is 9726 and there are many corners where every little bit of a file is
9727 well thought out, making pkgsrc likely to fail as soon as 9727 well thought out, making pkgsrc likely to fail as soon as
9728 anything is changed near those parts. To prevent most changes 9728 anything is changed near those parts. To prevent most changes
9729 from breaking anything, a suite of regression tests should go 9729 from breaking anything, a suite of regression tests should go
9730 along with every important part of the pkgsrc infrastructure. 9730 along with every important part of the pkgsrc infrastructure.
9731 This chapter describes how regression tests work in pkgsrc and 9731 This chapter describes how regression tests work in pkgsrc and
9732 how you can add new tests.</p> 9732 how you can add new tests.</p>
9733<div class="sect1"> 9733<div class="sect1">
9734<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9734<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9735<a name="regression.run"></a>25.1. Running the regression tests</h2></div></div></div> 9735<a name="regression.run"></a>25.1. Running the regression tests</h2></div></div></div>
9736<p>You first need to install the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_regress/README.html" target="_top"><code class="filename">pkgtools/pkg_regress</code></a> package, which 9736<p>You first need to install the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_regress/README.html" target="_top"><code class="filename">pkgtools/pkg_regress</code></a> package, which
9737 provides the <span class="command"><strong>pkg_regress</strong></span> command. Then you 9737 provides the <span class="command"><strong>pkg_regress</strong></span> command. Then you
9738 can simply run that command, which will run all tests in the 9738 can simply run that command, which will run all tests in the
9739 <code class="filename">regress</code> category.</p> 9739 <code class="filename">regress</code> category.</p>
9740</div> 9740</div>
9741<div class="sect1"> 9741<div class="sect1">
9742<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9742<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9743<a name="regression.new"></a>25.2. Adding a new regression test</h2></div></div></div> 9743<a name="regression.new"></a>25.2. Adding a new regression test</h2></div></div></div>
9744<p>Every directory in the <code class="filename">regress</code> 9744<p>Every directory in the <code class="filename">regress</code>
9745 category that contains a file called <code class="filename">spec</code> 9745 category that contains a file called <code class="filename">spec</code>
9746 is considered a regression test. This file is a shell program 9746 is considered a regression test. This file is a shell program
9747 that is included by the <span class="command"><strong>pkg_regress</strong></span> command. 9747 that is included by the <span class="command"><strong>pkg_regress</strong></span> command.
9748 The following functions can be overridden to suit your 9748 The following functions can be overridden to suit your
9749 needs.</p> 9749 needs.</p>
9750<div class="sect2"> 9750<div class="sect2">
9751<div class="titlepage"><div><div><h3 class="title"> 9751<div class="titlepage"><div><div><h3 class="title">
9752<a name="regression.fun.override"></a>25.2.1. Overridable functions</h3></div></div></div> 9752<a name="regression.fun.override"></a>25.2.1. Overridable functions</h3></div></div></div>
9753<p>These functions do not take any parameters. Although they 9753<p>These functions do not take any parameters. Although they
9754 are called in <span class="quote">&#8220;<span class="quote">set -e</span>&#8221;</span> mode, they don't stop at the 9754 are called in <span class="quote">&#8220;<span class="quote">set -e</span>&#8221;</span> mode, they don't stop at the
9755 first failing command. See <a class="ulink" href="http://stackoverflow.com/q/4072984" target="_top">this StackOverflow 9755 first failing command. See <a class="ulink" href="http://stackoverflow.com/q/4072984" target="_top">this StackOverflow
9756 question</a> for details.</p> 9756 question</a> for details.</p>
9757<div class="variablelist"><dl class="variablelist"> 9757<div class="variablelist"><dl class="variablelist">
9758<dt><span class="term"><code class="varname">do_setup</code></span></dt> 9758<dt><span class="term"><code class="varname">do_setup</code></span></dt>
9759<dd><p>This function prepares the environment for the 9759<dd><p>This function prepares the environment for the
9760 test. By default it does nothing.</p></dd> 9760 test. By default it does nothing.</p></dd>
9761<dt><span class="term"><code class="varname">do_test</code></span></dt> 9761<dt><span class="term"><code class="varname">do_test</code></span></dt>
9762<dd> 9762<dd>
9763<p>This function runs the actual test. By default, 9763<p>This function runs the actual test. By default,
9764 it calls <code class="varname">TEST_MAKE</code> with the arguments 9764 it calls <code class="varname">TEST_MAKE</code> with the arguments
9765 <code class="varname">MAKEARGS_TEST</code> and writes its output including 9765 <code class="varname">MAKEARGS_TEST</code> and writes its output including
9766 error messages into the file 9766 error messages into the file
9767 <code class="varname">TEST_OUTFILE</code>.</p> 9767 <code class="varname">TEST_OUTFILE</code>.</p>
9768<p>When defining this function, make sure that all output that 9768<p>When defining this function, make sure that all output that
9769 needs to be checked is written to the correct output file. 9769 needs to be checked is written to the correct output file.
9770 Example:</p> 9770 Example:</p>
9771<pre class="programlisting"> 9771<pre class="programlisting">
9772do_test() { 9772do_test() {
9773 echo "Example output" 9773 echo "Example output"
9774} 1&gt;$TEST_OUTFILE 2&gt;&amp;1 9774} 1&gt;$TEST_OUTFILE 2&gt;&amp;1
9775</pre> 9775</pre>
9776</dd> 9776</dd>
9777<dt><span class="term"><code class="varname">check_result</code></span></dt> 9777<dt><span class="term"><code class="varname">check_result</code></span></dt>
9778<dd> 9778<dd>
9779<p>This function is run after the test and is 9779<p>This function is run after the test and is
9780 typically used to compare the actual output from the one that is 9780 typically used to compare the actual output from the one that is
9781 expected. It can make use of the various helper functions from 9781 expected. It can make use of the various helper functions from
9782 the next section. Example:</p> 9782 the next section. Example:</p>
9783<pre class="programlisting"> 9783<pre class="programlisting">
9784check_result() { 9784check_result() {
9785 exit_status 0 9785 exit_status 0
9786 output_require "Example" 9786 output_require "Example"
9787 output_require "^[[:alpha:]+[[:space:]][[:alpha:]]{6}$" 9787 output_require "^[[:alpha:]+[[:space:]][[:alpha:]]{6}$"
9788 output_prohibit "no such file or directory" 9788 output_prohibit "no such file or directory"
9789} 9789}
9790</pre> 9790</pre>
9791</dd> 9791</dd>
9792<dt><span class="term"><code class="varname">do_cleanup</code></span></dt> 9792<dt><span class="term"><code class="varname">do_cleanup</code></span></dt>
9793<dd><p>This function cleans everything up after the 9793<dd><p>This function cleans everything up after the
9794 test has been run. By default it does nothing.</p></dd> 9794 test has been run. By default it does nothing.</p></dd>
9795</dl></div> 9795</dl></div>
9796</div> 9796</div>
9797<div class="sect2"> 9797<div class="sect2">
9798<div class="titlepage"><div><div><h3 class="title"> 9798<div class="titlepage"><div><div><h3 class="title">
9799<a name="regression.fun.helper"></a>25.2.2. Helper functions</h3></div></div></div> 9799<a name="regression.fun.helper"></a>25.2.2. Helper functions</h3></div></div></div>
9800<div class="variablelist"><dl class="variablelist"> 9800<div class="variablelist"><dl class="variablelist">
9801<dt><span class="term"><code class="varname">exit_status expected</code></span></dt> 9801<dt><span class="term"><code class="varname">exit_status expected</code></span></dt>
9802<dd><p>This function compares the exitcode of the 9802<dd><p>This function compares the exitcode of the
9803 <span class="command"><strong>do_test</strong></span> function with its first parameter. 9803 <span class="command"><strong>do_test</strong></span> function with its first parameter.
9804 If they differ, the test will fail.</p></dd> 9804 If they differ, the test will fail.</p></dd>
9805<dt><span class="term"><code class="varname">output_require regex...</code></span></dt> 9805<dt><span class="term"><code class="varname">output_require regex...</code></span></dt>
9806<dd> 9806<dd>
9807<p>This function checks for each of its parameters 9807<p>This function checks for each of its parameters
9808 if the output from <span class="command"><strong>do_test</strong></span> matches the 9808 if the output from <span class="command"><strong>do_test</strong></span> matches the
9809 extended regular expression. If it does not, the test will 9809 extended regular expression. If it does not, the test will
9810 fail. Example:</p> 9810 fail. Example:</p>
9811<pre class="programlisting"> 9811<pre class="programlisting">
9812output_require "looks fine" 9812output_require "looks fine"
9813output_require "^[[:alpha:]+[[:space:]][[:alpha:]]{6}$" 9813output_require "^[[:alpha:]+[[:space:]][[:alpha:]]{6}$"
9814</pre> 9814</pre>
9815</dd> 9815</dd>
9816<dt><span class="term"><code class="varname">output_prohibit(regex...)</code></span></dt> 9816<dt><span class="term"><code class="varname">output_prohibit(regex...)</code></span></dt>
9817<dd><p>This function checks for each of its parameters 9817<dd><p>This function checks for each of its parameters
9818 if the output from <span class="command"><strong>do_test()</strong></span> does 9818 if the output from <span class="command"><strong>do_test()</strong></span> does
9819 <span class="emphasis"><em>not</em></span> match the extended regular expression. 9819 <span class="emphasis"><em>not</em></span> match the extended regular expression.
9820 If any of the regular expressions matches, the test will 9820 If any of the regular expressions matches, the test will
9821 fail.</p></dd> 9821 fail.</p></dd>
9822</dl></div> 9822</dl></div>
9823</div> 9823</div>
9824</div> 9824</div>
9825</div> 9825</div>
9826<div class="chapter"> 9826<div class="chapter">
9827<div class="titlepage"><div><div><h2 class="title"> 9827<div class="titlepage"><div><div><h2 class="title">
9828<a name="porting"></a>Chapter 26. Porting pkgsrc</h2></div></div></div> 9828<a name="porting"></a>Chapter 26. Porting pkgsrc</h2></div></div></div>
9829<div class="toc"> 9829<div class="toc">
9830<p><b>Table of Contents</b></p> 9830<p><b>Table of Contents</b></p>
9831<dl class="toc"><dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt></dl> 9831<dl class="toc"><dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt></dl>
9832</div> 9832</div>
9833<p>The pkgsrc system has already been ported to many 9833<p>The pkgsrc system has already been ported to many
9834 operating systems, hardware architectures and compilers. This 9834 operating systems, hardware architectures and compilers. This
9835 chapter explains the necessary steps to make pkgsrc even more 9835 chapter explains the necessary steps to make pkgsrc even more
9836 portable.</p> 9836 portable.</p>
9837<div class="sect1"> 9837<div class="sect1">
9838<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9838<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9839<a name="porting.opsys"></a>26.1. Porting pkgsrc to a new operating system</h2></div></div></div> 9839<a name="porting.opsys"></a>26.1. Porting pkgsrc to a new operating system</h2></div></div></div>
9840<p>To port pkgsrc to a new operating system (called 9840<p>To port pkgsrc to a new operating system (called
9841 <code class="literal">MyOS</code> in this example), you need to touch the 9841 <code class="literal">MyOS</code> in this example), you need to touch the
9842 following files:</p> 9842 following files:</p>
9843<div class="variablelist"><dl class="variablelist"> 9843<div class="variablelist"><dl class="variablelist">
9844<dt><span class="term"><code class="filename">pkgtools/bootstrap-mk-files/files/mods/<em class="replaceable"><code>MyOS</code></em>.sys.mk</code></span></dt> 9844<dt><span class="term"><code class="filename">pkgtools/bootstrap-mk-files/files/mods/<em class="replaceable"><code>MyOS</code></em>.sys.mk</code></span></dt>
9845<dd><p>This file contains some basic definitions, for 9845<dd><p>This file contains some basic definitions, for
9846 example the name of the C 9846 example the name of the C
9847 compiler.</p></dd> 9847 compiler.</p></dd>
9848<dt><span class="term"><code class="filename">mk/bsd.prefs.mk</code></span></dt> 9848<dt><span class="term"><code class="filename">mk/bsd.prefs.mk</code></span></dt>
9849<dd><p>Insert code that defines the variables 9849<dd><p>Insert code that defines the variables
9850 <code class="varname">OPSYS</code>, <code class="varname">OS_VERSION</code>, 9850 <code class="varname">OPSYS</code>, <code class="varname">OS_VERSION</code>,
9851 <code class="varname">LOWER_OS_VERSION</code>, 9851 <code class="varname">LOWER_OS_VERSION</code>,
9852 <code class="varname">LOWER_VENDOR</code>, 9852 <code class="varname">LOWER_VENDOR</code>,
9853 <code class="varname">MACHINE_ARCH</code>, <code class="varname">OBJECT_FMT</code>, 9853 <code class="varname">MACHINE_ARCH</code>, <code class="varname">OBJECT_FMT</code>,
9854 <code class="varname">APPEND_ELF</code>, and the other variables that 9854 <code class="varname">APPEND_ELF</code>, and the other variables that
9855 appear in this file.</p></dd> 9855 appear in this file.</p></dd>
9856<dt><span class="term"><code class="filename">mk/platform/<em class="replaceable"><code>MyOS</code></em>.mk</code></span></dt> 9856<dt><span class="term"><code class="filename">mk/platform/<em class="replaceable"><code>MyOS</code></em>.mk</code></span></dt>
9857<dd><p>This file contains the platform-specific 9857<dd><p>This file contains the platform-specific
9858 definitions that are used by pkgsrc. Start by copying one of the 9858 definitions that are used by pkgsrc. Start by copying one of the
9859 other files and edit it to your 9859 other files and edit it to your
9860 needs.</p></dd> 9860 needs.</p></dd>
9861<dt><span class="term"><code class="filename">mk/tools/tools.<em class="replaceable"><code>MyOS</code></em>.mk</code></span></dt> 9861<dt><span class="term"><code class="filename">mk/tools/tools.<em class="replaceable"><code>MyOS</code></em>.mk</code></span></dt>
9862<dd><p>This file defines the paths to all the tools 9862<dd><p>This file defines the paths to all the tools
9863 that are needed by one or the other package in pkgsrc, as well 9863 that are needed by one or the other package in pkgsrc, as well
9864 as by pkgsrc itself. Find out where these tools are on your 9864 as by pkgsrc itself. Find out where these tools are on your
9865 platform and add them.</p></dd> 9865 platform and add them.</p></dd>
9866</dl></div> 9866</dl></div>
9867<p>Now, you should be able to build some basic packages, like 9867<p>Now, you should be able to build some basic packages, like
9868 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/perl5/README.html" target="_top"><code class="filename">lang/perl5</code></a>, <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/shells/bash/README.html" target="_top"><code class="filename">shells/bash</code></a>.</p> 9868 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/perl5/README.html" target="_top"><code class="filename">lang/perl5</code></a>, <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/shells/bash/README.html" target="_top"><code class="filename">shells/bash</code></a>.</p>
9869</div> 9869</div>
9870</div> 9870</div>
9871</div> 9871</div>
9872<div class="appendix"> 9872<div class="appendix">
9873<div class="titlepage"><div><div><h1 class="title"> 9873<div class="titlepage"><div><div><h1 class="title">
9874<a name="examples"></a>Appendix A. A simple example package: bison</h1></div></div></div> 9874<a name="examples"></a>Appendix A. A simple example package: bison</h1></div></div></div>
9875<div class="toc"> 9875<div class="toc">
9876<p><b>Table of Contents</b></p> 9876<p><b>Table of Contents</b></p>
9877<dl class="toc"> 9877<dl class="toc">
9878<dt><span class="sect1"><a href="#example-files">A.1. files</a></span></dt> 9878<dt><span class="sect1"><a href="#example-files">A.1. files</a></span></dt>
9879<dd><dl> 9879<dd><dl>
9880<dt><span class="sect2"><a href="#example-Makefile">A.1.1. Makefile</a></span></dt> 9880<dt><span class="sect2"><a href="#example-Makefile">A.1.1. Makefile</a></span></dt>
9881<dt><span class="sect2"><a href="#example-descr">A.1.2. DESCR</a></span></dt> 9881<dt><span class="sect2"><a href="#example-descr">A.1.2. DESCR</a></span></dt>
9882<dt><span class="sect2"><a href="#example-plist">A.1.3. PLIST</a></span></dt> 9882<dt><span class="sect2"><a href="#example-plist">A.1.3. PLIST</a></span></dt>
9883<dt><span class="sect2"><a href="#checking-package-with-pkglint">A.1.4. Checking a package with <span class="command"><strong>pkglint</strong></span></a></span></dt> 9883<dt><span class="sect2"><a href="#checking-package-with-pkglint">A.1.4. Checking a package with <span class="command"><strong>pkglint</strong></span></a></span></dt>
9884</dl></dd> 9884</dl></dd>
9885<dt><span class="sect1"><a href="#steps-for-b-i-p">A.2. Steps for building, installing, packaging</a></span></dt> 9885<dt><span class="sect1"><a href="#steps-for-b-i-p">A.2. Steps for building, installing, packaging</a></span></dt>
9886</dl> 9886</dl>
9887</div> 9887</div>
9888<p>We checked to find a piece of software that wasn't in the packages 9888<p>We checked to find a piece of software that wasn't in the packages
9889 collection, and picked GNU bison. Quite why someone would want to have 9889 collection, and picked GNU bison. Quite why someone would want to have
9890 <span class="command"><strong>bison</strong></span> when Berkeley <span class="command"><strong>yacc</strong></span> is already 9890 <span class="command"><strong>bison</strong></span> when Berkeley <span class="command"><strong>yacc</strong></span> is already
9891 present in the tree is beyond us, but it's useful for the purposes of 9891 present in the tree is beyond us, but it's useful for the purposes of
9892 this exercise.</p> 9892 this exercise.</p>
9893<div class="sect1"> 9893<div class="sect1">
9894<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9894<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9895<a name="example-files"></a>A.1. files</h2></div></div></div> 9895<a name="example-files"></a>A.1. files</h2></div></div></div>
9896<div class="sect2"> 9896<div class="sect2">
9897<div class="titlepage"><div><div><h3 class="title"> 9897<div class="titlepage"><div><div><h3 class="title">
9898<a name="example-Makefile"></a>A.1.1. Makefile</h3></div></div></div> 9898<a name="example-Makefile"></a>A.1.1. Makefile</h3></div></div></div>
9899<pre class="programlisting"> 9899<pre class="programlisting">
9900# $NetBSD$ 9900# $NetBSD$
9901# 9901#
9902 9902
9903DISTNAME= bison-1.25 9903DISTNAME= bison-1.25
9904CATEGORIES= devel 9904CATEGORIES= devel
9905MASTER_SITES= ${MASTER_SITE_GNU} 9905MASTER_SITES= ${MASTER_SITE_GNU}
9906 9906
9907MAINTAINER= pkgsrc-users@NetBSD.org 9907MAINTAINER= pkgsrc-users@NetBSD.org
9908HOMEPAGE= http://www.gnu.org/software/bison/bison.html 9908HOMEPAGE= http://www.gnu.org/software/bison/bison.html
9909COMMENT= GNU yacc clone 9909COMMENT= GNU yacc clone
9910 9910
9911GNU_CONFIGURE= yes 9911GNU_CONFIGURE= yes
9912INFO_FILES= yes 9912INFO_FILES= yes
9913 9913
9914.include "../../mk/bsd.pkg.mk" 9914.include "../../mk/bsd.pkg.mk"
9915</pre> 9915</pre>
9916</div> 9916</div>
9917<div class="sect2"> 9917<div class="sect2">
9918<div class="titlepage"><div><div><h3 class="title"> 9918<div class="titlepage"><div><div><h3 class="title">
9919<a name="example-descr"></a>A.1.2. DESCR</h3></div></div></div> 9919<a name="example-descr"></a>A.1.2. DESCR</h3></div></div></div>
9920<pre class="programlisting"> 9920<pre class="programlisting">
9921GNU version of yacc. Can make re-entrant parsers, and numerous other 9921GNU version of yacc. Can make re-entrant parsers, and numerous other
9922improvements. Why you would want this when Berkeley <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?yacc+1.i386+NetBSD-7.1"><span class="citerefentry"><span class="refentrytitle">yacc</span>(1)</span></a> is part 9922improvements. Why you would want this when Berkeley <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?yacc+1.i386+NetBSD-7.1.2"><span class="citerefentry"><span class="refentrytitle">yacc</span>(1)</span></a> is part
9923of the NetBSD source tree is beyond me. 9923of the NetBSD source tree is beyond me.
9924</pre> 9924</pre>
9925</div> 9925</div>
9926<div class="sect2"> 9926<div class="sect2">
9927<div class="titlepage"><div><div><h3 class="title"> 9927<div class="titlepage"><div><div><h3 class="title">
9928<a name="example-plist"></a>A.1.3. PLIST</h3></div></div></div> 9928<a name="example-plist"></a>A.1.3. PLIST</h3></div></div></div>
9929<pre class="programlisting"> 9929<pre class="programlisting">
9930@comment $NetBSD$ 9930@comment $NetBSD$
9931bin/bison 9931bin/bison
9932man/man1/bison.1.gz 9932man/man1/bison.1.gz
9933share/bison.simple 9933share/bison.simple
9934share/bison.hairy 9934share/bison.hairy
9935</pre> 9935</pre>
9936</div> 9936</div>
9937<div class="sect2"> 9937<div class="sect2">
9938<div class="titlepage"><div><div><h3 class="title"> 9938<div class="titlepage"><div><div><h3 class="title">
9939<a name="checking-package-with-pkglint"></a>A.1.4. Checking a package with <span class="command"><strong>pkglint</strong></span> 9939<a name="checking-package-with-pkglint"></a>A.1.4. Checking a package with <span class="command"><strong>pkglint</strong></span>
9940</h3></div></div></div> 9940</h3></div></div></div>
9941<p>The NetBSD package system comes with 9941<p>The NetBSD package system comes with
9942 <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a> 9942 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>
9943 which helps to check the contents of these 9943 which helps to check the contents of these
9944 files. After installation it is quite easy to use, just change to the 9944 files. After installation it is quite easy to use, just change to the
9945 directory of the package you wish to examine and execute 9945 directory of the package you wish to examine and execute
9946 <span class="command"><strong>pkglint</strong></span>:</p> 9946 <span class="command"><strong>pkglint</strong></span>:</p>
9947<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>pkglint</code></strong> 9947<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>pkglint</code></strong>
9948looks fine.</pre> 9948looks fine.</pre>
9949<p>Depending on the supplied command line arguments (see pkglint(1)), 9949<p>Depending on the supplied command line arguments (see pkglint(1)),
9950 more checks will be performed. Use e.g. <span class="command"><strong>pkglint -Call 9950 more checks will be performed. Use e.g. <span class="command"><strong>pkglint -Call
9951 -Wall</strong></span> for a very thorough check.</p> 9951 -Wall</strong></span> for a very thorough check.</p>
9952</div> 9952</div>
9953</div> 9953</div>
9954<div class="sect1"> 9954<div class="sect1">
9955<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9955<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9956<a name="steps-for-b-i-p"></a>A.2. Steps for building, installing, packaging</h2></div></div></div> 9956<a name="steps-for-b-i-p"></a>A.2. Steps for building, installing, packaging</h2></div></div></div>
9957<p>Create the directory where the package lives, 9957<p>Create the directory where the package lives,
9958 plus any auxiliary directories:</p> 9958 plus any auxiliary directories:</p>
9959<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cd /usr/pkgsrc/lang</code></strong> 9959<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cd /usr/pkgsrc/lang</code></strong>
9960<code class="prompt">#</code> <strong class="userinput"><code>mkdir bison</code></strong> 9960<code class="prompt">#</code> <strong class="userinput"><code>mkdir bison</code></strong>
9961<code class="prompt">#</code> <strong class="userinput"><code>cd bison</code></strong> 9961<code class="prompt">#</code> <strong class="userinput"><code>cd bison</code></strong>
9962<code class="prompt">#</code> <strong class="userinput"><code>mkdir patches</code></strong></pre> 9962<code class="prompt">#</code> <strong class="userinput"><code>mkdir patches</code></strong></pre>
9963<p>Create <code class="filename">Makefile</code>, <code class="filename">DESCR</code> and 9963<p>Create <code class="filename">Makefile</code>, <code class="filename">DESCR</code> and
9964 <code class="filename">PLIST</code> (see <a class="xref" href="#components" title="Chapter 11. Package components - files, directories and contents">Chapter 11, <i>Package components - files, directories and contents</i></a>) 9964 <code class="filename">PLIST</code> (see <a class="xref" href="#components" title="Chapter 11. Package components - files, directories and contents">Chapter 11, <i>Package components - files, directories and contents</i></a>)
9965 then continue with fetching the distfile:</p> 9965 then continue with fetching the distfile:</p>
9966<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make fetch</code></strong> 9966<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make fetch</code></strong>
9967&gt;&gt; bison-1.25.tar.gz doesn't seem to exist on this system. 9967&gt;&gt; bison-1.25.tar.gz doesn't seem to exist on this system.
9968&gt;&gt; Attempting to fetch from ftp://prep.ai.mit.edu/pub/gnu//. 9968&gt;&gt; Attempting to fetch from ftp://prep.ai.mit.edu/pub/gnu//.
9969Requesting ftp://prep.ai.mit.edu/pub/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 9969Requesting ftp://prep.ai.mit.edu/pub/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
9970ftp: Error retrieving file: 500 Internal error 9970ftp: Error retrieving file: 500 Internal error
9971 9971
9972&gt;&gt; Attempting to fetch from ftp://wuarchive.wustl.edu/systems/gnu//. 9972&gt;&gt; Attempting to fetch from ftp://wuarchive.wustl.edu/systems/gnu//.
9973Requesting ftp://wuarchive.wustl.edu/systems/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 9973Requesting ftp://wuarchive.wustl.edu/systems/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
9974ftp: Error retrieving file: 500 Internal error 9974ftp: Error retrieving file: 500 Internal error
9975 9975
9976&gt;&gt; Attempting to fetch from ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//. 9976&gt;&gt; Attempting to fetch from ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//.
9977Requesting ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 9977Requesting ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
9978Successfully retrieved file.</pre> 9978Successfully retrieved file.</pre>
9979<p>Generate the checksum of the distfile into 9979<p>Generate the checksum of the distfile into
9980 <code class="filename">distinfo</code>:</p> 9980 <code class="filename">distinfo</code>:</p>
9981<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make makedistinfo</code></strong></pre> 9981<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make makedistinfo</code></strong></pre>
9982<p>Now compile:</p> 9982<p>Now compile:</p>
9983<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make</code></strong> 9983<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make</code></strong>
9984&gt;&gt; Checksum OK for bison-1.25.tar.gz. 9984&gt;&gt; Checksum OK for bison-1.25.tar.gz.
9985===&gt; Extracting for bison-1.25 9985===&gt; Extracting for bison-1.25
9986===&gt; Patching for bison-1.25 9986===&gt; Patching for bison-1.25
9987===&gt; Ignoring empty patch directory 9987===&gt; Ignoring empty patch directory
9988===&gt; Configuring for bison-1.25 9988===&gt; Configuring for bison-1.25
9989creating cache ./config.cache 9989creating cache ./config.cache
9990checking for gcc... cc 9990checking for gcc... cc
9991checking whether we are using GNU C... yes 9991checking whether we are using GNU C... yes
9992checking for a BSD compatible install... /usr/bin/install -c -o bin -g bin 9992checking for a BSD compatible install... /usr/bin/install -c -o bin -g bin
9993checking how to run the C preprocessor... cc -E 9993checking how to run the C preprocessor... cc -E
9994checking for minix/config.h... no 9994checking for minix/config.h... no
9995checking for POSIXized ISC... no 9995checking for POSIXized ISC... no
9996checking whether cross-compiling... no 9996checking whether cross-compiling... no
9997checking for ANSI C header files... yes 9997checking for ANSI C header files... yes
9998checking for string.h... yes 9998checking for string.h... yes
9999checking for stdlib.h... yes 9999checking for stdlib.h... yes
10000checking for memory.h... yes 10000checking for memory.h... yes
10001checking for working const... yes 10001checking for working const... yes
10002checking for working alloca.h... no 10002checking for working alloca.h... no
10003checking for alloca... yes 10003checking for alloca... yes
10004checking for strerror... yes 10004checking for strerror... yes
10005updating cache ./config.cache 10005updating cache ./config.cache
10006creating ./config.status 10006creating ./config.status
10007creating Makefile 10007creating Makefile
10008===&gt; Building for bison-1.25 10008===&gt; Building for bison-1.25
10009cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g LR0.c 10009cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g LR0.c
10010cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g allocate.c 10010cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g allocate.c
10011cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g closure.c 10011cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g closure.c
10012cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g conflicts.c 10012cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g conflicts.c
10013cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g derives.c 10013cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g derives.c
10014cc -c -DXPFILE=\"/usr/pkg/share/bison.simple\" -DXPFILE1=\"/usr/pkg/share/bison.hairy\" -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -g ./files.c 10014cc -c -DXPFILE=\"/usr/pkg/share/bison.simple\" -DXPFILE1=\"/usr/pkg/share/bison.hairy\" -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -g ./files.c
10015cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getargs.c 10015cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getargs.c
10016cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g gram.c 10016cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g gram.c
10017cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g lalr.c 10017cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g lalr.c
10018cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g lex.c 10018cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g lex.c
10019cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g main.c 10019cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g main.c
10020cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g nullable.c 10020cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g nullable.c
10021cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g output.c 10021cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g output.c
10022cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g print.c 10022cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g print.c
10023cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g reader.c 10023cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g reader.c
10024cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g reduce.c 10024cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g reduce.c
10025cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g symtab.c 10025cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g symtab.c
10026cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g warshall.c 10026cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g warshall.c
10027cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g version.c 10027cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g version.c
10028cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getopt.c 10028cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getopt.c
10029cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getopt1.c 10029cc -c -DSTDC_HEADERS=1 -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_MEMORY_H=1 -DHAVE_ALLOCA=1 -DHAVE_STRERROR=1 -I./../include -g getopt1.c
10030cc -g -o bison LR0.o allocate.o closure.o conflicts.o derives.o files.o getargs.o gram.o lalr.o lex.o main.o nullable.o output.o print.o reader.o reduce.o symtab.o warshall.o version.o getopt.o getopt1.o 10030cc -g -o bison LR0.o allocate.o closure.o conflicts.o derives.o files.o getargs.o gram.o lalr.o lex.o main.o nullable.o output.o print.o reader.o reduce.o symtab.o warshall.o version.o getopt.o getopt1.o
10031./files.c:240: warning: mktemp() possibly used unsafely, consider using mkstemp() 10031./files.c:240: warning: mktemp() possibly used unsafely, consider using mkstemp()
10032rm -f bison.s1 10032rm -f bison.s1
10033sed -e "/^#line/ s|bison|/usr/pkg/share/bison|" &lt; ./bison.simple &gt; bison.s1</pre> 10033sed -e "/^#line/ s|bison|/usr/pkg/share/bison|" &lt; ./bison.simple &gt; bison.s1</pre>
10034<p>Everything seems OK, so install the files:</p> 10034<p>Everything seems OK, so install the files:</p>
10035<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong> 10035<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong>
10036&gt;&gt; Checksum OK for bison-1.25.tar.gz. 10036&gt;&gt; Checksum OK for bison-1.25.tar.gz.
10037===&gt; Installing for bison-1.25 10037===&gt; Installing for bison-1.25
10038sh ./mkinstalldirs /usr/pkg/bin /usr/pkg/share /usr/pkg/info /usr/pkg/man/man1 10038sh ./mkinstalldirs /usr/pkg/bin /usr/pkg/share /usr/pkg/info /usr/pkg/man/man1
10039rm -f /usr/pkg/bin/bison 10039rm -f /usr/pkg/bin/bison
10040cd /usr/pkg/share; rm -f bison.simple bison.hairy 10040cd /usr/pkg/share; rm -f bison.simple bison.hairy
10041rm -f /usr/pkg/man/man1/bison.1 /usr/pkg/info/bison.info* 10041rm -f /usr/pkg/man/man1/bison.1 /usr/pkg/info/bison.info*
10042install -c -o bin -g bin -m 555 bison /usr/pkg/bin/bison 10042install -c -o bin -g bin -m 555 bison /usr/pkg/bin/bison
10043/usr/bin/install -c -o bin -g bin -m 644 bison.s1 /usr/pkg/share/bison.simple 10043/usr/bin/install -c -o bin -g bin -m 644 bison.s1 /usr/pkg/share/bison.simple
10044/usr/bin/install -c -o bin -g bin -m 644 ./bison.hairy /usr/pkg/share/bison.hairy 10044/usr/bin/install -c -o bin -g bin -m 644 ./bison.hairy /usr/pkg/share/bison.hairy
10045cd .; for f in bison.info*; do /usr/bin/install -c -o bin -g bin -m 644 $f /usr/pkg/info/$f; done 10045cd .; for f in bison.info*; do /usr/bin/install -c -o bin -g bin -m 644 $f /usr/pkg/info/$f; done
10046/usr/bin/install -c -o bin -g bin -m 644 ./bison.1 /usr/pkg/man/man1/bison.1 10046/usr/bin/install -c -o bin -g bin -m 644 ./bison.1 /usr/pkg/man/man1/bison.1
10047===&gt; Registering installation for bison-1.25</pre> 10047===&gt; Registering installation for bison-1.25</pre>
10048<p>You can now use bison, and also - if you decide so - remove it with 10048<p>You can now use bison, and also - if you decide so - remove it with
10049 <span class="command"><strong>pkg_delete bison</strong></span>. Should you decide that you want a 10049 <span class="command"><strong>pkg_delete bison</strong></span>. Should you decide that you want a
10050 binary package, do this now:</p> 10050 binary package, do this now:</p>
10051<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong> 10051<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong>
10052&gt;&gt; Checksum OK for bison-1.25.tar.gz. 10052&gt;&gt; Checksum OK for bison-1.25.tar.gz.
10053===&gt; Building package for bison-1.25 10053===&gt; Building package for bison-1.25
10054Creating package bison-1.25.tgz 10054Creating package bison-1.25.tgz
10055Registering depends:. 10055Registering depends:.
10056Creating gzip'd tar ball in '/u/pkgsrc/lang/bison/bison-1.25.tgz'</pre> 10056Creating gzip'd tar ball in '/u/pkgsrc/lang/bison/bison-1.25.tgz'</pre>
10057<p>Now that you don't need the source and object files 10057<p>Now that you don't need the source and object files
10058 any more, clean up:</p> 10058 any more, clean up:</p>
10059<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make clean</code></strong> 10059<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make clean</code></strong>
10060===&gt; Cleaning for bison-1.25</pre> 10060===&gt; Cleaning for bison-1.25</pre>
10061</div> 10061</div>
10062</div> 10062</div>
10063<div class="appendix"> 10063<div class="appendix">
10064<div class="titlepage"><div><div><h1 class="title"> 10064<div class="titlepage"><div><div><h1 class="title">
10065<a name="logs"></a>Appendix B. Build logs</h1></div></div></div> 10065<a name="logs"></a>Appendix B. Build logs</h1></div></div></div>
10066<div class="toc"> 10066<div class="toc">
10067<p><b>Table of Contents</b></p> 10067<p><b>Table of Contents</b></p>
10068<dl class="toc"> 10068<dl class="toc">
10069<dt><span class="sect1"><a href="#logs.building">B.1. Building figlet</a></span></dt> 10069<dt><span class="sect1"><a href="#logs.building">B.1. Building figlet</a></span></dt>
10070<dt><span class="sect1"><a href="#logs.package">B.2. Packaging figlet</a></span></dt> 10070<dt><span class="sect1"><a href="#logs.package">B.2. Packaging figlet</a></span></dt>
10071</dl> 10071</dl>
10072</div> 10072</div>
10073<div class="sect1"> 10073<div class="sect1">
10074<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10074<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10075<a name="logs.building"></a>B.1. Building figlet</h2></div></div></div> 10075<a name="logs.building"></a>B.1. Building figlet</h2></div></div></div>
10076<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make</code></strong> 10076<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make</code></strong>
10077===&gt; Checking for vulnerabilities in figlet-2.2.1nb2 10077===&gt; Checking for vulnerabilities in figlet-2.2.1nb2
10078=&gt; figlet221.tar.gz doesn't seem to exist on this system. 10078=&gt; figlet221.tar.gz doesn't seem to exist on this system.
10079=&gt; Attempting to fetch figlet221.tar.gz from ftp://ftp.figlet.org/pub/figlet/program/unix/. 10079=&gt; Attempting to fetch figlet221.tar.gz from ftp://ftp.figlet.org/pub/figlet/program/unix/.
10080=&gt; [172219 bytes] 10080=&gt; [172219 bytes]
10081Connected to ftp.plig.net. 10081Connected to ftp.plig.net.
10082220 ftp.plig.org NcFTPd Server (licensed copy) ready. 10082220 ftp.plig.org NcFTPd Server (licensed copy) ready.
10083331 Guest login ok, send your complete e-mail address as password. 10083331 Guest login ok, send your complete e-mail address as password.
10084230-You are user #5 of 500 simultaneous users allowed. 10084230-You are user #5 of 500 simultaneous users allowed.
10085230- 10085230-
10086230- ___ _ _ _ 10086230- ___ _ _ _
10087230- | _| |_ ___ ___| |_|___ ___ ___ ___ 10087230- | _| |_ ___ ___| |_|___ ___ ___ ___
10088230- | _| _| . |_| . | | | . |_| . | _| . | 10088230- | _| _| . |_| . | | | . |_| . | _| . |
10089230- |_| |_| | _|_| _|_|_|_ |_|___|_| |_ | 10089230- |_| |_| | _|_| _|_|_|_ |_|___|_| |_ |
10090230- |_| |_| |___| |___| 10090230- |_| |_| |___| |___|
10091230- 10091230-
10092230-** Welcome to ftp.plig.org ** 10092230-** Welcome to ftp.plig.org **
10093230- 10093230-
10094230-Please note that all transfers from this FTP site are logged. If you 10094230-Please note that all transfers from this FTP site are logged. If you
10095230-do not like this, please disconnect now. 10095230-do not like this, please disconnect now.
10096230- 10096230-
10097230-This archive is available via 10097230-This archive is available via
10098230- 10098230-
10099230-HTTP: http://ftp.plig.org/ 10099230-HTTP: http://ftp.plig.org/
10100230-FTP: ftp://ftp.plig.org/ (max 500 connections) 10100230-FTP: ftp://ftp.plig.org/ (max 500 connections)
10101230-RSYNC: rsync://ftp.plig.org/ (max 30 connections) 10101230-RSYNC: rsync://ftp.plig.org/ (max 30 connections)
10102230- 10102230-
10103230-Please email comments, bug reports and requests for packages to be 10103230-Please email comments, bug reports and requests for packages to be
10104230-mirrored to ftp-admin@plig.org. 10104230-mirrored to ftp-admin@plig.org.
10105230- 10105230-
10106230- 10106230-
10107230 Logged in anonymously. 10107230 Logged in anonymously.
10108Remote system type is UNIX. 10108Remote system type is UNIX.
10109Using binary mode to transfer files. 10109Using binary mode to transfer files.
10110200 Type okay. 10110200 Type okay.
10111250 "/pub" is new cwd. 10111250 "/pub" is new cwd.
10112250-"/pub/figlet" is new cwd. 10112250-"/pub/figlet" is new cwd.
10113250- 10113250-
10114250-Welcome to the figlet archive at ftp.figlet.org 10114250-Welcome to the figlet archive at ftp.figlet.org
10115250- 10115250-
10116250- ftp://ftp.figlet.org/pub/figlet/ 10116250- ftp://ftp.figlet.org/pub/figlet/
10117250- 10117250-
10118250-The official FIGlet web page is: 10118250-The official FIGlet web page is:
10119250- http://www.figlet.org/ 10119250- http://www.figlet.org/
10120250- 10120250-
10121250-If you have questions, please mailto:info@figlet.org. If you want to 10121250-If you have questions, please mailto:info@figlet.org. If you want to
10122250-contribute a font or something else, you can email us. 10122250-contribute a font or something else, you can email us.
10123250 10123250
10124250 "/pub/figlet/program" is new cwd. 10124250 "/pub/figlet/program" is new cwd.
10125250 "/pub/figlet/program/unix" is new cwd. 10125250 "/pub/figlet/program/unix" is new cwd.
10126local: figlet221.tar.gz remote: figlet221.tar.gz 10126local: figlet221.tar.gz remote: figlet221.tar.gz
10127502 Unimplemented command. 10127502 Unimplemented command.
10128227 Entering Passive Mode (195,40,6,41,246,104) 10128227 Entering Passive Mode (195,40,6,41,246,104)
10129150 Data connection accepted from 84.128.86.72:65131; transfer starting for figlet221.tar.gz (172219 bytes). 10129150 Data connection accepted from 84.128.86.72:65131; transfer starting for figlet221.tar.gz (172219 bytes).
1013038% |************** | 65800 64.16 KB/s 00:01 ETA 1013038% |************** | 65800 64.16 KB/s 00:01 ETA
10131226 Transfer completed. 10131226 Transfer completed.
10132172219 bytes received in 00:02 (75.99 KB/s) 10132172219 bytes received in 00:02 (75.99 KB/s)
10133221 Goodbye. 10133221 Goodbye.
10134=&gt; Checksum OK for figlet221.tar.gz. 10134=&gt; Checksum OK for figlet221.tar.gz.
10135===&gt; Extracting for figlet-2.2.1nb2 10135===&gt; Extracting for figlet-2.2.1nb2
10136===&gt; Required installed package ccache-[0-9]*: ccache-2.3nb1 found 10136===&gt; Required installed package ccache-[0-9]*: ccache-2.3nb1 found
10137===&gt; Patching for figlet-2.2.1nb2 10137===&gt; Patching for figlet-2.2.1nb2
10138===&gt; Applying pkgsrc patches for figlet-2.2.1nb2 10138===&gt; Applying pkgsrc patches for figlet-2.2.1nb2
10139===&gt; Overriding tools for figlet-2.2.1nb2 10139===&gt; Overriding tools for figlet-2.2.1nb2
10140===&gt; Creating toolchain wrappers for figlet-2.2.1nb2 10140===&gt; Creating toolchain wrappers for figlet-2.2.1nb2
10141===&gt; Configuring for figlet-2.2.1nb2 10141===&gt; Configuring for figlet-2.2.1nb2
10142===&gt; Building for figlet-2.2.1nb2 10142===&gt; Building for figlet-2.2.1nb2
10143gcc -O2 -DDEFAULTFONTDIR=\"/usr/pkg/share/figlet\" -DDEFAULTFONTFILE=\"standard.flf\" figlet.c zipio.c crc.c inflate.c -o figlet 10143gcc -O2 -DDEFAULTFONTDIR=\"/usr/pkg/share/figlet\" -DDEFAULTFONTFILE=\"standard.flf\" figlet.c zipio.c crc.c inflate.c -o figlet
10144chmod a+x figlet 10144chmod a+x figlet
10145gcc -O2 -o chkfont chkfont.c 10145gcc -O2 -o chkfont chkfont.c
10146=&gt; Unwrapping files-to-be-installed. 10146=&gt; Unwrapping files-to-be-installed.
10147<code class="prompt">#</code> 10147<code class="prompt">#</code>
10148<code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong> 10148<code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong>
10149===&gt; Checking for vulnerabilities in figlet-2.2.1nb2 10149===&gt; Checking for vulnerabilities in figlet-2.2.1nb2
10150===&gt; Installing for figlet-2.2.1nb2 10150===&gt; Installing for figlet-2.2.1nb2
10151install -d -o root -g wheel -m 755 /usr/pkg/bin 10151install -d -o root -g wheel -m 755 /usr/pkg/bin
10152install -d -o root -g wheel -m 755 /usr/pkg/man/man6 10152install -d -o root -g wheel -m 755 /usr/pkg/man/man6
10153mkdir -p /usr/pkg/share/figlet 10153mkdir -p /usr/pkg/share/figlet
10154cp figlet /usr/pkg/bin 10154cp figlet /usr/pkg/bin
10155cp chkfont /usr/pkg/bin 10155cp chkfont /usr/pkg/bin
10156chmod 555 figlist showfigfonts 10156chmod 555 figlist showfigfonts
10157cp figlist /usr/pkg/bin 10157cp figlist /usr/pkg/bin
10158cp showfigfonts /usr/pkg/bin 10158cp showfigfonts /usr/pkg/bin
10159cp fonts/*.flf /usr/pkg/share/figlet 10159cp fonts/*.flf /usr/pkg/share/figlet
10160cp fonts/*.flc /usr/pkg/share/figlet 10160cp fonts/*.flc /usr/pkg/share/figlet
10161cp figlet.6 /usr/pkg/man/man6 10161cp figlet.6 /usr/pkg/man/man6
10162===&gt; Registering installation for figlet-2.2.1nb2 10162===&gt; Registering installation for figlet-2.2.1nb2
10163<code class="prompt">#</code></pre> 10163<code class="prompt">#</code></pre>
10164</div> 10164</div>
10165<div class="sect1"> 10165<div class="sect1">
10166<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10166<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10167<a name="logs.package"></a>B.2. Packaging figlet</h2></div></div></div> 10167<a name="logs.package"></a>B.2. Packaging figlet</h2></div></div></div>
10168<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong> 10168<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong>
10169===&gt; Checking for vulnerabilities in figlet-2.2.1nb2 10169===&gt; Checking for vulnerabilities in figlet-2.2.1nb2
10170===&gt; Packaging figlet-2.2.1nb2 10170===&gt; Packaging figlet-2.2.1nb2
10171===&gt; Building binary package for figlet-2.2.1nb2 10171===&gt; Building binary package for figlet-2.2.1nb2
10172Creating package /home/cvs/pkgsrc/packages/i386/All/figlet-2.2.1nb2.tgz 10172Creating package /home/cvs/pkgsrc/packages/i386/All/figlet-2.2.1nb2.tgz
10173Using SrcDir value of /usr/pkg 10173Using SrcDir value of /usr/pkg
10174Registering depends:. 10174Registering depends:.
10175<code class="prompt">#</code></pre> 10175<code class="prompt">#</code></pre>
10176</div> 10176</div>
10177</div> 10177</div>
10178<div class="appendix"> 10178<div class="appendix">
10179<div class="titlepage"><div><div><h1 class="title"> 10179<div class="titlepage"><div><div><h1 class="title">
10180<a name="ftp-layout"></a>Appendix C. Directory layout of the pkgsrc FTP server</h1></div></div></div> 10180<a name="ftp-layout"></a>Appendix C. Directory layout of the pkgsrc FTP server</h1></div></div></div>
10181<div class="toc"> 10181<div class="toc">
10182<p><b>Table of Contents</b></p> 10182<p><b>Table of Contents</b></p>
10183<dl class="toc"> 10183<dl class="toc">
10184<dt><span class="sect1"><a href="#ftp-distfiles">C.1. <code class="filename">distfiles</code>: The distributed source files</a></span></dt> 10184<dt><span class="sect1"><a href="#ftp-distfiles">C.1. <code class="filename">distfiles</code>: The distributed source files</a></span></dt>
10185<dt><span class="sect1"><a href="#ftp-misc">C.2. <code class="filename">misc</code>: Miscellaneous things</a></span></dt> 10185<dt><span class="sect1"><a href="#ftp-misc">C.2. <code class="filename">misc</code>: Miscellaneous things</a></span></dt>
10186<dt><span class="sect1"><a href="#ftp-packages">C.3. <code class="filename">packages</code>: Binary packages</a></span></dt> 10186<dt><span class="sect1"><a href="#ftp-packages">C.3. <code class="filename">packages</code>: Binary packages</a></span></dt>
10187<dt><span class="sect1"><a href="#ftp-reports">C.4. <code class="filename">reports</code>: Bulk build reports</a></span></dt> 10187<dt><span class="sect1"><a href="#ftp-reports">C.4. <code class="filename">reports</code>: Bulk build reports</a></span></dt>
10188<dt><span class="sect1"><a href="#ftp-source">C.5. <code class="filename">current</code>, 10188<dt><span class="sect1"><a href="#ftp-source">C.5. <code class="filename">current</code>,
10189<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>: 10189<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>:
10190source packages</a></span></dt> 10190source packages</a></span></dt>
10191</dl> 10191</dl>
10192</div> 10192</div>
10193<p>As in other big projects, the directory layout of pkgsrc 10193<p>As in other big projects, the directory layout of pkgsrc
10194 is quite complex for newbies. This chapter explains where you 10194 is quite complex for newbies. This chapter explains where you
10195 find things on the FTP server. The base directory on 10195 find things on the FTP server. The base directory on
10196 <code class="filename">ftp.NetBSD.org</code> is <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/" target="_top"><code class="filename">/pub/pkgsrc/</code></a>. 10196 <code class="filename">ftp.NetBSD.org</code> is <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/" target="_top"><code class="filename">/pub/pkgsrc/</code></a>.
10197 On other servers it may be different, but inside this directory, 10197 On other servers it may be different, but inside this directory,
10198 everything should look the same, no matter on which server you 10198 everything should look the same, no matter on which server you
10199 are. This directory contains some subdirectories, which are 10199 are. This directory contains some subdirectories, which are
10200 explained below.</p> 10200 explained below.</p>
10201<div class="sect1"> 10201<div class="sect1">
10202<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10202<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10203<a name="ftp-distfiles"></a>C.1. <code class="filename">distfiles</code>: The distributed source files</h2></div></div></div> 10203<a name="ftp-distfiles"></a>C.1. <code class="filename">distfiles</code>: The distributed source files</h2></div></div></div>
10204<p>The directory <code class="filename">distfiles</code> contains lots 10204<p>The directory <code class="filename">distfiles</code> contains lots
10205 of archive files from all pkgsrc packages, which are mirrored 10205 of archive files from all pkgsrc packages, which are mirrored
10206 here. The subdirectories are called after their package names 10206 here. The subdirectories are called after their package names
10207 and are used when the distributed files have names that don't 10207 and are used when the distributed files have names that don't
10208 explicitly contain a version number or are otherwise too generic 10208 explicitly contain a version number or are otherwise too generic
10209 (for example <code class="filename">release.tar.gz</code>).</p> 10209 (for example <code class="filename">release.tar.gz</code>).</p>
10210</div> 10210</div>
10211<div class="sect1"> 10211<div class="sect1">
10212<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10212<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10213<a name="ftp-misc"></a>C.2. <code class="filename">misc</code>: Miscellaneous things</h2></div></div></div> 10213<a name="ftp-misc"></a>C.2. <code class="filename">misc</code>: Miscellaneous things</h2></div></div></div>
10214<p>This directory contains things that individual pkgsrc 10214<p>This directory contains things that individual pkgsrc
10215 developers find worth publishing.</p> 10215 developers find worth publishing.</p>
10216</div> 10216</div>
10217<div class="sect1"> 10217<div class="sect1">
10218<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10218<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10219<a name="ftp-packages"></a>C.3. <code class="filename">packages</code>: Binary packages</h2></div></div></div> 10219<a name="ftp-packages"></a>C.3. <code class="filename">packages</code>: Binary packages</h2></div></div></div>
10220<p>This directory contains binary packages for the various 10220<p>This directory contains binary packages for the various
10221 platforms that are supported by pkgsrc. 10221 platforms that are supported by pkgsrc.
10222 Each subdirectory is of the form <em class="replaceable"><code>OPSYS</code></em>/<em class="replaceable"><code>ARCH</code></em>/<em class="replaceable"><code>OSVERSION_TAG</code></em>. The meaning of these variables is:</p> 10222 Each subdirectory is of the form <em class="replaceable"><code>OPSYS</code></em>/<em class="replaceable"><code>ARCH</code></em>/<em class="replaceable"><code>OSVERSION_TAG</code></em>. The meaning of these variables is:</p>
10223<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 10223<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
10224<li class="listitem"><p><code class="varname">OPSYS</code> is the name of the 10224<li class="listitem"><p><code class="varname">OPSYS</code> is the name of the
10225 operating system for which the packages have been built. The 10225 operating system for which the packages have been built. The
10226 name is taken from the output of the <span class="command"><strong>uname</strong></span> 10226 name is taken from the output of the <span class="command"><strong>uname</strong></span>
10227 command, so it may differ from the one you are used to 10227 command, so it may differ from the one you are used to
10228 hear.</p></li> 10228 hear.</p></li>
10229<li class="listitem"><p><code class="varname">ARCH</code> is the hardware 10229<li class="listitem"><p><code class="varname">ARCH</code> is the hardware
10230 architecture of the platform for which the packages have been 10230 architecture of the platform for which the packages have been
10231 built. It also includes the <code class="varname">ABI</code> (Application 10231 built. It also includes the <code class="varname">ABI</code> (Application
10232 Binary Interface) for platforms that have several of 10232 Binary Interface) for platforms that have several of
10233 them.</p></li> 10233 them.</p></li>
10234<li class="listitem"><p><code class="varname">OSVERSION</code> is the version of 10234<li class="listitem"><p><code class="varname">OSVERSION</code> is the version of
10235 the operating system. For version numbers that change often (for 10235 the operating system. For version numbers that change often (for
10236 example NetBSD-current), the often-changing part should be 10236 example NetBSD-current), the often-changing part should be
10237 replaced with an <code class="literal">x</code>, for example 10237 replaced with an <code class="literal">x</code>, for example
10238 <code class="literal">4.99.x</code>.</p></li> 10238 <code class="literal">4.99.x</code>.</p></li>
10239<li class="listitem"><p><code class="varname">TAG</code> is either 10239<li class="listitem"><p><code class="varname">TAG</code> is either
10240 <code class="literal">20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code> 10240 <code class="literal">20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>
10241 for a stable branch, or <code class="literal">head</code> for packages 10241 for a stable branch, or <code class="literal">head</code> for packages
10242 built from the HEAD branch. The latter should only be used when 10242 built from the HEAD branch. The latter should only be used when
10243 the packages are updated on a regular basis. Otherwise the date 10243 the packages are updated on a regular basis. Otherwise the date
10244 from checking out pkgsrc should be appended, for example 10244 from checking out pkgsrc should be appended, for example
10245 <code class="literal">head_20071015</code>.</p></li> 10245 <code class="literal">head_20071015</code>.</p></li>
10246</ul></div> 10246</ul></div>
10247<p>The rationale for exactly this scheme is that the pkgsrc users looking for binary packages 10247<p>The rationale for exactly this scheme is that the pkgsrc users looking for binary packages
10248 can quickly click through the directories on the 10248 can quickly click through the directories on the
10249 server and find the best binary packages for their machines. Since they 10249 server and find the best binary packages for their machines. Since they
10250 usually know the operating system and the hardware architecture, OPSYS 10250 usually know the operating system and the hardware architecture, OPSYS
10251 and ARCH are placed first. After these choices, they can select the 10251 and ARCH are placed first. After these choices, they can select the
10252 best combination of OSVERSION and TAG together, since it is usually the 10252 best combination of OSVERSION and TAG together, since it is usually the
10253 case that packages stay compatible between different version of the 10253 case that packages stay compatible between different version of the
10254 operating system.</p> 10254 operating system.</p>
10255<p>In each of these directories, there is a 10255<p>In each of these directories, there is a
10256 whole binary packages collection for a specific platform. It has a directory called 10256 whole binary packages collection for a specific platform. It has a directory called
10257 <code class="filename">All</code> which contains all binary packages. 10257 <code class="filename">All</code> which contains all binary packages.
10258 Besides that, there are various category directories that 10258 Besides that, there are various category directories that
10259 contain symbolic links to the real binary packages.</p> 10259 contain symbolic links to the real binary packages.</p>
10260</div> 10260</div>
10261<div class="sect1"> 10261<div class="sect1">
10262<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10262<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10263<a name="ftp-reports"></a>C.4. <code class="filename">reports</code>: Bulk build reports</h2></div></div></div> 10263<a name="ftp-reports"></a>C.4. <code class="filename">reports</code>: Bulk build reports</h2></div></div></div>
10264<p>Here are the reports from bulk builds, for those who want 10264<p>Here are the reports from bulk builds, for those who want
10265 to fix packages that didn't build on some of the platforms. The 10265 to fix packages that didn't build on some of the platforms. The
10266 structure of subdirectories should look like the one in <a class="xref" href="#ftp-packages" title="C.3. packages: Binary packages">Section C.3, &#8220;<code class="filename">packages</code>: Binary packages&#8221;</a>.</p> 10266 structure of subdirectories should look like the one in <a class="xref" href="#ftp-packages" title="C.3. packages: Binary packages">Section C.3, &#8220;<code class="filename">packages</code>: Binary packages&#8221;</a>.</p>
10267</div> 10267</div>
10268<div class="sect1"> 10268<div class="sect1">
10269<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10269<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10270<a name="ftp-source"></a>C.5. <code class="filename">current</code>, 10270<a name="ftp-source"></a>C.5. <code class="filename">current</code>,
10271<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>: 10271<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>:
10272source packages</h2></div></div></div> 10272source packages</h2></div></div></div>
10273<p>These directories contain the <span class="quote">&#8220;<span class="quote">real</span>&#8221;</span> pkgsrc, 10273<p>These directories contain the <span class="quote">&#8220;<span class="quote">real</span>&#8221;</span> pkgsrc,
10274 that is the files that define how to create binary packages from 10274 that is the files that define how to create binary packages from
10275 source archives.</p> 10275 source archives.</p>
10276<p>The directory <code class="filename">pkgsrc</code> contains a 10276<p>The directory <code class="filename">pkgsrc</code> contains a
10277 snapshot of the CVS repository, which is updated regularly. The 10277 snapshot of the CVS repository, which is updated regularly. The
10278 file <code class="filename">pkgsrc.tar.gz</code> contains the same as the 10278 file <code class="filename">pkgsrc.tar.gz</code> contains the same as the
10279 directory, ready to be downloaded as a whole.</p> 10279 directory, ready to be downloaded as a whole.</p>
10280<p>In the directories for the quarterly branches, there is an 10280<p>In the directories for the quarterly branches, there is an
10281 additional file called 10281 additional file called
10282 <code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em>.tar.gz</code>, 10282 <code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em>.tar.gz</code>,
10283 which contains the state of pkgsrc when it was branched.</p> 10283 which contains the state of pkgsrc when it was branched.</p>
10284</div> 10284</div>
10285</div> 10285</div>
10286<div class="appendix"> 10286<div class="appendix">
10287<div class="titlepage"><div><div><h1 class="title"> 10287<div class="titlepage"><div><div><h1 class="title">
10288<a name="editing"></a>Appendix D. Editing guidelines for the pkgsrc guide</h1></div></div></div> 10288<a name="editing"></a>Appendix D. Editing guidelines for the pkgsrc guide</h1></div></div></div>
10289<div class="toc"> 10289<div class="toc">
10290<p><b>Table of Contents</b></p> 10290<p><b>Table of Contents</b></p>
10291<dl class="toc"> 10291<dl class="toc">
10292<dt><span class="sect1"><a href="#targets">D.1. Make targets</a></span></dt> 10292<dt><span class="sect1"><a href="#targets">D.1. Make targets</a></span></dt>
10293<dt><span class="sect1"><a href="#procedure">D.2. Procedure</a></span></dt> 10293<dt><span class="sect1"><a href="#procedure">D.2. Procedure</a></span></dt>
10294</dl> 10294</dl>
10295</div> 10295</div>
10296<p>This section contains information on editing the pkgsrc 10296<p>This section contains information on editing the pkgsrc
10297 guide itself.</p> 10297 guide itself.</p>
10298<div class="sect1"> 10298<div class="sect1">
10299<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10299<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10300<a name="targets"></a>D.1. Make targets</h2></div></div></div> 10300<a name="targets"></a>D.1. Make targets</h2></div></div></div>
10301<p>The pkgsrc guide's source code is stored in 10301<p>The pkgsrc guide's source code is stored in
10302 <code class="filename">pkgsrc/doc/guide/files</code>, and several files 10302 <code class="filename">pkgsrc/doc/guide/files</code>, and several files
10303 are created from it:</p> 10303 are created from it:</p>
10304<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 10304<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
10305<li class="listitem"><p><code class="filename">pkgsrc/doc/pkgsrc.txt</code></p></li> 10305<li class="listitem"><p><code class="filename">pkgsrc/doc/pkgsrc.txt</code></p></li>
10306<li class="listitem"><p><code class="filename">pkgsrc/doc/pkgsrc.html</code></p></li> 10306<li class="listitem"><p><code class="filename">pkgsrc/doc/pkgsrc.html</code></p></li>
10307<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/docs/pkgsrc/" target="_top">http://www.NetBSD.org/docs/pkgsrc/</a></p></li> 10307<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/docs/pkgsrc/" target="_top">http://www.NetBSD.org/docs/pkgsrc/</a></p></li>
10308<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/docs/pkgsrc/pkgsrc.pdf" target="_top">http://www.NetBSD.org/docs/pkgsrc/pkgsrc.pdf</a>: 10308<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/docs/pkgsrc/pkgsrc.pdf" target="_top">http://www.NetBSD.org/docs/pkgsrc/pkgsrc.pdf</a>:
10309 The PDF version of the pkgsrc guide.</p></li> 10309 The PDF version of the pkgsrc guide.</p></li>
10310<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/docs/pkgsrc/pkgsrc.ps" target="_top">http://www.NetBSD.org/docs/pkgsrc/pkgsrc.ps</a>: 10310<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/docs/pkgsrc/pkgsrc.ps" target="_top">http://www.NetBSD.org/docs/pkgsrc/pkgsrc.ps</a>:
10311 PostScript version of the pkgsrc guide.</p></li> 10311 PostScript version of the pkgsrc guide.</p></li>
10312</ul></div> 10312</ul></div>
10313</div> 10313</div>
10314<div class="sect1"> 10314<div class="sect1">
10315<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10315<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10316<a name="procedure"></a>D.2. Procedure</h2></div></div></div> 10316<a name="procedure"></a>D.2. Procedure</h2></div></div></div>
10317<p>The procedure to edit the pkgsrc guide is:</p> 10317<p>The procedure to edit the pkgsrc guide is:</p>
10318<div class="procedure"><ol class="procedure" type="1"> 10318<div class="procedure"><ol class="procedure" type="1">
10319<li class="step"><p>Make sure you have the packages needed to 10319<li class="step"><p>Make sure you have the packages needed to
10320 regenerate the pkgsrc guide (and other XML-based NetBSD 10320 regenerate the pkgsrc guide (and other XML-based NetBSD
10321 documentation) installed. These are automatically installed when 10321 documentation) installed. These are automatically installed when
10322 you install the <a href="http://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/pkgsrc-guide-tools/README.html" target="_top"><code class="filename">meta-pkgs/pkgsrc-guide-tools</code></a> package.</p></li> 10322 you install the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/pkgsrc-guide-tools/README.html" target="_top"><code class="filename">meta-pkgs/pkgsrc-guide-tools</code></a> package.</p></li>
10323<li class="step"><p>Run <span class="command"><strong>cd doc/guide</strong></span> to get to the 10323<li class="step"><p>Run <span class="command"><strong>cd doc/guide</strong></span> to get to the
10324 right directory. All further steps will take place 10324 right directory. All further steps will take place
10325 here.</p></li> 10325 here.</p></li>
10326<li class="step"><p>Edit the XML file(s) in 10326<li class="step"><p>Edit the XML file(s) in
10327 <code class="filename">files/</code>.</p></li> 10327 <code class="filename">files/</code>.</p></li>
10328<li class="step"><p>Run <span class="command"><strong>bmake</strong></span> to check the pkgsrc 10328<li class="step"><p>Run <span class="command"><strong>bmake</strong></span> to check the pkgsrc
10329 guide for valid XML and to build the final output files. If you 10329 guide for valid XML and to build the final output files. If you
10330 get any errors at this stage, you can just edit the files, as 10330 get any errors at this stage, you can just edit the files, as
10331 there are only symbolic links in the working directory, pointing 10331 there are only symbolic links in the working directory, pointing
10332 to the files in <code class="filename">files/</code>.</p></li> 10332 to the files in <code class="filename">files/</code>.</p></li>
10333<li class="step"><p><span class="command"><strong>(cd files &amp;&amp; cvs 10333<li class="step"><p><span class="command"><strong>(cd files &amp;&amp; cvs
10334 commit)</strong></span></p></li> 10334 commit)</strong></span></p></li>
10335<li class="step"><p>Run <span class="command"><strong>bmake clean &amp;&amp; bmake</strong></span> to 10335<li class="step"><p>Run <span class="command"><strong>bmake clean &amp;&amp; bmake</strong></span> to
10336 regenerate the output files with the proper RCS 10336 regenerate the output files with the proper RCS
10337 Ids.</p></li> 10337 Ids.</p></li>
10338<li class="step"> 10338<li class="step">
10339<p>Run <span class="command"><strong>bmake regen</strong></span> to install and 10339<p>Run <span class="command"><strong>bmake regen</strong></span> to install and
10340 commit the files in both <code class="filename">pkgsrc/doc</code> and 10340 commit the files in both <code class="filename">pkgsrc/doc</code> and
10341 <code class="filename">htdocs</code>.</p> 10341 <code class="filename">htdocs</code>.</p>
10342<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 10342<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
10343<h3 class="title">Note</h3> 10343<h3 class="title">Note</h3>
10344<p>If you have added, removed or renamed some chapters, 10344<p>If you have added, removed or renamed some chapters,
10345 you need to synchronize them using <span class="command"><strong>cvs add</strong></span> or 10345 you need to synchronize them using <span class="command"><strong>cvs add</strong></span> or
10346 <span class="command"><strong>cvs delete</strong></span> in the htdocs 10346 <span class="command"><strong>cvs delete</strong></span> in the htdocs
10347 directory.</p> 10347 directory.</p>
10348</div> 10348</div>
10349</li> 10349</li>
10350</ol></div> 10350</ol></div>
10351</div> 10351</div>
10352</div> 10352</div>
10353</div></body> 10353</div></body>
10354</html> 10354</html>

cvs diff -r1.245 -r1.246 pkgsrc/doc/pkgsrc.txt (switch to unified diff)

--- pkgsrc/doc/pkgsrc.txt 2017/11/27 11:52:49 1.245
+++ pkgsrc/doc/pkgsrc.txt 2018/04/04 10:24:23 1.246
@@ -1,1930 +1,1930 @@ @@ -1,1930 +1,1930 @@
1The pkgsrc guide 1The pkgsrc guide
2 2
3Documentation on the NetBSD packages system 3Documentation on the NetBSD packages system
4 4
5Alistair Crooks 5Alistair Crooks
6 6
7<agc@NetBSD.org> 7<agc@NetBSD.org>
8 8
9Hubert Feyrer 9Hubert Feyrer
10 10
11<hubertf@NetBSD.org> 11<hubertf@NetBSD.org>
12 12
13The pkgsrc Developers 13The pkgsrc Developers
14 14
15Copyright 1994-2017 The NetBSD Foundation, Inc 15Copyright 1994-2018 The NetBSD Foundation, Inc
16 16
17$NetBSD: pkgsrc.xml,v 1.31 2017/07/30 22:07:39 jnemeth Exp $ 17$NetBSD: pkgsrc.xml,v 1.32 2018/01/01 01:26:07 jakllsch Exp $
18 18
19Abstract 19Abstract
20 20
21pkgsrc is a centralized package management system for Unix-like operating 21pkgsrc is a centralized package management system for Unix-like operating
22systems. This guide provides information for users and developers of pkgsrc. It 22systems. This guide provides information for users and developers of pkgsrc. It
23covers installation of binary and source packages, creation of binary and 23covers installation of binary and source packages, creation of binary and
24source packages and a high-level overview about the infrastructure. 24source packages and a high-level overview about the infrastructure.
25 25
26------------------------------------------------------------------------------- 26-------------------------------------------------------------------------------
27 27
28Table of Contents 28Table of Contents
29 29
301. What is pkgsrc? 301. What is pkgsrc?
31 31
32 1.1. Introduction 32 1.1. Introduction
33 33
34 1.1.1. Why pkgsrc? 34 1.1.1. Why pkgsrc?
35 1.1.2. Supported platforms 35 1.1.2. Supported platforms
36 36
37 1.2. Overview 37 1.2. Overview
38 1.3. Terminology 38 1.3. Terminology
39 39
40 1.3.1. Roles involved in pkgsrc 40 1.3.1. Roles involved in pkgsrc
41 41
42 1.4. Typography 42 1.4. Typography
43 43
44I. The pkgsrc user's guide 44I. The pkgsrc user's guide
45 45
46 2. Where to get pkgsrc and how to keep it up-to-date 46 2. Where to get pkgsrc and how to keep it up-to-date
47 47
48 2.1. Getting pkgsrc for the first time 48 2.1. Getting pkgsrc for the first time
49 49
50 2.1.1. As tar archive 50 2.1.1. As tar archive
51 2.1.2. Via anonymous CVS 51 2.1.2. Via anonymous CVS
52 52
53 2.2. Keeping pkgsrc up-to-date 53 2.2. Keeping pkgsrc up-to-date
54 54
55 2.2.1. Via tar files 55 2.2.1. Via tar files
56 2.2.2. Via CVS 56 2.2.2. Via CVS
57 57
58 3. Using pkgsrc on systems other than NetBSD 58 3. Using pkgsrc on systems other than NetBSD
59 59
60 3.1. Binary distribution 60 3.1. Binary distribution
61 3.2. Bootstrapping pkgsrc 61 3.2. Bootstrapping pkgsrc
62 62
63 4. Using pkgsrc 63 4. Using pkgsrc
64 64
65 4.1. Using binary packages 65 4.1. Using binary packages
66 66
67 4.1.1. Finding binary packages 67 4.1.1. Finding binary packages
68 4.1.2. Installing binary packages 68 4.1.2. Installing binary packages
69 4.1.3. Deinstalling packages 69 4.1.3. Deinstalling packages
70 4.1.4. Getting information about installed packages 70 4.1.4. Getting information about installed packages
71 4.1.5. Checking for security vulnerabilities in installed packages 71 4.1.5. Checking for security vulnerabilities in installed packages
72 4.1.6. Finding if newer versions of your installed packages are in 72 4.1.6. Finding if newer versions of your installed packages are in
73 pkgsrc 73 pkgsrc
74 4.1.7. Other administrative functions 74 4.1.7. Other administrative functions
75 75
76 4.2. Building packages from source 76 4.2. Building packages from source
77 77
78 4.2.1. Requirements 78 4.2.1. Requirements
79 4.2.2. Fetching distfiles 79 4.2.2. Fetching distfiles
80 4.2.3. How to build and install 80 4.2.3. How to build and install
81 81
82 5. Configuring pkgsrc 82 5. Configuring pkgsrc
83 83
84 5.1. General configuration 84 5.1. General configuration
85 5.2. Variables affecting the build process 85 5.2. Variables affecting the build process
86 5.3. Variables affecting the installation process 86 5.3. Variables affecting the installation process
87 5.4. Selecting and configuring the compiler 87 5.4. Selecting and configuring the compiler
88 88
89 5.4.1. Selecting the compiler 89 5.4.1. Selecting the compiler
90 5.4.2. Additional flags to the compiler (CFLAGS) 90 5.4.2. Additional flags to the compiler (CFLAGS)
91 5.4.3. Additional flags to the linker (LDFLAGS) 91 5.4.3. Additional flags to the linker (LDFLAGS)
92 92
93 5.5. Developer/advanced settings 93 5.5. Developer/advanced settings
94 5.6. Selecting Build Options 94 5.6. Selecting Build Options
95 95
96 6. Creating binary packages 96 6. Creating binary packages
97 97
98 6.1. Building a single binary package 98 6.1. Building a single binary package
99 6.2. Settings for creation of binary packages 99 6.2. Settings for creation of binary packages
100 100
101 7. Creating binary packages for everything in pkgsrc (bulk builds) 101 7. Creating binary packages for everything in pkgsrc (bulk builds)
102 102
103 7.1. Preparations 103 7.1. Preparations
104 7.2. Running a pbulk-style bulk build 104 7.2. Running a pbulk-style bulk build
105 105
106 7.2.1. Configuration 106 7.2.1. Configuration
107 107
108 7.3. Requirements of a full bulk build 108 7.3. Requirements of a full bulk build
109 7.4. Creating a multiple CD-ROM packages collection 109 7.4. Creating a multiple CD-ROM packages collection
110 110
111 7.4.1. Example of cdpack 111 7.4.1. Example of cdpack
112 112
113 8. Directory layout of the installed files 113 8. Directory layout of the installed files
114 114
115 8.1. File system layout in ${LOCALBASE} 115 8.1. File system layout in ${LOCALBASE}
116 8.2. File system layout in ${VARBASE} 116 8.2. File system layout in ${VARBASE}
117 117
118 9. Frequently Asked Questions 118 9. Frequently Asked Questions
119 119
120 9.1. Are there any mailing lists for pkg-related discussion? 120 9.1. Are there any mailing lists for pkg-related discussion?
121 9.2. Utilities for package management (pkgtools) 121 9.2. Utilities for package management (pkgtools)
122 9.3. How to use pkgsrc as non-root 122 9.3. How to use pkgsrc as non-root
123 9.4. How to resume transfers when fetching distfiles? 123 9.4. How to resume transfers when fetching distfiles?
124 9.5. How can I install/use modular X.org from pkgsrc? 124 9.5. How can I install/use modular X.org from pkgsrc?
125 9.6. How to fetch files from behind a firewall 125 9.6. How to fetch files from behind a firewall
126 9.7. How to fetch files from HTTPS sites 126 9.7. How to fetch files from HTTPS sites
127 9.8. How do I tell make fetch to do passive FTP? 127 9.8. How do I tell make fetch to do passive FTP?
128 9.9. How to fetch all distfiles at once 128 9.9. How to fetch all distfiles at once
129 9.10. What does "Don't know how to make /usr/share/tmac/tmac.andoc" 129 9.10. What does "Don't know how to make /usr/share/tmac/tmac.andoc"
130 mean? 130 mean?
131 9.11. What does "Could not find bsd.own.mk" mean? 131 9.11. What does "Could not find bsd.own.mk" mean?
132 9.12. Using 'sudo' with pkgsrc 132 9.12. Using 'sudo' with pkgsrc
133 9.13. How do I change the location of configuration files? 133 9.13. How do I change the location of configuration files?
134 9.14. Automated security checks 134 9.14. Automated security checks
135 9.15. Why do some packages ignore my CFLAGS? 135 9.15. Why do some packages ignore my CFLAGS?
136 9.16. A package does not build. What shall I do? 136 9.16. A package does not build. What shall I do?
137 9.17. What does "Makefile appears to contain unresolved cvs/rcs/??? 137 9.17. What does "Makefile appears to contain unresolved cvs/rcs/???
138 merge conflicts" mean? 138 merge conflicts" mean?
139 139
140II. The pkgsrc developer's guide 140II. The pkgsrc developer's guide
141 141
142 10. Creating a new pkgsrc package from scratch 142 10. Creating a new pkgsrc package from scratch
143 143
144 10.1. Common types of packages 144 10.1. Common types of packages
145 145
146 10.1.1. Perl modules 146 10.1.1. Perl modules
147 10.1.2. Python modules and programs 147 10.1.2. Python modules and programs
148 148
149 10.2. Examples 149 10.2. Examples
150 150
151 10.2.1. How the www/nvu package came into pkgsrc 151 10.2.1. How the www/nvu package came into pkgsrc
152 152
153 11. Package components - files, directories and contents 153 11. Package components - files, directories and contents
154 154
155 11.1. Makefile 155 11.1. Makefile
156 11.2. distinfo 156 11.2. distinfo
157 11.3. patches/* 157 11.3. patches/*
158 158
159 11.3.1. Structure of a single patch file 159 11.3.1. Structure of a single patch file
160 11.3.2. Creating patch files 160 11.3.2. Creating patch files
161 11.3.3. Sources where the patch files come from 161 11.3.3. Sources where the patch files come from
162 11.3.4. Patching guidelines 162 11.3.4. Patching guidelines
163 11.3.5. Feedback to the author 163 11.3.5. Feedback to the author
164 164
165 11.4. Other mandatory files 165 11.4. Other mandatory files
166 11.5. Optional files 166 11.5. Optional files
167 167
168 11.5.1. Files affecting the binary package 168 11.5.1. Files affecting the binary package
169 11.5.2. Files affecting the build process 169 11.5.2. Files affecting the build process
170 11.5.3. Files affecting nothing at all 170 11.5.3. Files affecting nothing at all
171 171
172 11.6. work* 172 11.6. work*
173 11.7. files/* 173 11.7. files/*
174 174
175 12. Programming in Makefiles 175 12. Programming in Makefiles
176 176
177 12.1. Caveats 177 12.1. Caveats
178 12.2. Makefile variables 178 12.2. Makefile variables
179 179
180 12.2.1. Naming conventions 180 12.2.1. Naming conventions
181 181
182 12.3. Code snippets 182 12.3. Code snippets
183 183
184 12.3.1. Adding things to a list 184 12.3.1. Adding things to a list
185 12.3.2. Echoing a string exactly as-is 185 12.3.2. Echoing a string exactly as-is
186 12.3.3. Passing CFLAGS to GNU configure scripts 186 12.3.3. Passing CFLAGS to GNU configure scripts
187 12.3.4. Handling possibly empty variables 187 12.3.4. Handling possibly empty variables
188 188
189 13. PLIST issues 189 13. PLIST issues
190 190
191 13.1. RCS ID 191 13.1. RCS ID
192 13.2. Semi-automatic PLIST generation 192 13.2. Semi-automatic PLIST generation
193 13.3. Tweaking output of make print-PLIST 193 13.3. Tweaking output of make print-PLIST
194 13.4. Variable substitution in PLIST 194 13.4. Variable substitution in PLIST
195 13.5. Man page compression 195 13.5. Man page compression
196 13.6. Changing PLIST source with PLIST_SRC 196 13.6. Changing PLIST source with PLIST_SRC
197 13.7. Platform-specific and differing PLISTs 197 13.7. Platform-specific and differing PLISTs
198 13.8. Build-specific PLISTs 198 13.8. Build-specific PLISTs
199 13.9. Sharing directories between packages 199 13.9. Sharing directories between packages
200 200
201 14. Buildlink methodology 201 14. Buildlink methodology
202 202
203 14.1. Converting packages to use buildlink3 203 14.1. Converting packages to use buildlink3
204 14.2. Writing buildlink3.mk files 204 14.2. Writing buildlink3.mk files
205 205
206 14.2.1. Anatomy of a buildlink3.mk file 206 14.2.1. Anatomy of a buildlink3.mk file
207 14.2.2. Updating BUILDLINK_API_DEPENDS.pkg and 207 14.2.2. Updating BUILDLINK_API_DEPENDS.pkg and
208 BUILDLINK_ABI_DEPENDS.pkg in buildlink3.mk files 208 BUILDLINK_ABI_DEPENDS.pkg in buildlink3.mk files
209 209
210 14.3. Writing builtin.mk files 210 14.3. Writing builtin.mk files
211 211
212 14.3.1. Anatomy of a builtin.mk file 212 14.3.1. Anatomy of a builtin.mk file
213 14.3.2. Global preferences for native or pkgsrc software 213 14.3.2. Global preferences for native or pkgsrc software
214 214
215 15. The pkginstall framework 215 15. The pkginstall framework
216 216
217 15.1. Files and directories outside the installation prefix 217 15.1. Files and directories outside the installation prefix
218 218
219 15.1.1. Directory manipulation 219 15.1.1. Directory manipulation
220 15.1.2. File manipulation 220 15.1.2. File manipulation
221 221
222 15.2. Configuration files 222 15.2. Configuration files
223 223
224 15.2.1. How PKG_SYSCONFDIR is set 224 15.2.1. How PKG_SYSCONFDIR is set
225 15.2.2. Telling the software where configuration files are 225 15.2.2. Telling the software where configuration files are
226 15.2.3. Patching installations 226 15.2.3. Patching installations
227 15.2.4. Disabling handling of configuration files 227 15.2.4. Disabling handling of configuration files
228 228
229 15.3. System startup scripts 229 15.3. System startup scripts
230 230
231 15.3.1. Disabling handling of system startup scripts 231 15.3.1. Disabling handling of system startup scripts
232 232
233 15.4. System users and groups 233 15.4. System users and groups
234 15.5. System shells 234 15.5. System shells
235 235
236 15.5.1. Disabling shell registration 236 15.5.1. Disabling shell registration
237 237
238 15.6. Fonts 238 15.6. Fonts
239 239
240 15.6.1. Disabling automatic update of the fonts databases 240 15.6.1. Disabling automatic update of the fonts databases
241 241
242 16. Options handling 242 16. Options handling
243 243
244 16.1. Global default options 244 16.1. Global default options
245 16.2. Converting packages to use bsd.options.mk 245 16.2. Converting packages to use bsd.options.mk
246 16.3. Option Names 246 16.3. Option Names
247 16.4. Determining the options of dependencies 247 16.4. Determining the options of dependencies
248 248
249 17. The build process 249 17. The build process
250 250
251 17.1. Introduction 251 17.1. Introduction
252 17.2. Program location 252 17.2. Program location
253 17.3. Directories used during the build process 253 17.3. Directories used during the build process
254 17.4. Running a phase 254 17.4. Running a phase
255 17.5. The fetch phase 255 17.5. The fetch phase
256 256
257 17.5.1. What to fetch and where to get it from 257 17.5.1. What to fetch and where to get it from
258 17.5.2. How are the files fetched? 258 17.5.2. How are the files fetched?
259 259
260 17.6. The checksum phase 260 17.6. The checksum phase
261 17.7. The extract phase 261 17.7. The extract phase
262 17.8. The patch phase 262 17.8. The patch phase
263 17.9. The tools phase 263 17.9. The tools phase
264 17.10. The wrapper phase 264 17.10. The wrapper phase
265 17.11. The configure phase 265 17.11. The configure phase
266 17.12. The build phase 266 17.12. The build phase
267 17.13. The test phase 267 17.13. The test phase
268 17.14. The install phase 268 17.14. The install phase
269 17.15. The package phase 269 17.15. The package phase
270 17.16. Cleaning up 270 17.16. Cleaning up
271 17.17. Other helpful targets 271 17.17. Other helpful targets
272 272
273 18. Tools needed for building or running 273 18. Tools needed for building or running
274 274
275 18.1. Tools for pkgsrc builds 275 18.1. Tools for pkgsrc builds
276 18.2. Tools needed by packages 276 18.2. Tools needed by packages
277 18.3. Tools provided by platforms 277 18.3. Tools provided by platforms
278 278
279 19. Making your package work 279 19. Making your package work
280 280
281 19.1. General operation 281 19.1. General operation
282 282
283 19.1.1. How to pull in user-settable variables from mk.conf 283 19.1.1. How to pull in user-settable variables from mk.conf
284 19.1.2. User interaction 284 19.1.2. User interaction
285 19.1.3. Handling licenses 285 19.1.3. Handling licenses
286 19.1.4. Restricted packages 286 19.1.4. Restricted packages
287 19.1.5. Handling dependencies 287 19.1.5. Handling dependencies
288 19.1.6. Handling conflicts with other packages 288 19.1.6. Handling conflicts with other packages
289 19.1.7. Packages that cannot or should not be built 289 19.1.7. Packages that cannot or should not be built
290 19.1.8. Packages which should not be deleted, once installed 290 19.1.8. Packages which should not be deleted, once installed
291 19.1.9. Handling packages with security problems 291 19.1.9. Handling packages with security problems
292 19.1.10. How to handle incrementing versions when fixing an 292 19.1.10. How to handle incrementing versions when fixing an
293 existing package 293 existing package
294 19.1.11. Substituting variable text in the package files (the SUBST 294 19.1.11. Substituting variable text in the package files (the SUBST
295 framework) 295 framework)
296 296
297 19.2. The fetch phase 297 19.2. The fetch phase
298 298
299 19.2.1. Packages whose distfiles aren't available for plain 299 19.2.1. Packages whose distfiles aren't available for plain
300 downloading 300 downloading
301 19.2.2. How to handle modified distfiles with the 'old' name 301 19.2.2. How to handle modified distfiles with the 'old' name
302 19.2.3. Packages hosted on github.com 302 19.2.3. Packages hosted on github.com
303 303
304 19.3. The configure phase 304 19.3. The configure phase
305 305
306 19.3.1. Shared libraries - libtool 306 19.3.1. Shared libraries - libtool
307 19.3.2. Using libtool on GNU packages that already support libtool 307 19.3.2. Using libtool on GNU packages that already support libtool
308 19.3.3. GNU Autoconf/Automake 308 19.3.3. GNU Autoconf/Automake
309 309
310 19.4. Programming languages 310 19.4. Programming languages
311 311
312 19.4.1. C, C++, and Fortran 312 19.4.1. C, C++, and Fortran
313 19.4.2. Java 313 19.4.2. Java
314 19.4.3. Packages containing perl scripts 314 19.4.3. Packages containing perl scripts
315 19.4.4. Packages containing shell scripts 315 19.4.4. Packages containing shell scripts
316 19.4.5. Other programming languages 316 19.4.5. Other programming languages
317 317
318 19.5. The build phase 318 19.5. The build phase
319 319
320 19.5.1. Compiling C and C++ code conditionally 320 19.5.1. Compiling C and C++ code conditionally
321 19.5.2. How to handle compiler bugs 321 19.5.2. How to handle compiler bugs
322 19.5.3. Undefined reference to "..." 322 19.5.3. Undefined reference to "..."
323 19.5.4. Running out of memory 323 19.5.4. Running out of memory
324 324
325 19.6. The install phase 325 19.6. The install phase
326 326
327 19.6.1. Creating needed directories 327 19.6.1. Creating needed directories
328 19.6.2. Where to install documentation 328 19.6.2. Where to install documentation
329 19.6.3. Installing highscore files 329 19.6.3. Installing highscore files
330 19.6.4. Adding DESTDIR support to packages 330 19.6.4. Adding DESTDIR support to packages
331 19.6.5. Packages with hardcoded paths to other interpreters 331 19.6.5. Packages with hardcoded paths to other interpreters
332 19.6.6. Packages installing perl modules 332 19.6.6. Packages installing perl modules
333 19.6.7. Packages installing info files 333 19.6.7. Packages installing info files
334 19.6.8. Packages installing man pages 334 19.6.8. Packages installing man pages
335 19.6.9. Packages installing GConf data files 335 19.6.9. Packages installing GConf data files
336 19.6.10. Packages installing scrollkeeper/rarian data files 336 19.6.10. Packages installing scrollkeeper/rarian data files
337 19.6.11. Packages installing X11 fonts 337 19.6.11. Packages installing X11 fonts
338 19.6.12. Packages installing GTK2 modules 338 19.6.12. Packages installing GTK2 modules
339 19.6.13. Packages installing SGML or XML data 339 19.6.13. Packages installing SGML or XML data
340 19.6.14. Packages installing extensions to the MIME database 340 19.6.14. Packages installing extensions to the MIME database
341 19.6.15. Packages using intltool 341 19.6.15. Packages using intltool
342 19.6.16. Packages installing startup scripts 342 19.6.16. Packages installing startup scripts
343 19.6.17. Packages installing TeX modules 343 19.6.17. Packages installing TeX modules
344 19.6.18. Packages supporting running binaries in emulation 344 19.6.18. Packages supporting running binaries in emulation
345 19.6.19. Packages installing hicolor theme icons 345 19.6.19. Packages installing hicolor theme icons
346 19.6.20. Packages installing desktop files 346 19.6.20. Packages installing desktop files
347 347
348 19.7. Marking packages as having problems 348 19.7. Marking packages as having problems
349 349
350 20. Debugging 350 20. Debugging
351 21. Submitting and Committing 351 21. Submitting and Committing
352 352
353 21.1. Submitting binary packages 353 21.1. Submitting binary packages
354 21.2. Submitting source packages (for non-NetBSD-developers) 354 21.2. Submitting source packages (for non-NetBSD-developers)
355 21.3. General notes when adding, updating, or removing packages 355 21.3. General notes when adding, updating, or removing packages
356 21.4. Commit Messages 356 21.4. Commit Messages
357 21.5. Committing: Adding a package to CVS 357 21.5. Committing: Adding a package to CVS
358 21.6. Updating a package to a newer version 358 21.6. Updating a package to a newer version
359 21.7. Renaming a package in pkgsrc 359 21.7. Renaming a package in pkgsrc
360 21.8. Moving a package in pkgsrc 360 21.8. Moving a package in pkgsrc
361 361
362 22. Frequently Asked Questions 362 22. Frequently Asked Questions
363 23. GNOME packaging and porting 363 23. GNOME packaging and porting
364 364
365 23.1. Meta packages 365 23.1. Meta packages
366 23.2. Packaging a GNOME application 366 23.2. Packaging a GNOME application
367 23.3. Updating GNOME to a newer version 367 23.3. Updating GNOME to a newer version
368 23.4. Patching guidelines 368 23.4. Patching guidelines
369 369
370III. The pkgsrc infrastructure internals 370III. The pkgsrc infrastructure internals
371 371
372 24. Design of the pkgsrc infrastructure 372 24. Design of the pkgsrc infrastructure
373 373
374 24.1. The meaning of variable definitions 374 24.1. The meaning of variable definitions
375 24.2. Avoiding problems before they arise 375 24.2. Avoiding problems before they arise
376 24.3. Variable evaluation 376 24.3. Variable evaluation
377 377
378 24.3.1. At load time 378 24.3.1. At load time
379 24.3.2. At runtime 379 24.3.2. At runtime
380 380
381 24.4. How can variables be specified? 381 24.4. How can variables be specified?
382 24.5. Designing interfaces for Makefile fragments 382 24.5. Designing interfaces for Makefile fragments
383 383
384 24.5.1. Procedures with parameters 384 24.5.1. Procedures with parameters
385 24.5.2. Actions taken on behalf of parameters 385 24.5.2. Actions taken on behalf of parameters
386 386
387 24.6. The order in which files are loaded 387 24.6. The order in which files are loaded
388 388
389 24.6.1. The order in bsd.prefs.mk 389 24.6.1. The order in bsd.prefs.mk
390 24.6.2. The order in bsd.pkg.mk 390 24.6.2. The order in bsd.pkg.mk
391 391
392 25. Regression tests 392 25. Regression tests
393 393
394 25.1. Running the regression tests 394 25.1. Running the regression tests
395 25.2. Adding a new regression test 395 25.2. Adding a new regression test
396 396
397 25.2.1. Overridable functions 397 25.2.1. Overridable functions
398 25.2.2. Helper functions 398 25.2.2. Helper functions
399 399
400 26. Porting pkgsrc 400 26. Porting pkgsrc
401 401
402 26.1. Porting pkgsrc to a new operating system 402 26.1. Porting pkgsrc to a new operating system
403 403
404A. A simple example package: bison 404A. A simple example package: bison
405 405
406 A.1. files 406 A.1. files
407 407
408 A.1.1. Makefile 408 A.1.1. Makefile
409 A.1.2. DESCR 409 A.1.2. DESCR
410 A.1.3. PLIST 410 A.1.3. PLIST
411 A.1.4. Checking a package with pkglint 411 A.1.4. Checking a package with pkglint
412 412
413 A.2. Steps for building, installing, packaging 413 A.2. Steps for building, installing, packaging
414 414
415B. Build logs 415B. Build logs
416 416
417 B.1. Building figlet 417 B.1. Building figlet
418 B.2. Packaging figlet 418 B.2. Packaging figlet
419 419
420C. Directory layout of the pkgsrc FTP server 420C. Directory layout of the pkgsrc FTP server
421 421
422 C.1. distfiles: The distributed source files 422 C.1. distfiles: The distributed source files
423 C.2. misc: Miscellaneous things 423 C.2. misc: Miscellaneous things
424 C.3. packages: Binary packages 424 C.3. packages: Binary packages
425 C.4. reports: Bulk build reports 425 C.4. reports: Bulk build reports
426 C.5. current, pkgsrc-20xxQy: source packages 426 C.5. current, pkgsrc-20xxQy: source packages
427 427
428D. Editing guidelines for the pkgsrc guide 428D. Editing guidelines for the pkgsrc guide
429 429
430 D.1. Make targets 430 D.1. Make targets
431 D.2. Procedure 431 D.2. Procedure
432 432
433List of Tables 433List of Tables
434 434
4351.1. Platforms supported by pkgsrc 4351.1. Platforms supported by pkgsrc
43611.1. Patching examples 43611.1. Patching examples
43723.1. PLIST handling for GNOME packages 43723.1. PLIST handling for GNOME packages
438 438
439Chapter 1. What is pkgsrc? 439Chapter 1. What is pkgsrc?
440 440
441Table of Contents 441Table of Contents
442 442
4431.1. Introduction 4431.1. Introduction
444 444
445 1.1.1. Why pkgsrc? 445 1.1.1. Why pkgsrc?
446 1.1.2. Supported platforms 446 1.1.2. Supported platforms
447 447
4481.2. Overview 4481.2. Overview
4491.3. Terminology 4491.3. Terminology
450 450
451 1.3.1. Roles involved in pkgsrc 451 1.3.1. Roles involved in pkgsrc
452 452
4531.4. Typography 4531.4. Typography
454 454
4551.1. Introduction 4551.1. Introduction
456 456
457There is a lot of software freely available for Unix-based systems, which is 457There is a lot of software freely available for Unix-based systems, which is
458usually available in form of the source code. Before such software can be used, 458usually available in form of the source code. Before such software can be used,
459it needs to be configured to the local system, compiled and installed, and this 459it needs to be configured to the local system, compiled and installed, and this
460is exactly what The NetBSD Packages Collection (pkgsrc) does. pkgsrc also has 460is exactly what The NetBSD Packages Collection (pkgsrc) does. pkgsrc also has
461some basic commands to handle binary packages, so that not every user has to 461some basic commands to handle binary packages, so that not every user has to
462build the packages for himself, which is a time-costly task. 462build the packages for himself, which is a time-costly task.
463 463
464pkgsrc currently contains several thousand packages, including: 464pkgsrc currently contains several thousand packages, including:
465 465
466 * www/apache24 - The Apache web server 466 * www/apache24 - The Apache web server
467 467
468 * www/firefox - The Firefox web browser 468 * www/firefox - The Firefox web browser
469 469
470 * meta-pkgs/gnome - The GNOME Desktop Environment 470 * meta-pkgs/gnome - The GNOME Desktop Environment
471 471
472 * meta-pkgs/kde4 - The K Desktop Environment 472 * meta-pkgs/kde4 - The K Desktop Environment
473 473
474? just to name a few. 474? just to name a few.
475 475
476pkgsrc has built-in support for handling varying dependencies, such as pthreads 476pkgsrc has built-in support for handling varying dependencies, such as pthreads
477and X11, and extended features such as IPv6 support on a range of platforms. 477and X11, and extended features such as IPv6 support on a range of platforms.
478 478
4791.1.1. Why pkgsrc? 4791.1.1. Why pkgsrc?
480 480
481pkgsrc provides the following key features: 481pkgsrc provides the following key features:
482 482
483 * Easy building of software from source as well as the creation and 483 * Easy building of software from source as well as the creation and
484 installation of binary packages. The source and latest patches are 484 installation of binary packages. The source and latest patches are
485 retrieved from a master or mirror download site, checksum verified, then 485 retrieved from a master or mirror download site, checksum verified, then
486 built on your system. Support for binary-only distributions is available 486 built on your system. Support for binary-only distributions is available
487 for both native platforms and NetBSD emulated platforms. 487 for both native platforms and NetBSD emulated platforms.
488 488
489 * All packages are installed in a consistent directory tree, including 489 * All packages are installed in a consistent directory tree, including
490 binaries, libraries, man pages and other documentation. 490 binaries, libraries, man pages and other documentation.
491 491
492 * Tracking of package dependencies automatically, including when performing 492 * Tracking of package dependencies automatically, including when performing
493 updates, to ensure required packages are installed. The configuration files 493 updates, to ensure required packages are installed. The configuration files
494 of various packages are handled automatically during updates, so local 494 of various packages are handled automatically during updates, so local
495 changes are preserved. 495 changes are preserved.
496 496
497 * Like NetBSD, pkgsrc is designed with portability in mind and consists of 497 * Like NetBSD, pkgsrc is designed with portability in mind and consists of
498 highly portable code. This allows the greatest speed of development when 498 highly portable code. This allows the greatest speed of development when
499 porting to a new platform. This portability also ensures that pkgsrc is  499 porting to a new platform. This portability also ensures that pkgsrc is
500 consistent across all platforms. 500 consistent across all platforms.
501 501
502 * The installation prefix, acceptable software licenses, international 502 * The installation prefix, acceptable software licenses, international
503 encryption requirements and build-time options for a large number of 503 encryption requirements and build-time options for a large number of
504 packages are all set in a simple, central configuration file. 504 packages are all set in a simple, central configuration file.
505 505
506 * The entire source (not including the distribution files) is freely 506 * The entire source (not including the distribution files) is freely
507 available under a BSD license, so you may extend and adapt pkgsrc to your 507 available under a BSD license, so you may extend and adapt pkgsrc to your
508 needs. Support for local packages and patches is available right out of the 508 needs. Support for local packages and patches is available right out of the
509 box, so you can configure it specifically for your environment. 509 box, so you can configure it specifically for your environment.
510 510
511The following principles are basic to pkgsrc: 511The following principles are basic to pkgsrc:
512 512
513 * "It should only work if it's right." ? That means, if a package contains 513 * "It should only work if it's right." ? That means, if a package contains
514 bugs, it's better to find them and to complain about them rather than to 514 bugs, it's better to find them and to complain about them rather than to
515 just install the package and hope that it works. There are numerous checks 515 just install the package and hope that it works. There are numerous checks
516 in pkgsrc that try to find such bugs: Static analysis tools (pkgtools/ 516 in pkgsrc that try to find such bugs: Static analysis tools (pkgtools/
517 pkglint), build-time checks (portability of shell scripts), and 517 pkglint), build-time checks (portability of shell scripts), and
518 post-installation checks (installed files, references to shared libraries, 518 post-installation checks (installed files, references to shared libraries,
519 script interpreters). 519 script interpreters).
520 520
521 * "If it works, it should work everywhere" ? Like NetBSD has been ported to 521 * "If it works, it should work everywhere" ? Like NetBSD has been ported to
522 many hardware architectures, pkgsrc has been ported to many operating 522 many hardware architectures, pkgsrc has been ported to many operating
523 systems. Care is taken that packages behave the same on all platforms. 523 systems. Care is taken that packages behave the same on all platforms.
524 524
5251.1.2. Supported platforms 5251.1.2. Supported platforms
526 526
527pkgsrc consists of both a source distribution and a binary distribution for 527pkgsrc consists of both a source distribution and a binary distribution for
528these operating systems. After retrieving the required source or binaries, you 528these operating systems. After retrieving the required source or binaries, you
529can be up and running with pkgsrc in just minutes! 529can be up and running with pkgsrc in just minutes!
530 530
531pkgsrc was derived from FreeBSD's ports system, and initially developed for 531pkgsrc was derived from FreeBSD's ports system, and initially developed for
532NetBSD only. Since then, pkgsrc has grown a lot, and now supports the following 532NetBSD only. Since then, pkgsrc has grown a lot, and now supports the following
533platforms: 533platforms:
534 534
535Table 1.1. Platforms supported by pkgsrc 535Table 1.1. Platforms supported by pkgsrc
536 536
537+-----------------------------------------------------------------------------+ 537+-----------------------------------------------------------------------------+
538| Platform | Date Support | Notes | 538| Platform | Date Support | Notes |
539| | Added | | 539| | Added | |
540|--------------------------------------+---------------+----------------------| 540|--------------------------------------+---------------+----------------------|
541|NetBSD | Aug 1997 | | 541|NetBSD | Aug 1997 | |
542|--------------------------------------+---------------+----------------------| 542|--------------------------------------+---------------+----------------------|
543|Solaris | Mar 1999 |README.Solaris | 543|Solaris | Mar 1999 |README.Solaris |
544|--------------------------------------+---------------+----------------------| 544|--------------------------------------+---------------+----------------------|
545|Linux | Jun 1999 |README.Linux | 545|Linux | Jun 1999 |README.Linux |
546|--------------------------------------+---------------+----------------------| 546|--------------------------------------+---------------+----------------------|
547|Darwin / Mac OS X / OS X / macOS | Oct 2001 |README.MacOSX | 547|Darwin / Mac OS X / OS X / macOS | Oct 2001 |README.MacOSX |
548|--------------------------------------+---------------+----------------------| 548|--------------------------------------+---------------+----------------------|
549|FreeBSD | Nov 2002 |README.FreeBSD | 549|FreeBSD | Nov 2002 |README.FreeBSD |
550|--------------------------------------+---------------+----------------------| 550|--------------------------------------+---------------+----------------------|
551|OpenBSD | Nov 2002 |README.OpenBSD | 551|OpenBSD | Nov 2002 |README.OpenBSD |
552|--------------------------------------+---------------+----------------------| 552|--------------------------------------+---------------+----------------------|
553|IRIX | Dec 2002 |README.IRIX | 553|IRIX | Dec 2002 |README.IRIX |
554| | |README.IRIX5.3 | 554| | |README.IRIX5.3 |
555|--------------------------------------+---------------+----------------------| 555|--------------------------------------+---------------+----------------------|
556|BSD/OS | Dec 2003 | | 556|BSD/OS | Dec 2003 | |
557|--------------------------------------+---------------+----------------------| 557|--------------------------------------+---------------+----------------------|
558|AIX | Dec 2003 |README.AIX | 558|AIX | Dec 2003 |README.AIX |
559|--------------------------------------+---------------+----------------------| 559|--------------------------------------+---------------+----------------------|
560|Interix (Microsoft Windows Services | Mar 2004 |README.Interix | 560|Interix (Microsoft Windows Services | Mar 2004 |README.Interix |
561|for Unix) | | | 561|for Unix) | | |
562|--------------------------------------+---------------+----------------------| 562|--------------------------------------+---------------+----------------------|
563|DragonFlyBSD | Oct 2004 | | 563|DragonFlyBSD | Oct 2004 | |
564|--------------------------------------+---------------+----------------------| 564|--------------------------------------+---------------+----------------------|
565|OSF/1 | Nov 2004 |README.OSF1 | 565|OSF/1 | Nov 2004 |README.OSF1 |
566|--------------------------------------+---------------+----------------------| 566|--------------------------------------+---------------+----------------------|
567|HP-UX | Apr 2007 |README.HPUX | 567|HP-UX | Apr 2007 |README.HPUX |
568|--------------------------------------+---------------+----------------------| 568|--------------------------------------+---------------+----------------------|
569|Haiku | Sep 2010 |README.Haiku | 569|Haiku | Sep 2010 |README.Haiku |
570|--------------------------------------+---------------+----------------------| 570|--------------------------------------+---------------+----------------------|
571|MirBSD | Jan 2011 | | 571|MirBSD | Jan 2011 | |
572|--------------------------------------+---------------+----------------------| 572|--------------------------------------+---------------+----------------------|
573|Minix3 | Nov 2011 |README.Minix3 | 573|Minix3 | Nov 2011 |README.Minix3 |
574|--------------------------------------+---------------+----------------------| 574|--------------------------------------+---------------+----------------------|
575|Cygwin | Mar 2013 |README.Cygwin | 575|Cygwin | Mar 2013 |README.Cygwin |
576|--------------------------------------+---------------+----------------------| 576|--------------------------------------+---------------+----------------------|
577|GNU/kFreeBSD | Jul 2013 |README.GNUkFreeBSD | 577|GNU/kFreeBSD | Jul 2013 |README.GNUkFreeBSD |
578|--------------------------------------+---------------+----------------------| 578|--------------------------------------+---------------+----------------------|
579|Bitrig | Jun 2014 |README.Bitrig | 579|Bitrig | Jun 2014 |README.Bitrig |
580+-----------------------------------------------------------------------------+ 580+-----------------------------------------------------------------------------+
581 581
582 582
5831.2. Overview 5831.2. Overview
584 584
585This document is divided into three parts. The first, The pkgsrc user's guide, 585This document is divided into three parts. The first, The pkgsrc user's guide,
586describes how one can use one of the packages in the Package Collection, either 586describes how one can use one of the packages in the Package Collection, either
587by installing a precompiled binary package, or by building one's own copy using 587by installing a precompiled binary package, or by building one's own copy using
588the NetBSD package system. The second part, The pkgsrc developer's guide, 588the NetBSD package system. The second part, The pkgsrc developer's guide,
589explains how to prepare a package so it can be easily built by other NetBSD 589explains how to prepare a package so it can be easily built by other NetBSD
590users without knowing about the package's building details. The third part, The 590users without knowing about the package's building details. The third part, The
591pkgsrc infrastructure internals is intended for those who want to understand 591pkgsrc infrastructure internals is intended for those who want to understand
592how pkgsrc is implemented. 592how pkgsrc is implemented.
593 593
594This document is available in various formats: HTML, PDF, PS, TXT. 594This document is available in various formats: HTML, PDF, PS, TXT.
595 595
5961.3. Terminology 5961.3. Terminology
597 597
598There has been a lot of talk about "ports", "packages", etc. so far. Here is a 598There has been a lot of talk about "ports", "packages", etc. so far. Here is a
599description of all the terminology used within this document. 599description of all the terminology used within this document.
600 600
601Package 601Package
602 602
603 A set of files and building instructions that describe what's necessary to 603 A set of files and building instructions that describe what's necessary to
604 build a certain piece of software using pkgsrc. Packages are traditionally 604 build a certain piece of software using pkgsrc. Packages are traditionally
605 stored under /usr/pkgsrc, but may be stored in any location, referred to as 605 stored under /usr/pkgsrc, but may be stored in any location, referred to as
606 PKGSRCDIR. 606 PKGSRCDIR.
607 607
608The NetBSD package system 608The NetBSD package system
609 609
610 This is the former name of "pkgsrc". It is part of the NetBSD operating 610 This is the former name of "pkgsrc". It is part of the NetBSD operating
611 system and can be bootstrapped to run on non-NetBSD operating systems as 611 system and can be bootstrapped to run on non-NetBSD operating systems as
612 well. It handles building (compiling), installing, and removing of 612 well. It handles building (compiling), installing, and removing of
613 packages. 613 packages.
614 614
615Distfile 615Distfile
616 616
617 This term describes the file or files that are provided by the author of 617 This term describes the file or files that are provided by the author of
618 the piece of software to distribute his work. All the changes necessary to 618 the piece of software to distribute his work. All the changes necessary to
619 build on NetBSD are reflected in the corresponding package. Usually the 619 build on NetBSD are reflected in the corresponding package. Usually the
620 distfile is in the form of a compressed tar-archive, but other types are 620 distfile is in the form of a compressed tar-archive, but other types are
621 possible, too. Distfiles are usually stored below /usr/pkgsrc/distfiles. 621 possible, too. Distfiles are usually stored below /usr/pkgsrc/distfiles.
622 622
623Port 623Port
624 624
625 This is the term used by FreeBSD and OpenBSD people for what we call a 625 This is the term used by FreeBSD and OpenBSD people for what we call a
626 package. In NetBSD terminology, "port" refers to a different architecture. 626 package. In NetBSD terminology, "port" refers to a different architecture.
627 627
628Precompiled/binary package 628Precompiled/binary package
629 629
630 A set of binaries built with pkgsrc from a distfile and stuffed together in 630 A set of binaries built with pkgsrc from a distfile and stuffed together in
631 a single .tgz file so it can be installed on machines of the same machine 631 a single .tgz file so it can be installed on machines of the same machine
632 architecture without the need to recompile. Packages are usually generated 632 architecture without the need to recompile. Packages are usually generated
633 in /usr/pkgsrc/packages; there is also an archive on ftp.NetBSD.org. 633 in /usr/pkgsrc/packages; there is also an archive on ftp.NetBSD.org.
634 634
635 Sometimes, this is referred to by the term "package" too, especially in the 635 Sometimes, this is referred to by the term "package" too, especially in the
636 context of precompiled packages. 636 context of precompiled packages.
637 637
638Program 638Program
639 639
640 The piece of software to be installed which will be constructed from all 640 The piece of software to be installed which will be constructed from all
641 the files in the distfile by the actions defined in the corresponding 641 the files in the distfile by the actions defined in the corresponding
642 package. 642 package.
643 643
6441.3.1. Roles involved in pkgsrc 6441.3.1. Roles involved in pkgsrc
645 645
646pkgsrc users 646pkgsrc users
647 647
648 The pkgsrc users are people who use the packages provided by pkgsrc. 648 The pkgsrc users are people who use the packages provided by pkgsrc.
649 Typically they are system administrators. The people using the software 649 Typically they are system administrators. The people using the software
650 that is inside the packages (maybe called "end users") are not covered by 650 that is inside the packages (maybe called "end users") are not covered by
651 the pkgsrc guide. 651 the pkgsrc guide.
652 652
653 There are two kinds of pkgsrc users: Some only want to install pre-built 653 There are two kinds of pkgsrc users: Some only want to install pre-built
654 binary packages. Others build the pkgsrc packages from source, either for 654 binary packages. Others build the pkgsrc packages from source, either for
655 installing them directly or for building binary packages themselves. For 655 installing them directly or for building binary packages themselves. For
656 pkgsrc users Part I, "The pkgsrc user's guide" should provide all necessary 656 pkgsrc users Part I, "The pkgsrc user's guide" should provide all necessary
657 documentation. 657 documentation.
658 658
659package maintainers 659package maintainers
660 660
661 A package maintainer creates packages as described in Part II, "The pkgsrc 661 A package maintainer creates packages as described in Part II, "The pkgsrc
662 developer's guide". 662 developer's guide".
663 663
664infrastructure developers 664infrastructure developers
665 665
666 These people are involved in all those files that live in the mk/ directory 666 These people are involved in all those files that live in the mk/ directory
667 and below. Only these people should need to read through Part III, "The 667 and below. Only these people should need to read through Part III, "The
668 pkgsrc infrastructure internals", though others might be curious, too. 668 pkgsrc infrastructure internals", though others might be curious, too.
669 669
6701.4. Typography 6701.4. Typography
671 671
672When giving examples for commands, shell prompts are used to show if the 672When giving examples for commands, shell prompts are used to show if the
673command should/can be issued as root, or if "normal" user privileges are 673command should/can be issued as root, or if "normal" user privileges are
674sufficient. We use a # for root's shell prompt, a % for users' shell prompt, 674sufficient. We use a # for root's shell prompt, a % for users' shell prompt,
675assuming they use the C-shell or tcsh and a $ for bourne shell and derivatives. 675assuming they use the C-shell or tcsh and a $ for bourne shell and derivatives.
676 676
677Part I. The pkgsrc user's guide 677Part I. The pkgsrc user's guide
678 678
679Table of Contents 679Table of Contents
680 680
6812. Where to get pkgsrc and how to keep it up-to-date 6812. Where to get pkgsrc and how to keep it up-to-date
682 682
683 2.1. Getting pkgsrc for the first time 683 2.1. Getting pkgsrc for the first time
684 684
685 2.1.1. As tar archive 685 2.1.1. As tar archive
686 2.1.2. Via anonymous CVS 686 2.1.2. Via anonymous CVS
687 687
688 2.2. Keeping pkgsrc up-to-date 688 2.2. Keeping pkgsrc up-to-date
689 689
690 2.2.1. Via tar files 690 2.2.1. Via tar files
691 2.2.2. Via CVS 691 2.2.2. Via CVS
692 692
6933. Using pkgsrc on systems other than NetBSD 6933. Using pkgsrc on systems other than NetBSD
694 694
695 3.1. Binary distribution 695 3.1. Binary distribution
696 3.2. Bootstrapping pkgsrc 696 3.2. Bootstrapping pkgsrc
697 697
6984. Using pkgsrc 6984. Using pkgsrc
699 699
700 4.1. Using binary packages 700 4.1. Using binary packages
701 701
702 4.1.1. Finding binary packages 702 4.1.1. Finding binary packages
703 4.1.2. Installing binary packages 703 4.1.2. Installing binary packages
704 4.1.3. Deinstalling packages 704 4.1.3. Deinstalling packages
705 4.1.4. Getting information about installed packages 705 4.1.4. Getting information about installed packages
706 4.1.5. Checking for security vulnerabilities in installed packages 706 4.1.5. Checking for security vulnerabilities in installed packages
707 4.1.6. Finding if newer versions of your installed packages are in 707 4.1.6. Finding if newer versions of your installed packages are in
708 pkgsrc 708 pkgsrc
709 4.1.7. Other administrative functions 709 4.1.7. Other administrative functions
710 710
711 4.2. Building packages from source 711 4.2. Building packages from source
712 712
713 4.2.1. Requirements 713 4.2.1. Requirements
714 4.2.2. Fetching distfiles 714 4.2.2. Fetching distfiles
715 4.2.3. How to build and install 715 4.2.3. How to build and install
716 716
7175. Configuring pkgsrc 7175. Configuring pkgsrc
718 718
719 5.1. General configuration 719 5.1. General configuration
720 5.2. Variables affecting the build process 720 5.2. Variables affecting the build process
721 5.3. Variables affecting the installation process 721 5.3. Variables affecting the installation process
722 5.4. Selecting and configuring the compiler 722 5.4. Selecting and configuring the compiler
723 723
724 5.4.1. Selecting the compiler 724 5.4.1. Selecting the compiler
725 5.4.2. Additional flags to the compiler (CFLAGS) 725 5.4.2. Additional flags to the compiler (CFLAGS)
726 5.4.3. Additional flags to the linker (LDFLAGS) 726 5.4.3. Additional flags to the linker (LDFLAGS)
727 727
728 5.5. Developer/advanced settings 728 5.5. Developer/advanced settings
729 5.6. Selecting Build Options 729 5.6. Selecting Build Options
730 730
7316. Creating binary packages 7316. Creating binary packages
732 732
733 6.1. Building a single binary package 733 6.1. Building a single binary package
734 6.2. Settings for creation of binary packages 734 6.2. Settings for creation of binary packages
735 735
7367. Creating binary packages for everything in pkgsrc (bulk builds) 7367. Creating binary packages for everything in pkgsrc (bulk builds)
737 737
738 7.1. Preparations 738 7.1. Preparations
739 7.2. Running a pbulk-style bulk build 739 7.2. Running a pbulk-style bulk build
740 740
741 7.2.1. Configuration 741 7.2.1. Configuration
742 742
743 7.3. Requirements of a full bulk build 743 7.3. Requirements of a full bulk build
744 7.4. Creating a multiple CD-ROM packages collection 744 7.4. Creating a multiple CD-ROM packages collection
745 745
746 7.4.1. Example of cdpack 746 7.4.1. Example of cdpack
747 747
7488. Directory layout of the installed files 7488. Directory layout of the installed files
749 749
750 8.1. File system layout in ${LOCALBASE} 750 8.1. File system layout in ${LOCALBASE}
751 8.2. File system layout in ${VARBASE} 751 8.2. File system layout in ${VARBASE}
752 752
7539. Frequently Asked Questions 7539. Frequently Asked Questions
754 754
755 9.1. Are there any mailing lists for pkg-related discussion? 755 9.1. Are there any mailing lists for pkg-related discussion?
756 9.2. Utilities for package management (pkgtools) 756 9.2. Utilities for package management (pkgtools)
757 9.3. How to use pkgsrc as non-root 757 9.3. How to use pkgsrc as non-root
758 9.4. How to resume transfers when fetching distfiles? 758 9.4. How to resume transfers when fetching distfiles?
759 9.5. How can I install/use modular X.org from pkgsrc? 759 9.5. How can I install/use modular X.org from pkgsrc?
760 9.6. How to fetch files from behind a firewall 760 9.6. How to fetch files from behind a firewall
761 9.7. How to fetch files from HTTPS sites 761 9.7. How to fetch files from HTTPS sites
762 9.8. How do I tell make fetch to do passive FTP? 762 9.8. How do I tell make fetch to do passive FTP?
763 9.9. How to fetch all distfiles at once 763 9.9. How to fetch all distfiles at once
764 9.10. What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean? 764 9.10. What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean?
765 9.11. What does "Could not find bsd.own.mk" mean? 765 9.11. What does "Could not find bsd.own.mk" mean?
766 9.12. Using 'sudo' with pkgsrc 766 9.12. Using 'sudo' with pkgsrc
767 9.13. How do I change the location of configuration files? 767 9.13. How do I change the location of configuration files?
768 9.14. Automated security checks 768 9.14. Automated security checks
769 9.15. Why do some packages ignore my CFLAGS? 769 9.15. Why do some packages ignore my CFLAGS?
770 9.16. A package does not build. What shall I do? 770 9.16. A package does not build. What shall I do?
771 9.17. What does "Makefile appears to contain unresolved cvs/rcs/??? merge 771 9.17. What does "Makefile appears to contain unresolved cvs/rcs/??? merge
772 conflicts" mean? 772 conflicts" mean?
773 773
774Chapter 2. Where to get pkgsrc and how to keep it up-to-date 774Chapter 2. Where to get pkgsrc and how to keep it up-to-date
775 775
776Table of Contents 776Table of Contents
777 777
7782.1. Getting pkgsrc for the first time 7782.1. Getting pkgsrc for the first time
779 779
780 2.1.1. As tar archive 780 2.1.1. As tar archive
781 2.1.2. Via anonymous CVS 781 2.1.2. Via anonymous CVS
782 782
7832.2. Keeping pkgsrc up-to-date 7832.2. Keeping pkgsrc up-to-date
784 784
785 2.2.1. Via tar files 785 2.2.1. Via tar files
786 2.2.2. Via CVS 786 2.2.2. Via CVS
787 787
788Before you download and extract the files, you need to decide where you want to 788Before you download and extract the files, you need to decide where you want to
789extract them. When using pkgsrc as root user, pkgsrc is usually installed in / 789extract them. When using pkgsrc as root user, pkgsrc is usually installed in /
790usr/pkgsrc. You are though free to install the sources and binary packages 790usr/pkgsrc. You are though free to install the sources and binary packages
791wherever you want in your filesystem, provided that the pathname does not 791wherever you want in your filesystem, provided that the pathname does not
792contain white-space or other characters that are interpreted specially by the 792contain white-space or other characters that are interpreted specially by the
793shell and some other programs. A safe bet is to use only letters, digits, 793shell and some other programs. A safe bet is to use only letters, digits,
794underscores and dashes. 794underscores and dashes.
795 795
7962.1. Getting pkgsrc for the first time 7962.1. Getting pkgsrc for the first time
797 797
798Before you download any pkgsrc files, you should decide whether you want the  798Before you download any pkgsrc files, you should decide whether you want the
799current branch or the stable branch. The latter is forked on a quarterly basis 799current branch or the stable branch. The latter is forked on a quarterly basis
800from the current branch and only gets modified for security updates. The names 800from the current branch and only gets modified for security updates. The names
801of the stable branches are built from the year and the quarter, for example 801of the stable branches are built from the year and the quarter, for example
8022017Q3. 8022018Q1.
803 803
804The second step is to decide how you want to download pkgsrc. You can get it as 804The second step is to decide how you want to download pkgsrc. You can get it as
805a tar file or via CVS. Both ways are described here. 805a tar file or via CVS. Both ways are described here.
806 806
807Note that tar archive contains CVS working copy. Thus you can switch to using 807Note that tar archive contains CVS working copy. Thus you can switch to using
808CVS at any later time. 808CVS at any later time.
809 809
8102.1.1. As tar archive 8102.1.1. As tar archive
811 811
812The primary download location for all pkgsrc files is http://ftp.NetBSD.org/pub 812The primary download location for all pkgsrc files is http://ftp.NetBSD.org/pub
813/pkgsrc/ or ftp://ftp.NetBSD.org/pub/pkgsrc/ (it points to the same location). 813/pkgsrc/ or ftp://ftp.NetBSD.org/pub/pkgsrc/ (it points to the same location).
814There are a number of subdirectories for different purposes, which are 814There are a number of subdirectories for different purposes, which are
815described in detail in Appendix C, Directory layout of the pkgsrc FTP server. 815described in detail in Appendix C, Directory layout of the pkgsrc FTP server.
816 816
817The tar archive for the current branch is in the directory current and is 817The tar archive for the current branch is in the directory current and is
818called pkgsrc.tar.gz. It is autogenerated weekly. 818called pkgsrc.tar.gz. It is autogenerated weekly.
819 819
820To save download time we provide bzip2- and xz-compressed archives which are 820To save download time we provide bzip2- and xz-compressed archives which are
821published at pkgsrc.tar.bz2 and pkgsrc.tar.xz respectively. 821published at pkgsrc.tar.bz2 and pkgsrc.tar.xz respectively.
822 822
823You can fetch the same files using FTP. 823You can fetch the same files using FTP.
824 824
825The tar file for the stable branch 2017Q3 is in the directory pkgsrc-2017Q3 and 825The tar file for the stable branch 2018Q1 is in the directory pkgsrc-2018Q1 and
826is also called pkgsrc.tar.gz. 826is also called pkgsrc.tar.gz.
827 827
828To download the latest pkgsrc stable tarball, run: 828To download the latest pkgsrc stable tarball, run:
829 829
830$ ftp ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-2017Q3/pkgsrc.tar.gz 830$ ftp ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-2018Q1/pkgsrc.tar.gz
831 831
832If you prefer, you can also fetch it using "wget", "curl", or your web browser. 832If you prefer, you can also fetch it using "wget", "curl", or your web browser.
833 833
834Then, extract it with: 834Then, extract it with:
835 835
836$ tar -xzf pkgsrc.tar.gz -C /usr 836$ tar -xzf pkgsrc.tar.gz -C /usr
837 837
838This will create the directory pkgsrc/ in /usr/ and all the package source will 838This will create the directory pkgsrc/ in /usr/ and all the package source will
839be stored under /usr/pkgsrc/. 839be stored under /usr/pkgsrc/.
840 840
841To download pkgsrc-current, run: 841To download pkgsrc-current, run:
842 842
843$ ftp ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz 843$ ftp ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz
844 844
8452.1.2. Via anonymous CVS 8452.1.2. Via anonymous CVS
846 846
847To fetch a specific pkgsrc stable branch, run: 847To fetch a specific pkgsrc stable branch, run:
848 848
849$ cd /usr && cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -r pkgsrc-2017Q3 -P pkgsrc 849$ cd /usr && cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -r pkgsrc-2018Q1 -P pkgsrc
850 850
851This will create the directory pkgsrc/ in your /usr/ directory and all the 851This will create the directory pkgsrc/ in your /usr/ directory and all the
852package source will be stored under /usr/pkgsrc/. 852package source will be stored under /usr/pkgsrc/.
853 853
854To fetch the pkgsrc current branch, run: 854To fetch the pkgsrc current branch, run:
855 855
856$ cd /usr && cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc 856$ cd /usr && cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc
857 857
858Refer to the list of available mirrors to choose a faster CVS mirror, if 858Refer to the list of available mirrors to choose a faster CVS mirror, if
859needed. 859needed.
860 860
861If you get error messages from rsh, you need to set CVS_RSH variable. E.g.: 861If you get error messages from rsh, you need to set CVS_RSH variable. E.g.:
862 862
863$ cd /usr && env CVS_RSH=ssh cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc 863$ cd /usr && env CVS_RSH=ssh cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc
864 864
865Refer to documentation on your command shell how to set CVS_RSH=ssh 865Refer to documentation on your command shell how to set CVS_RSH=ssh
866permanently. For Bourne shells, you can set it in your .profile or better 866permanently. For Bourne shells, you can set it in your .profile or better
867globally in /etc/profile: 867globally in /etc/profile:
868 868
869# set CVS remote shell command 869# set CVS remote shell command
870CVS_RSH=ssh 870CVS_RSH=ssh
871export CVS_RSH 871export CVS_RSH
872 872
873By default, CVS doesn't do things like most people would expect it to do. But 873By default, CVS doesn't do things like most people would expect it to do. But
874there is a way to convince CVS, by creating a file called .cvsrc in your home 874there is a way to convince CVS, by creating a file called .cvsrc in your home
875directory and saving the following lines to it. This file will save you lots of 875directory and saving the following lines to it. This file will save you lots of
876headache and some bug reports, so we strongly recommend it. You can find an 876headache and some bug reports, so we strongly recommend it. You can find an
877explanation of this file in the CVS documentation. 877explanation of this file in the CVS documentation.
878 878
879# recommended CVS configuration file from the pkgsrc guide 879# recommended CVS configuration file from the pkgsrc guide
880cvs -q -z2 880cvs -q -z2
881checkout -P 881checkout -P
882update -dP 882update -dP
883diff -upN 883diff -upN
884rdiff -u 884rdiff -u
885release -d 885release -d
886 886
8872.2. Keeping pkgsrc up-to-date 8872.2. Keeping pkgsrc up-to-date
888 888
889The preferred way to keep pkgsrc up-to-date is via CVS (which also works if you 889The preferred way to keep pkgsrc up-to-date is via CVS (which also works if you
890have first installed it via a tar file). It saves bandwidth and hard disk 890have first installed it via a tar file). It saves bandwidth and hard disk
891activity, compared to downloading the tar file again. 891activity, compared to downloading the tar file again.
892 892
8932.2.1. Via tar files 8932.2.1. Via tar files
894 894
895Warning 895Warning
896 896
897When updating from a tar file, you first need to completely remove the old 897When updating from a tar file, you first need to completely remove the old
898pkgsrc directory. Otherwise those files that have been removed from pkgsrc in 898pkgsrc directory. Otherwise those files that have been removed from pkgsrc in
899the mean time will not be removed on your local disk, resulting in 899the mean time will not be removed on your local disk, resulting in
900inconsistencies. When removing the old files, any changes that you have done to 900inconsistencies. When removing the old files, any changes that you have done to
901the pkgsrc files will be lost after updating. Therefore updating via CVS is 901the pkgsrc files will be lost after updating. Therefore updating via CVS is
902strongly recommended. 902strongly recommended.
903 903
904Note that by default the distfiles and the binary packages are saved in the 904Note that by default the distfiles and the binary packages are saved in the
905pkgsrc tree, so don't forget to rescue them before updating. You can also 905pkgsrc tree, so don't forget to rescue them before updating. You can also
906configure pkgsrc to store distfiles and packages in directories outside the 906configure pkgsrc to store distfiles and packages in directories outside the
907pkgsrc tree by setting the DISTDIR and PACKAGES variables. See Chapter 5,  907pkgsrc tree by setting the DISTDIR and PACKAGES variables. See Chapter 5,
908Configuring pkgsrc for the details. 908Configuring pkgsrc for the details.
909 909
910To update pkgsrc from a tar file, download the tar file as explained above. 910To update pkgsrc from a tar file, download the tar file as explained above.
911Then, make sure that you have not made any changes to the files in the pkgsrc 911Then, make sure that you have not made any changes to the files in the pkgsrc
912directory. Remove the pkgsrc directory and extract the new tar file. Done. 912directory. Remove the pkgsrc directory and extract the new tar file. Done.
913 913
9142.2.2. Via CVS 9142.2.2. Via CVS
915 915
916To update pkgsrc via CVS, change to the pkgsrc directory and run cvs: 916To update pkgsrc via CVS, change to the pkgsrc directory and run cvs:
917 917
918$ cd /usr/pkgsrc && cvs update -dP 918$ cd /usr/pkgsrc && cvs update -dP
919 919
920If you get error messages from rsh, you need to set CVS_RSH variable as 920If you get error messages from rsh, you need to set CVS_RSH variable as
921described above. E.g.: 921described above. E.g.:
922 922
923$ cd /usr/pkgsrc && env CVS_RSH=ssh cvs up -dP 923$ cd /usr/pkgsrc && env CVS_RSH=ssh cvs up -dP
924 924
9252.2.2.1. Switching between different pkgsrc branches 9252.2.2.1. Switching between different pkgsrc branches
926 926
927When updating pkgsrc, the CVS program keeps track of the branch you selected. 927When updating pkgsrc, the CVS program keeps track of the branch you selected.
928But if you, for whatever reason, want to switch from the stable branch to the 928But if you, for whatever reason, want to switch from the stable branch to the
929current one, you can do it by adding the option "-A" after the "update" 929current one, you can do it by adding the option "-A" after the "update"
930keyword. To switch from the current branch back to the stable branch, add the " 930keyword. To switch from the current branch back to the stable branch, add the "
931-rpkgsrc-2017Q3" option. 931-rpkgsrc-2018Q1" option.
932 932
9332.2.2.2. What happens to my changes when updating? 9332.2.2.2. What happens to my changes when updating?
934 934
935When you update pkgsrc, the CVS program will only touch those files that are 935When you update pkgsrc, the CVS program will only touch those files that are
936registered in the CVS repository. That means that any packages that you created 936registered in the CVS repository. That means that any packages that you created
937on your own will stay unmodified. If you change files that are managed by CVS, 937on your own will stay unmodified. If you change files that are managed by CVS,
938later updates will try to merge your changes with those that have been done by 938later updates will try to merge your changes with those that have been done by
939others. See the CVS manual, chapter "update" for details. 939others. See the CVS manual, chapter "update" for details.
940 940
941Chapter 3. Using pkgsrc on systems other than NetBSD 941Chapter 3. Using pkgsrc on systems other than NetBSD
942 942
943Table of Contents 943Table of Contents
944 944
9453.1. Binary distribution 9453.1. Binary distribution
9463.2. Bootstrapping pkgsrc 9463.2. Bootstrapping pkgsrc
947 947
9483.1. Binary distribution 9483.1. Binary distribution
949 949
950See Section 4.1, "Using binary packages". 950See Section 4.1, "Using binary packages".
951 951
9523.2. Bootstrapping pkgsrc 9523.2. Bootstrapping pkgsrc
953 953
954pkgsrc can be bootstrapped for use in two different modes: privileged and 954pkgsrc can be bootstrapped for use in two different modes: privileged and
955unprivileged one. In unprivileged mode in contrast to privileged one all 955unprivileged one. In unprivileged mode in contrast to privileged one all
956programs are installed under one particular user and cannot utilise privileged 956programs are installed under one particular user and cannot utilise privileged
957operations (packages don't create special users and all special file 957operations (packages don't create special users and all special file
958permissions like setuid are ignored). 958permissions like setuid are ignored).
959 959
960Installing the bootstrap kit from source should be as simple as: 960Installing the bootstrap kit from source should be as simple as:
961 961
962# env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc 962# env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc
963# cd pkgsrc/bootstrap 963# cd pkgsrc/bootstrap
964# ./bootstrap 964# ./bootstrap
965 965
966 966
967To bootstrap in unprivileged mode pass "--unprivileged" flag to bootstrap 967To bootstrap in unprivileged mode pass "--unprivileged" flag to bootstrap
968 968
969By default, in privileged mode pkgsrc uses /usr/pkg for prefix where programs 969By default, in privileged mode pkgsrc uses /usr/pkg for prefix where programs
970will be installed in, and /usr/pkg/pkgdb for the package database directory 970will be installed in, and /usr/pkg/pkgdb for the package database directory
971where pkgsrc will do its internal bookkeeping, /var is used as varbase, where 971where pkgsrc will do its internal bookkeeping, /var is used as varbase, where
972packages install their persistent data. In unprivileged mode pkgsrc uses ~/pkg 972packages install their persistent data. In unprivileged mode pkgsrc uses ~/pkg
973for prefix, ~/pkg/pkgdb for the package database, and ~/pkg/var for varbase. 973for prefix, ~/pkg/pkgdb for the package database, and ~/pkg/var for varbase.
974 974
975You can change default layout using command-line arguments. Run "./bootstrap 975You can change default layout using command-line arguments. Run "./bootstrap
976--help" to get details. 976--help" to get details.
977 977
978Note 978Note
979 979
980The bootstrap installs a bmake tool. Use this bmake when building via pkgsrc. 980The bootstrap installs a bmake tool. Use this bmake when building via pkgsrc.
981For examples in this guide, use bmake instead of "make". 981For examples in this guide, use bmake instead of "make".
982 982
983Note 983Note
984 984
985It is possible to bootstrap multiple instances of pkgsrc using non-intersecting 985It is possible to bootstrap multiple instances of pkgsrc using non-intersecting
986directories. Use bmake corresponding to the installation you're working with to 986directories. Use bmake corresponding to the installation you're working with to
987build and install packages. 987build and install packages.
988 988
989Chapter 4. Using pkgsrc 989Chapter 4. Using pkgsrc
990 990
991Table of Contents 991Table of Contents
992 992
9934.1. Using binary packages 9934.1. Using binary packages
994 994
995 4.1.1. Finding binary packages 995 4.1.1. Finding binary packages
996 4.1.2. Installing binary packages 996 4.1.2. Installing binary packages
997 4.1.3. Deinstalling packages 997 4.1.3. Deinstalling packages
998 4.1.4. Getting information about installed packages 998 4.1.4. Getting information about installed packages
999 4.1.5. Checking for security vulnerabilities in installed packages 999 4.1.5. Checking for security vulnerabilities in installed packages
1000 4.1.6. Finding if newer versions of your installed packages are in pkgsrc 1000 4.1.6. Finding if newer versions of your installed packages are in pkgsrc
1001 4.1.7. Other administrative functions 1001 4.1.7. Other administrative functions
1002 1002
10034.2. Building packages from source 10034.2. Building packages from source
1004 1004
1005 4.2.1. Requirements 1005 4.2.1. Requirements
1006 4.2.2. Fetching distfiles 1006 4.2.2. Fetching distfiles
1007 4.2.3. How to build and install 1007 4.2.3. How to build and install
1008 1008
1009Basically, there are two ways of using pkgsrc. The first is to only install the 1009Basically, there are two ways of using pkgsrc. The first is to only install the
1010package tools and to use binary packages that someone else has prepared. This 1010package tools and to use binary packages that someone else has prepared. This
1011is the "pkg" in pkgsrc. The second way is to install the "src" of pkgsrc, too. 1011is the "pkg" in pkgsrc. The second way is to install the "src" of pkgsrc, too.
1012Then you are able to build your own packages, and you can still use binary 1012Then you are able to build your own packages, and you can still use binary
1013packages from someone else. 1013packages from someone else.
1014 1014
10154.1. Using binary packages 10154.1. Using binary packages
1016 1016
1017On the ftp.NetBSD.org server and its mirrors, there are collections of binary 1017On the ftp.NetBSD.org server and its mirrors, there are collections of binary
1018packages, ready to be installed. These binary packages have been built using 1018packages, ready to be installed. These binary packages have been built using
1019the default settings for the directories, that is: 1019the default settings for the directories, that is:
1020 1020
1021 * /usr/pkg for LOCALBASE, where most of the files are installed, 1021 * /usr/pkg for LOCALBASE, where most of the files are installed,
1022 1022
1023 * /usr/pkg/etc for configuration files, 1023 * /usr/pkg/etc for configuration files,
1024 1024
1025 * /var for VARBASE, where those files are installed that may change after 1025 * /var for VARBASE, where those files are installed that may change after
1026 installation. 1026 installation.
1027 1027
1028If you cannot use these directories for whatever reasons (maybe because you're 1028If you cannot use these directories for whatever reasons (maybe because you're
1029not root), you cannot use these binary packages, but have to build the packages 1029not root), you cannot use these binary packages, but have to build the packages
1030yourself, which is explained in Section 3.2, "Bootstrapping pkgsrc". 1030yourself, which is explained in Section 3.2, "Bootstrapping pkgsrc".
1031 1031
10324.1.1. Finding binary packages 10324.1.1. Finding binary packages
1033 1033
1034To install binary packages, you first need to know from where to get them. The 1034To install binary packages, you first need to know from where to get them. The
1035first place where you should look is on the main pkgsrc FTP server in the 1035first place where you should look is on the main pkgsrc FTP server in the
1036directory /pub/pkgsrc/packages. 1036directory /pub/pkgsrc/packages.
1037 1037
1038This directory contains binary packages for multiple platforms. First, select 1038This directory contains binary packages for multiple platforms. First, select
1039your operating system. (Ignore the directories with version numbers attached to 1039your operating system. (Ignore the directories with version numbers attached to
1040it, they just exist for legacy reasons.) Then, select your hardware 1040it, they just exist for legacy reasons.) Then, select your hardware
1041architecture, and in the third step, the OS version and the "version" of 1041architecture, and in the third step, the OS version and the "version" of
1042pkgsrc. 1042pkgsrc.
1043 1043
1044In this directory, you often find a file called bootstrap.tar.gz which contains 1044In this directory, you often find a file called bootstrap.tar.gz which contains
1045the package management tools. If the file is missing, it is likely that your 1045the package management tools. If the file is missing, it is likely that your
1046operating system already provides those tools. Download the file and extract it 1046operating system already provides those tools. Download the file and extract it
1047in the / directory. It will create the directories /usr/pkg (containing the 1047in the / directory. It will create the directories /usr/pkg (containing the
1048tools for managing binary packages and the database of installed packages). 1048tools for managing binary packages and the database of installed packages).
1049 1049
10504.1.2. Installing binary packages 10504.1.2. Installing binary packages
1051 1051
1052In the directory from the last section, there is a subdirectory called All/, 1052In the directory from the last section, there is a subdirectory called All/,
1053which contains all the binary packages that are available for the platform, 1053which contains all the binary packages that are available for the platform,
1054excluding those that may not be distributed via FTP or CDROM (depending on 1054excluding those that may not be distributed via FTP or CDROM (depending on
1055which medium you are using). 1055which medium you are using).
1056 1056
1057To install packages directly from an FTP or HTTP server, run the following 1057To install packages directly from an FTP or HTTP server, run the following
1058commands in a Bourne-compatible shell (be sure to su to root first): 1058commands in a Bourne-compatible shell (be sure to su to root first):
1059 1059
1060# PATH="/usr/pkg/sbin:$PATH" 1060# PATH="/usr/pkg/sbin:$PATH"
1061# PKG_PATH="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/OPSYS/ARCH/VERSIONS/All/" 1061# PKG_PATH="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/OPSYS/ARCH/VERSIONS/All/"
1062# export PATH PKG_PATH 1062# export PATH PKG_PATH
1063 1063
1064Instead of URLs, you can also use local paths, for example if you are 1064Instead of URLs, you can also use local paths, for example if you are
1065installing from a set of CDROMs, DVDs or an NFS-mounted repository. If you want 1065installing from a set of CDROMs, DVDs or an NFS-mounted repository. If you want
1066to install packages from multiple sources, you can separate them by a semicolon 1066to install packages from multiple sources, you can separate them by a semicolon
1067in PKG_PATH. 1067in PKG_PATH.
1068 1068
1069After these preparations, installing a package is very easy: 1069After these preparations, installing a package is very easy:
1070 1070
1071# pkg_add libreoffice 1071# pkg_add libreoffice
1072# pkg_add ap24-php71-* 1072# pkg_add ap24-php71-*
1073 1073
1074Note that any prerequisite packages needed to run the package in question will 1074Note that any prerequisite packages needed to run the package in question will
1075be installed, too, assuming they are present where you install from. 1075be installed, too, assuming they are present where you install from.
1076 1076
1077Adding packages might install vulnerable packages. Thus you should run  1077Adding packages might install vulnerable packages. Thus you should run
1078pkg_admin audit regularly, especially after installing new packages, and verify 1078pkg_admin audit regularly, especially after installing new packages, and verify
1079that the vulnerabilities are acceptable for your configuration. 1079that the vulnerabilities are acceptable for your configuration.
1080 1080
1081After you've installed packages, be sure to have /usr/pkg/bin and /usr/pkg/sbin 1081After you've installed packages, be sure to have /usr/pkg/bin and /usr/pkg/sbin
1082in your PATH so you can actually start the just installed program. 1082in your PATH so you can actually start the just installed program.
1083 1083
10844.1.3. Deinstalling packages 10844.1.3. Deinstalling packages
1085 1085
1086To deinstall a package, it does not matter whether it was installed from source 1086To deinstall a package, it does not matter whether it was installed from source
1087code or from a binary package. The pkg_delete command does not know it anyway. 1087code or from a binary package. The pkg_delete command does not know it anyway.
1088To delete a package, you can just run pkg_delete package-name. The package name 1088To delete a package, you can just run pkg_delete package-name. The package name
1089can be given with or without version number. Wildcards can also be used to 1089can be given with or without version number. Wildcards can also be used to
1090deinstall a set of packages, for example *emacs*. Be sure to include them in 1090deinstall a set of packages, for example *emacs*. Be sure to include them in
1091quotes, so that the shell does not expand them before pkg_delete sees them. 1091quotes, so that the shell does not expand them before pkg_delete sees them.
1092 1092
1093The -r option is very powerful: it removes all the packages that require the 1093The -r option is very powerful: it removes all the packages that require the
1094package in question and then removes the package itself. For example: 1094package in question and then removes the package itself. For example:
1095 1095
1096# pkg_delete -r jpeg 1096# pkg_delete -r jpeg
1097 1097
1098 1098
1099will remove jpeg and all the packages that used it; this allows upgrading the 1099will remove jpeg and all the packages that used it; this allows upgrading the
1100jpeg package. 1100jpeg package.
1101 1101
11024.1.4. Getting information about installed packages 11024.1.4. Getting information about installed packages
1103 1103
1104The pkg_info shows information about installed packages or binary package 1104The pkg_info shows information about installed packages or binary package
1105files. 1105files.
1106 1106
11074.1.5. Checking for security vulnerabilities in installed packages 11074.1.5. Checking for security vulnerabilities in installed packages
1108 1108
1109The NetBSD Security-Officer and Packages Groups maintain a list of known 1109The NetBSD Security-Officer and Packages Groups maintain a list of known
1110security vulnerabilities to packages which are (or have been) included in 1110security vulnerabilities to packages which are (or have been) included in
1111pkgsrc. The list is available from the NetBSD FTP site at ftp://ftp.NetBSD.org/ 1111pkgsrc. The list is available from the NetBSD FTP site at ftp://ftp.NetBSD.org/
1112pub/pkgsrc/distfiles/vulnerabilities. 1112pub/pkgsrc/distfiles/vulnerabilities.
1113 1113
1114Through pkg_admin fetch-pkg-vulnerabilities, this list can be downloaded 1114Through pkg_admin fetch-pkg-vulnerabilities, this list can be downloaded
1115automatically, and a security audit of all packages installed on a system can 1115automatically, and a security audit of all packages installed on a system can
1116take place. 1116take place.
1117 1117
1118There are two components to auditing. The first step, pkg_admin 1118There are two components to auditing. The first step, pkg_admin
1119fetch-pkg-vulnerabilities, is for downloading the list of vulnerabilities from 1119fetch-pkg-vulnerabilities, is for downloading the list of vulnerabilities from
1120the NetBSD FTP site. The second step, pkg_admin audit, checks to see if any of 1120the NetBSD FTP site. The second step, pkg_admin audit, checks to see if any of
1121your installed packages are vulnerable. If a package is vulnerable, you will 1121your installed packages are vulnerable. If a package is vulnerable, you will
1122see output similar to the following: 1122see output similar to the following:
1123 1123
1124Package samba-2.0.9 has a local-root-shell vulnerability, see 1124Package samba-2.0.9 has a local-root-shell vulnerability, see
1125 http://www.samba.org/samba/whatsnew/macroexploit.html 1125 http://www.samba.org/samba/whatsnew/macroexploit.html
1126 1126
1127You may wish to have the vulnerabilities file downloaded daily so that it 1127You may wish to have the vulnerabilities file downloaded daily so that it
1128remains current. This may be done by adding an appropriate entry to the root 1128remains current. This may be done by adding an appropriate entry to the root
1129users crontab(5) entry. For example the entry 1129users crontab(5) entry. For example the entry
1130 1130
1131# Download vulnerabilities file 1131# Download vulnerabilities file
11320 3 * * * /usr/pkg/sbin/pkg_admin fetch-pkg-vulnerabilities >/dev/null 2>&1 11320 3 * * * /usr/pkg/sbin/pkg_admin fetch-pkg-vulnerabilities >/dev/null 2>&1
1133# Audit the installed packages and email results to root 1133# Audit the installed packages and email results to root
11349 3 * * * /usr/pkg/sbin/pkg_admin audit |mail -s "Installed package audit result" \ 11349 3 * * * /usr/pkg/sbin/pkg_admin audit |mail -s "Installed package audit result" \
1135 root >/dev/null 2>&1 1135 root >/dev/null 2>&1
1136 1136
1137 1137
1138will update the vulnerability list every day at 3AM, followed by an audit at 1138will update the vulnerability list every day at 3AM, followed by an audit at
11393:09AM. The result of the audit are then emailed to root. On NetBSD this may be 11393:09AM. The result of the audit are then emailed to root. On NetBSD this may be
1140accomplished instead by adding the following line to /etc/daily.conf: 1140accomplished instead by adding the following line to /etc/daily.conf:
1141 1141
1142fetch_pkg_vulnerabilities=YES 1142fetch_pkg_vulnerabilities=YES
1143 1143
1144 1144
1145to fetch the vulnerability list from the daily security script. The system is 1145to fetch the vulnerability list from the daily security script. The system is
1146set to audit the packages by default but can be set explicitly, if desired (not 1146set to audit the packages by default but can be set explicitly, if desired (not
1147required), by adding the following line to /etc/security.conf: 1147required), by adding the following line to /etc/security.conf:
1148 1148
1149check_pkg_vulnerabilities=YES 1149check_pkg_vulnerabilities=YES
1150 1150
1151 1151
1152see daily.conf(5) and security.conf(5) for more details. 1152see daily.conf(5) and security.conf(5) for more details.
1153 1153
11544.1.6. Finding if newer versions of your installed packages are in pkgsrc 11544.1.6. Finding if newer versions of your installed packages are in pkgsrc
1155 1155
1156Install pkgtools/lintpkgsrc and run lintpkgsrc with the "-i" argument to check 1156Install pkgtools/lintpkgsrc and run lintpkgsrc with the "-i" argument to check
1157if your packages are up-to-date, e.g. 1157if your packages are up-to-date, e.g.
1158 1158
1159% lintpkgsrc -i 1159% lintpkgsrc -i
1160... 1160...
1161Version mismatch: 'tcsh' 6.09.00 vs 6.10.00 1161Version mismatch: 'tcsh' 6.09.00 vs 6.10.00
1162 1162
1163 1163
1164You can then use make update to update the package on your system and rebuild 1164You can then use make update to update the package on your system and rebuild
1165any dependencies. 1165any dependencies.
1166 1166
11674.1.7. Other administrative functions 11674.1.7. Other administrative functions
1168 1168
1169The pkg_admin executes various administrative functions on the package system. 1169The pkg_admin executes various administrative functions on the package system.
1170 1170
11714.2. Building packages from source 11714.2. Building packages from source
1172 1172
1173After obtaining pkgsrc, the pkgsrc directory now contains a set of packages, 1173After obtaining pkgsrc, the pkgsrc directory now contains a set of packages,
1174organized into categories. You can browse the online index of packages, or run  1174organized into categories. You can browse the online index of packages, or run
1175make readme from the pkgsrc directory to build local README.html files for all 1175make readme from the pkgsrc directory to build local README.html files for all
1176packages, viewable with any web browser such as www/lynx or www/firefox. 1176packages, viewable with any web browser such as www/lynx or www/firefox.
1177 1177
1178The default prefix for installed packages is /usr/pkg. If you wish to change 1178The default prefix for installed packages is /usr/pkg. If you wish to change
1179this, you should do so by setting LOCALBASE in mk.conf. You should not try to 1179this, you should do so by setting LOCALBASE in mk.conf. You should not try to
1180use multiple different LOCALBASE definitions on the same system (inside a 1180use multiple different LOCALBASE definitions on the same system (inside a
1181chroot is an exception). 1181chroot is an exception).
1182 1182
1183The rest of this chapter assumes that the package is already in pkgsrc. If it 1183The rest of this chapter assumes that the package is already in pkgsrc. If it
1184is not, see Part II, "The pkgsrc developer's guide" for instructions how to 1184is not, see Part II, "The pkgsrc developer's guide" for instructions how to
1185create your own packages. 1185create your own packages.
1186 1186
11874.2.1. Requirements 11874.2.1. Requirements
1188 1188
1189To build packages from source, you need a working C compiler. On NetBSD, you 1189To build packages from source, you need a working C compiler. On NetBSD, you
1190need to install the "comp" and the "text" distribution sets. If you want to 1190need to install the "comp" and the "text" distribution sets. If you want to
1191build X11-related packages, the "xbase" and "xcomp" distribution sets are 1191build X11-related packages, the "xbase" and "xcomp" distribution sets are
1192required, too. 1192required, too.
1193 1193
11944.2.2. Fetching distfiles 11944.2.2. Fetching distfiles
1195 1195
1196The first step for building a package is downloading the distfiles (i.e. the 1196The first step for building a package is downloading the distfiles (i.e. the
1197unmodified source). If they have not yet been downloaded, pkgsrc will fetch 1197unmodified source). If they have not yet been downloaded, pkgsrc will fetch
1198them automatically. 1198them automatically.
1199 1199
1200If you have all files that you need in the distfiles directory, you don't need 1200If you have all files that you need in the distfiles directory, you don't need
1201to connect. If the distfiles are on CD-ROM, you can mount the CD-ROM on /cdrom 1201to connect. If the distfiles are on CD-ROM, you can mount the CD-ROM on /cdrom
1202and add: 1202and add:
1203 1203
1204DISTDIR=/cdrom/pkgsrc/distfiles 1204DISTDIR=/cdrom/pkgsrc/distfiles
1205 1205
1206to your mk.conf. 1206to your mk.conf.
1207 1207
1208By default a list of distribution sites will be randomly intermixed to prevent 1208By default a list of distribution sites will be randomly intermixed to prevent
1209huge load on servers which holding popular packages (for example, 1209huge load on servers which holding popular packages (for example,
1210SourceForge.net mirrors). Thus, every time when you need to fetch yet another 1210SourceForge.net mirrors). Thus, every time when you need to fetch yet another
1211distfile all the mirrors will be tried in new (random) order. You can turn this 1211distfile all the mirrors will be tried in new (random) order. You can turn this
1212feature off by setting MASTER_SORT_RANDOM=NO (for PKG_DEVELOPERs it's already 1212feature off by setting MASTER_SORT_RANDOM=NO (for PKG_DEVELOPERs it's already
1213disabled). 1213disabled).
1214 1214
1215You can overwrite some of the major distribution sites to fit to sites that are 1215You can overwrite some of the major distribution sites to fit to sites that are
1216close to your own. By setting one or two variables you can modify the order in 1216close to your own. By setting one or two variables you can modify the order in
1217which the master sites are accessed. MASTER_SORT contains a whitespace 1217which the master sites are accessed. MASTER_SORT contains a whitespace
1218delimited list of domain suffixes. MASTER_SORT_REGEX is even more flexible, it 1218delimited list of domain suffixes. MASTER_SORT_REGEX is even more flexible, it
1219contains a whitespace delimited list of regular expressions. It has higher 1219contains a whitespace delimited list of regular expressions. It has higher
1220priority than MASTER_SORT. Have a look at pkgsrc/mk/defaults/mk.conf to find 1220priority than MASTER_SORT. Have a look at pkgsrc/mk/defaults/mk.conf to find
1221some examples. This may save some of your bandwidth and time. 1221some examples. This may save some of your bandwidth and time.
1222 1222
1223You can change these settings either in your shell's environment, or, if you 1223You can change these settings either in your shell's environment, or, if you
1224want to keep the settings, by editing the mk.conf file, and adding the 1224want to keep the settings, by editing the mk.conf file, and adding the
1225definitions there. 1225definitions there.
1226 1226
1227If a package depends on many other packages (such as meta-pkgs/kde4), the build 1227If a package depends on many other packages (such as meta-pkgs/kde4), the build
1228process may alternate between periods of downloading source, and compiling. To 1228process may alternate between periods of downloading source, and compiling. To
1229ensure you have all the source downloaded initially you can run the command: 1229ensure you have all the source downloaded initially you can run the command:
1230 1230
1231% make fetch-list | sh 1231% make fetch-list | sh
1232 1232
1233which will output and run a set of shell commands to fetch the necessary files 1233which will output and run a set of shell commands to fetch the necessary files
1234into the distfiles directory. You can also choose to download the files 1234into the distfiles directory. You can also choose to download the files
1235manually. 1235manually.
1236 1236
12374.2.3. How to build and install 12374.2.3. How to build and install
1238 1238
1239Once the software has downloaded, any patches will be applied, then it will be 1239Once the software has downloaded, any patches will be applied, then it will be
1240compiled for you. This may take some time depending on your computer, and how 1240compiled for you. This may take some time depending on your computer, and how
1241many other packages the software depends on and their compile time. 1241many other packages the software depends on and their compile time.
1242 1242
1243Note 1243Note
1244 1244
1245If using bootstrap or pkgsrc on a non-NetBSD system, use the pkgsrc bmake 1245If using bootstrap or pkgsrc on a non-NetBSD system, use the pkgsrc bmake
1246command instead of "make" in the examples in this guide. 1246command instead of "make" in the examples in this guide.
1247 1247
1248For example, type 1248For example, type
1249 1249
1250% cd misc/figlet 1250% cd misc/figlet
1251% make 1251% make
1252 1252
1253 1253
1254at the shell prompt to build the various components of the package. 1254at the shell prompt to build the various components of the package.
1255 1255
1256The next stage is to actually install the newly compiled program onto your 1256The next stage is to actually install the newly compiled program onto your
1257system. Do this by entering: 1257system. Do this by entering:
1258 1258
1259% make install 1259% make install
1260 1260
1261 1261
1262while you are still in the directory for whatever package you are installing. 1262while you are still in the directory for whatever package you are installing.
1263 1263
1264Installing the package on your system may require you to be root. However, 1264Installing the package on your system may require you to be root. However,
1265pkgsrc has a just-in-time-su feature, which allows you to only become root for 1265pkgsrc has a just-in-time-su feature, which allows you to only become root for
1266the actual installation step. 1266the actual installation step.
1267 1267
1268That's it, the software should now be installed and setup for use. You can now 1268That's it, the software should now be installed and setup for use. You can now
1269enter: 1269enter:
1270 1270
1271% make clean 1271% make clean
1272 1272
1273 1273
1274to remove the compiled files in the work directory, as you shouldn't need them 1274to remove the compiled files in the work directory, as you shouldn't need them
1275any more. If other packages were also added to your system (dependencies) to 1275any more. If other packages were also added to your system (dependencies) to
1276allow your program to compile, you can tidy these up also with the command: 1276allow your program to compile, you can tidy these up also with the command:
1277 1277
1278% make clean-depends 1278% make clean-depends
1279 1279
1280 1280
1281Taking the figlet utility as an example, we can install it on our system by 1281Taking the figlet utility as an example, we can install it on our system by
1282building as shown in Appendix B, Build logs. 1282building as shown in Appendix B, Build logs.
1283 1283
1284The program is installed under the default root of the packages tree - /usr/ 1284The program is installed under the default root of the packages tree - /usr/
1285pkg. Should this not conform to your tastes, set the LOCALBASE variable in your 1285pkg. Should this not conform to your tastes, set the LOCALBASE variable in your
1286environment, and it will use that value as the root of your packages tree. So, 1286environment, and it will use that value as the root of your packages tree. So,
1287to use /usr/local, set LOCALBASE=/usr/local in your environment. Please note 1287to use /usr/local, set LOCALBASE=/usr/local in your environment. Please note
1288that you should use a directory which is dedicated to packages and not shared 1288that you should use a directory which is dedicated to packages and not shared
1289with other programs (i.e., do not try and use LOCALBASE=/usr). Also, you should 1289with other programs (i.e., do not try and use LOCALBASE=/usr). Also, you should
1290not try to add any of your own files or directories (such as src/, obj/, or 1290not try to add any of your own files or directories (such as src/, obj/, or
1291pkgsrc/) below the LOCALBASE tree. This is to prevent possible conflicts 1291pkgsrc/) below the LOCALBASE tree. This is to prevent possible conflicts
1292between programs and other files installed by the package system and whatever 1292between programs and other files installed by the package system and whatever
1293else may have been installed there. 1293else may have been installed there.
1294 1294
1295Some packages look in mk.conf to alter some configuration options at build 1295Some packages look in mk.conf to alter some configuration options at build
1296time. Have a look at pkgsrc/mk/defaults/mk.conf to get an overview of what will 1296time. Have a look at pkgsrc/mk/defaults/mk.conf to get an overview of what will
1297be set there by default. Environment variables such as LOCALBASE can be set in 1297be set there by default. Environment variables such as LOCALBASE can be set in
1298mk.conf to save having to remember to set them each time you want to use 1298mk.conf to save having to remember to set them each time you want to use
1299pkgsrc. 1299pkgsrc.
1300 1300
1301Occasionally, people want to "look under the covers" to see what is going on 1301Occasionally, people want to "look under the covers" to see what is going on
1302when a package is building or being installed. This may be for debugging 1302when a package is building or being installed. This may be for debugging
1303purposes, or out of simple curiosity. A number of utility values have been 1303purposes, or out of simple curiosity. A number of utility values have been
1304added to help with this. 1304added to help with this.
1305 1305
1306 1. If you invoke the make(1) command with PKG_DEBUG_LEVEL=2, then a huge 1306 1. If you invoke the make(1) command with PKG_DEBUG_LEVEL=2, then a huge
1307 amount of information will be displayed. For example, 1307 amount of information will be displayed. For example,
1308 1308
1309 make patch PKG_DEBUG_LEVEL=2 1309 make patch PKG_DEBUG_LEVEL=2
1310 1310
1311 will show all the commands that are invoked, up to and including the "patch 1311 will show all the commands that are invoked, up to and including the "patch
1312 " stage. 1312 " stage.
1313 1313
1314 2. If you want to know the value of a certain make(1) definition, then the 1314 2. If you want to know the value of a certain make(1) definition, then the
1315 VARNAME definition should be used, in conjunction with the show-var target. 1315 VARNAME definition should be used, in conjunction with the show-var target.
1316 e.g. to show the expansion of the make(1) variable LOCALBASE: 1316 e.g. to show the expansion of the make(1) variable LOCALBASE:
1317 1317
1318 % make show-var VARNAME=LOCALBASE 1318 % make show-var VARNAME=LOCALBASE
1319 /usr/pkg 1319 /usr/pkg
1320 % 1320 %
1321 1321
1322 1322
1323If you want to install a binary package that you've either created yourself 1323If you want to install a binary package that you've either created yourself
1324(see next section), that you put into pkgsrc/packages manually or that is 1324(see next section), that you put into pkgsrc/packages manually or that is
1325located on a remote FTP server, you can use the "bin-install" target. This 1325located on a remote FTP server, you can use the "bin-install" target. This
1326target will install a binary package - if available - via pkg_add(1), else do a 1326target will install a binary package - if available - via pkg_add(1), else do a
1327make package. The list of remote FTP sites searched is kept in the variable 1327make package. The list of remote FTP sites searched is kept in the variable
1328BINPKG_SITES, which defaults to ftp.NetBSD.org. Any flags that should be added 1328BINPKG_SITES, which defaults to ftp.NetBSD.org. Any flags that should be added
1329to pkg_add(1) can be put into BIN_INSTALL_FLAGS. See pkgsrc/mk/defaults/mk.conf 1329to pkg_add(1) can be put into BIN_INSTALL_FLAGS. See pkgsrc/mk/defaults/mk.conf
1330for more details. 1330for more details.
1331 1331
1332A final word of warning: If you set up a system that has a non-standard setting 1332A final word of warning: If you set up a system that has a non-standard setting
1333for LOCALBASE, be sure to set that before any packages are installed, as you 1333for LOCALBASE, be sure to set that before any packages are installed, as you
1334cannot use several directories for the same purpose. Doing so will result in 1334cannot use several directories for the same purpose. Doing so will result in
1335pkgsrc not being able to properly detect your installed packages, and fail 1335pkgsrc not being able to properly detect your installed packages, and fail
1336miserably. Note also that precompiled binary packages are usually built with 1336miserably. Note also that precompiled binary packages are usually built with
1337the default LOCALBASE of /usr/pkg, and that you should not install any if you 1337the default LOCALBASE of /usr/pkg, and that you should not install any if you
1338use a non-standard LOCALBASE. 1338use a non-standard LOCALBASE.
1339 1339
1340Chapter 5. Configuring pkgsrc 1340Chapter 5. Configuring pkgsrc
1341 1341
1342Table of Contents 1342Table of Contents
1343 1343
13445.1. General configuration 13445.1. General configuration
13455.2. Variables affecting the build process 13455.2. Variables affecting the build process
13465.3. Variables affecting the installation process 13465.3. Variables affecting the installation process
13475.4. Selecting and configuring the compiler 13475.4. Selecting and configuring the compiler
1348 1348
1349 5.4.1. Selecting the compiler 1349 5.4.1. Selecting the compiler
1350 5.4.2. Additional flags to the compiler (CFLAGS) 1350 5.4.2. Additional flags to the compiler (CFLAGS)
1351 5.4.3. Additional flags to the linker (LDFLAGS) 1351 5.4.3. Additional flags to the linker (LDFLAGS)
1352 1352
13535.5. Developer/advanced settings 13535.5. Developer/advanced settings
13545.6. Selecting Build Options 13545.6. Selecting Build Options
1355 1355
1356The whole pkgsrc system is configured in a single file, usually called mk.conf. 1356The whole pkgsrc system is configured in a single file, usually called mk.conf.
1357In which directory pkgsrc looks for that file depends on the installation. On 1357In which directory pkgsrc looks for that file depends on the installation. On
1358NetBSD, when you use make(1) from the base system, it is in the directory /etc 1358NetBSD, when you use make(1) from the base system, it is in the directory /etc
1359/. In all other cases the default location is ${PREFIX}/etc/, depending on 1359/. In all other cases the default location is ${PREFIX}/etc/, depending on
1360where you told the bootstrap program to install the binary packages. 1360where you told the bootstrap program to install the binary packages.
1361 1361
1362The format of the configuration file is that of the usual BSD-style Makefiles. 1362The format of the configuration file is that of the usual BSD-style Makefiles.
1363The whole pkgsrc configuration is done by setting variables in this file. Note 1363The whole pkgsrc configuration is done by setting variables in this file. Note
1364that you can define all kinds of variables, and no special error checking (for 1364that you can define all kinds of variables, and no special error checking (for
1365example for spelling mistakes) takes place. 1365example for spelling mistakes) takes place.
1366 1366
13675.1. General configuration 13675.1. General configuration
1368 1368
1369The following variables apply to all pkgsrc packages. A complete list of the 1369The following variables apply to all pkgsrc packages. A complete list of the
1370variables that can be configured by the user is available in mk/defaults/ 1370variables that can be configured by the user is available in mk/defaults/
1371mk.conf, together with some comments that describe each variable's intent. 1371mk.conf, together with some comments that describe each variable's intent.
1372 1372
1373 * LOCALBASE: Where packages will be installed. The default is /usr/pkg. Do 1373 * LOCALBASE: Where packages will be installed. The default is /usr/pkg. Do
1374 not mix binary packages with different LOCALBASEs! 1374 not mix binary packages with different LOCALBASEs!
1375 1375
1376 * CROSSBASE: Where "cross" category packages will be installed. The default 1376 * CROSSBASE: Where "cross" category packages will be installed. The default
1377 is ${LOCALBASE}/cross. 1377 is ${LOCALBASE}/cross.
1378 1378
1379 * X11BASE: Where X11 is installed on the system. The default is /usr/X11R7. 1379 * X11BASE: Where X11 is installed on the system. The default is /usr/X11R7.
1380 1380
1381 * DISTDIR: Where to store the downloaded copies of the original source 1381 * DISTDIR: Where to store the downloaded copies of the original source
1382 distributions used for building pkgsrc packages. The default is $ 1382 distributions used for building pkgsrc packages. The default is $
1383 {PKGSRCDIR}/distfiles. 1383 {PKGSRCDIR}/distfiles.
1384 1384
1385 * PKG_DBDIR: Where the database about installed packages is stored. The 1385 * PKG_DBDIR: Where the database about installed packages is stored. The
1386 default is /usr/pkg/pkgdb. 1386 default is /usr/pkg/pkgdb.
1387 1387
1388 * MASTER_SITE_OVERRIDE: If set, override the packages' MASTER_SITES with this 1388 * MASTER_SITE_OVERRIDE: If set, override the packages' MASTER_SITES with this
1389 value. 1389 value.
1390 1390
1391 * MASTER_SITE_BACKUP: Backup location(s) for distribution files and patch 1391 * MASTER_SITE_BACKUP: Backup location(s) for distribution files and patch
1392 files if not found locally or in ${MASTER_SITES} or ${PATCH_SITES} 1392 files if not found locally or in ${MASTER_SITES} or ${PATCH_SITES}
1393 respectively. The defaults is ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/$ 1393 respectively. The defaults is ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/$
1394 {DIST_SUBDIR}/. 1394 {DIST_SUBDIR}/.
1395 1395
1396 * BINPKG_SITES: List of sites carrying binary pkgs. rel and arch are replaced 1396 * BINPKG_SITES: List of sites carrying binary pkgs. rel and arch are replaced
1397 with OS release ("2.0", etc.) and architecture ("mipsel", etc.). 1397 with OS release ("2.0", etc.) and architecture ("mipsel", etc.).
1398 1398
1399 * ACCEPTABLE_LICENSES: List of acceptable licenses. License names are 1399 * ACCEPTABLE_LICENSES: List of acceptable licenses. License names are
1400 case-sensitive. Whenever you try to build a package whose license is not in 1400 case-sensitive. Whenever you try to build a package whose license is not in
1401 this list, you will get an error message. If the license condition is 1401 this list, you will get an error message. If the license condition is
1402 simple enough, the error message will include specific instructions on how 1402 simple enough, the error message will include specific instructions on how
1403 to change this variable. 1403 to change this variable.
1404 1404
14055.2. Variables affecting the build process 14055.2. Variables affecting the build process
1406 1406
1407 * PACKAGES: The top level directory for the binary packages. The default is $ 1407 * PACKAGES: The top level directory for the binary packages. The default is $
1408 {PKGSRCDIR}/packages. 1408 {PKGSRCDIR}/packages.
1409 1409
1410 * WRKOBJDIR: The top level directory where, if defined, the separate working 1410 * WRKOBJDIR: The top level directory where, if defined, the separate working
1411 directories will get created, and symbolically linked to from ${WRKDIR} 1411 directories will get created, and symbolically linked to from ${WRKDIR}
1412 (see below). This is useful for building packages on several architectures, 1412 (see below). This is useful for building packages on several architectures,
1413 then ${PKGSRCDIR} can be NFS-mounted while ${WRKOBJDIR} is local to every 1413 then ${PKGSRCDIR} can be NFS-mounted while ${WRKOBJDIR} is local to every
1414 architecture. (It should be noted that PKGSRCDIR should not be set by the 1414 architecture. (It should be noted that PKGSRCDIR should not be set by the
1415 user ? it is an internal definition which refers to the root of the pkgsrc 1415 user ? it is an internal definition which refers to the root of the pkgsrc
1416 tree. It is possible to have many pkgsrc tree instances.) 1416 tree. It is possible to have many pkgsrc tree instances.)
1417 1417
1418 * LOCALPATCHES: Directory for local patches that aren't part of pkgsrc. See 1418 * LOCALPATCHES: Directory for local patches that aren't part of pkgsrc. See
1419 Section 11.3, "patches/*" for more information. 1419 Section 11.3, "patches/*" for more information.
1420 1420
1421 * PKGMAKECONF: Location of the mk.conf file used by a package's BSD-style 1421 * PKGMAKECONF: Location of the mk.conf file used by a package's BSD-style
1422 Makefile. If this is not set, MAKECONF is set to /dev/null to avoid picking 1422 Makefile. If this is not set, MAKECONF is set to /dev/null to avoid picking
1423 up settings used by builds in /usr/src. 1423 up settings used by builds in /usr/src.
1424 1424
1425 * DEPENDS_TARGET: By default, dependencies are only installed, and no binary 1425 * DEPENDS_TARGET: By default, dependencies are only installed, and no binary
1426 package is created for them. You can set this variable to package-install 1426 package is created for them. You can set this variable to package-install
1427 to automatically create binary packages after installing dependencies. 1427 to automatically create binary packages after installing dependencies.
1428 Please note that the PKGSRC_KEEP_BIN_PKGS can be set to yes to preserve 1428 Please note that the PKGSRC_KEEP_BIN_PKGS can be set to yes to preserve
1429 binary packages when using the install as well. 1429 binary packages when using the install as well.
1430 1430
14315.3. Variables affecting the installation process 14315.3. Variables affecting the installation process
1432 1432
1433Packages have to support installation into a subdirectory of WRKDIR. This 1433Packages have to support installation into a subdirectory of WRKDIR. This
1434allows a package to be built, before the actual filesystem is touched. DESTDIR 1434allows a package to be built, before the actual filesystem is touched. DESTDIR
1435support exists in two variations: 1435support exists in two variations:
1436 1436
1437 * Basic DESTDIR support means that the package installation and packaging is 1437 * Basic DESTDIR support means that the package installation and packaging is
1438 still run as root. 1438 still run as root.
1439 1439
1440 * Full DESTDIR support can run the complete build, installation and packaging 1440 * Full DESTDIR support can run the complete build, installation and packaging
1441 as normal user. Root privileges are only needed to add packages. 1441 as normal user. Root privileges are only needed to add packages.
1442 1442
1443With basic DESTDIR support, make clean needs to be run as root. 1443With basic DESTDIR support, make clean needs to be run as root.
1444 1444
1445Considering the foo/bar package, DESTDIR full support can be tested using the 1445Considering the foo/bar package, DESTDIR full support can be tested using the
1446following commands 1446following commands
1447 1447
1448$ id 1448$ id
1449uid=1000(myusername) gid=100(users) groups=100(users),0(wheel) 1449uid=1000(myusername) gid=100(users) groups=100(users),0(wheel)
1450$ mkdir $HOME/packages 1450$ mkdir $HOME/packages
1451$ cd $PKGSRCDIR/foo/bar 1451$ cd $PKGSRCDIR/foo/bar
1452 1452
1453Verify DESTDIR full support, no root privileges should be needed 1453Verify DESTDIR full support, no root privileges should be needed
1454 1454
1455$ make stage-install 1455$ make stage-install
1456 1456
1457Create a package without root privileges 1457Create a package without root privileges
1458 1458
1459$ make PACKAGES=$HOME/packages package 1459$ make PACKAGES=$HOME/packages package
1460 1460
1461For the following command, you must be able to gain root privileges using su(1) 1461For the following command, you must be able to gain root privileges using su(1)
1462 1462
1463$ make PACKAGES=$HOME/packages install 1463$ make PACKAGES=$HOME/packages install
1464 1464
1465Then, as a simple user 1465Then, as a simple user
1466 1466
1467$ make clean 1467$ make clean
1468 1468
14695.4. Selecting and configuring the compiler 14695.4. Selecting and configuring the compiler
1470 1470
14715.4.1. Selecting the compiler 14715.4.1. Selecting the compiler
1472 1472
1473By default, pkgsrc will use GCC to build packages. This may be overridden by 1473By default, pkgsrc will use GCC to build packages. This may be overridden by
1474setting the following variables in /etc/mk.conf: 1474setting the following variables in /etc/mk.conf:
1475 1475
1476PKGSRC_COMPILER: 1476PKGSRC_COMPILER:
1477 1477
1478 This is a list of values specifying the chain of compilers to invoke when 1478 This is a list of values specifying the chain of compilers to invoke when
1479 building packages. Valid values are: 1479 building packages. Valid values are:
1480 1480
1481 + ccc: Compaq C Compilers (Tru64) 1481 + ccc: Compaq C Compilers (Tru64)
1482 1482
1483 + ccache: compiler cache (chainable) 1483 + ccache: compiler cache (chainable)
1484 1484
1485 + clang: Clang C and Objective-C compiler 1485 + clang: Clang C and Objective-C compiler
1486 1486
1487 + distcc: distributed C/C++ (chainable) 1487 + distcc: distributed C/C++ (chainable)
1488 1488
1489 + f2c: Fortran 77 to C compiler (chainable) 1489 + f2c: Fortran 77 to C compiler (chainable)
1490 1490
1491 + icc: Intel C++ Compiler (Linux) 1491 + icc: Intel C++ Compiler (Linux)
1492 1492
1493 + ido: SGI IRIS Development Option cc (IRIX 5) 1493 + ido: SGI IRIS Development Option cc (IRIX 5)
1494 1494
1495 + gcc: GNU C/C++ Compiler 1495 + gcc: GNU C/C++ Compiler
1496 1496
1497 + hp: HP-UX C/aC++ compilers 1497 + hp: HP-UX C/aC++ compilers
1498 1498
1499 + mipspro: Silicon Graphics, Inc. MIPSpro (n32/n64) 1499 + mipspro: Silicon Graphics, Inc. MIPSpro (n32/n64)
1500 1500
1501 + mipspro-ucode: Silicon Graphics, Inc. MIPSpro (o32) 1501 + mipspro-ucode: Silicon Graphics, Inc. MIPSpro (o32)
1502 1502
1503 + sunpro: Sun Microsystems, Inc. WorkShip/Forte/Sun ONE Studio 1503 + sunpro: Sun Microsystems, Inc. WorkShip/Forte/Sun ONE Studio
1504 1504
1505 + xlc: IBM's XL C/C++ compiler suite 1505 + xlc: IBM's XL C/C++ compiler suite
1506 1506
1507 The default is "gcc". You can use ccache and/or distcc with an appropriate 1507 The default is "gcc". You can use ccache and/or distcc with an appropriate
1508 PKGSRC_COMPILER setting, e.g. "ccache gcc". This variable should always be 1508 PKGSRC_COMPILER setting, e.g. "ccache gcc". This variable should always be
1509 terminated with a value for a real compiler. Note that only one real 1509 terminated with a value for a real compiler. Note that only one real
1510 compiler should be listed (e.g. "sunpro gcc" is not allowed). 1510 compiler should be listed (e.g. "sunpro gcc" is not allowed).
1511 1511
1512GCC_REQD: 1512GCC_REQD:
1513 1513
1514 This specifies the minimum version of GCC to use when building packages. If 1514 This specifies the minimum version of GCC to use when building packages. If
1515 the system GCC doesn't satisfy this requirement, then pkgsrc will build and 1515 the system GCC doesn't satisfy this requirement, then pkgsrc will build and
1516 install one of the GCC packages to use instead. 1516 install one of the GCC packages to use instead.
1517 1517
1518PYTHON_DEFAULT_VERSION: 1518PYTHON_DEFAULT_VERSION:
1519 1519
1520 Specifies which version of python to use when several options are 1520 Specifies which version of python to use when several options are
1521 available. 1521 available.
1522 1522
1523PKGSRC_FORTRAN: 1523PKGSRC_FORTRAN:
1524 1524
1525 Specifies the fortran compiler to use. The default is g95, and gfortran is 1525 Specifies the fortran compiler to use. The default is g95, and gfortran is
1526 an alternative. 1526 an alternative.
1527 1527
1528GFORTRAN_VERSION: 1528GFORTRAN_VERSION:
1529 1529
1530 If PKGSRC_FORTRAN= gfortran is used, this option specifies which version to 1530 If PKGSRC_FORTRAN= gfortran is used, this option specifies which version to
1531 use. 1531 use.
1532 1532
15335.4.2. Additional flags to the compiler (CFLAGS) 15335.4.2. Additional flags to the compiler (CFLAGS)
1534 1534
1535If you wish to set the CFLAGS variable, please make sure to use the += operator 1535If you wish to set the CFLAGS variable, please make sure to use the += operator
1536instead of the = operator: 1536instead of the = operator:
1537 1537
1538CFLAGS+= -your -flags 1538CFLAGS+= -your -flags
1539 1539
1540Using CFLAGS= (i.e. without the "+") may lead to problems with packages that 1540Using CFLAGS= (i.e. without the "+") may lead to problems with packages that
1541need to add their own flags. You may want to take a look at the devel/cpuflags 1541need to add their own flags. You may want to take a look at the devel/cpuflags
1542package if you're interested in optimization specifically for the current CPU. 1542package if you're interested in optimization specifically for the current CPU.
1543 1543
15445.4.3. Additional flags to the linker (LDFLAGS) 15445.4.3. Additional flags to the linker (LDFLAGS)
1545 1545
1546If you want to pass flags to the linker, both in the configure step and the 1546If you want to pass flags to the linker, both in the configure step and the
1547build step, you can do this in two ways. Either set LDFLAGS or LIBS. The 1547build step, you can do this in two ways. Either set LDFLAGS or LIBS. The
1548difference between the two is that LIBS will be appended to the command line, 1548difference between the two is that LIBS will be appended to the command line,
1549while LDFLAGS come earlier. LDFLAGS is pre-loaded with rpath settings for ELF 1549while LDFLAGS come earlier. LDFLAGS is pre-loaded with rpath settings for ELF
1550machines depending on the setting of USE_IMAKE or the inclusion of mk/ 1550machines depending on the setting of USE_IMAKE or the inclusion of mk/
1551x11.buildlink3.mk. As with CFLAGS, if you do not wish to override these 1551x11.buildlink3.mk. As with CFLAGS, if you do not wish to override these
1552settings, use the += operator: 1552settings, use the += operator:
1553 1553
1554LDFLAGS+= -your -linkerflags 1554LDFLAGS+= -your -linkerflags
1555 1555
15565.5. Developer/advanced settings 15565.5. Developer/advanced settings
1557 1557
1558 * PKG_DEVELOPER: Run some sanity checks that package developers want: 1558 * PKG_DEVELOPER: Run some sanity checks that package developers want:
1559 1559
1560 + make sure patches apply with zero fuzz 1560 + make sure patches apply with zero fuzz
1561 1561
1562 + run check-shlibs to see that all binaries will find their shared libs. 1562 + run check-shlibs to see that all binaries will find their shared libs.
1563 1563
1564 * PKG_DEBUG_LEVEL: The level of debugging output which is displayed whilst 1564 * PKG_DEBUG_LEVEL: The level of debugging output which is displayed whilst
1565 making and installing the package. The default value for this is 0, which 1565 making and installing the package. The default value for this is 0, which
1566 will not display the commands as they are executed (normal, default, quiet 1566 will not display the commands as they are executed (normal, default, quiet
1567 operation); the value 1 will display all shell commands before their 1567 operation); the value 1 will display all shell commands before their
1568 invocation, and the value 2 will display both the shell commands before 1568 invocation, and the value 2 will display both the shell commands before
1569 their invocation, as well as their actual execution progress with set -x. 1569 their invocation, as well as their actual execution progress with set -x.
1570 1570
15715.6. Selecting Build Options 15715.6. Selecting Build Options
1572 1572
1573Some packages have build time options, usually to select between different 1573Some packages have build time options, usually to select between different
1574dependencies, enable optional support for big dependencies or enable 1574dependencies, enable optional support for big dependencies or enable
1575experimental features. 1575experimental features.
1576 1576
1577To see which options, if any, a package supports, and which options are 1577To see which options, if any, a package supports, and which options are
1578mutually exclusive, run make show-options, for example: 1578mutually exclusive, run make show-options, for example:
1579 1579
1580 The following options are supported by this package: 1580 The following options are supported by this package:
1581 ssl Enable SSL support. 1581 ssl Enable SSL support.
1582 Exactly one of the following gecko options is required: 1582 Exactly one of the following gecko options is required:
1583 firefox Use firefox as gecko rendering engine. 1583 firefox Use firefox as gecko rendering engine.
1584 mozilla Use mozilla as gecko rendering engine. 1584 mozilla Use mozilla as gecko rendering engine.
1585 At most one of the following database options may be selected: 1585 At most one of the following database options may be selected:
1586 mysql Enable support for MySQL database. 1586 mysql Enable support for MySQL database.
1587 pgsql Enable support for PostgreSQL database. 1587 pgsql Enable support for PostgreSQL database.
1588 1588
1589 These options are enabled by default: firefox 1589 These options are enabled by default: firefox
1590 These options are currently enabled: mozilla ssl 1590 These options are currently enabled: mozilla ssl
1591 1591
1592The following variables can be defined in mk.conf to select which options to 1592The following variables can be defined in mk.conf to select which options to
1593enable for a package: PKG_DEFAULT_OPTIONS, which can be used to select or 1593enable for a package: PKG_DEFAULT_OPTIONS, which can be used to select or
1594disable options for all packages that support them, and PKG_OPTIONS.pkgbase, 1594disable options for all packages that support them, and PKG_OPTIONS.pkgbase,
1595which can be used to select or disable options specifically for package pkgbase 1595which can be used to select or disable options specifically for package pkgbase
1596. Options listed in these variables are selected, options preceded by "-" are 1596. Options listed in these variables are selected, options preceded by "-" are
1597disabled. A few examples: 1597disabled. A few examples:
1598 1598
1599$ grep "PKG.*OPTION" mk.conf 1599$ grep "PKG.*OPTION" mk.conf
1600PKG_DEFAULT_OPTIONS= -arts -dvdread -esound 1600PKG_DEFAULT_OPTIONS= -arts -dvdread -esound
1601PKG_OPTIONS.kdebase= debug -sasl 1601PKG_OPTIONS.kdebase= debug -sasl
1602PKG_OPTIONS.apache= suexec 1602PKG_OPTIONS.apache= suexec
1603 1603
1604It is important to note that options that were specifically suggested by the 1604It is important to note that options that were specifically suggested by the
1605package maintainer must be explicitly removed if you do not wish to include the 1605package maintainer must be explicitly removed if you do not wish to include the
1606option. If you are unsure you can view the current state with make show-options 1606option. If you are unsure you can view the current state with make show-options
1607. 1607.
1608 1608
1609The following settings are consulted in the order given, and the last setting 1609The following settings are consulted in the order given, and the last setting
1610that selects or disables an option is used: 1610that selects or disables an option is used:
1611 1611
1612 1. the default options as suggested by the package maintainer 1612 1. the default options as suggested by the package maintainer
1613 1613
1614 2. the options implied by the settings of legacy variables (see below) 1614 2. the options implied by the settings of legacy variables (see below)
1615 1615
1616 3. PKG_DEFAULT_OPTIONS 1616 3. PKG_DEFAULT_OPTIONS
1617 1617
1618 4. PKG_OPTIONS.pkgbase 1618 4. PKG_OPTIONS.pkgbase
1619 1619
1620For groups of mutually exclusive options, the last option selected is used, all 1620For groups of mutually exclusive options, the last option selected is used, all
1621others are automatically disabled. If an option of the group is explicitly 1621others are automatically disabled. If an option of the group is explicitly
1622disabled, the previously selected option, if any, is used. It is an error if no 1622disabled, the previously selected option, if any, is used. It is an error if no
1623option from a required group of options is selected, and building the package 1623option from a required group of options is selected, and building the package
1624will fail. 1624will fail.
1625 1625
1626Before the options framework was introduced, build options were selected by 1626Before the options framework was introduced, build options were selected by
1627setting a variable (often named USE_FOO) in mk.conf for each option. To ease 1627setting a variable (often named USE_FOO) in mk.conf for each option. To ease
1628transition to the options framework for the user, these legacy variables are 1628transition to the options framework for the user, these legacy variables are
1629converted to the appropriate options setting (PKG_OPTIONS.pkgbase) 1629converted to the appropriate options setting (PKG_OPTIONS.pkgbase)
1630automatically. A warning is issued to prompt the user to update mk.conf to use 1630automatically. A warning is issued to prompt the user to update mk.conf to use
1631the options framework directly. Support for the legacy variables will be 1631the options framework directly. Support for the legacy variables will be
1632removed eventually. 1632removed eventually.
1633 1633
1634Chapter 6. Creating binary packages 1634Chapter 6. Creating binary packages
1635 1635
1636Table of Contents 1636Table of Contents
1637 1637
16386.1. Building a single binary package 16386.1. Building a single binary package
16396.2. Settings for creation of binary packages 16396.2. Settings for creation of binary packages
1640 1640
16416.1. Building a single binary package 16416.1. Building a single binary package
1642 1642
1643Once you have built and installed a package, you can create a binary package 1643Once you have built and installed a package, you can create a binary package
1644which can be installed on another system with pkg_add(1). This saves having to 1644which can be installed on another system with pkg_add(1). This saves having to
1645build the same package on a group of hosts and wasting CPU time. It also 1645build the same package on a group of hosts and wasting CPU time. It also
1646provides a simple means for others to install your package, should you 1646provides a simple means for others to install your package, should you
1647distribute it. 1647distribute it.
1648 1648
1649To create a binary package, change into the appropriate directory in pkgsrc, 1649To create a binary package, change into the appropriate directory in pkgsrc,
1650and run make package: 1650and run make package:
1651 1651
1652$ cd misc/figlet 1652$ cd misc/figlet
1653$ make package 1653$ make package
1654 1654
1655This will build and install your package (if not already done), and then build 1655This will build and install your package (if not already done), and then build
1656a binary package from what was installed. You can then use the pkg_* tools to 1656a binary package from what was installed. You can then use the pkg_* tools to
1657manipulate it. Binary packages are created by default in /usr/pkgsrc/packages, 1657manipulate it. Binary packages are created by default in /usr/pkgsrc/packages,
1658in the form of a gzipped tar file. See Section B.2, "Packaging figlet" for a 1658in the form of a gzipped tar file. See Section B.2, "Packaging figlet" for a
1659continuation of the above misc/figlet example. 1659continuation of the above misc/figlet example.
1660 1660
1661See Chapter 21, Submitting and Committing for information on how to submit such 1661See Chapter 21, Submitting and Committing for information on how to submit such
1662a binary package. 1662a binary package.
1663 1663
16646.2. Settings for creation of binary packages 16646.2. Settings for creation of binary packages
1665 1665
1666See Section 17.17, "Other helpful targets". 1666See Section 17.17, "Other helpful targets".
1667 1667
1668Chapter 7. Creating binary packages for everything in pkgsrc (bulk builds) 1668Chapter 7. Creating binary packages for everything in pkgsrc (bulk builds)
1669 1669
1670Table of Contents 1670Table of Contents
1671 1671
16727.1. Preparations 16727.1. Preparations
16737.2. Running a pbulk-style bulk build 16737.2. Running a pbulk-style bulk build
1674 1674
1675 7.2.1. Configuration 1675 7.2.1. Configuration
1676 1676
16777.3. Requirements of a full bulk build 16777.3. Requirements of a full bulk build
16787.4. Creating a multiple CD-ROM packages collection 16787.4. Creating a multiple CD-ROM packages collection
1679 1679
1680 7.4.1. Example of cdpack 1680 7.4.1. Example of cdpack
1681 1681
1682For a number of reasons you may want to build binary packages for a large 1682For a number of reasons you may want to build binary packages for a large
1683selected set of packages in pkgsrc or even for all pkgsrc packages. For 1683selected set of packages in pkgsrc or even for all pkgsrc packages. For
1684instance, when you have multiple machines that should run the same software, it 1684instance, when you have multiple machines that should run the same software, it
1685is wasted time if they all build their packages themselves from source. Or you 1685is wasted time if they all build their packages themselves from source. Or you
1686may want to build a list of packages you want and check them before deploying 1686may want to build a list of packages you want and check them before deploying
1687onto production system. There is a way of getting a set of binary packages: The 1687onto production system. There is a way of getting a set of binary packages: The
1688bulk build system, or pbulk ("p" stands for "parallel"). This chapter describes 1688bulk build system, or pbulk ("p" stands for "parallel"). This chapter describes
1689how to set it up. 1689how to set it up.
1690 1690
16917.1. Preparations 16917.1. Preparations
1692 1692
1693First of all, you have to decide whether you build all packages or a limited 1693First of all, you have to decide whether you build all packages or a limited
1694set of them. Full bulk builds usually consume a lot more resources, both space 1694set of them. Full bulk builds usually consume a lot more resources, both space
1695and time, than builds for some practical sets of packages. There exists a 1695and time, than builds for some practical sets of packages. There exists a
1696number of particularly heavy packages that are not actually interesting to a 1696number of particularly heavy packages that are not actually interesting to a
1697wide audience. For a limited bulk builds you need to make a list of packages 1697wide audience. For a limited bulk builds you need to make a list of packages
1698you want to build. Note that all their dependencies will be built, so you don't 1698you want to build. Note that all their dependencies will be built, so you don't
1699need to track them manually. 1699need to track them manually.
1700 1700
1701During bulk builds various packages are installed and deinstalled in /usr/pkg 1701During bulk builds various packages are installed and deinstalled in /usr/pkg
1702(or whatever LOCALBASE is), so make sure that you don't need any package during 1702(or whatever LOCALBASE is), so make sure that you don't need any package during
1703the builds. Essentially, you should provide a fresh system, either a chroot 1703the builds. Essentially, you should provide a fresh system, either a chroot
1704environment or something even more restrictive, depending on what the operating 1704environment or something even more restrictive, depending on what the operating
1705system provides, or dedicate the whole physical machine. As a useful side 1705system provides, or dedicate the whole physical machine. As a useful side
1706effect this makes sure that bulk builds cannot break anything in your system. 1706effect this makes sure that bulk builds cannot break anything in your system.
1707There have been numerous cases where certain packages tried to install files 1707There have been numerous cases where certain packages tried to install files
1708outside the LOCALBASE or wanted to edit some files in /etc. 1708outside the LOCALBASE or wanted to edit some files in /etc.
1709 1709
17107.2. Running a pbulk-style bulk build 17107.2. Running a pbulk-style bulk build
1711 1711
1712Running a pbulk-style bulk build works roughly as follows: 1712Running a pbulk-style bulk build works roughly as follows:
1713 1713
1714 * First, build the pbulk infrastructure in a fresh pkgsrc location. 1714 * First, build the pbulk infrastructure in a fresh pkgsrc location.
1715 1715
1716 * Then, build each of the packages from a clean installation directory using 1716 * Then, build each of the packages from a clean installation directory using
1717 the infrastructure. 1717 the infrastructure.
1718 1718
17197.2.1. Configuration 17197.2.1. Configuration
1720 1720
1721To simplify configuration, we provide the helper script mk/pbulk/pbulk.sh. 1721To simplify configuration, we provide the helper script mk/pbulk/pbulk.sh.
1722 1722
1723In order to use it, prepare a clear system (real one, chroot environment, jail, 1723In order to use it, prepare a clear system (real one, chroot environment, jail,
1724zone, virtual machine). Configure network access to fetch distribution files. 1724zone, virtual machine). Configure network access to fetch distribution files.
1725Create a user with name "pbulk". 1725Create a user with name "pbulk".
1726 1726
1727Fetch and extract pkgsrc. Use a command like one of these: 1727Fetch and extract pkgsrc. Use a command like one of these:
1728 1728
1729# (cd /usr && ftp -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-) 1729# (cd /usr && ftp -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-)
1730# (cd /usr && fetch -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-) 1730# (cd /usr && fetch -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-)
1731# (cd /usr && cvs -Q -z3 -d anoncvs@anoncvs.NetBSD.org:/cvsroot get -P pkgsrc) 1731# (cd /usr && cvs -Q -z3 -d anoncvs@anoncvs.NetBSD.org:/cvsroot get -P pkgsrc)
1732 1732
1733Or any other way that fits (e.g., curl, wget). 1733Or any other way that fits (e.g., curl, wget).
1734 1734
1735Deploy and configure pbulk tools, e.g.: 1735Deploy and configure pbulk tools, e.g.:
1736 1736
1737# sh pbulk.sh -n # use native make, no bootstrap kit needed (for use on NetBSD) 1737# sh pbulk.sh -n # use native make, no bootstrap kit needed (for use on NetBSD)
1738# sh pbulk.sh -n -c mk.conf.frag # native, apply settings from given mk.conf fragment 1738# sh pbulk.sh -n -c mk.conf.frag # native, apply settings from given mk.conf fragment
1739# sh pbulk.sh -nlc mk.conf.frag # native, apply settings, configure for limited build 1739# sh pbulk.sh -nlc mk.conf.frag # native, apply settings, configure for limited build
1740 1740
1741Note 1741Note
1742 1742
1743mk.conf.frag is a fragment of mk.conf that contains settings you want to apply 1743mk.conf.frag is a fragment of mk.conf that contains settings you want to apply
1744to packages you build. For instance, 1744to packages you build. For instance,
1745 1745
1746PKG_DEVELOPER= yes # perform more checks 1746PKG_DEVELOPER= yes # perform more checks
1747X11_TYPE= modular # use pkgsrc X11 1747X11_TYPE= modular # use pkgsrc X11
1748SKIP_LICENSE_CHECK= yes # accept all licences (useful 1748SKIP_LICENSE_CHECK= yes # accept all licences (useful
1749 # when building all packages) 1749 # when building all packages)
1750 1750
1751If configured for limited list, replace the list in /usr/pbulk/etc/pbulk.list 1751If configured for limited list, replace the list in /usr/pbulk/etc/pbulk.list
1752with your list of packages, one per line without empty lines or comments. E.g.: 1752with your list of packages, one per line without empty lines or comments. E.g.:
1753 1753
1754www/firefox 1754www/firefox
1755mail/thunderbird 1755mail/thunderbird
1756misc/libreoffice4 1756misc/libreoffice4
1757 1757
1758At this point you can also review configuration in /usr/pbulk/etc and make 1758At this point you can also review configuration in /usr/pbulk/etc and make
1759final amendments, if wanted. 1759final amendments, if wanted.
1760 1760
1761Start it: 1761Start it:
1762 1762
1763# /usr/pbulk/bin/bulkbuild 1763# /usr/pbulk/bin/bulkbuild
1764 1764
1765After it finishes, you'll have /mnt filled with distribution files, binary 1765After it finishes, you'll have /mnt filled with distribution files, binary
1766packages, and reports, plain text summary in /mnt/bulklog/meta/report.txt 1766packages, and reports, plain text summary in /mnt/bulklog/meta/report.txt
1767 1767
1768Note 1768Note
1769 1769
1770The pbulk.sh script does not cover all possible use cases. While being ready to 1770The pbulk.sh script does not cover all possible use cases. While being ready to
1771run, it serves as a good starting point to understand and build more complex 1771run, it serves as a good starting point to understand and build more complex
1772setups. The script is kept small enough for better understanding. 1772setups. The script is kept small enough for better understanding.
1773 1773
1774Note 1774Note
1775 1775
1776The pbulk.sh script supports running unprivileged bulk build and helps 1776The pbulk.sh script supports running unprivileged bulk build and helps
1777configuring distributed bulk builds. 1777configuring distributed bulk builds.
1778 1778
17797.3. Requirements of a full bulk build 17797.3. Requirements of a full bulk build
1780 1780
1781A complete bulk build requires lots of disk space. Some of the disk space can 1781A complete bulk build requires lots of disk space. Some of the disk space can
1782be read-only, some other must be writable. Some can be on remote filesystems 1782be read-only, some other must be writable. Some can be on remote filesystems
1783(such as NFS) and some should be local. Some can be temporary filesystems, 1783(such as NFS) and some should be local. Some can be temporary filesystems,
1784others must survive a sudden reboot. 1784others must survive a sudden reboot.
1785 1785
1786 * 40 GB for the distfiles (read-write, remote, temporary) 1786 * 40 GB for the distfiles (read-write, remote, temporary)
1787 1787
1788 * 30 GB for the binary packages (read-write, remote, permanent) 1788 * 30 GB for the binary packages (read-write, remote, permanent)
1789 1789
1790 * 1 GB for the pkgsrc tree (read-only, remote, permanent) 1790 * 1 GB for the pkgsrc tree (read-only, remote, permanent)
1791 1791
1792 * 5 GB for LOCALBASE (read-write, local, temporary) 1792 * 5 GB for LOCALBASE (read-write, local, temporary)
1793 1793
1794 * 10 GB for the log files (read-write, remote, permanent) 1794 * 10 GB for the log files (read-write, remote, permanent)
1795 1795
1796 * 5 GB for temporary files (read-write, local, temporary) 1796 * 5 GB for temporary files (read-write, local, temporary)
1797 1797
17987.4. Creating a multiple CD-ROM packages collection 17987.4. Creating a multiple CD-ROM packages collection
1799 1799
1800After your pkgsrc bulk-build has completed, you may wish to create a CD-ROM set 1800After your pkgsrc bulk-build has completed, you may wish to create a CD-ROM set
1801of the resulting binary packages to assist in installing packages on other 1801of the resulting binary packages to assist in installing packages on other
1802machines. The pkgtools/cdpack package provides a simple tool for creating the 1802machines. The pkgtools/cdpack package provides a simple tool for creating the
1803ISO 9660 images. cdpack arranges the packages on the CD-ROMs in a way that 1803ISO 9660 images. cdpack arranges the packages on the CD-ROMs in a way that
1804keeps all the dependencies for a given package on the same CD as that package. 1804keeps all the dependencies for a given package on the same CD as that package.
1805 1805
18067.4.1. Example of cdpack 18067.4.1. Example of cdpack
1807 1807
1808Complete documentation for cdpack is found in the cdpack(1) man page. The 1808Complete documentation for cdpack is found in the cdpack(1) man page. The
1809following short example assumes that the binary packages are left in /usr/ 1809following short example assumes that the binary packages are left in /usr/
1810pkgsrc/packages/All and that sufficient disk space exists in /u2 to hold the 1810pkgsrc/packages/All and that sufficient disk space exists in /u2 to hold the
1811ISO 9660 images. 1811ISO 9660 images.
1812 1812
1813# mkdir /u2/images 1813# mkdir /u2/images
1814# pkg_add /usr/pkgsrc/packages/All/cdpack 1814# pkg_add /usr/pkgsrc/packages/All/cdpack
1815# cdpack /usr/pkgsrc/packages/All /u2/images 1815# cdpack /usr/pkgsrc/packages/All /u2/images
1816 1816
1817 1817
1818If you wish to include a common set of files (COPYRIGHT, README, etc.) on each 1818If you wish to include a common set of files (COPYRIGHT, README, etc.) on each
1819CD in the collection, then you need to create a directory which contains these 1819CD in the collection, then you need to create a directory which contains these
1820files. e.g. 1820files. e.g.
1821 1821
1822# mkdir /tmp/common 1822# mkdir /tmp/common
1823# echo "This is a README" > /tmp/common/README 1823# echo "This is a README" > /tmp/common/README
1824# echo "Another file" > /tmp/common/COPYING 1824# echo "Another file" > /tmp/common/COPYING
1825# mkdir /tmp/common/bin 1825# mkdir /tmp/common/bin
1826# echo "#!/bin/sh" > /tmp/common/bin/myscript 1826# echo "#!/bin/sh" > /tmp/common/bin/myscript
1827# echo "echo Hello world" >> /tmp/common/bin/myscript 1827# echo "echo Hello world" >> /tmp/common/bin/myscript
1828# chmod 755 /tmp/common/bin/myscript 1828# chmod 755 /tmp/common/bin/myscript
1829 1829
1830 1830
1831Now create the images: 1831Now create the images:
1832 1832
1833# cdpack -x /tmp/common /usr/pkgsrc/packages/All /u2/images 1833# cdpack -x /tmp/common /usr/pkgsrc/packages/All /u2/images
1834 1834
1835Each image will contain README, COPYING, and bin/myscript in their root 1835Each image will contain README, COPYING, and bin/myscript in their root
1836directories. 1836directories.
1837 1837
1838Chapter 8. Directory layout of the installed files 1838Chapter 8. Directory layout of the installed files
1839 1839
1840Table of Contents 1840Table of Contents
1841 1841
18428.1. File system layout in ${LOCALBASE} 18428.1. File system layout in ${LOCALBASE}
18438.2. File system layout in ${VARBASE} 18438.2. File system layout in ${VARBASE}
1844 1844
1845The files that are installed by pkgsrc are organized in a way that is similar 1845The files that are installed by pkgsrc are organized in a way that is similar
1846to what you find in the /usr directory of the base system. But some details are 1846to what you find in the /usr directory of the base system. But some details are
1847different. This is because pkgsrc initially came from FreeBSD and had adopted 1847different. This is because pkgsrc initially came from FreeBSD and had adopted
1848its file system hierarchy. Later it was largely influenced by NetBSD. But no 1848its file system hierarchy. Later it was largely influenced by NetBSD. But no
1849matter which operating system you are using pkgsrc with, you can expect the 1849matter which operating system you are using pkgsrc with, you can expect the
1850same layout for pkgsrc. 1850same layout for pkgsrc.
1851 1851
1852There are mainly four root directories for pkgsrc, which are all configurable 1852There are mainly four root directories for pkgsrc, which are all configurable
1853in the bootstrap/bootstrap script. When pkgsrc has been installed as root, the 1853in the bootstrap/bootstrap script. When pkgsrc has been installed as root, the
1854default locations are: 1854default locations are:
1855 1855
1856LOCALBASE= /usr/pkg 1856LOCALBASE= /usr/pkg
1857PKG_SYSCONFBASE= /usr/pkg/etc 1857PKG_SYSCONFBASE= /usr/pkg/etc
1858VARBASE= /var 1858VARBASE= /var
1859PKG_DBDIR= /usr/pkg/pkgdb 1859PKG_DBDIR= /usr/pkg/pkgdb
1860 1860
1861In unprivileged mode (when pkgsrc has been installed as any other user), the 1861In unprivileged mode (when pkgsrc has been installed as any other user), the
1862default locations are: 1862default locations are:
1863 1863
1864LOCALBASE= ${HOME}/pkg 1864LOCALBASE= ${HOME}/pkg
1865PKG_SYSCONFBASE= ${HOME}/pkg/etc 1865PKG_SYSCONFBASE= ${HOME}/pkg/etc
1866VARBASE= ${HOME}/pkg/var 1866VARBASE= ${HOME}/pkg/var
1867PKG_DBDIR= ${HOME}/pkg/pkgdb 1867PKG_DBDIR= ${HOME}/pkg/pkgdb
1868 1868
1869What these four directories are for, and what they look like is explained 1869What these four directories are for, and what they look like is explained
1870below. 1870below.
1871 1871
1872 * LOCALBASE corresponds to the /usr directory in the base system. It is the " 1872 * LOCALBASE corresponds to the /usr directory in the base system. It is the "
1873 main" directory where the files are installed and contains the well-known 1873 main" directory where the files are installed and contains the well-known
1874 subdirectories like bin, include, lib, share and sbin. 1874 subdirectories like bin, include, lib, share and sbin.
1875 1875
1876 * VARBASE corresponds to /var in the base system. Some programs (especially 1876 * VARBASE corresponds to /var in the base system. Some programs (especially
1877 games, network daemons) need write access to it during normal operation. 1877 games, network daemons) need write access to it during normal operation.
1878 1878
1879 * PKG_SYSCONFDIR corresponds to /etc in the base system. It contains 1879 * PKG_SYSCONFDIR corresponds to /etc in the base system. It contains
1880 configuration files of the packages, as well as pkgsrc's mk.conf itself. 1880 configuration files of the packages, as well as pkgsrc's mk.conf itself.
1881 1881
18828.1. File system layout in ${LOCALBASE} 18828.1. File system layout in ${LOCALBASE}
1883 1883
1884The following directories exist in a typical pkgsrc installation in $ 1884The following directories exist in a typical pkgsrc installation in $
1885{LOCALBASE}. 1885{LOCALBASE}.
1886 1886
1887bin 1887bin
1888 1888
1889 Contains executable programs that are intended to be directly used by the 1889 Contains executable programs that are intended to be directly used by the
1890 end user. 1890 end user.
1891 1891
1892emul 1892emul
1893 1893
1894 Contains files for the emulation layers of various other operating systems, 1894 Contains files for the emulation layers of various other operating systems,
1895 especially for NetBSD. 1895 especially for NetBSD.
1896 1896
1897etc (the usual location of ${PKG_SYSCONFDIR}) 1897etc (the usual location of ${PKG_SYSCONFDIR})
1898 1898
1899 Contains the configuration files. 1899 Contains the configuration files.
1900 1900
1901include 1901include
1902 1902
1903 Contains headers for the C and C++ programming languages. 1903 Contains headers for the C and C++ programming languages.
1904 1904
1905info 1905info
1906 1906
1907 Contains GNU info files of various packages. 1907 Contains GNU info files of various packages.
1908 1908
1909lib 1909lib
1910 1910
1911 Contains shared and static libraries. 1911 Contains shared and static libraries.
1912 1912
1913libdata 1913libdata
1914 1914
1915 Contains data files that don't change after installation. Other data files 1915 Contains data files that don't change after installation. Other data files
1916 belong into ${VARBASE}. 1916 belong into ${VARBASE}.
1917 1917
1918libexec 1918libexec
1919 1919
1920 Contains programs that are not intended to be used by end users, such as 1920 Contains programs that are not intended to be used by end users, such as
1921 helper programs or network daemons. 1921 helper programs or network daemons.
1922 1922
1923libexec/cgi-bin 1923libexec/cgi-bin
1924 1924
1925 Contains programs that are intended to be executed as CGI scripts by a web 1925 Contains programs that are intended to be executed as CGI scripts by a web
1926 server. 1926 server.
1927 1927
1928man (the usual value of ${PKGMANDIR}) 1928man (the usual value of ${PKGMANDIR})
1929 1929
1930 Contains brief documentation in form of manual pages. 1930 Contains brief documentation in form of manual pages.