Thu Jan 1 06:32:33 2015 UTC ()
regen


(dholland)
diff -r1.192 -r1.193 pkgsrc/doc/pkgsrc.html
diff -r1.194 -r1.195 pkgsrc/doc/pkgsrc.txt

cvs diff -r1.192 -r1.193 pkgsrc/doc/pkgsrc.html (switch to unified diff)

--- pkgsrc/doc/pkgsrc.html 2015/01/01 05:20:29 1.192
+++ pkgsrc/doc/pkgsrc.html 2015/01/01 06:32:32 1.193
@@ -1,4277 +1,4287 @@ @@ -1,4277 +1,4287 @@
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-2015 The NetBSD Foundation, Inc</p></div> 33<div><p class="copyright">Copyright © 1994-2014 The NetBSD Foundation, Inc</p></div>
34<div><p class="pubdate">$NetBSD: pkgsrc.xml,v 1.28 2015/01/01 05:19:02 jnemeth Exp $</p></div> 34<div><p class="pubdate">$NetBSD: pkgsrc.xml,v 1.27 2014/09/19 04:53:09 jnemeth 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> 48<dl>
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<dt><span class="sect1"><a href="#platform-specific-notes">3.3. Platform-specific notes</a></span></dt> 80<dt><span class="sect1"><a href="#platform-specific-notes">3.3. Platform-specific notes</a></span></dt>
81<dd><dl> 81<dd><dl>
82<dt><span class="sect2"><a href="#cygwin">3.3.1. Cygwin</a></span></dt> 82<dt><span class="sect2"><a href="#cygwin">3.3.1. Cygwin</a></span></dt>
83<dt><span class="sect2"><a href="#darwin">3.3.2. Darwin (Mac OS X)</a></span></dt> 83<dt><span class="sect2"><a href="#darwin">3.3.2. Darwin (Mac OS X)</a></span></dt>
84<dt><span class="sect2"><a href="#freebsd">3.3.3. FreeBSD</a></span></dt> 84<dt><span class="sect2"><a href="#freebsd">3.3.3. FreeBSD</a></span></dt>
85<dt><span class="sect2"><a href="#gnukfreebsd">3.3.4. GNU/kFreeBSD</a></span></dt> 85<dt><span class="sect2"><a href="#gnukfreebsd">3.3.4. GNU/kFreeBSD</a></span></dt>
86<dt><span class="sect2"><a href="#interix">3.3.5. Interix</a></span></dt> 86<dt><span class="sect2"><a href="#interix">3.3.5. Interix</a></span></dt>
87<dt><span class="sect2"><a href="#irix">3.3.6. IRIX</a></span></dt> 87<dt><span class="sect2"><a href="#irix">3.3.6. IRIX</a></span></dt>
88<dt><span class="sect2"><a href="#linux">3.3.7. Linux</a></span></dt> 88<dt><span class="sect2"><a href="#linux">3.3.7. Linux</a></span></dt>
89<dt><span class="sect2"><a href="#mirbsd">3.3.8. MirBSD</a></span></dt> 89<dt><span class="sect2"><a href="#mirbsd">3.3.8. MirBSD</a></span></dt>
90<dt><span class="sect2"><a href="#openbsd">3.3.9. OpenBSD</a></span></dt> 90<dt><span class="sect2"><a href="#openbsd">3.3.9. OpenBSD</a></span></dt>
91<dt><span class="sect2"><a href="#solaris">3.3.10. Solaris</a></span></dt> 91<dt><span class="sect2"><a href="#solaris">3.3.10. Solaris</a></span></dt>
92</dl></dd> 92</dl></dd>
93</dl></dd> 93</dl></dd>
94<dt><span class="chapter"><a href="#using">4. Using pkgsrc</a></span></dt> 94<dt><span class="chapter"><a href="#using">4. Using pkgsrc</a></span></dt>
95<dd><dl> 95<dd><dl>
96<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt> 96<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt>
97<dd><dl> 97<dd><dl>
98<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt> 98<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt>
99<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt> 99<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt>
100<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt> 100<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt>
101<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt> 101<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt>
102<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt> 102<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt>
103<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> 103<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>
104<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt> 104<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt>
105<dt><span class="sect2"><a href="#a-word-of-warning">4.1.8. A word of warning</a></span></dt> 105<dt><span class="sect2"><a href="#a-word-of-warning">4.1.8. A word of warning</a></span></dt>
106</dl></dd> 106</dl></dd>
107<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt> 107<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt>
108<dd><dl> 108<dd><dl>
109<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt> 109<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt>
110<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt> 110<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt>
111<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt> 111<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt>
112</dl></dd> 112</dl></dd>
113</dl></dd> 113</dl></dd>
114<dt><span class="chapter"><a href="#configuring">5. Configuring pkgsrc</a></span></dt> 114<dt><span class="chapter"><a href="#configuring">5. Configuring pkgsrc</a></span></dt>
115<dd><dl> 115<dd><dl>
116<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt> 116<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt>
117<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt> 117<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt>
118<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt> 118<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt>
119<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt> 119<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt>
120<dd><dl> 120<dd><dl>
121<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt> 121<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt>
122<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt> 122<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt>
123<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt> 123<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt>
124</dl></dd> 124</dl></dd>
125<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt> 125<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt>
126<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt> 126<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt>
127</dl></dd> 127</dl></dd>
128<dt><span class="chapter"><a href="#binary">6. Creating binary packages</a></span></dt> 128<dt><span class="chapter"><a href="#binary">6. Creating binary packages</a></span></dt>
129<dd><dl> 129<dd><dl>
130<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt> 130<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt>
131<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt> 131<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt>
132</dl></dd> 132</dl></dd>
133<dt><span class="chapter"><a href="#bulk">7. Creating binary packages for everything in pkgsrc (bulk 133<dt><span class="chapter"><a href="#bulk">7. Creating binary packages for everything in pkgsrc (bulk
134builds)</a></span></dt> 134builds)</a></span></dt>
135<dd><dl> 135<dd><dl>
136<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt> 136<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt>
137<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt> 137<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt>
138<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd> 138<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd>
139<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt> 139<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt>
140<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt> 140<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt>
141<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd> 141<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd>
142</dl></dd> 142</dl></dd>
143<dt><span class="chapter"><a href="#files">8. Directory layout of the installed files</a></span></dt> 143<dt><span class="chapter"><a href="#files">8. Directory layout of the installed files</a></span></dt>
144<dd><dl> 144<dd><dl>
145<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt> 145<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt>
146<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt> 146<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt>
147</dl></dd> 147</dl></dd>
148<dt><span class="chapter"><a href="#faq">9. Frequently Asked Questions</a></span></dt> 148<dt><span class="chapter"><a href="#faq">9. Frequently Asked Questions</a></span></dt>
149<dd><dl> 149<dd><dl>
150<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt> 150<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt>
151<dt><span class="sect1"><a href="#faq-pkgtools">9.2. Utilities for package management (pkgtools)</a></span></dt> 151<dt><span class="sect1"><a href="#pkgviews-docs">9.2. Where's the pkgviews documentation?</a></span></dt>
152<dt><span class="sect1"><a href="#non-root-pkgsrc">9.3. How to use pkgsrc as non-root</a></span></dt> 152<dt><span class="sect1"><a href="#faq-pkgtools">9.3. Utilities for package management (pkgtools)</a></span></dt>
153<dt><span class="sect1"><a href="#resume-transfers">9.4. How to resume transfers when fetching distfiles?</a></span></dt> 153<dt><span class="sect1"><a href="#non-root-pkgsrc">9.4. How to use pkgsrc as non-root</a></span></dt>
154<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> 154<dt><span class="sect1"><a href="#resume-transfers">9.5. How to resume transfers when fetching distfiles?</a></span></dt>
155<dt><span class="sect1"><a href="#fetch-behind-firewall">9.6. How to fetch files from behind a firewall</a></span></dt> 155<dt><span class="sect1"><a href="#x.org-from-pkgsrc">9.6. How can I install/use modular X.org from pkgsrc?</a></span></dt>
156<dt><span class="sect1"><a href="#fetch-https">9.7. How to fetch files from HTTPS sites</a></span></dt> 156<dt><span class="sect1"><a href="#fetch-behind-firewall">9.7. How to fetch files from behind a firewall</a></span></dt>
157<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> 157<dt><span class="sect1"><a href="#fetch-https">9.8. How to fetch files from HTTPS sites</a></span></dt>
158<dt><span class="sect1"><a href="#fetching-all-distfiles">9.9. How to fetch all distfiles at once</a></span></dt> 158<dt><span class="sect1"><a href="#passive-ftp">9.9. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</a></span></dt>
159<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 159<dt><span class="sect1"><a href="#fetching-all-distfiles">9.10. How to fetch all distfiles at once</a></span></dt>
 160<dt><span class="sect1"><a href="#tmac.andoc-missing">9.11. What does <span class="quote">&#8220;<span class="quote">Don't know how to make
160/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt> 161/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt>
161<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> 162<dt><span class="sect1"><a href="#bsd.own.mk-missing">9.12. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</a></span></dt>
162<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.12. Using 'sudo' with pkgsrc</a></span></dt> 163<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.13. Using 'sudo' with pkgsrc</a></span></dt>
163<dt><span class="sect1"><a href="#faq.conf">9.13. How do I change the location of configuration files?</a></span></dt> 164<dt><span class="sect1"><a href="#faq.conf">9.14. How do I change the location of configuration files?</a></span></dt>
164<dt><span class="sect1"><a href="#audit-packages">9.14. Automated security checks</a></span></dt> 165<dt><span class="sect1"><a href="#audit-packages">9.15. Automated security checks</a></span></dt>
165<dt><span class="sect1"><a href="#ufaq-cflags">9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt> 166<dt><span class="sect1"><a href="#ufaq-cflags">9.16. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt>
166<dt><span class="sect1"><a href="#ufaq-fail">9.16. A package does not build. What shall I do?</a></span></dt> 167<dt><span class="sect1"><a href="#ufaq-fail">9.17. A package does not build. What shall I do?</a></span></dt>
167<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> 168<dt><span class="sect1"><a href="#faq.rcs-conflicts">9.18. 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>
168</dl></dd> 169</dl></dd>
169</dl></dd> 170</dl></dd>
170<dt><span class="part"><a href="#developers-guide">II. The pkgsrc developer's guide</a></span></dt> 171<dt><span class="part"><a href="#developers-guide">II. The pkgsrc developer's guide</a></span></dt>
171<dd><dl> 172<dd><dl>
172<dt><span class="chapter"><a href="#creating">10. Creating a new pkgsrc package from scratch</a></span></dt> 173<dt><span class="chapter"><a href="#creating">10. Creating a new pkgsrc package from scratch</a></span></dt>
173<dd><dl> 174<dd><dl>
174<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt> 175<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt>
175<dd><dl> 176<dd><dl>
176<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt> 177<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt>
177<dt><span class="sect2"><a href="#creating.kde-app">10.1.2. KDE3 applications</a></span></dt> 178<dt><span class="sect2"><a href="#creating.kde-app">10.1.2. KDE3 applications</a></span></dt>
178<dt><span class="sect2"><a href="#creating.python-module">10.1.3. Python modules and programs</a></span></dt> 179<dt><span class="sect2"><a href="#creating.python-module">10.1.3. Python modules and programs</a></span></dt>
179</dl></dd> 180</dl></dd>
180<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt> 181<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt>
181<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> 182<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>
182</dl></dd> 183</dl></dd>
183<dt><span class="chapter"><a href="#components">11. Package components - files, directories and contents</a></span></dt> 184<dt><span class="chapter"><a href="#components">11. Package components - files, directories and contents</a></span></dt>
184<dd><dl> 185<dd><dl>
185<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt> 186<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt>
186<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt> 187<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt>
187<dt><span class="sect1"><a href="#components.patches">11.3. patches/*</a></span></dt> 188<dt><span class="sect1"><a href="#components.patches">11.3. patches/*</a></span></dt>
188<dd><dl> 189<dd><dl>
189<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt> 190<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt>
190<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt> 191<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt>
191<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt> 192<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt>
192<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt> 193<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt>
193<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt> 194<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt>
194</dl></dd> 195</dl></dd>
195<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt> 196<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt>
196<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt> 197<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt>
197<dd><dl> 198<dd><dl>
198<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt> 199<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt>
199<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt> 200<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt>
200<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt> 201<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt>
201</dl></dd> 202</dl></dd>
202<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt> 203<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt>
203<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt> 204<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt>
204</dl></dd> 205</dl></dd>
205<dt><span class="chapter"><a href="#makefile">12. Programming in <code class="filename">Makefile</code>s</a></span></dt> 206<dt><span class="chapter"><a href="#makefile">12. Programming in <code class="filename">Makefile</code>s</a></span></dt>
206<dd><dl> 207<dd><dl>
207<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt> 208<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt>
208<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt> 209<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt>
209<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd> 210<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd>
210<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt> 211<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt>
211<dd><dl> 212<dd><dl>
212<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt> 213<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt>
213<dt><span class="sect2"><a href="#converting-internal-to-external">12.3.2. Converting an internal list into an external list</a></span></dt> 214<dt><span class="sect2"><a href="#converting-internal-to-external">12.3.2. Converting an internal list into an external list</a></span></dt>
214<dt><span class="sect2"><a href="#passing-variable-to-shell">12.3.3. Passing variables to a shell command</a></span></dt> 215<dt><span class="sect2"><a href="#passing-variable-to-shell">12.3.3. Passing variables to a shell command</a></span></dt>
215<dt><span class="sect2"><a href="#quoting-guideline">12.3.4. Quoting guideline</a></span></dt> 216<dt><span class="sect2"><a href="#quoting-guideline">12.3.4. Quoting guideline</a></span></dt>
216<dt><span class="sect2"><a href="#bsd-make-bug-workaround">12.3.5. Workaround for a bug in BSD Make</a></span></dt> 217<dt><span class="sect2"><a href="#bsd-make-bug-workaround">12.3.5. Workaround for a bug in BSD Make</a></span></dt>
217</dl></dd> 218</dl></dd>
218</dl></dd> 219</dl></dd>
219<dt><span class="chapter"><a href="#plist">13. PLIST issues</a></span></dt> 220<dt><span class="chapter"><a href="#plist">13. PLIST issues</a></span></dt>
220<dd><dl> 221<dd><dl>
221<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt> 222<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt>
222<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt> 223<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt>
223<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> 224<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>
224<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt> 225<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt>
225<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt> 226<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt>
226<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt> 227<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt>
227<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt> 228<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt>
228<dt><span class="sect1"><a href="#faq.common-dirs">13.8. Sharing directories between packages</a></span></dt> 229<dt><span class="sect1"><a href="#faq.common-dirs">13.8. Sharing directories between packages</a></span></dt>
229</dl></dd> 230</dl></dd>
230<dt><span class="chapter"><a href="#buildlink">14. Buildlink methodology</a></span></dt> 231<dt><span class="chapter"><a href="#buildlink">14. Buildlink methodology</a></span></dt>
231<dd><dl> 232<dd><dl>
232<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt> 233<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt>
233<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt> 234<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt>
234<dd><dl> 235<dd><dl>
235<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt> 236<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt>
236<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating 237<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating
237 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 238 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
238 and 239 and
239 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 240 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
240 in <code class="filename">buildlink3.mk</code> files</a></span></dt> 241 in <code class="filename">buildlink3.mk</code> files</a></span></dt>
241</dl></dd> 242</dl></dd>
242<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt> 243<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt>
243<dd><dl> 244<dd><dl>
244<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> 245<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>
245<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt> 246<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt>
246</dl></dd> 247</dl></dd>
247</dl></dd> 248</dl></dd>
248<dt><span class="chapter"><a href="#pkginstall">15. The pkginstall framework</a></span></dt> 249<dt><span class="chapter"><a href="#pkginstall">15. The pkginstall framework</a></span></dt>
249<dd><dl> 250<dd><dl>
250<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt> 251<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt>
251<dd><dl> 252<dd><dl>
252<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt> 253<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt>
253<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt> 254<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt>
254</dl></dd> 255</dl></dd>
255<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt> 256<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt>
256<dd><dl> 257<dd><dl>
257<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt> 258<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt>
258<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt> 259<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt>
259<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt> 260<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt>
260<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt> 261<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt>
261</dl></dd> 262</dl></dd>
262<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt> 263<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt>
263<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> 264<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>
264<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt> 265<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt>
265<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt> 266<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt>
266<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd> 267<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd>
267<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt> 268<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt>
268<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> 269<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>
269</dl></dd> 270</dl></dd>
270<dt><span class="chapter"><a href="#options">16. Options handling</a></span></dt> 271<dt><span class="chapter"><a href="#options">16. Options handling</a></span></dt>
271<dd><dl> 272<dd><dl>
272<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt> 273<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt>
273<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> 274<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>
274<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt> 275<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt>
275<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt> 276<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt>
276</dl></dd> 277</dl></dd>
277<dt><span class="chapter"><a href="#build">17. The build process</a></span></dt> 278<dt><span class="chapter"><a href="#build">17. The build process</a></span></dt>
278<dd><dl> 279<dd><dl>
279<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt> 280<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt>
280<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt> 281<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt>
281<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt> 282<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt>
282<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt> 283<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt>
283<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 284<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
284<dd><dl> 285<dd><dl>
285<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt> 286<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt>
286<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt> 287<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt>
287</dl></dd> 288</dl></dd>
288<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt> 289<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt>
289<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt> 290<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt>
290<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt> 291<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt>
291<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt> 292<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt>
292<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt> 293<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt>
293<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 294<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
294<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 295<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
295<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt> 296<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt>
296<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 297<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
297<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt> 298<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt>
298<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt> 299<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt>
299<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt> 300<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt>
300</dl></dd> 301</dl></dd>
301<dt><span class="chapter"><a href="#tools">18. Tools needed for building or running</a></span></dt> 302<dt><span class="chapter"><a href="#tools">18. Tools needed for building or running</a></span></dt>
302<dd><dl> 303<dd><dl>
303<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt> 304<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt>
304<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt> 305<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt>
305<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt> 306<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt>
306<dt><span class="sect1"><a href="#tools.questions">18.4. Questions regarding the tools</a></span></dt> 307<dt><span class="sect1"><a href="#tools.questions">18.4. Questions regarding the tools</a></span></dt>
307</dl></dd> 308</dl></dd>
308<dt><span class="chapter"><a href="#fixes">19. Making your package work</a></span></dt> 309<dt><span class="chapter"><a href="#fixes">19. Making your package work</a></span></dt>
309<dd><dl> 310<dd><dl>
310<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt> 311<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt>
311<dd><dl> 312<dd><dl>
312<dt><span class="sect2"><a href="#portability-of-packages">19.1.1. Portability of packages</a></span></dt> 313<dt><span class="sect2"><a href="#portability-of-packages">19.1.1. Portability of packages</a></span></dt>
313<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.2. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt> 314<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.2. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt>
314<dt><span class="sect2"><a href="#user-interaction">19.1.3. User interaction</a></span></dt> 315<dt><span class="sect2"><a href="#user-interaction">19.1.3. User interaction</a></span></dt>
315<dt><span class="sect2"><a href="#handling-licenses">19.1.4. Handling licenses</a></span></dt> 316<dt><span class="sect2"><a href="#handling-licenses">19.1.4. Handling licenses</a></span></dt>
316<dt><span class="sect2"><a href="#restricted-packages">19.1.5. Restricted packages</a></span></dt> 317<dt><span class="sect2"><a href="#restricted-packages">19.1.5. Restricted packages</a></span></dt>
317<dt><span class="sect2"><a href="#dependencies">19.1.6. Handling dependencies</a></span></dt> 318<dt><span class="sect2"><a href="#dependencies">19.1.6. Handling dependencies</a></span></dt>
318<dt><span class="sect2"><a href="#conflicts">19.1.7. Handling conflicts with other packages</a></span></dt> 319<dt><span class="sect2"><a href="#conflicts">19.1.7. Handling conflicts with other packages</a></span></dt>
319<dt><span class="sect2"><a href="#not-building-packages">19.1.8. Packages that cannot or should not be built</a></span></dt> 320<dt><span class="sect2"><a href="#not-building-packages">19.1.8. Packages that cannot or should not be built</a></span></dt>
320<dt><span class="sect2"><a href="#undeletable-packages">19.1.9. Packages which should not be deleted, once installed</a></span></dt> 321<dt><span class="sect2"><a href="#undeletable-packages">19.1.9. Packages which should not be deleted, once installed</a></span></dt>
321<dt><span class="sect2"><a href="#security-handling">19.1.10. Handling packages with security problems</a></span></dt> 322<dt><span class="sect2"><a href="#security-handling">19.1.10. Handling packages with security problems</a></span></dt>
322<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.11. How to handle incrementing versions when fixing an existing package</a></span></dt> 323<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.11. How to handle incrementing versions when fixing an existing package</a></span></dt>
323<dt><span class="sect2"><a href="#fixes.subst">19.1.12. Substituting variable text in the package files (the SUBST framework)</a></span></dt> 324<dt><span class="sect2"><a href="#fixes.subst">19.1.12. Substituting variable text in the package files (the SUBST framework)</a></span></dt>
324</dl></dd> 325</dl></dd>
325<dt><span class="sect1"><a href="#fixes.fetch">19.2. Fixing problems in the <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 326<dt><span class="sect1"><a href="#fixes.fetch">19.2. Fixing problems in the <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
326<dd><dl> 327<dd><dl>
327<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt> 328<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt>
328<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> 329<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>
329</dl></dd> 330</dl></dd>
330<dt><span class="sect1"><a href="#fixes.configure">19.3. Fixing problems in the <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 331<dt><span class="sect1"><a href="#fixes.configure">19.3. Fixing problems in the <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
331<dd><dl> 332<dd><dl>
332<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt> 333<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt>
333<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt> 334<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt>
334<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt> 335<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt>
335</dl></dd> 336</dl></dd>
336<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt> 337<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt>
337<dd><dl> 338<dd><dl>
338<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt> 339<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt>
339<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt> 340<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt>
340<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt> 341<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt>
341<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt> 342<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt>
342<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt> 343<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt>
343</dl></dd> 344</dl></dd>
344<dt><span class="sect1"><a href="#fixes.build">19.5. Fixing problems in the <span class="emphasis"><em>build</em></span> phase</a></span></dt> 345<dt><span class="sect1"><a href="#fixes.build">19.5. Fixing problems in the <span class="emphasis"><em>build</em></span> phase</a></span></dt>
345<dd><dl> 346<dd><dl>
346<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt> 347<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt>
347<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt> 348<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt>
348<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> 349<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>
349<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt> 350<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt>
350</dl></dd> 351</dl></dd>
351<dt><span class="sect1"><a href="#fixes.install">19.6. Fixing problems in the <span class="emphasis"><em>install</em></span> phase</a></span></dt> 352<dt><span class="sect1"><a href="#fixes.install">19.6. Fixing problems in the <span class="emphasis"><em>install</em></span> phase</a></span></dt>
352<dd><dl> 353<dd><dl>
353<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt> 354<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt>
354<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt> 355<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt>
355<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt> 356<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt>
356<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt> 357<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt>
357<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt> 358<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt>
358<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt> 359<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt>
359<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt> 360<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt>
360<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt> 361<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt>
361<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt> 362<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt>
362<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt> 363<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt>
363<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt> 364<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt>
364<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt> 365<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt>
365<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt> 366<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt>
366<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt> 367<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt>
367<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt> 368<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt>
368<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt> 369<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt>
369<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt> 370<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt>
370<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in 371<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in
371 emulation</a></span></dt> 372 emulation</a></span></dt>
372<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt> 373<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt>
373<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt> 374<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt>
374</dl></dd> 375</dl></dd>
375<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt> 376<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt>
376</dl></dd> 377</dl></dd>
377<dt><span class="chapter"><a href="#debug">20. Debugging</a></span></dt> 378<dt><span class="chapter"><a href="#debug">20. Debugging</a></span></dt>
378<dt><span class="chapter"><a href="#submit">21. Submitting and Committing</a></span></dt> 379<dt><span class="chapter"><a href="#submit">21. Submitting and Committing</a></span></dt>
379<dd><dl> 380<dd><dl>
380<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt> 381<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt>
381<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt> 382<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt>
382<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt> 383<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt>
383<dt><span class="sect1"><a href="#committing-importing">21.4. Committing: Adding a package to CVS</a></span></dt> 384<dt><span class="sect1"><a href="#committing-importing">21.4. Committing: Adding a package to CVS</a></span></dt>
384<dt><span class="sect1"><a href="#updating-package">21.5. Updating a package to a newer version</a></span></dt> 385<dt><span class="sect1"><a href="#updating-package">21.5. Updating a package to a newer version</a></span></dt>
385<dt><span class="sect1"><a href="#renaming-package">21.6. Renaming a package in pkgsrc</a></span></dt> 386<dt><span class="sect1"><a href="#renaming-package">21.6. Renaming a package in pkgsrc</a></span></dt>
386<dt><span class="sect1"><a href="#moving-package">21.7. Moving a package in pkgsrc</a></span></dt> 387<dt><span class="sect1"><a href="#moving-package">21.7. Moving a package in pkgsrc</a></span></dt>
387</dl></dd> 388</dl></dd>
388<dt><span class="chapter"><a href="#devfaq">22. Frequently Asked Questions</a></span></dt> 389<dt><span class="chapter"><a href="#devfaq">22. Frequently Asked Questions</a></span></dt>
389<dt><span class="chapter"><a href="#gnome">23. GNOME packaging and porting</a></span></dt> 390<dt><span class="chapter"><a href="#gnome">23. GNOME packaging and porting</a></span></dt>
390<dd><dl> 391<dd><dl>
391<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt> 392<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt>
392<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt> 393<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt>
393<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt> 394<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt>
394<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt> 395<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt>
395</dl></dd> 396</dl></dd>
396</dl></dd> 397</dl></dd>
397<dt><span class="part"><a href="#infrastructure">III. The pkgsrc infrastructure internals</a></span></dt> 398<dt><span class="part"><a href="#infrastructure">III. The pkgsrc infrastructure internals</a></span></dt>
398<dd><dl> 399<dd><dl>
399<dt><span class="chapter"><a href="#infr.design">24. Design of the pkgsrc infrastructure</a></span></dt> 400<dt><span class="chapter"><a href="#infr.design">24. Design of the pkgsrc infrastructure</a></span></dt>
400<dd><dl> 401<dd><dl>
401<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt> 402<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt>
402<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt> 403<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt>
403<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt> 404<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt>
404<dd><dl> 405<dd><dl>
405<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt> 406<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt>
406<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt> 407<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt>
407</dl></dd> 408</dl></dd>
408<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt> 409<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt>
409<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt> 410<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt>
410<dd><dl> 411<dd><dl>
411<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt> 412<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt>
412<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt> 413<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt>
413</dl></dd> 414</dl></dd>
414<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt> 415<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt>
415<dd><dl> 416<dd><dl>
416<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> 417<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>
417<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> 418<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>
418</dl></dd> 419</dl></dd>
419</dl></dd> 420</dl></dd>
420<dt><span class="chapter"><a href="#regression">25. Regression tests</a></span></dt> 421<dt><span class="chapter"><a href="#regression">25. Regression tests</a></span></dt>
421<dd><dl> 422<dd><dl>
422<dt><span class="sect1"><a href="#regression.descr">25.1. The regression tests framework</a></span></dt> 423<dt><span class="sect1"><a href="#regression.descr">25.1. The regression tests framework</a></span></dt>
423<dt><span class="sect1"><a href="#regression.run">25.2. Running the regression tests</a></span></dt> 424<dt><span class="sect1"><a href="#regression.run">25.2. Running the regression tests</a></span></dt>
424<dt><span class="sect1"><a href="#regression.new">25.3. Adding a new regression test</a></span></dt> 425<dt><span class="sect1"><a href="#regression.new">25.3. Adding a new regression test</a></span></dt>
425<dd><dl> 426<dd><dl>
426<dt><span class="sect2"><a href="#regression.fun.override">25.3.1. Overridable functions</a></span></dt> 427<dt><span class="sect2"><a href="#regression.fun.override">25.3.1. Overridable functions</a></span></dt>
427<dt><span class="sect2"><a href="#regression.fun.helper">25.3.2. Helper functions</a></span></dt> 428<dt><span class="sect2"><a href="#regression.fun.helper">25.3.2. Helper functions</a></span></dt>
428</dl></dd> 429</dl></dd>
429</dl></dd> 430</dl></dd>
430<dt><span class="chapter"><a href="#porting">26. Porting pkgsrc</a></span></dt> 431<dt><span class="chapter"><a href="#porting">26. Porting pkgsrc</a></span></dt>
431<dd><dl> 432<dd><dl>
432<dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt> 433<dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt>
433<dt><span class="sect1"><a href="#porting.compiler">26.2. Adding support for a new compiler</a></span></dt> 434<dt><span class="sect1"><a href="#porting.compiler">26.2. Adding support for a new compiler</a></span></dt>
434</dl></dd> 435</dl></dd>
435</dl></dd> 436</dl></dd>
436<dt><span class="appendix"><a href="#examples">A. A simple example package: bison</a></span></dt> 437<dt><span class="appendix"><a href="#examples">A. A simple example package: bison</a></span></dt>
437<dd><dl> 438<dd><dl>
438<dt><span class="sect1"><a href="#example-files">A.1. files</a></span></dt> 439<dt><span class="sect1"><a href="#example-files">A.1. files</a></span></dt>
439<dd><dl> 440<dd><dl>
440<dt><span class="sect2"><a href="#example-Makefile">A.1.1. Makefile</a></span></dt> 441<dt><span class="sect2"><a href="#example-Makefile">A.1.1. Makefile</a></span></dt>
441<dt><span class="sect2"><a href="#example-descr">A.1.2. DESCR</a></span></dt> 442<dt><span class="sect2"><a href="#example-descr">A.1.2. DESCR</a></span></dt>
442<dt><span class="sect2"><a href="#example-plist">A.1.3. PLIST</a></span></dt> 443<dt><span class="sect2"><a href="#example-plist">A.1.3. PLIST</a></span></dt>
443<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> 444<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>
444</dl></dd> 445</dl></dd>
445<dt><span class="sect1"><a href="#steps-for-b-i-p">A.2. Steps for building, installing, packaging</a></span></dt> 446<dt><span class="sect1"><a href="#steps-for-b-i-p">A.2. Steps for building, installing, packaging</a></span></dt>
446</dl></dd> 447</dl></dd>
447<dt><span class="appendix"><a href="#logs">B. Build logs</a></span></dt> 448<dt><span class="appendix"><a href="#logs">B. Build logs</a></span></dt>
448<dd><dl> 449<dd><dl>
449<dt><span class="sect1"><a href="#logs.building">B.1. Building figlet</a></span></dt> 450<dt><span class="sect1"><a href="#logs.building">B.1. Building figlet</a></span></dt>
450<dt><span class="sect1"><a href="#logs.package">B.2. Packaging figlet</a></span></dt> 451<dt><span class="sect1"><a href="#logs.package">B.2. Packaging figlet</a></span></dt>
451</dl></dd> 452</dl></dd>
452<dt><span class="appendix"><a href="#ftp-layout">C. Directory layout of the pkgsrc FTP server</a></span></dt> 453<dt><span class="appendix"><a href="#ftp-layout">C. Directory layout of the pkgsrc FTP server</a></span></dt>
453<dd><dl> 454<dd><dl>
454<dt><span class="sect1"><a href="#ftp-distfiles">C.1. <code class="filename">distfiles</code>: The distributed source files</a></span></dt> 455<dt><span class="sect1"><a href="#ftp-distfiles">C.1. <code class="filename">distfiles</code>: The distributed source files</a></span></dt>
455<dt><span class="sect1"><a href="#ftp-misc">C.2. <code class="filename">misc</code>: Miscellaneous things</a></span></dt> 456<dt><span class="sect1"><a href="#ftp-misc">C.2. <code class="filename">misc</code>: Miscellaneous things</a></span></dt>
456<dt><span class="sect1"><a href="#ftp-packages">C.3. <code class="filename">packages</code>: Binary packages</a></span></dt> 457<dt><span class="sect1"><a href="#ftp-packages">C.3. <code class="filename">packages</code>: Binary packages</a></span></dt>
457<dt><span class="sect1"><a href="#ftp-reports">C.4. <code class="filename">reports</code>: Bulk build reports</a></span></dt> 458<dt><span class="sect1"><a href="#ftp-reports">C.4. <code class="filename">reports</code>: Bulk build reports</a></span></dt>
458<dt><span class="sect1"><a href="#ftp-source">C.5. <code class="filename">current</code>, 459<dt><span class="sect1"><a href="#ftp-source">C.5. <code class="filename">current</code>,
459<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>: 460<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>:
460source packages</a></span></dt> 461source packages</a></span></dt>
461</dl></dd> 462</dl></dd>
462<dt><span class="appendix"><a href="#editing">D. Editing guidelines for the pkgsrc guide</a></span></dt> 463<dt><span class="appendix"><a href="#editing">D. Editing guidelines for the pkgsrc guide</a></span></dt>
463<dd><dl> 464<dd><dl>
464<dt><span class="sect1"><a href="#targets">D.1. Make targets</a></span></dt> 465<dt><span class="sect1"><a href="#targets">D.1. Make targets</a></span></dt>
465<dt><span class="sect1"><a href="#procedure">D.2. Procedure</a></span></dt> 466<dt><span class="sect1"><a href="#procedure">D.2. Procedure</a></span></dt>
466</dl></dd> 467</dl></dd>
467</dl> 468</dl>
468</div> 469</div>
469<div class="list-of-tables"> 470<div class="list-of-tables">
470<p><b>List of Tables</b></p> 471<p><b>List of Tables</b></p>
471<dl> 472<dl>
472<dt>1.1. <a href="#supported-platforms">Platforms supported by pkgsrc</a> 473<dt>1.1. <a href="#supported-platforms">Platforms supported by pkgsrc</a>
473</dt> 474</dt>
474<dt>11.1. <a href="#patch-examples">Patching examples</a> 475<dt>11.1. <a href="#patch-examples">Patching examples</a>
475</dt> 476</dt>
476<dt>23.1. <a href="#plist-handling">PLIST handling for GNOME packages</a> 477<dt>23.1. <a href="#plist-handling">PLIST handling for GNOME packages</a>
477</dt> 478</dt>
478</dl> 479</dl>
479</div> 480</div>
480<div class="chapter"> 481<div class="chapter">
481<div class="titlepage"><div><div><h1 class="title"> 482<div class="titlepage"><div><div><h1 class="title">
482<a name="introduction"></a>Chapter 1. What is pkgsrc?</h1></div></div></div> 483<a name="introduction"></a>Chapter 1. What is pkgsrc?</h1></div></div></div>
483<div class="toc"> 484<div class="toc">
484<p><b>Table of Contents</b></p> 485<p><b>Table of Contents</b></p>
485<dl> 486<dl>
486<dt><span class="sect1"><a href="#introduction-section">1.1. Introduction</a></span></dt> 487<dt><span class="sect1"><a href="#introduction-section">1.1. Introduction</a></span></dt>
487<dd><dl> 488<dd><dl>
488<dt><span class="sect2"><a href="#why-pkgsrc">1.1.1. Why pkgsrc?</a></span></dt> 489<dt><span class="sect2"><a href="#why-pkgsrc">1.1.1. Why pkgsrc?</a></span></dt>
489<dt><span class="sect2"><a href="#intro.platforms">1.1.2. Supported platforms</a></span></dt> 490<dt><span class="sect2"><a href="#intro.platforms">1.1.2. Supported platforms</a></span></dt>
490</dl></dd> 491</dl></dd>
491<dt><span class="sect1"><a href="#overview">1.2. Overview</a></span></dt> 492<dt><span class="sect1"><a href="#overview">1.2. Overview</a></span></dt>
492<dt><span class="sect1"><a href="#terminology">1.3. Terminology</a></span></dt> 493<dt><span class="sect1"><a href="#terminology">1.3. Terminology</a></span></dt>
493<dd><dl><dt><span class="sect2"><a href="#term.roles">1.3.1. Roles involved in pkgsrc</a></span></dt></dl></dd> 494<dd><dl><dt><span class="sect2"><a href="#term.roles">1.3.1. Roles involved in pkgsrc</a></span></dt></dl></dd>
494<dt><span class="sect1"><a href="#typography">1.4. Typography</a></span></dt> 495<dt><span class="sect1"><a href="#typography">1.4. Typography</a></span></dt>
495</dl> 496</dl>
496</div> 497</div>
497<div class="sect1"> 498<div class="sect1">
498<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 499<div class="titlepage"><div><div><h2 class="title" style="clear: both">
499<a name="introduction-section"></a>1.1. Introduction</h2></div></div></div> 500<a name="introduction-section"></a>1.1. Introduction</h2></div></div></div>
500<p>There is a lot of software freely available for Unix-based 501<p>There is a lot of software freely available for Unix-based
501systems, which is usually available in form of the source code. Before 502systems, which is usually available in form of the source code. Before
502such software can be used, it needs to be configured to the local 503such software can be used, it needs to be configured to the local
503system, compiled and installed, and this is exactly what The NetBSD 504system, compiled and installed, and this is exactly what The NetBSD
504Packages Collection (pkgsrc) does. pkgsrc also has some basic commands 505Packages Collection (pkgsrc) does. pkgsrc also has some basic commands
505to handle binary packages, so that not every user has to build the 506to handle binary packages, so that not every user has to build the
506packages for himself, which is a time-costly task.</p> 507packages for himself, which is a time-costly task.</p>
507<p>pkgsrc currently contains several thousand packages, 508<p>pkgsrc currently contains several thousand packages,
508 including:</p> 509 including:</p>
509<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 510<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
510<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/apache/README.html" target="_top"><code class="filename">www/apache</code></a> - The Apache 511<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/apache/README.html" target="_top"><code class="filename">www/apache</code></a> - The Apache
511 web server</p></li> 512 web server</p></li>
512<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a> - The Firefox 513<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a> - The Firefox
513 web browser</p></li> 514 web browser</p></li>
514<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome/README.html" target="_top"><code class="filename">meta-pkgs/gnome</code></a> - The GNOME 515<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome/README.html" target="_top"><code class="filename">meta-pkgs/gnome</code></a> - The GNOME
515 Desktop Environment</p></li> 516 Desktop Environment</p></li>
516<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/kde3/README.html" target="_top"><code class="filename">meta-pkgs/kde3</code></a> - The K 517<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/kde3/README.html" target="_top"><code class="filename">meta-pkgs/kde3</code></a> - The K
517 Desktop Environment</p></li> 518 Desktop Environment</p></li>
518</ul></div> 519</ul></div>
519<p>...just to name a few.</p> 520<p>...just to name a few.</p>
520<p>pkgsrc has built-in support for handling varying dependencies, 521<p>pkgsrc has built-in support for handling varying dependencies,
521 such as pthreads and X11, and extended features such as IPv6 support on 522 such as pthreads and X11, and extended features such as IPv6 support on
522 a range of platforms.</p> 523 a range of platforms.</p>
523<div class="sect2"> 524<div class="sect2">
524<div class="titlepage"><div><div><h3 class="title"> 525<div class="titlepage"><div><div><h3 class="title">
525<a name="why-pkgsrc"></a>1.1.1. Why pkgsrc?</h3></div></div></div> 526<a name="why-pkgsrc"></a>1.1.1. Why pkgsrc?</h3></div></div></div>
526<p> 527<p>
527pkgsrc provides the following key features: 528pkgsrc provides the following key features:
528</p> 529</p>
529<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 530<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
530<li class="listitem"><p>Easy building of software from source as well as the creation 531<li class="listitem"><p>Easy building of software from source as well as the creation
531 and installation of binary packages. The source and latest 532 and installation of binary packages. The source and latest
532 patches are retrieved from a master or mirror download site, checksum 533 patches are retrieved from a master or mirror download site, checksum
533 verified, then built on your system. Support for binary-only 534 verified, then built on your system. Support for binary-only
534 distributions is available for both native platforms and NetBSD 535 distributions is available for both native platforms and NetBSD
535 emulated platforms.</p></li> 536 emulated platforms.</p></li>
536<li class="listitem"><p>All packages are installed in a consistent directory tree, 537<li class="listitem"><p>All packages are installed in a consistent directory tree,
537 including binaries, libraries, man pages and other 538 including binaries, libraries, man pages and other
538 documentation.</p></li> 539 documentation.</p></li>
539<li class="listitem"><p>Package dependencies, including when performing package updates, 540<li class="listitem"><p>Package dependencies, including when performing package updates,
540 are handled automatically. The configuration files of various 541 are handled automatically. The configuration files of various
541 packages are handled automatically during updates, so local changes 542 packages are handled automatically during updates, so local changes
542 are preserved.</p></li> 543 are preserved.</p></li>
543<li class="listitem"><p>Like NetBSD, pkgsrc is designed with portability in mind and 544<li class="listitem"><p>Like NetBSD, pkgsrc is designed with portability in mind and
544 consists of highly portable code. This allows the greatest speed of 545 consists of highly portable code. This allows the greatest speed of
545 development when porting to a new platform. This portability also 546 development when porting to a new platform. This portability also
546 ensures that pkgsrc is <span class="emphasis"><em>consistent across all 547 ensures that pkgsrc is <span class="emphasis"><em>consistent across all
547 platforms</em></span>.</p></li> 548 platforms</em></span>.</p></li>
548<li class="listitem"><p>The installation prefix, acceptable software licenses, 549<li class="listitem"><p>The installation prefix, acceptable software licenses,
549 international encryption requirements and build-time options for a 550 international encryption requirements and build-time options for a
550 large number of packages are all set in a simple, central 551 large number of packages are all set in a simple, central
551 configuration file.</p></li> 552 configuration file.</p></li>
552<li class="listitem"><p>The entire source (not including the distribution files) is 553<li class="listitem"><p>The entire source (not including the distribution files) is
553 freely available under a BSD license, so you may extend and adapt 554 freely available under a BSD license, so you may extend and adapt
554 pkgsrc to your needs. Support for local packages and patches is 555 pkgsrc to your needs. Support for local packages and patches is
555 available right out of the box, so you can configure it specifically 556 available right out of the box, so you can configure it specifically
556 for your environment.</p></li> 557 for your environment.</p></li>
557</ul></div> 558</ul></div>
558<p>The following principles are basic to pkgsrc:</p> 559<p>The following principles are basic to pkgsrc:</p>
559<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 560<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
560<li class="listitem"><p><span class="quote">&#8220;<span class="quote">It should only work if it's right.</span>&#8221;</span> 561<li class="listitem"><p><span class="quote">&#8220;<span class="quote">It should only work if it's right.</span>&#8221;</span>
561&mdash; That means, if a package contains bugs, it's better to find 562&mdash; That means, if a package contains bugs, it's better to find
562them and to complain about them rather than to just install the package 563them and to complain about them rather than to just install the package
563and hope that it works. There are numerous checks in pkgsrc that try to 564and hope that it works. There are numerous checks in pkgsrc that try to
564find such bugs: Static analysis tools (<a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>), build-time checks (portability 565find such bugs: Static analysis tools (<a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>), build-time checks (portability
565of shell scripts), and post-installation checks (installed files, 566of shell scripts), and post-installation checks (installed files,
566references to shared libraries, script interpreters).</p></li> 567references to shared libraries, script interpreters).</p></li>
567<li class="listitem"><p><span class="quote">&#8220;<span class="quote">If it works, it should work everywhere</span>&#8221;</span> 568<li class="listitem"><p><span class="quote">&#8220;<span class="quote">If it works, it should work everywhere</span>&#8221;</span>
568&mdash; Like NetBSD has been ported to many hardware architectures, 569&mdash; Like NetBSD has been ported to many hardware architectures,
569pkgsrc has been ported to many operating systems. Care is taken that 570pkgsrc has been ported to many operating systems. Care is taken that
570packages behave the same on all platforms.</p></li> 571packages behave the same on all platforms.</p></li>
571</ul></div> 572</ul></div>
572</div> 573</div>
573<div class="sect2"> 574<div class="sect2">
574<div class="titlepage"><div><div><h3 class="title"> 575<div class="titlepage"><div><div><h3 class="title">
575<a name="intro.platforms"></a>1.1.2. Supported platforms</h3></div></div></div> 576<a name="intro.platforms"></a>1.1.2. Supported platforms</h3></div></div></div>
576<p>pkgsrc consists of both a source distribution and a binary 577<p>pkgsrc consists of both a source distribution and a binary
577distribution for these operating systems. After retrieving the required 578distribution for these operating systems. After retrieving the required
578source or binaries, you can be up and running with pkgsrc in just 579source or binaries, you can be up and running with pkgsrc in just
579minutes!</p> 580minutes!</p>
580<p>pkgsrc was derived from FreeBSD's ports system, and 581<p>pkgsrc was derived from FreeBSD's ports system, and
581 initially developed for NetBSD only. Since then, pkgsrc has 582 initially developed for NetBSD only. Since then, pkgsrc has
582 grown a lot, and now supports the following platforms:</p> 583 grown a lot, and now supports the following platforms:</p>
583<div class="table"> 584<div class="table">
584<a name="supported-platforms"></a><p class="title"><b>Table 1.1. Platforms supported by pkgsrc</b></p> 585<a name="supported-platforms"></a><p class="title"><b>Table 1.1. Platforms supported by pkgsrc</b></p>
585<div class="table-contents"><table summary="Platforms supported by pkgsrc" border="1"> 586<div class="table-contents"><table summary="Platforms supported by pkgsrc" border="1">
586<colgroup> 587<colgroup>
587<col> 588<col>
588<col> 589<col>
589</colgroup> 590</colgroup>
590<thead><tr> 591<thead><tr>
591<th>Platform</th> 592<th>Platform</th>
592<th>Date Support Added</th> 593<th>Date Support Added</th>
593</tr></thead> 594</tr></thead>
594<tbody> 595<tbody>
595<tr> 596<tr>
596<td><a class="ulink" href="http://www.NetBSD.org/" target="_top">NetBSD</a></td> 597<td><a class="ulink" href="http://www.NetBSD.org/" target="_top">NetBSD</a></td>
597<td align="center">Aug 1997</td> 598<td align="center">Aug 1997</td>
598</tr> 599</tr>
599<tr> 600<tr>
600<td><a class="ulink" href="http://wwws.sun.com/software/solaris/" target="_top">Solaris</a></td> 601<td><a class="ulink" href="http://wwws.sun.com/software/solaris/" target="_top">Solaris</a></td>
601<td align="center">Mar 1999</td> 602<td align="center">Mar 1999</td>
602</tr> 603</tr>
603<tr> 604<tr>
604<td><a class="ulink" href="http://www.kernel.org/" target="_top">Linux</a></td> 605<td><a class="ulink" href="http://www.kernel.org/" target="_top">Linux</a></td>
605<td align="center">Jun 1999</td> 606<td align="center">Jun 1999</td>
606</tr> 607</tr>
607<tr> 608<tr>
608<td> 609<td>
609 <a class="ulink" href="http://developer.apple.com/darwin/" target="_top">Darwin</a> 610 <a class="ulink" href="http://developer.apple.com/darwin/" target="_top">Darwin</a>
610 (<a class="ulink" href="http://developer.apple.com/macosx/" target="_top">Mac OS X</a>) 611 (<a class="ulink" href="http://developer.apple.com/macosx/" target="_top">Mac OS X</a>)
611 </td> 612 </td>
612<td align="center">Oct 2001</td> 613<td align="center">Oct 2001</td>
613</tr> 614</tr>
614<tr> 615<tr>
615<td><a class="ulink" href="http://www.freebsd.org/" target="_top">FreeBSD</a></td> 616<td><a class="ulink" href="http://www.freebsd.org/" target="_top">FreeBSD</a></td>
616<td align="center">Nov 2002</td> 617<td align="center">Nov 2002</td>
617</tr> 618</tr>
618<tr> 619<tr>
619<td><a class="ulink" href="http://www.openbsd.org/" target="_top">OpenBSD</a></td> 620<td><a class="ulink" href="http://www.openbsd.org/" target="_top">OpenBSD</a></td>
620<td align="center">Nov 2002</td> 621<td align="center">Nov 2002</td>
621</tr> 622</tr>
622<tr> 623<tr>
623<td><a class="ulink" href="http://www.sgi.com/software/irix/" target="_top">IRIX</a></td> 624<td><a class="ulink" href="http://www.sgi.com/software/irix/" target="_top">IRIX</a></td>
624<td align="center">Dec 2002</td> 625<td align="center">Dec 2002</td>
625</tr> 626</tr>
626<tr> 627<tr>
627<td>BSD/OS</td> 628<td>BSD/OS</td>
628<td align="center">Dec 2003</td> 629<td align="center">Dec 2003</td>
629</tr> 630</tr>
630<tr> 631<tr>
631<td><a class="ulink" href="http://www-1.ibm.com/servers/aix/" target="_top">AIX</a></td> 632<td><a class="ulink" href="http://www-1.ibm.com/servers/aix/" target="_top">AIX</a></td>
632<td align="center">Dec 2003</td> 633<td align="center">Dec 2003</td>
633</tr> 634</tr>
634<tr> 635<tr>
635<td> 636<td>
636 <a class="ulink" href="http://www.microsoft.com/windows/sfu/" target="_top">Interix</a> 637 <a class="ulink" href="http://www.microsoft.com/windows/sfu/" target="_top">Interix</a>
637 (Microsoft Windows Services for Unix) 638 (Microsoft Windows Services for Unix)
638 </td> 639 </td>
639<td align="center">Mar 2004</td> 640<td align="center">Mar 2004</td>
640</tr> 641</tr>
641<tr> 642<tr>
642<td><a class="ulink" href="http://www.dragonflybsd.org/" target="_top">DragonFlyBSD</a></td> 643<td><a class="ulink" href="http://www.dragonflybsd.org/" target="_top">DragonFlyBSD</a></td>
643<td align="center">Oct 2004</td> 644<td align="center">Oct 2004</td>
644</tr> 645</tr>
645<tr> 646<tr>
646<td><a class="ulink" href="http://www.tru64.org/" target="_top">OSF/1</a></td> 647<td><a class="ulink" href="http://www.tru64.org/" target="_top">OSF/1</a></td>
647<td align="center">Nov 2004</td> 648<td align="center">Nov 2004</td>
648</tr> 649</tr>
649<tr> 650<tr>
650<td><a class="ulink" href="http://www.hp.com/products1/unix/" target="_top">HP-UX</a></td> 651<td><a class="ulink" href="http://www.hp.com/products1/unix/" target="_top">HP-UX</a></td>
651<td align="center">Apr 2007</td> 652<td align="center">Apr 2007</td>
652</tr> 653</tr>
653<tr> 654<tr>
654<td><a class="ulink" href="http://www.haiku-os.org/" target="_top">Haiku</a></td> 655<td><a class="ulink" href="http://www.haiku-os.org/" target="_top">Haiku</a></td>
655<td align="center">Sep 2010</td> 656<td align="center">Sep 2010</td>
656</tr> 657</tr>
657<tr> 658<tr>
658<td><a class="ulink" href="http://www.mirbsd.org/" target="_top">MirBSD</a></td> 659<td><a class="ulink" href="http://www.mirbsd.org/" target="_top">MirBSD</a></td>
659<td align="center">Jan 2011</td> 660<td align="center">Jan 2011</td>
660</tr> 661</tr>
661<tr> 662<tr>
662<td><a class="ulink" href="http://www.minix3.org/" target="_top">Minix3</a></td> 663<td><a class="ulink" href="http://www.minix3.org/" target="_top">Minix3</a></td>
663<td align="center">Nov 2011</td> 664<td align="center">Nov 2011</td>
664</tr> 665</tr>
665<tr> 666<tr>
666<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>
667<td align="center">Mar 2013</td> 668<td align="center">Mar 2013</td>
668</tr> 669</tr>
669<tr> 670<tr>
670<td><a class="ulink" href="http://www.debian.org/ports/kfreebsd-gnu/" target="_top">GNU/kFreeBSD</a></td> 671<td><a class="ulink" href="http://www.debian.org/ports/kfreebsd-gnu/" target="_top">GNU/kFreeBSD</a></td>
671<td align="center">Jul 2013</td> 672<td align="center">Jul 2013</td>
672</tr> 673</tr>
673</tbody> 674</tbody>
674</table></div> 675</table></div>
675</div> 676</div>
676<br class="table-break"> 677<br class="table-break">
677</div> 678</div>
678</div> 679</div>
679<div class="sect1"> 680<div class="sect1">
680<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 681<div class="titlepage"><div><div><h2 class="title" style="clear: both">
681<a name="overview"></a>1.2. Overview</h2></div></div></div> 682<a name="overview"></a>1.2. Overview</h2></div></div></div>
682<p>This document is divided into three parts. The first, 683<p>This document is divided into three parts. The first,
683 <a class="link" href="#users-guide" title="Part I. The pkgsrc user's guide">The pkgsrc user's guide</a>, 684 <a class="link" href="#users-guide" title="Part I. The pkgsrc user's guide">The pkgsrc user's guide</a>,
684 describes how one can use one of the packages in the Package 685 describes how one can use one of the packages in the Package
685 Collection, either by installing a precompiled binary package, 686 Collection, either by installing a precompiled binary package,
686 or by building one's own copy using the NetBSD package system. 687 or by building one's own copy using the NetBSD package system.
687 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 688 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
688 package so it can be easily built by other NetBSD users without 689 package so it can be easily built by other NetBSD users without
689 knowing about the package's building details. The third part, 690 knowing about the package's building details. The third part,
690 <a class="link" href="#infrastructure" title="Part III. The pkgsrc infrastructure internals">The pkgsrc infrastructure internals</a> 691 <a class="link" href="#infrastructure" title="Part III. The pkgsrc infrastructure internals">The pkgsrc infrastructure internals</a>
691 is intended for those who want to understand how pkgsrc is 692 is intended for those who want to understand how pkgsrc is
692 implemented.</p> 693 implemented.</p>
693<p>This document is available in various formats: 694<p>This document is available in various formats:
694 <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> 695 <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>
695</div> 696</div>
696<div class="sect1"> 697<div class="sect1">
697<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 698<div class="titlepage"><div><div><h2 class="title" style="clear: both">
698<a name="terminology"></a>1.3. Terminology</h2></div></div></div> 699<a name="terminology"></a>1.3. Terminology</h2></div></div></div>
699<p>There has been a lot of talk about <span class="quote">&#8220;<span class="quote">ports</span>&#8221;</span>, 700<p>There has been a lot of talk about <span class="quote">&#8220;<span class="quote">ports</span>&#8221;</span>,
700 <span class="quote">&#8220;<span class="quote">packages</span>&#8221;</span>, etc. so far. Here is a description of all the 701 <span class="quote">&#8220;<span class="quote">packages</span>&#8221;</span>, etc. so far. Here is a description of all the
701 terminology used within this document.</p> 702 terminology used within this document.</p>
702<div class="variablelist"><dl class="variablelist"> 703<div class="variablelist"><dl class="variablelist">
703<dt><span class="term">Package</span></dt> 704<dt><span class="term">Package</span></dt>
704<dd><p>A set of files and building instructions 705<dd><p>A set of files and building instructions
705 that describe what's necessary 706 that describe what's necessary
706 to build a certain piece of software using 707 to build a certain piece of software using
707 pkgsrc. Packages are traditionally stored under 708 pkgsrc. Packages are traditionally stored under
708 <code class="filename">/usr/pkgsrc</code>.</p></dd> 709 <code class="filename">/usr/pkgsrc</code>.</p></dd>
709<dt><span class="term">The NetBSD package system</span></dt> 710<dt><span class="term">The NetBSD package system</span></dt>
710<dd><p>This is the former name of <span class="quote">&#8220;<span class="quote">pkgsrc</span>&#8221;</span>. It 711<dd><p>This is the former name of <span class="quote">&#8220;<span class="quote">pkgsrc</span>&#8221;</span>. It
711 is part of the NetBSD operating system and can be bootstrapped 712 is part of the NetBSD operating system and can be bootstrapped
712 to run on non-NetBSD operating systems as well. It handles 713 to run on non-NetBSD operating systems as well. It handles
713 building (compiling), installing, and removing of 714 building (compiling), installing, and removing of
714 packages.</p></dd> 715 packages.</p></dd>
715<dt><span class="term">Distfile</span></dt> 716<dt><span class="term">Distfile</span></dt>
716<dd><p>This term describes the file or files that are 717<dd><p>This term describes the file or files that are
717 provided by the author of the piece of software to 718 provided by the author of the piece of software to
718 distribute his work. All the changes necessary to build on 719 distribute his work. All the changes necessary to build on
719 NetBSD are reflected in the corresponding package. Usually 720 NetBSD are reflected in the corresponding package. Usually
720 the distfile is in the form of a compressed tar-archive, 721 the distfile is in the form of a compressed tar-archive,
721 but other types are possible, too. Distfiles are usually 722 but other types are possible, too. Distfiles are usually
722 stored below 723 stored below
723 <code class="filename">/usr/pkgsrc/distfiles</code>.</p></dd> 724 <code class="filename">/usr/pkgsrc/distfiles</code>.</p></dd>
724<dt><span class="term">Port</span></dt> 725<dt><span class="term">Port</span></dt>
725<dd><p>This is the term used by FreeBSD and OpenBSD people 726<dd><p>This is the term used by FreeBSD and OpenBSD people
726 for what we call a package. 727 for what we call a package.
727 In NetBSD terminology, <span class="quote">&#8220;<span class="quote">port</span>&#8221;</span> refers to a different 728 In NetBSD terminology, <span class="quote">&#8220;<span class="quote">port</span>&#8221;</span> refers to a different
728 architecture.</p></dd> 729 architecture.</p></dd>
729<dt><span class="term">Precompiled/binary package</span></dt> 730<dt><span class="term">Precompiled/binary package</span></dt>
730<dd> 731<dd>
731<p>A set of binaries built with pkgsrc from a distfile 732<p>A set of binaries built with pkgsrc from a distfile
732 and stuffed together in a single <code class="filename">.tgz</code> 733 and stuffed together in a single <code class="filename">.tgz</code>
733 file so it can be installed on machines of the same 734 file so it can be installed on machines of the same
734 machine architecture without the need to 735 machine architecture without the need to
735 recompile. Packages are usually generated in 736 recompile. Packages are usually generated in
736 <code class="filename">/usr/pkgsrc/packages</code>; there is also 737 <code class="filename">/usr/pkgsrc/packages</code>; there is also
737 an archive on <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/" target="_top">ftp.NetBSD.org</a>.</p> 738 an archive on <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/" target="_top">ftp.NetBSD.org</a>.</p>
738<p>Sometimes, this is referred to by the term <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> too, 739<p>Sometimes, this is referred to by the term <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> too,
739 especially in the context of precompiled packages.</p> 740 especially in the context of precompiled packages.</p>
740</dd> 741</dd>
741<dt><span class="term">Program</span></dt> 742<dt><span class="term">Program</span></dt>
742<dd><p>The piece of software to be installed which will be 743<dd><p>The piece of software to be installed which will be
743 constructed from all the files in the distfile by the 744 constructed from all the files in the distfile by the
744 actions defined in the corresponding package.</p></dd> 745 actions defined in the corresponding package.</p></dd>
745</dl></div> 746</dl></div>
746<div class="sect2"> 747<div class="sect2">
747<div class="titlepage"><div><div><h3 class="title"> 748<div class="titlepage"><div><div><h3 class="title">
748<a name="term.roles"></a>1.3.1. Roles involved in pkgsrc</h3></div></div></div> 749<a name="term.roles"></a>1.3.1. Roles involved in pkgsrc</h3></div></div></div>
749<div class="variablelist"><dl class="variablelist"> 750<div class="variablelist"><dl class="variablelist">
750<dt><span class="term">pkgsrc users</span></dt> 751<dt><span class="term">pkgsrc users</span></dt>
751<dd> 752<dd>
752<p>The 753<p>The
753 pkgsrc users are people who use the packages provided by pkgsrc. 754 pkgsrc users are people who use the packages provided by pkgsrc.
754 Typically they are system administrators. The people using the 755 Typically they are system administrators. The people using the
755 software that is inside the packages (maybe called <span class="quote">&#8220;<span class="quote">end 756 software that is inside the packages (maybe called <span class="quote">&#8220;<span class="quote">end
756 users</span>&#8221;</span>) are not covered by the pkgsrc guide.</p> 757 users</span>&#8221;</span>) are not covered by the pkgsrc guide.</p>
757<p>There are two kinds of pkgsrc users: Some only want to 758<p>There are two kinds of pkgsrc users: Some only want to
758 install pre-built binary packages. Others build the pkgsrc 759 install pre-built binary packages. Others build the pkgsrc
759 packages from source, either for installing them directly or for 760 packages from source, either for installing them directly or for
760 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 761 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
761 documentation.</p> 762 documentation.</p>
762</dd> 763</dd>
763<dt><span class="term">package maintainers</span></dt> 764<dt><span class="term">package maintainers</span></dt>
764<dd><p>A 765<dd><p>A
765 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> 766 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>
766<dt><span class="term">infrastructure developers</span></dt> 767<dt><span class="term">infrastructure developers</span></dt>
767<dd><p>These people are involved in all those files 768<dd><p>These people are involved in all those files
768 that live in the <code class="filename">mk/</code> directory and below. 769 that live in the <code class="filename">mk/</code> directory and below.
769 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, 770 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,
770 too.</p></dd> 771 too.</p></dd>
771</dl></div> 772</dl></div>
772</div> 773</div>
773</div> 774</div>
774<div class="sect1"> 775<div class="sect1">
775<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 776<div class="titlepage"><div><div><h2 class="title" style="clear: both">
776<a name="typography"></a>1.4. Typography</h2></div></div></div> 777<a name="typography"></a>1.4. Typography</h2></div></div></div>
777<p>When giving examples for commands, shell prompts are used to 778<p>When giving examples for commands, shell prompts are used to
778 show if the command should/can be issued as root, or if 779 show if the command should/can be issued as root, or if
779 <span class="quote">&#8220;<span class="quote">normal</span>&#8221;</span> user privileges are sufficient. We use a 780 <span class="quote">&#8220;<span class="quote">normal</span>&#8221;</span> user privileges are sufficient. We use a
780 <code class="prompt">#</code> for root's shell prompt, and a <code class="prompt">%</code> for users' 781 <code class="prompt">#</code> for root's shell prompt, and a <code class="prompt">%</code> for users'
781 shell prompt, assuming they use the C-shell or tcsh.</p> 782 shell prompt, assuming they use the C-shell or tcsh.</p>
782</div> 783</div>
783</div> 784</div>
784<div class="part"> 785<div class="part">
785<div class="titlepage"><div><div><h1 class="title"> 786<div class="titlepage"><div><div><h1 class="title">
786<a name="users-guide"></a>Part I. The pkgsrc user's guide</h1></div></div></div> 787<a name="users-guide"></a>Part I. The pkgsrc user's guide</h1></div></div></div>
787<div class="toc"> 788<div class="toc">
788<p><b>Table of Contents</b></p> 789<p><b>Table of Contents</b></p>
789<dl> 790<dl>
790<dt><span class="chapter"><a href="#getting">2. Where to get pkgsrc and how to keep it up-to-date</a></span></dt> 791<dt><span class="chapter"><a href="#getting">2. Where to get pkgsrc and how to keep it up-to-date</a></span></dt>
791<dd><dl> 792<dd><dl>
792<dt><span class="sect1"><a href="#getting-first">2.1. Getting pkgsrc for the first time</a></span></dt> 793<dt><span class="sect1"><a href="#getting-first">2.1. Getting pkgsrc for the first time</a></span></dt>
793<dd><dl> 794<dd><dl>
794<dt><span class="sect2"><a href="#getting-via-tar">2.1.1. As tar archive</a></span></dt> 795<dt><span class="sect2"><a href="#getting-via-tar">2.1.1. As tar archive</a></span></dt>
795<dt><span class="sect2"><a href="#getting-via-cvs">2.1.2. Via anonymous CVS</a></span></dt> 796<dt><span class="sect2"><a href="#getting-via-cvs">2.1.2. Via anonymous CVS</a></span></dt>
796</dl></dd> 797</dl></dd>
797<dt><span class="sect1"><a href="#uptodate">2.2. Keeping pkgsrc up-to-date</a></span></dt> 798<dt><span class="sect1"><a href="#uptodate">2.2. Keeping pkgsrc up-to-date</a></span></dt>
798<dd><dl> 799<dd><dl>
799<dt><span class="sect2"><a href="#uptodate-tar">2.2.1. Via tar files</a></span></dt> 800<dt><span class="sect2"><a href="#uptodate-tar">2.2.1. Via tar files</a></span></dt>
800<dt><span class="sect2"><a href="#uptodate-cvs">2.2.2. Via CVS</a></span></dt> 801<dt><span class="sect2"><a href="#uptodate-cvs">2.2.2. Via CVS</a></span></dt>
801</dl></dd> 802</dl></dd>
802</dl></dd> 803</dl></dd>
803<dt><span class="chapter"><a href="#platforms">3. Using pkgsrc on systems other than NetBSD</a></span></dt> 804<dt><span class="chapter"><a href="#platforms">3. Using pkgsrc on systems other than NetBSD</a></span></dt>
804<dd><dl> 805<dd><dl>
805<dt><span class="sect1"><a href="#binarydist">3.1. Binary distribution</a></span></dt> 806<dt><span class="sect1"><a href="#binarydist">3.1. Binary distribution</a></span></dt>
806<dt><span class="sect1"><a href="#bootstrapping-pkgsrc">3.2. Bootstrapping pkgsrc</a></span></dt> 807<dt><span class="sect1"><a href="#bootstrapping-pkgsrc">3.2. Bootstrapping pkgsrc</a></span></dt>
807<dt><span class="sect1"><a href="#platform-specific-notes">3.3. Platform-specific notes</a></span></dt> 808<dt><span class="sect1"><a href="#platform-specific-notes">3.3. Platform-specific notes</a></span></dt>
808<dd><dl> 809<dd><dl>
809<dt><span class="sect2"><a href="#cygwin">3.3.1. Cygwin</a></span></dt> 810<dt><span class="sect2"><a href="#cygwin">3.3.1. Cygwin</a></span></dt>
810<dt><span class="sect2"><a href="#darwin">3.3.2. Darwin (Mac OS X)</a></span></dt> 811<dt><span class="sect2"><a href="#darwin">3.3.2. Darwin (Mac OS X)</a></span></dt>
811<dt><span class="sect2"><a href="#freebsd">3.3.3. FreeBSD</a></span></dt> 812<dt><span class="sect2"><a href="#freebsd">3.3.3. FreeBSD</a></span></dt>
812<dt><span class="sect2"><a href="#gnukfreebsd">3.3.4. GNU/kFreeBSD</a></span></dt> 813<dt><span class="sect2"><a href="#gnukfreebsd">3.3.4. GNU/kFreeBSD</a></span></dt>
813<dt><span class="sect2"><a href="#interix">3.3.5. Interix</a></span></dt> 814<dt><span class="sect2"><a href="#interix">3.3.5. Interix</a></span></dt>
814<dt><span class="sect2"><a href="#irix">3.3.6. IRIX</a></span></dt> 815<dt><span class="sect2"><a href="#irix">3.3.6. IRIX</a></span></dt>
815<dt><span class="sect2"><a href="#linux">3.3.7. Linux</a></span></dt> 816<dt><span class="sect2"><a href="#linux">3.3.7. Linux</a></span></dt>
816<dt><span class="sect2"><a href="#mirbsd">3.3.8. MirBSD</a></span></dt> 817<dt><span class="sect2"><a href="#mirbsd">3.3.8. MirBSD</a></span></dt>
817<dt><span class="sect2"><a href="#openbsd">3.3.9. OpenBSD</a></span></dt> 818<dt><span class="sect2"><a href="#openbsd">3.3.9. OpenBSD</a></span></dt>
818<dt><span class="sect2"><a href="#solaris">3.3.10. Solaris</a></span></dt> 819<dt><span class="sect2"><a href="#solaris">3.3.10. Solaris</a></span></dt>
819</dl></dd> 820</dl></dd>
820</dl></dd> 821</dl></dd>
821<dt><span class="chapter"><a href="#using">4. Using pkgsrc</a></span></dt> 822<dt><span class="chapter"><a href="#using">4. Using pkgsrc</a></span></dt>
822<dd><dl> 823<dd><dl>
823<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt> 824<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt>
824<dd><dl> 825<dd><dl>
825<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt> 826<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt>
826<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt> 827<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt>
827<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt> 828<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt>
828<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt> 829<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt>
829<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt> 830<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt>
830<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> 831<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>
831<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt> 832<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt>
832<dt><span class="sect2"><a href="#a-word-of-warning">4.1.8. A word of warning</a></span></dt> 833<dt><span class="sect2"><a href="#a-word-of-warning">4.1.8. A word of warning</a></span></dt>
833</dl></dd> 834</dl></dd>
834<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt> 835<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt>
835<dd><dl> 836<dd><dl>
836<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt> 837<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt>
837<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt> 838<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt>
838<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt> 839<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt>
839</dl></dd> 840</dl></dd>
840</dl></dd> 841</dl></dd>
841<dt><span class="chapter"><a href="#configuring">5. Configuring pkgsrc</a></span></dt> 842<dt><span class="chapter"><a href="#configuring">5. Configuring pkgsrc</a></span></dt>
842<dd><dl> 843<dd><dl>
843<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt> 844<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt>
844<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt> 845<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt>
845<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt> 846<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt>
846<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt> 847<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt>
847<dd><dl> 848<dd><dl>
848<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt> 849<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt>
849<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt> 850<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt>
850<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt> 851<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt>
851</dl></dd> 852</dl></dd>
852<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt> 853<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt>
853<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt> 854<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt>
854</dl></dd> 855</dl></dd>
855<dt><span class="chapter"><a href="#binary">6. Creating binary packages</a></span></dt> 856<dt><span class="chapter"><a href="#binary">6. Creating binary packages</a></span></dt>
856<dd><dl> 857<dd><dl>
857<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt> 858<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt>
858<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt> 859<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt>
859</dl></dd> 860</dl></dd>
860<dt><span class="chapter"><a href="#bulk">7. Creating binary packages for everything in pkgsrc (bulk 861<dt><span class="chapter"><a href="#bulk">7. Creating binary packages for everything in pkgsrc (bulk
861builds)</a></span></dt> 862builds)</a></span></dt>
862<dd><dl> 863<dd><dl>
863<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt> 864<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt>
864<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt> 865<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt>
865<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd> 866<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd>
866<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt> 867<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt>
867<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt> 868<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt>
868<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd> 869<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd>
869</dl></dd> 870</dl></dd>
870<dt><span class="chapter"><a href="#files">8. Directory layout of the installed files</a></span></dt> 871<dt><span class="chapter"><a href="#files">8. Directory layout of the installed files</a></span></dt>
871<dd><dl> 872<dd><dl>
872<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt> 873<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt>
873<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt> 874<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt>
874</dl></dd> 875</dl></dd>
875<dt><span class="chapter"><a href="#faq">9. Frequently Asked Questions</a></span></dt> 876<dt><span class="chapter"><a href="#faq">9. Frequently Asked Questions</a></span></dt>
876<dd><dl> 877<dd><dl>
877<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt> 878<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt>
878<dt><span class="sect1"><a href="#faq-pkgtools">9.2. Utilities for package management (pkgtools)</a></span></dt> 879<dt><span class="sect1"><a href="#pkgviews-docs">9.2. Where's the pkgviews documentation?</a></span></dt>
879<dt><span class="sect1"><a href="#non-root-pkgsrc">9.3. How to use pkgsrc as non-root</a></span></dt> 880<dt><span class="sect1"><a href="#faq-pkgtools">9.3. Utilities for package management (pkgtools)</a></span></dt>
880<dt><span class="sect1"><a href="#resume-transfers">9.4. How to resume transfers when fetching distfiles?</a></span></dt> 881<dt><span class="sect1"><a href="#non-root-pkgsrc">9.4. How to use pkgsrc as non-root</a></span></dt>
881<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> 882<dt><span class="sect1"><a href="#resume-transfers">9.5. How to resume transfers when fetching distfiles?</a></span></dt>
882<dt><span class="sect1"><a href="#fetch-behind-firewall">9.6. How to fetch files from behind a firewall</a></span></dt> 883<dt><span class="sect1"><a href="#x.org-from-pkgsrc">9.6. How can I install/use modular X.org from pkgsrc?</a></span></dt>
883<dt><span class="sect1"><a href="#fetch-https">9.7. How to fetch files from HTTPS sites</a></span></dt> 884<dt><span class="sect1"><a href="#fetch-behind-firewall">9.7. How to fetch files from behind a firewall</a></span></dt>
884<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> 885<dt><span class="sect1"><a href="#fetch-https">9.8. How to fetch files from HTTPS sites</a></span></dt>
885<dt><span class="sect1"><a href="#fetching-all-distfiles">9.9. How to fetch all distfiles at once</a></span></dt> 886<dt><span class="sect1"><a href="#passive-ftp">9.9. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</a></span></dt>
886<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 887<dt><span class="sect1"><a href="#fetching-all-distfiles">9.10. How to fetch all distfiles at once</a></span></dt>
 888<dt><span class="sect1"><a href="#tmac.andoc-missing">9.11. What does <span class="quote">&#8220;<span class="quote">Don't know how to make
887/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt> 889/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt>
888<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> 890<dt><span class="sect1"><a href="#bsd.own.mk-missing">9.12. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</a></span></dt>
889<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.12. Using 'sudo' with pkgsrc</a></span></dt> 891<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.13. Using 'sudo' with pkgsrc</a></span></dt>
890<dt><span class="sect1"><a href="#faq.conf">9.13. How do I change the location of configuration files?</a></span></dt> 892<dt><span class="sect1"><a href="#faq.conf">9.14. How do I change the location of configuration files?</a></span></dt>
891<dt><span class="sect1"><a href="#audit-packages">9.14. Automated security checks</a></span></dt> 893<dt><span class="sect1"><a href="#audit-packages">9.15. Automated security checks</a></span></dt>
892<dt><span class="sect1"><a href="#ufaq-cflags">9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt> 894<dt><span class="sect1"><a href="#ufaq-cflags">9.16. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt>
893<dt><span class="sect1"><a href="#ufaq-fail">9.16. A package does not build. What shall I do?</a></span></dt> 895<dt><span class="sect1"><a href="#ufaq-fail">9.17. A package does not build. What shall I do?</a></span></dt>
894<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> 896<dt><span class="sect1"><a href="#faq.rcs-conflicts">9.18. 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>
895</dl></dd> 897</dl></dd>
896</dl> 898</dl>
897</div> 899</div>
898<div class="chapter"> 900<div class="chapter">
899<div class="titlepage"><div><div><h2 class="title"> 901<div class="titlepage"><div><div><h2 class="title">
900<a name="getting"></a>Chapter 2. Where to get pkgsrc and how to keep it up-to-date</h2></div></div></div> 902<a name="getting"></a>Chapter 2. Where to get pkgsrc and how to keep it up-to-date</h2></div></div></div>
901<div class="toc"> 903<div class="toc">
902<p><b>Table of Contents</b></p> 904<p><b>Table of Contents</b></p>
903<dl> 905<dl>
904<dt><span class="sect1"><a href="#getting-first">2.1. Getting pkgsrc for the first time</a></span></dt> 906<dt><span class="sect1"><a href="#getting-first">2.1. Getting pkgsrc for the first time</a></span></dt>
905<dd><dl> 907<dd><dl>
906<dt><span class="sect2"><a href="#getting-via-tar">2.1.1. As tar archive</a></span></dt> 908<dt><span class="sect2"><a href="#getting-via-tar">2.1.1. As tar archive</a></span></dt>
907<dt><span class="sect2"><a href="#getting-via-cvs">2.1.2. Via anonymous CVS</a></span></dt> 909<dt><span class="sect2"><a href="#getting-via-cvs">2.1.2. Via anonymous CVS</a></span></dt>
908</dl></dd> 910</dl></dd>
909<dt><span class="sect1"><a href="#uptodate">2.2. Keeping pkgsrc up-to-date</a></span></dt> 911<dt><span class="sect1"><a href="#uptodate">2.2. Keeping pkgsrc up-to-date</a></span></dt>
910<dd><dl> 912<dd><dl>
911<dt><span class="sect2"><a href="#uptodate-tar">2.2.1. Via tar files</a></span></dt> 913<dt><span class="sect2"><a href="#uptodate-tar">2.2.1. Via tar files</a></span></dt>
912<dt><span class="sect2"><a href="#uptodate-cvs">2.2.2. Via CVS</a></span></dt> 914<dt><span class="sect2"><a href="#uptodate-cvs">2.2.2. Via CVS</a></span></dt>
913</dl></dd> 915</dl></dd>
914</dl> 916</dl>
915</div> 917</div>
916<p>Before you download and extract the files, you need to decide 918<p>Before you download and extract the files, you need to decide
917where you want to extract them. When using pkgsrc as root user, pkgsrc 919where you want to extract them. When using pkgsrc as root user, pkgsrc
918is usually installed in <code class="filename">/usr/pkgsrc</code>. You are though 920is usually installed in <code class="filename">/usr/pkgsrc</code>. You are though
919free to install the sources and binary packages wherever you want in 921free to install the sources and binary packages wherever you want in
920your filesystem, provided that the pathname does not contain white-space 922your filesystem, provided that the pathname does not contain white-space
921or other characters that are interpreted specially by the shell and some 923or other characters that are interpreted specially by the shell and some
922other programs. A safe bet is to use only letters, digits, underscores 924other programs. A safe bet is to use only letters, digits, underscores
923and dashes.</p> 925and dashes.</p>
924<div class="sect1"> 926<div class="sect1">
925<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 927<div class="titlepage"><div><div><h2 class="title" style="clear: both">
926<a name="getting-first"></a>2.1. Getting pkgsrc for the first time</h2></div></div></div> 928<a name="getting-first"></a>2.1. Getting pkgsrc for the first time</h2></div></div></div>
927<p>Before you download any pkgsrc files, you should decide 929<p>Before you download any pkgsrc files, you should decide
928 whether you want the <span class="emphasis"><em>current</em></span> branch or the 930 whether you want the <span class="emphasis"><em>current</em></span> branch or the
929 <span class="emphasis"><em>stable</em></span> branch. The latter is forked on a 931 <span class="emphasis"><em>stable</em></span> branch. The latter is forked on a
930 quarterly basis from the current branch and only gets modified 932 quarterly basis from the current branch and only gets modified
931 for security updates. The names of the stable branches are built 933 for security updates. The names of the stable branches are built
932 from the year and the quarter, for example 934 from the year and the quarter, for example
933 <code class="literal">2014Q3</code>.</p> 935 <code class="literal">2014Q3</code>.</p>
934<p>The second step is to decide <span class="emphasis"><em>how</em></span> you 936<p>The second step is to decide <span class="emphasis"><em>how</em></span> you
935 want to download pkgsrc. You can get it as a tar file or via CVS. 937 want to download pkgsrc. You can get it as a tar file or via CVS.
936 Both ways are described here.</p> 938 Both ways are described here.</p>
937<p>Note that tar archive contains CVS working copy. 939<p>Note that tar archive contains CVS working copy.
938 Thus you can switch to using CVS at any later time.</p> 940 Thus you can switch to using CVS at any later time.</p>
939<div class="sect2"> 941<div class="sect2">
940<div class="titlepage"><div><div><h3 class="title"> 942<div class="titlepage"><div><div><h3 class="title">
941<a name="getting-via-tar"></a>2.1.1. As tar archive</h3></div></div></div> 943<a name="getting-via-tar"></a>2.1.1. As tar archive</h3></div></div></div>
942<p>The primary download location for all pkgsrc files is 944<p>The primary download location for all pkgsrc files is
943 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/" target="_top">http://ftp.NetBSD.org/pub/pkgsrc/</a> or 945 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/" target="_top">http://ftp.NetBSD.org/pub/pkgsrc/</a> or
944 <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/" target="_top">ftp://ftp.NetBSD.org/pub/pkgsrc/</a> 946 <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/" target="_top">ftp://ftp.NetBSD.org/pub/pkgsrc/</a>
945 (it points to the same location). 947 (it points to the same location).
946 There are a number of subdirectories for different purposes, 948 There are a number of subdirectories for different purposes,
947 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> 949 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>
948<p>The tar archive for the current branch is in the directory 950<p>The tar archive for the current branch is in the directory
949 <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>. 951 <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>.
950 It is autogenerated daily.</p> 952 It is autogenerated daily.</p>
951<p>To save download time we provide bzip2- and 953<p>To save download time we provide bzip2- and
952 xz-compressed archives which are published at 954 xz-compressed archives which are published at
953 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.bz2" target="_top"><code class="filename">pkgsrc.tar.bz2</code></a> 955 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.bz2" target="_top"><code class="filename">pkgsrc.tar.bz2</code></a>
954 and 956 and
955 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.xz" target="_top"><code class="filename">pkgsrc.tar.xz</code></a> 957 <a class="ulink" href="http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.xz" target="_top"><code class="filename">pkgsrc.tar.xz</code></a>
956 respectively. 958 respectively.
957 </p> 959 </p>
958<p>You can fetch the same files using FTP.</p> 960<p>You can fetch the same files using FTP.</p>
959<p>The tar file for the stable branch 2014Q3 is in the 961<p>The tar file for the stable branch 2014Q3 is in the
960 directory <code class="filename">pkgsrc-2014Q3</code> and is also called <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-2014Q3/pkgsrc.tar.gz" target="_top"><code class="filename">pkgsrc.tar.gz</code></a>.</p> 962 directory <code class="filename">pkgsrc-2014Q3</code> and is also called <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-2014Q3/pkgsrc.tar.gz" target="_top"><code class="filename">pkgsrc.tar.gz</code></a>.</p>
961<p>To download a pkgsrc stable tarball, run:</p> 963<p>To download a pkgsrc stable tarball, run:</p>
962<pre class="screen"> 964<pre class="screen">
963<code class="prompt">$</code> <strong class="userinput"><code>ftp ftp://ftp.NetBSD.org/pub/pkgsrc/<em class="replaceable"><code>pkgsrc-20xxQy</code></em>/pkgsrc.tar.gz</code></strong></pre> 965<code class="prompt">$</code> <strong class="userinput"><code>ftp ftp://ftp.NetBSD.org/pub/pkgsrc/<em class="replaceable"><code>pkgsrc-20xxQy</code></em>/pkgsrc.tar.gz</code></strong></pre>
964<p>Where <em class="replaceable"><code>pkgsrc-20xxQy</code></em> is the 966<p>Where <em class="replaceable"><code>pkgsrc-20xxQy</code></em> is the
965 stable branch to be downloaded, for example,  967 stable branch to be downloaded, for example,
966 <span class="quote">&#8220;<span class="quote">pkgsrc-2014Q3</span>&#8221;</span>.</p> 968 <span class="quote">&#8220;<span class="quote">pkgsrc-2014Q3</span>&#8221;</span>.</p>
967<p>If you prefer, you can also fetch it using "wget", "curl", 969<p>If you prefer, you can also fetch it using "wget", "curl",
968 or your web browser.</p> 970 or your web browser.</p>
969<p>Then, extract it with:</p> 971<p>Then, extract it with:</p>
970<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>tar -xzf pkgsrc.tar.gz -C /usr</code></strong></pre> 972<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>tar -xzf pkgsrc.tar.gz -C /usr</code></strong></pre>
971<p>This will create the directory <code class="filename">pkgsrc/</code> 973<p>This will create the directory <code class="filename">pkgsrc/</code>
972 in <code class="filename">/usr/</code> and all the package source will be  974 in <code class="filename">/usr/</code> and all the package source will be
973 stored under <code class="filename">/usr/pkgsrc/</code>.</p> 975 stored under <code class="filename">/usr/pkgsrc/</code>.</p>
974<p>To download pkgsrc-current, run:</p> 976<p>To download pkgsrc-current, run:</p>
975<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> 977<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>
976</div> 978</div>
977<div class="sect2"> 979<div class="sect2">
978<div class="titlepage"><div><div><h3 class="title"> 980<div class="titlepage"><div><div><h3 class="title">
979<a name="getting-via-cvs"></a>2.1.2. Via anonymous CVS</h3></div></div></div> 981<a name="getting-via-cvs"></a>2.1.2. Via anonymous CVS</h3></div></div></div>
980<p>To fetch a specific pkgsrc stable branch, run:</p> 982<p>To fetch a specific pkgsrc stable 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 -r <em class="replaceable"><code>pkgsrc-20xxQy</code></em> -P pkgsrc</code></strong> 983<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 <em class="replaceable"><code>pkgsrc-20xxQy</code></em> -P pkgsrc</code></strong>
982</pre> 984</pre>
983<p>Where <em class="replaceable"><code>pkgsrc-20xxQy</code></em> is the stable  985<p>Where <em class="replaceable"><code>pkgsrc-20xxQy</code></em> is the stable
984 branch to be checked out, for example, <span class="quote">&#8220;<span class="quote">pkgsrc-2014Q3</span>&#8221;</span></p> 986 branch to be checked out, for example, <span class="quote">&#8220;<span class="quote">pkgsrc-2014Q3</span>&#8221;</span></p>
985<p>This will create the directory <code class="filename">pkgsrc/</code>  987<p>This will create the directory <code class="filename">pkgsrc/</code>
986 in your <code class="filename">/usr/</code> directory and all the package source  988 in your <code class="filename">/usr/</code> directory and all the package source
987 will be stored under <code class="filename">/usr/pkgsrc/</code>.</p> 989 will be stored under <code class="filename">/usr/pkgsrc/</code>.</p>
988<p>To fetch the pkgsrc current branch, run:</p> 990<p>To fetch the pkgsrc current branch, run:</p>
989<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> 991<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>
990</pre> 992</pre>
991<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> 993<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>
992<p>If you get error messages from <code class="literal">rsh</code>, you need to set CVS_RSH variable. E.g.:</p> 994<p>If you get error messages from <code class="literal">rsh</code>, you need to set CVS_RSH variable. E.g.:</p>
993<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> 995<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>
994</pre> 996</pre>
995<p>Refer to documentation on your command shell how to set CVS_RSH=ssh permanently. 997<p>Refer to documentation on your command shell how to set CVS_RSH=ssh permanently.
996 For Bourne shells, you can set it in your <code class="filename">.profile</code> 998 For Bourne shells, you can set it in your <code class="filename">.profile</code>
997 or better globally in <code class="filename">/etc/profile</code>:</p> 999 or better globally in <code class="filename">/etc/profile</code>:</p>
998<pre class="programlisting"> 1000<pre class="programlisting">
999# set CVS remote shell command 1001# set CVS remote shell command
1000CVS_RSH=ssh 1002CVS_RSH=ssh
1001export CVS_RSH 1003export CVS_RSH
1002</pre> 1004</pre>
1003<p>By default, CVS doesn't do things like most people would expect it to do. 1005<p>By default, CVS doesn't do things like most people would expect it to do.
1004 But there is a way to convince CVS, by creating a file called <code class="filename">.cvsrc</code> 1006 But there is a way to convince CVS, by creating a file called <code class="filename">.cvsrc</code>
1005 in your home directory and saving the following lines to it. 1007 in your home directory and saving the following lines to it.
1006 This file will save you lots of headache and some bug reports, so we strongly recommend it. 1008 This file will save you lots of headache and some bug reports, so we strongly recommend it.
1007 You can find an explanation of this file in the CVS documentation.</p> 1009 You can find an explanation of this file in the CVS documentation.</p>
1008<pre class="programlisting"> 1010<pre class="programlisting">
1009# recommended CVS configuration file from the pkgsrc guide 1011# recommended CVS configuration file from the pkgsrc guide
1010cvs -q -z2 1012cvs -q -z2
1011checkout -P 1013checkout -P
1012update -dP 1014update -dP
1013diff -upN 1015diff -upN
1014rdiff -u 1016rdiff -u
1015release -d 1017release -d
1016</pre> 1018</pre>
1017</div> 1019</div>
1018</div> 1020</div>
1019<div class="sect1"> 1021<div class="sect1">
1020<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1022<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1021<a name="uptodate"></a>2.2. Keeping pkgsrc up-to-date</h2></div></div></div> 1023<a name="uptodate"></a>2.2. Keeping pkgsrc up-to-date</h2></div></div></div>
1022<p>The preferred way to keep pkgsrc up-to-date is via CVS 1024<p>The preferred way to keep pkgsrc up-to-date is via CVS
1023 (which also works if you have first installed it via a tar 1025 (which also works if you have first installed it via a tar
1024 file). It saves bandwidth and hard disk activity, compared to 1026 file). It saves bandwidth and hard disk activity, compared to
1025 downloading the tar file again.</p> 1027 downloading the tar file again.</p>
1026<div class="sect2"> 1028<div class="sect2">
1027<div class="titlepage"><div><div><h3 class="title"> 1029<div class="titlepage"><div><div><h3 class="title">
1028<a name="uptodate-tar"></a>2.2.1. Via tar files</h3></div></div></div> 1030<a name="uptodate-tar"></a>2.2.1. Via tar files</h3></div></div></div>
1029<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;"> 1031<div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
1030<h3 class="title">Warning</h3> 1032<h3 class="title">Warning</h3>
1031<p>When updating from a tar file, you first need to 1033<p>When updating from a tar file, you first need to
1032 completely remove the old pkgsrc directory. Otherwise those 1034 completely remove the old pkgsrc directory. Otherwise those
1033 files that have been removed from pkgsrc in the mean time will 1035 files that have been removed from pkgsrc in the mean time will
1034 not be removed on your local disk, resulting in inconsistencies. 1036 not be removed on your local disk, resulting in inconsistencies.
1035 When removing the old files, any changes that you have done to 1037 When removing the old files, any changes that you have done to
1036 the pkgsrc files will be lost after updating. Therefore updating 1038 the pkgsrc files will be lost after updating. Therefore updating
1037 via CVS is strongly recommended.</p> 1039 via CVS is strongly recommended.</p>
1038</div> 1040</div>
1039<p>Note that by default the distfiles and the binary packages 1041<p>Note that by default the distfiles and the binary packages
1040 are saved in the pkgsrc tree, so don't forget to rescue them 1042 are saved in the pkgsrc tree, so don't forget to rescue them
1041 before updating. You can also configure pkgsrc to store distfiles 1043 before updating. You can also configure pkgsrc to store distfiles
1042 and packages in directories outside the pkgsrc tree by setting the 1044 and packages in directories outside the pkgsrc tree by setting the
1043 <code class="varname">DISTDIR</code> and <code class="varname">PACKAGES</code> 1045 <code class="varname">DISTDIR</code> and <code class="varname">PACKAGES</code>
1044 variables. See <a class="xref" href="#configuring" title="Chapter 5. Configuring pkgsrc">Chapter 5, <i>Configuring pkgsrc</i></a> for the details.</p> 1046 variables. See <a class="xref" href="#configuring" title="Chapter 5. Configuring pkgsrc">Chapter 5, <i>Configuring pkgsrc</i></a> for the details.</p>
1045<p>To update pkgsrc from a tar file, download the tar file as 1047<p>To update pkgsrc from a tar file, download the tar file as
1046 explained above. Then, make sure that you have not made any 1048 explained above. Then, make sure that you have not made any
1047 changes to the files in the pkgsrc directory. Remove the pkgsrc 1049 changes to the files in the pkgsrc directory. Remove the pkgsrc
1048 directory and extract the new tar file. Done.</p> 1050 directory and extract the new tar file. Done.</p>
1049</div> 1051</div>
1050<div class="sect2"> 1052<div class="sect2">
1051<div class="titlepage"><div><div><h3 class="title"> 1053<div class="titlepage"><div><div><h3 class="title">
1052<a name="uptodate-cvs"></a>2.2.2. Via CVS</h3></div></div></div> 1054<a name="uptodate-cvs"></a>2.2.2. Via CVS</h3></div></div></div>
1053<p>To update pkgsrc via CVS, change to the <code class="filename">pkgsrc</code> directory and run cvs:</p> 1055<p>To update pkgsrc via CVS, change to the <code class="filename">pkgsrc</code> directory and run cvs:</p>
1054<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr/pkgsrc &amp;&amp; cvs update -dP</code></strong> 1056<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr/pkgsrc &amp;&amp; cvs update -dP</code></strong>
1055</pre> 1057</pre>
1056<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> 1058<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>
1057<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> 1059<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>
1058</pre> 1060</pre>
1059<div class="sect3"> 1061<div class="sect3">
1060<div class="titlepage"><div><div><h4 class="title"> 1062<div class="titlepage"><div><div><h4 class="title">
1061<a name="uptodate-cvs-switch"></a>2.2.2.1. Switching between different pkgsrc branches</h4></div></div></div> 1063<a name="uptodate-cvs-switch"></a>2.2.2.1. Switching between different pkgsrc branches</h4></div></div></div>
1062<p>When updating pkgsrc, the CVS program keeps track of the 1064<p>When updating pkgsrc, the CVS program keeps track of the
1063 branch you selected. But if you, for whatever reason, want to 1065 branch you selected. But if you, for whatever reason, want to
1064 switch from the stable branch to the current one, you can do it 1066 switch from the stable branch to the current one, you can do it
1065 by adding the option <span class="quote">&#8220;<span class="quote">-A</span>&#8221;</span> after the 1067 by adding the option <span class="quote">&#8220;<span class="quote">-A</span>&#8221;</span> after the
1066 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> keyword. To switch from the current branch 1068 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> keyword. To switch from the current branch
1067 back to the stable branch, add the 1069 back to the stable branch, add the
1068 <span class="quote">&#8220;<span class="quote">-rpkgsrc-2014Q3</span>&#8221;</span> option.</p> 1070 <span class="quote">&#8220;<span class="quote">-rpkgsrc-2014Q3</span>&#8221;</span> option.</p>
1069</div> 1071</div>
1070<div class="sect3"> 1072<div class="sect3">
1071<div class="titlepage"><div><div><h4 class="title"> 1073<div class="titlepage"><div><div><h4 class="title">
1072<a name="uptodate-cvs-changes"></a>2.2.2.2. What happens to my changes when updating?</h4></div></div></div> 1074<a name="uptodate-cvs-changes"></a>2.2.2.2. What happens to my changes when updating?</h4></div></div></div>
1073<p>When you update pkgsrc, the CVS program will only touch 1075<p>When you update pkgsrc, the CVS program will only touch
1074 those files that are registered in the CVS repository. That 1076 those files that are registered in the CVS repository. That
1075 means that any packages that you created on your own will stay 1077 means that any packages that you created on your own will stay
1076 unmodified. If you change files that are managed by CVS, later 1078 unmodified. If you change files that are managed by CVS, later
1077 updates will try to merge your changes with those that have been 1079 updates will try to merge your changes with those that have been
1078 done by others. See the CVS manual, chapter 1080 done by others. See the CVS manual, chapter
1079 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> for details.</p> 1081 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> for details.</p>
1080</div> 1082</div>
1081</div> 1083</div>
1082</div> 1084</div>
1083</div> 1085</div>
1084<div class="chapter"> 1086<div class="chapter">
1085<div class="titlepage"><div><div><h2 class="title"> 1087<div class="titlepage"><div><div><h2 class="title">
1086<a name="platforms"></a>Chapter 3. Using pkgsrc on systems other than NetBSD</h2></div></div></div> 1088<a name="platforms"></a>Chapter 3. Using pkgsrc on systems other than NetBSD</h2></div></div></div>
1087<div class="toc"> 1089<div class="toc">
1088<p><b>Table of Contents</b></p> 1090<p><b>Table of Contents</b></p>
1089<dl> 1091<dl>
1090<dt><span class="sect1"><a href="#binarydist">3.1. Binary distribution</a></span></dt> 1092<dt><span class="sect1"><a href="#binarydist">3.1. Binary distribution</a></span></dt>
1091<dt><span class="sect1"><a href="#bootstrapping-pkgsrc">3.2. Bootstrapping pkgsrc</a></span></dt> 1093<dt><span class="sect1"><a href="#bootstrapping-pkgsrc">3.2. Bootstrapping pkgsrc</a></span></dt>
1092<dt><span class="sect1"><a href="#platform-specific-notes">3.3. Platform-specific notes</a></span></dt> 1094<dt><span class="sect1"><a href="#platform-specific-notes">3.3. Platform-specific notes</a></span></dt>
1093<dd><dl> 1095<dd><dl>
1094<dt><span class="sect2"><a href="#cygwin">3.3.1. Cygwin</a></span></dt> 1096<dt><span class="sect2"><a href="#cygwin">3.3.1. Cygwin</a></span></dt>
1095<dt><span class="sect2"><a href="#darwin">3.3.2. Darwin (Mac OS X)</a></span></dt> 1097<dt><span class="sect2"><a href="#darwin">3.3.2. Darwin (Mac OS X)</a></span></dt>
1096<dt><span class="sect2"><a href="#freebsd">3.3.3. FreeBSD</a></span></dt> 1098<dt><span class="sect2"><a href="#freebsd">3.3.3. FreeBSD</a></span></dt>
1097<dt><span class="sect2"><a href="#gnukfreebsd">3.3.4. GNU/kFreeBSD</a></span></dt> 1099<dt><span class="sect2"><a href="#gnukfreebsd">3.3.4. GNU/kFreeBSD</a></span></dt>
1098<dt><span class="sect2"><a href="#interix">3.3.5. Interix</a></span></dt> 1100<dt><span class="sect2"><a href="#interix">3.3.5. Interix</a></span></dt>
1099<dt><span class="sect2"><a href="#irix">3.3.6. IRIX</a></span></dt> 1101<dt><span class="sect2"><a href="#irix">3.3.6. IRIX</a></span></dt>
1100<dt><span class="sect2"><a href="#linux">3.3.7. Linux</a></span></dt> 1102<dt><span class="sect2"><a href="#linux">3.3.7. Linux</a></span></dt>
1101<dt><span class="sect2"><a href="#mirbsd">3.3.8. MirBSD</a></span></dt> 1103<dt><span class="sect2"><a href="#mirbsd">3.3.8. MirBSD</a></span></dt>
1102<dt><span class="sect2"><a href="#openbsd">3.3.9. OpenBSD</a></span></dt> 1104<dt><span class="sect2"><a href="#openbsd">3.3.9. OpenBSD</a></span></dt>
1103<dt><span class="sect2"><a href="#solaris">3.3.10. Solaris</a></span></dt> 1105<dt><span class="sect2"><a href="#solaris">3.3.10. Solaris</a></span></dt>
1104</dl></dd> 1106</dl></dd>
1105</dl> 1107</dl>
1106</div> 1108</div>
1107<div class="sect1"> 1109<div class="sect1">
1108<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1110<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1109<a name="binarydist"></a>3.1. Binary distribution</h2></div></div></div> 1111<a name="binarydist"></a>3.1. Binary distribution</h2></div></div></div>
1110<p>See <a class="xref" href="#using-pkg" title="4.1. Using binary packages">Section 4.1, &#8220;Using binary packages&#8221;</a>.</p> 1112<p>See <a class="xref" href="#using-pkg" title="4.1. Using binary packages">Section 4.1, &#8220;Using binary packages&#8221;</a>.</p>
1111</div> 1113</div>
1112<div class="sect1"> 1114<div class="sect1">
1113<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1115<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1114<a name="bootstrapping-pkgsrc"></a>3.2. Bootstrapping pkgsrc</h2></div></div></div> 1116<a name="bootstrapping-pkgsrc"></a>3.2. Bootstrapping pkgsrc</h2></div></div></div>
1115<p>pkgsrc can be bootstrapped for use in two different modes: 1117<p>pkgsrc can be bootstrapped for use in two different modes:
1116 privileged and unprivileged one. In unprivileged mode in contrast 1118 privileged and unprivileged one. In unprivileged mode in contrast
1117 to privileged one all programs are installed under one particular user 1119 to privileged one all programs are installed under one particular user
1118 and cannot utilise privileged operations (packages don't create 1120 and cannot utilise privileged operations (packages don't create
1119 special users and all special file permissions like setuid are ignored). 1121 special users and all special file permissions like setuid are ignored).
1120 </p> 1122 </p>
1121<p>Installing the bootstrap kit from source should be as simple as:</p> 1123<p>Installing the bootstrap kit from source should be as simple as:</p>
1122<pre class="screen"> 1124<pre class="screen">
1123<code class="prompt">#</code> <strong class="userinput"><code>env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc</code></strong> 1125<code class="prompt">#</code> <strong class="userinput"><code>env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc</code></strong>
1124<code class="prompt">#</code> <strong class="userinput"><code>cd pkgsrc/bootstrap</code></strong> 1126<code class="prompt">#</code> <strong class="userinput"><code>cd pkgsrc/bootstrap</code></strong>
1125<code class="prompt">#</code> <strong class="userinput"><code>./bootstrap</code></strong> 1127<code class="prompt">#</code> <strong class="userinput"><code>./bootstrap</code></strong>
1126 </pre> 1128 </pre>
1127<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> 1129<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>
1128<p>By default, in privileged mode pkgsrc uses 1130<p>By default, in privileged mode pkgsrc uses
1129 <code class="filename">/usr/pkg</code> for <span class="emphasis"><em>prefix</em></span> 1131 <code class="filename">/usr/pkg</code> for <span class="emphasis"><em>prefix</em></span>
1130 where programs will be installed in, 1132 where programs will be installed in,
1131 and <code class="filename">/var/db/pkg</code> for the package database 1133 and <code class="filename">/var/db/pkg</code> for the package database
1132 directory where pkgsrc will do its internal bookkeeping, 1134 directory where pkgsrc will do its internal bookkeeping,
1133 <code class="filename">/var</code> is used as <span class="emphasis"><em>varbase</em></span>, 1135 <code class="filename">/var</code> is used as <span class="emphasis"><em>varbase</em></span>,
1134 where packages install their persistent data. 1136 where packages install their persistent data.
1135 In unprivileged mode pkgsrc uses 1137 In unprivileged mode pkgsrc uses
1136 <code class="filename">~/pkg</code> for <span class="emphasis"><em>prefix</em></span>, 1138 <code class="filename">~/pkg</code> for <span class="emphasis"><em>prefix</em></span>,
1137 <code class="filename">~/pkg/var/db/pkg</code> for the package database, 1139 <code class="filename">~/pkg/var/db/pkg</code> for the package database,
1138 and <code class="filename">~/pkg/var</code> for <span class="emphasis"><em>varbase</em></span>. 1140 and <code class="filename">~/pkg/var</code> for <span class="emphasis"><em>varbase</em></span>.
1139 </p> 1141 </p>
1140<p>You can change default layout using command-line arguments. 1142<p>You can change default layout using command-line arguments.
1141 Run <span class="quote">&#8220;<span class="quote">./bootstrap --help</span>&#8221;</span> to get details. 1143 Run <span class="quote">&#8220;<span class="quote">./bootstrap --help</span>&#8221;</span> to get details.
1142 </p> 1144 </p>
1143<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 1145<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1144<h3 class="title">Note</h3> 1146<h3 class="title">Note</h3>
1145<p>The bootstrap installs a <span class="command"><strong>bmake</strong></span> tool. 1147<p>The bootstrap installs a <span class="command"><strong>bmake</strong></span> tool.
1146 Use this <span class="command"><strong>bmake</strong></span> when building via pkgsrc. 1148 Use this <span class="command"><strong>bmake</strong></span> when building via pkgsrc.
1147 For examples in this guide, use <span class="command"><strong>bmake</strong></span> 1149 For examples in this guide, use <span class="command"><strong>bmake</strong></span>
1148 instead of <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span>.</p> 1150 instead of <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span>.</p>
1149</div> 1151</div>
1150<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 1152<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1151<h3 class="title">Note</h3> 1153<h3 class="title">Note</h3>
1152<p>It is possible to bootstrap multiple instances of pkgsrc 1154<p>It is possible to bootstrap multiple instances of pkgsrc
1153 using non-intersecting directories. Use <span class="command"><strong>bmake</strong></span> 1155 using non-intersecting directories. Use <span class="command"><strong>bmake</strong></span>
1154 corresponding to the installation you're working with to build 1156 corresponding to the installation you're working with to build
1155 and install packages. 1157 and install packages.
1156 </p> 1158 </p>
1157</div> 1159</div>
1158</div> 1160</div>
1159<div class="sect1"> 1161<div class="sect1">
1160<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1162<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1161<a name="platform-specific-notes"></a>3.3. Platform-specific notes</h2></div></div></div> 1163<a name="platform-specific-notes"></a>3.3. Platform-specific notes</h2></div></div></div>
1162<p>Here are some platform-specific notes you should be aware of.</p> 1164<p>Here are some platform-specific notes you should be aware of.</p>
1163<div class="sect2"> 1165<div class="sect2">
1164<div class="titlepage"><div><div><h3 class="title"> 1166<div class="titlepage"><div><div><h3 class="title">
1165<a name="cygwin"></a>3.3.1. Cygwin</h3></div></div></div> 1167<a name="cygwin"></a>3.3.1. Cygwin</h3></div></div></div>
1166<p>Cygwin 1.7.x and later are supported.</p> 1168<p>Cygwin 1.7.x and later are supported.</p>
1167<p>You need to install minimal base packages in `Base' category 1169<p>You need to install minimal base packages in `Base' category
1168 plus any of compiler, gcc, gcc4, and/or clang. 1170 plus any of compiler, gcc, gcc4, and/or clang.
1169 For gcc and gcc4, C and C++ compiler will be installed by default, 1171 For gcc and gcc4, C and C++ compiler will be installed by default,
1170 but you can install Fortran compiler additionally 1172 but you can install Fortran compiler additionally
1171 because it will be required to use libtool. 1173 because it will be required to use libtool.
1172 If it is not installed (or too old), Fortran compiler will be 1174 If it is not installed (or too old), Fortran compiler will be
1173 installed with pkgsrc automatically.</p> 1175 installed with pkgsrc automatically.</p>
1174<p>As noted in 1176<p>As noted in
1175 <a class="ulink" href="http://cygwin.com/faq-nochunks.html#faq.using.su" target="_top">Cygwin FAQ: `Why doesn't su work?'</a>, 1177 <a class="ulink" href="http://cygwin.com/faq-nochunks.html#faq.using.su" target="_top">Cygwin FAQ: `Why doesn't su work?'</a>,
1176 su(1) command has been in Cygwin distribution, but it has never worked. 1178 su(1) command has been in Cygwin distribution, but it has never worked.
1177 Unless you bootstrap pkgsrc with the --unprivileged option, workaround is: 1179 Unless you bootstrap pkgsrc with the --unprivileged option, workaround is:
1178 </p> 1180 </p>
1179<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Right click "Cygwin Terminal" in your Start Menu, 1181<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Right click "Cygwin Terminal" in your Start Menu,
1180 then pick "Run as administrator".</p></li></ul></div> 1182 then pick "Run as administrator".</p></li></ul></div>
1181</div> 1183</div>
1182<div class="sect2"> 1184<div class="sect2">
1183<div class="titlepage"><div><div><h3 class="title"> 1185<div class="titlepage"><div><div><h3 class="title">
1184<a name="darwin"></a>3.3.2. Darwin (Mac OS X)</h3></div></div></div> 1186<a name="darwin"></a>3.3.2. Darwin (Mac OS X)</h3></div></div></div>
1185<p>Darwin 5.x and up are supported.</p> 1187<p>Darwin 5.x and up are supported.</p>
1186<p>Before you start, you need to download and install 1188<p>Before you start, you need to download and install
1187 the Mac OS X Developer Tools from Apple's Developer Connection. 1189 the Mac OS X Developer Tools from Apple's Developer Connection.
1188 This requires (free) membership. See 1190 This requires (free) membership. See
1189 <a class="ulink" href="http://developer.apple.com/macosx/" target="_top">http://developer.apple.com/macosx/</a> 1191 <a class="ulink" href="http://developer.apple.com/macosx/" target="_top">http://developer.apple.com/macosx/</a>
1190 for details. Also, make sure you install X11 (an optional 1192 for details. Also, make sure you install X11 (an optional
1191 package included with the Developer Tools) if you intend 1193 package included with the Developer Tools) if you intend
1192 to build packages that use the X11 Window System. 1194 to build packages that use the X11 Window System.
1193 (If you don't want or need the full Xcode GUI, 1195 (If you don't want or need the full Xcode GUI,
1194 download and install Command Line Tools for Xcode.)</p> 1196 download and install Command Line Tools for Xcode.)</p>
1195</div> 1197</div>
1196<div class="sect2"> 1198<div class="sect2">
1197<div class="titlepage"><div><div><h3 class="title"> 1199<div class="titlepage"><div><div><h3 class="title">
1198<a name="freebsd"></a>3.3.3. FreeBSD</h3></div></div></div> 1200<a name="freebsd"></a>3.3.3. FreeBSD</h3></div></div></div>
1199<p>FreeBSD 8.3 and 9.0 have been tested and are supported, 1201<p>FreeBSD 8.3 and 9.0 have been tested and are supported,
1200 other versions may work.</p> 1202 other versions may work.</p>
1201<p>Care should be taken so that the tools that this kit installs do not conflict 1203<p>Care should be taken so that the tools that this kit installs do not conflict
1202 with the FreeBSD userland tools. There are several steps:</p> 1204 with the FreeBSD userland tools. There are several steps:</p>
1203<div class="orderedlist"><ol class="orderedlist" type="1"> 1205<div class="orderedlist"><ol class="orderedlist" type="1">
1204<li class="listitem"><p>FreeBSD stores its ports pkg database in 1206<li class="listitem"><p>FreeBSD stores its ports pkg database in
1205 <code class="filename">/var/db/pkg</code>. It is therefore 1207 <code class="filename">/var/db/pkg</code>. It is therefore
1206 recommended that you choose a different location (e.g. 1208 recommended that you choose a different location (e.g.
1207 <code class="filename">/usr/pkgdb</code>) by 1209 <code class="filename">/usr/pkgdb</code>) by
1208 using the --pkgdbdir option to the bootstrap script.</p></li> 1210 using the --pkgdbdir option to the bootstrap script.</p></li>
1209<li class="listitem"> 1211<li class="listitem">
1210<p>If you do not intend to use the FreeBSD ports tools, it's probably a 1212<p>If you do not intend to use the FreeBSD ports tools, it's probably a
1211 good idea to move them out of the way to avoid confusion, e.g.</p> 1213 good idea to move them out of the way to avoid confusion, e.g.</p>
1212<pre class="screen"> 1214<pre class="screen">
1213<code class="prompt">#</code> <strong class="userinput"><code>cd /usr/sbin</code></strong> 1215<code class="prompt">#</code> <strong class="userinput"><code>cd /usr/sbin</code></strong>
1214<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_add pkg_add.orig</code></strong> 1216<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_add pkg_add.orig</code></strong>
1215<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_create pkg_create.orig</code></strong> 1217<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_create pkg_create.orig</code></strong>
1216<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_delete pkg_delete.orig</code></strong> 1218<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_delete pkg_delete.orig</code></strong>
1217<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_info pkg_info.orig</code></strong> 1219<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_info pkg_info.orig</code></strong>
1218 </pre> 1220 </pre>
1219</li> 1221</li>
1220<li class="listitem"><p>An example <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file will be placed in 1222<li class="listitem"><p>An example <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file will be placed in
1221 <code class="filename">/etc/mk.conf.example</code> file 1223 <code class="filename">/etc/mk.conf.example</code> file
1222 when you use the bootstrap script.</p></li> 1224 when you use the bootstrap script.</p></li>
1223</ol></div> 1225</ol></div>
1224</div> 1226</div>
1225<div class="sect2"> 1227<div class="sect2">
1226<div class="titlepage"><div><div><h3 class="title"> 1228<div class="titlepage"><div><div><h3 class="title">
1227<a name="gnukfreebsd"></a>3.3.4. GNU/kFreeBSD</h3></div></div></div> 1229<a name="gnukfreebsd"></a>3.3.4. GNU/kFreeBSD</h3></div></div></div>
1228<p>Debian GNU/kFreeBSD is the only GNU/kFreeBSD distribution now. 1230<p>Debian GNU/kFreeBSD is the only GNU/kFreeBSD distribution now.
1229 Debian GNU/kFreeBSD 7.0 or later is tested and supported.</p> 1231 Debian GNU/kFreeBSD 7.0 or later is tested and supported.</p>
1230<p> You should install ncurses (libncurses and libncurses-dev) 1232<p> You should install ncurses (libncurses and libncurses-dev)
1231 packages.</p> 1233 packages.</p>
1232</div> 1234</div>
1233<div class="sect2"> 1235<div class="sect2">
1234<div class="titlepage"><div><div><h3 class="title"> 1236<div class="titlepage"><div><div><h3 class="title">
1235<a name="interix"></a>3.3.5. Interix</h3></div></div></div> 1237<a name="interix"></a>3.3.5. Interix</h3></div></div></div>
1236<p>Interix is a POSIX-compatible subsystem for the Windows NT kernel, 1238<p>Interix is a POSIX-compatible subsystem for the Windows NT kernel,
1237 providing a Unix-like environment with a tighter kernel integration than 1239 providing a Unix-like environment with a tighter kernel integration than
1238 available with Cygwin. It is part of the Windows Services for Unix 1240 available with Cygwin. It is part of the Windows Services for Unix
1239 package, available for free for any licensed copy of Windows 2000, XP 1241 package, available for free for any licensed copy of Windows 2000, XP
1240 (not including XP Home), or 2003. SFU can be downloaded from <a class="ulink" href="http://www.microsoft.com/windows/sfu/" target="_top">http://www.microsoft.com/windows/sfu/</a>.</p> 1242 (not including XP Home), or 2003. SFU can be downloaded from <a class="ulink" href="http://www.microsoft.com/windows/sfu/" target="_top">http://www.microsoft.com/windows/sfu/</a>.</p>
1241<p>Services for Unix 3.5 has been tested. 3.0 or 3.1 may work, but 1243<p>Services for Unix 3.5 has been tested. 3.0 or 3.1 may work, but
1242 are not officially supported. (The main difference in 3.0/3.1 is lack 1244 are not officially supported. (The main difference in 3.0/3.1 is lack
1243 of pthreads, but other parts of libc may also be lacking.)</p> 1245 of pthreads, but other parts of libc may also be lacking.)</p>
1244<p>Services for Unix Applications (aka SUA) is an integrated 1246<p>Services for Unix Applications (aka SUA) is an integrated
1245 component of Windows Server 2003 R2 (5.2), Windows Vista and 1247 component of Windows Server 2003 R2 (5.2), Windows Vista and
1246 Windows Server 2008 (6.0), Windows 7 and Windows Server 2008 R2 1248 Windows Server 2008 (6.0), Windows 7 and Windows Server 2008 R2
1247 (6.1). As of this writing, the SUA's Interix 6.0 (32bit) and 1249 (6.1). As of this writing, the SUA's Interix 6.0 (32bit) and
1248 6.1 (64bit) subsystems have been tested. Other versions may 1250 6.1 (64bit) subsystems have been tested. Other versions may
1249 work as well. The Interix 5.x subsystem has not yet been tested 1251 work as well. The Interix 5.x subsystem has not yet been tested
1250 with pkgsrc.</p> 1252 with pkgsrc.</p>
1251<div class="sect3"> 1253<div class="sect3">
1252<div class="titlepage"><div><div><h4 class="title"> 1254<div class="titlepage"><div><div><h4 class="title">
1253<a name="platform.interix-sfu-install"></a>3.3.5.1. When installing Interix/SFU</h4></div></div></div> 1255<a name="platform.interix-sfu-install"></a>3.3.5.1. When installing Interix/SFU</h4></div></div></div>
1254<p>At an absolute minimum, the following packages must be installed from 1256<p>At an absolute minimum, the following packages must be installed from
1255 the Windows Services for Unix 3.5 distribution in order to use pkgsrc:</p> 1257 the Windows Services for Unix 3.5 distribution in order to use pkgsrc:</p>
1256<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1258<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1257<li class="listitem"><p>Utilities -&gt; Base Utilities</p></li> 1259<li class="listitem"><p>Utilities -&gt; Base Utilities</p></li>
1258<li class="listitem"><p>Interix GNU Components -&gt; (all)</p></li> 1260<li class="listitem"><p>Interix GNU Components -&gt; (all)</p></li>
1259<li class="listitem"><p>Remote Connectivity</p></li> 1261<li class="listitem"><p>Remote Connectivity</p></li>
1260<li class="listitem"><p>Interix SDK</p></li> 1262<li class="listitem"><p>Interix SDK</p></li>
1261</ul></div> 1263</ul></div>
1262<p>When using pkgsrc on Interix, DO NOT install the Utilities subcomponent 1264<p>When using pkgsrc on Interix, DO NOT install the Utilities subcomponent
1263 "UNIX Perl". That is Perl 5.6 without shared module support, installed to 1265 "UNIX Perl". That is Perl 5.6 without shared module support, installed to
1264 /usr/local, and will only cause confusion. Instead, install Perl 5.8 from 1266 /usr/local, and will only cause confusion. Instead, install Perl 5.8 from
1265 pkgsrc (or from a binary package).</p> 1267 pkgsrc (or from a binary package).</p>
1266<p>The Remote Connectivity subcomponent "Windows Remote Shell Service" does 1268<p>The Remote Connectivity subcomponent "Windows Remote Shell Service" does
1267 not need to be installed, but Remote Connectivity itself should be 1269 not need to be installed, but Remote Connectivity itself should be
1268 installed in order to have a working inetd.</p> 1270 installed in order to have a working inetd.</p>
1269<p>During installation you may be asked whether to enable setuid 1271<p>During installation you may be asked whether to enable setuid
1270 behavior for Interix programs, and whether to make pathnames default to 1272 behavior for Interix programs, and whether to make pathnames default to
1271 case-sensitive. Setuid should be enabled, and case-sensitivity MUST be 1273 case-sensitive. Setuid should be enabled, and case-sensitivity MUST be
1272 enabled. (Without case-sensitivity, a large number of packages including 1274 enabled. (Without case-sensitivity, a large number of packages including
1273 perl will not build.)</p> 1275 perl will not build.)</p>
1274<p>NOTE: Newer Windows service packs change the way binary execution 1276<p>NOTE: Newer Windows service packs change the way binary execution
1275 works (via the Data Execution Prevention feature). In order to use 1277 works (via the Data Execution Prevention feature). In order to use
1276 pkgsrc and other gcc-compiled binaries reliably, a hotfix containing 1278 pkgsrc and other gcc-compiled binaries reliably, a hotfix containing
1277 POSIX.EXE, PSXDLL.DLL, PSXRUN.EXE, and PSXSS.EXE (899522 or newer) 1279 POSIX.EXE, PSXDLL.DLL, PSXRUN.EXE, and PSXSS.EXE (899522 or newer)
1278 must be installed. Hotfixes are available from Microsoft through a 1280 must be installed. Hotfixes are available from Microsoft through a
1279 support contract; however, Debian Interix Port has made most Interix 1281 support contract; however, Debian Interix Port has made most Interix
1280 hotfixes available for personal use from <a class="ulink" href="http://www.debian-interix.net/hotfixes/" target="_top">http://www.debian-interix.net/hotfixes/</a>.</p> 1282 hotfixes available for personal use from <a class="ulink" href="http://www.debian-interix.net/hotfixes/" target="_top">http://www.debian-interix.net/hotfixes/</a>.</p>
1281<p>In addition to the hotfix noted above, it may be necessary to 1283<p>In addition to the hotfix noted above, it may be necessary to
1282 disable Data Execution Prevention entirely to make Interix functional. 1284 disable Data Execution Prevention entirely to make Interix functional.
1283 This may happen only with certain types of CPUs; the cause is not fully 1285 This may happen only with certain types of CPUs; the cause is not fully
1284 understood at this time. If gcc or other applications still segfault 1286 understood at this time. If gcc or other applications still segfault
1285 repeatedly after installing one of the hotfixes note above, the 1287 repeatedly after installing one of the hotfixes note above, the
1286 following option can be added to the appropriate "boot.ini" line on the 1288 following option can be added to the appropriate "boot.ini" line on the
1287 Windows boot drive: /NoExecute=AlwaysOff 1289 Windows boot drive: /NoExecute=AlwaysOff
1288 (WARNING, this will disable DEP completely, which may be a security 1290 (WARNING, this will disable DEP completely, which may be a security
1289 risk if applications are often run as a user in the Administrators 1291 risk if applications are often run as a user in the Administrators
1290 group!)</p> 1292 group!)</p>
1291</div> 1293</div>
1292<div class="sect3"> 1294<div class="sect3">
1293<div class="titlepage"><div><div><h4 class="title"> 1295<div class="titlepage"><div><div><h4 class="title">
1294<a name="platform.interix-sfu-postinstall"></a>3.3.5.2. What to do if Interix/SFU is already installed</h4></div></div></div> 1296<a name="platform.interix-sfu-postinstall"></a>3.3.5.2. What to do if Interix/SFU is already installed</h4></div></div></div>
1295<p>If SFU is already installed and you wish to alter these settings to work 1297<p>If SFU is already installed and you wish to alter these settings to work
1296 with pkgsrc, note the following things.</p> 1298 with pkgsrc, note the following things.</p>
1297<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1299<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1298<li class="listitem"><p>To uninstall UNIX Perl, use Add/Remove Programs, select Microsoft 1300<li class="listitem"><p>To uninstall UNIX Perl, use Add/Remove Programs, select Microsoft
1299 Windows Services for UNIX, then click Change. In the installer, choose 1301 Windows Services for UNIX, then click Change. In the installer, choose
1300 Add or Remove, then uncheck Utilities-&gt;UNIX Perl.</p></li> 1302 Add or Remove, then uncheck Utilities-&gt;UNIX Perl.</p></li>
1301<li class="listitem"> 1303<li class="listitem">
1302<p>To enable case-sensitivity for the file system, run REGEDIT.EXE, and 1304<p>To enable case-sensitivity for the file system, run REGEDIT.EXE, and
1303 change the following registry key:</p> 1305 change the following registry key:</p>
1304<p>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel</p> 1306<p>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel</p>
1305<p>Set the DWORD value "obcaseinsensitive" to 0; then reboot.</p> 1307<p>Set the DWORD value "obcaseinsensitive" to 0; then reboot.</p>
1306</li> 1308</li>
1307<li class="listitem"> 1309<li class="listitem">
1308<p>To enable setuid binaries (optional), run REGEDIT.EXE, and change the 1310<p>To enable setuid binaries (optional), run REGEDIT.EXE, and change the
1309 following registry key:</p> 1311 following registry key:</p>
1310<p>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Services for UNIX</p> 1312<p>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Services for UNIX</p>
1311<p>Set the DWORD value "EnableSetuidBinaries" to 1; then reboot.</p> 1313<p>Set the DWORD value "EnableSetuidBinaries" to 1; then reboot.</p>
1312</li> 1314</li>
1313</ul></div> 1315</ul></div>
1314</div> 1316</div>
1315<div class="sect3"> 1317<div class="sect3">
1316<div class="titlepage"><div><div><h4 class="title"> 1318<div class="titlepage"><div><div><h4 class="title">
1317<a name="platform.interix-notes"></a>3.3.5.3. Important notes for using pkgsrc</h4></div></div></div> 1319<a name="platform.interix-notes"></a>3.3.5.3. Important notes for using pkgsrc</h4></div></div></div>
1318<p>The package manager (either the pkgsrc "su" user, or the user 1320<p>The package manager (either the pkgsrc "su" user, or the user
1319 running "pkg_add") must be a member of the local Administrators 1321 running "pkg_add") must be a member of the local Administrators
1320 group. Such a user must also be used to run the bootstrap. This is 1322 group. Such a user must also be used to run the bootstrap. This is
1321 slightly relaxed from the normal pkgsrc requirement of "root".</p> 1323 slightly relaxed from the normal pkgsrc requirement of "root".</p>
1322<p>The package manager should use a umask of 002. "make install" will 1324<p>The package manager should use a umask of 002. "make install" will
1323 automatically complain if this is not the case. This ensures that 1325 automatically complain if this is not the case. This ensures that
1324 directories written in /var/db/pkg are Administrators-group writeable.</p> 1326 directories written in /var/db/pkg are Administrators-group writeable.</p>
1325<p>The popular Interix binary packages from http://www.interopsystems.com/ 1327<p>The popular Interix binary packages from http://www.interopsystems.com/
1326 use an older version of pkgsrc's pkg_* tools. Ideally, these should 1328 use an older version of pkgsrc's pkg_* tools. Ideally, these should
1327 NOT be used in conjunction with pkgsrc. If you choose to use them at 1329 NOT be used in conjunction with pkgsrc. If you choose to use them at
1328 the same time as the pkgsrc packages, ensure that you use the proper 1330 the same time as the pkgsrc packages, ensure that you use the proper
1329 pkg_* tools for each type of binary package.</p> 1331 pkg_* tools for each type of binary package.</p>
1330<p>The TERM setting used for DOS-type console windows (including those 1332<p>The TERM setting used for DOS-type console windows (including those
1331 invoked by the csh and ksh startup shortcuts) is "interix". Most systems 1333 invoked by the csh and ksh startup shortcuts) is "interix". Most systems
1332 don't have a termcap/terminfo entry for it, but the following .termcap 1334 don't have a termcap/terminfo entry for it, but the following .termcap
1333 entry provides adequate emulation in most cases:</p> 1335 entry provides adequate emulation in most cases:</p>
1334<pre class="programlisting"> 1336<pre class="programlisting">
1335interix:kP=\E[S:kN=\E[T:kH=\E[U:dc@:DC@:tc=pcansi: 1337interix:kP=\E[S:kN=\E[T:kH=\E[U:dc@:DC@:tc=pcansi:
1336 </pre> 1338 </pre>
1337</div> 1339</div>
1338<div class="sect3"> 1340<div class="sect3">
1339<div class="titlepage"><div><div><h4 class="title"> 1341<div class="titlepage"><div><div><h4 class="title">
1340<a name="platform.interix-limits"></a>3.3.5.4. Limitations of the Interix platform</h4></div></div></div> 1342<a name="platform.interix-limits"></a>3.3.5.4. Limitations of the Interix platform</h4></div></div></div>
1341<p>Though Interix suffices as a familiar and flexible substitute 1343<p>Though Interix suffices as a familiar and flexible substitute
1342 for a full Unix-like platform, it has some drawbacks that should 1344 for a full Unix-like platform, it has some drawbacks that should
1343 be noted for those desiring to make the most of Interix.</p> 1345 be noted for those desiring to make the most of Interix.</p>
1344<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1346<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1345<li class="listitem"> 1347<li class="listitem">
1346<p><span class="strong"><strong>X11:</strong></span></p> 1348<p><span class="strong"><strong>X11:</strong></span></p>
1347<p>Interix comes with the standard set of X11R6 client libraries, 1349<p>Interix comes with the standard set of X11R6 client libraries,
1348 and can run X11 based applications, but it does 1350 and can run X11 based applications, but it does
1349 <span class="emphasis"><em>not</em></span> come with an X server. Some options are 1351 <span class="emphasis"><em>not</em></span> come with an X server. Some options are
1350 <a class="ulink" href="http://www.starnet.com/products/xwin32/" target="_top">StarNet X-Win32</a>, 1352 <a class="ulink" href="http://www.starnet.com/products/xwin32/" target="_top">StarNet X-Win32</a>,
1351 <a class="ulink" href="http://connectivity.hummingbird.com/products/nc/exceed/" target="_top">Hummingbird Exceed</a> 1353 <a class="ulink" href="http://connectivity.hummingbird.com/products/nc/exceed/" target="_top">Hummingbird Exceed</a>
1352 (available in a trimmed version for Interix from Interop Systems as the 1354 (available in a trimmed version for Interix from Interop Systems as the
1353 <a class="ulink" href="http://www.interopsystems.com/InteropXserver.htm" target="_top">Interop X Server</a>), 1355 <a class="ulink" href="http://www.interopsystems.com/InteropXserver.htm" target="_top">Interop X Server</a>),
1354 and the free X11 server included with 1356 and the free X11 server included with
1355 <a class="ulink" href="http://x.cygwin.com/" target="_top">Cygwin</a>.</p> 1357 <a class="ulink" href="http://x.cygwin.com/" target="_top">Cygwin</a>.</p>
1356</li> 1358</li>
1357<li class="listitem"> 1359<li class="listitem">
1358<p><span class="strong"><strong>X11 acceleration:</strong></span></p> 1360<p><span class="strong"><strong>X11 acceleration:</strong></span></p>
1359<p>Because Interix runs in a completely different NT subsystem from 1361<p>Because Interix runs in a completely different NT subsystem from
1360 Win32 applications, it does not currently support various X11 1362 Win32 applications, it does not currently support various X11
1361 protocol extensions for acceleration (such as MIT-SHM or DGA). 1363 protocol extensions for acceleration (such as MIT-SHM or DGA).
1362 Most interactive applications to a local X server will run 1364 Most interactive applications to a local X server will run
1363 reasonably fast, but full motion video and other graphics 1365 reasonably fast, but full motion video and other graphics
1364 intensive applications may require a faster-than-expected CPU.</p> 1366 intensive applications may require a faster-than-expected CPU.</p>
1365</li> 1367</li>
1366<li class="listitem"> 1368<li class="listitem">
1367<p><span class="strong"><strong>Audio:</strong></span></p> 1369<p><span class="strong"><strong>Audio:</strong></span></p>
1368<p>Interix has no native support for audio output. For audio 1370<p>Interix has no native support for audio output. For audio
1369 support, pkgsrc uses the <span class="command"><strong>esound</strong></span> client/server 1371 support, pkgsrc uses the <span class="command"><strong>esound</strong></span> client/server
1370 audio system on Interix. Unlike on most platforms, the 1372 audio system on Interix. Unlike on most platforms, the
1371 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/audio/esound/README.html" target="_top"><code class="filename">audio/esound</code></a> package does 1373 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/audio/esound/README.html" target="_top"><code class="filename">audio/esound</code></a> package does
1372 <span class="emphasis"><em>not</em></span> contain the <span class="command"><strong>esd</strong></span> 1374 <span class="emphasis"><em>not</em></span> contain the <span class="command"><strong>esd</strong></span>
1373 server component. To output audio via an Interix host, the 1375 server component. To output audio via an Interix host, the
1374 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/emulators/cygwin_esound/README.html" target="_top"><code class="filename">emulators/cygwin_esound</code></a> package 1376 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/emulators/cygwin_esound/README.html" target="_top"><code class="filename">emulators/cygwin_esound</code></a> package
1375 must also be installed.</p> 1377 must also be installed.</p>
1376</li> 1378</li>
1377<li class="listitem"> 1379<li class="listitem">
1378<p><span class="strong"><strong>CD/DVDs, USB, and SCSI:</strong></span></p> 1380<p><span class="strong"><strong>CD/DVDs, USB, and SCSI:</strong></span></p>
1379<p>Direct device access is not currently supported in Interix, so it 1381<p>Direct device access is not currently supported in Interix, so it
1380 is not currently possible to access CD/DVD drives, USB devices, 1382 is not currently possible to access CD/DVD drives, USB devices,
1381 or SCSI devices through non-filesystem means. Among other things, 1383 or SCSI devices through non-filesystem means. Among other things,
1382 this makes it impossible to use Interix directly for CD/DVD 1384 this makes it impossible to use Interix directly for CD/DVD
1383 burning.</p> 1385 burning.</p>
1384</li> 1386</li>
1385<li class="listitem"> 1387<li class="listitem">
1386<p><span class="strong"><strong>Tape drives:</strong></span></p> 1388<p><span class="strong"><strong>Tape drives:</strong></span></p>
1387<p>Due to the same limitations as for CD-ROMs and SCSI devices, tape 1389<p>Due to the same limitations as for CD-ROMs and SCSI devices, tape
1388 drives are also not directly accessible in Interix. However, 1390 drives are also not directly accessible in Interix. However,
1389 support is in work to make tape drive access possible by using 1391 support is in work to make tape drive access possible by using
1390 Cygwin as a bridge (similarly to audio bridged via Cygwin's 1392 Cygwin as a bridge (similarly to audio bridged via Cygwin's
1391 esound server).</p> 1393 esound server).</p>
1392</li> 1394</li>
1393</ul></div> 1395</ul></div>
1394</div> 1396</div>
1395<div class="sect3"> 1397<div class="sect3">
1396<div class="titlepage"><div><div><h4 class="title"> 1398<div class="titlepage"><div><div><h4 class="title">
1397<a name="platform.interix-knownissues"></a>3.3.5.5. Known issues for pkgsrc on Interix</h4></div></div></div> 1399<a name="platform.interix-knownissues"></a>3.3.5.5. Known issues for pkgsrc on Interix</h4></div></div></div>
1398<p>It is not necessary, in general, to have a "root" user on the 1400<p>It is not necessary, in general, to have a "root" user on the
1399 Windows system; any member of the local Administrators group will 1401 Windows system; any member of the local Administrators group will
1400 suffice. However, some packages currently assume that the user 1402 suffice. However, some packages currently assume that the user
1401 named "root" is the privileged user. To accommodate these, you 1403 named "root" is the privileged user. To accommodate these, you
1402 may create such a user; make sure it is in the local group 1404 may create such a user; make sure it is in the local group
1403 Administrators (or your language equivalent).</p> 1405 Administrators (or your language equivalent).</p>
1404<p><span class="command"><strong>pkg_add</strong></span> creates directories of mode 1406<p><span class="command"><strong>pkg_add</strong></span> creates directories of mode
1405 0755, not 0775, in <code class="filename">$PKG_DBDIR</code>. For the 1407 0755, not 0775, in <code class="filename">$PKG_DBDIR</code>. For the
1406 time being, install packages as the local Administrator (or 1408 time being, install packages as the local Administrator (or
1407 your language equivalent), or run the following command after 1409 your language equivalent), or run the following command after
1408 installing a package to work around the issue:</p> 1410 installing a package to work around the issue:</p>
1409<pre class="screen"> 1411<pre class="screen">
1410<code class="prompt">#</code> <strong class="userinput"><code>chmod -R g+w $PKG_DBDIR</code></strong> 1412<code class="prompt">#</code> <strong class="userinput"><code>chmod -R g+w $PKG_DBDIR</code></strong>
1411 </pre> 1413 </pre>
1412</div> 1414</div>
1413</div> 1415</div>
1414<div class="sect2"> 1416<div class="sect2">
1415<div class="titlepage"><div><div><h3 class="title"> 1417<div class="titlepage"><div><div><h3 class="title">
1416<a name="irix"></a>3.3.6. IRIX</h3></div></div></div> 1418<a name="irix"></a>3.3.6. IRIX</h3></div></div></div>
1417<p>You will need a working C compiler, either gcc or SGI's MIPS and MIPSpro 1419<p>You will need a working C compiler, either gcc or SGI's MIPS and MIPSpro
1418 compiler (cc/c89). Please set the <code class="varname">CC</code> environment variable 1420 compiler (cc/c89). Please set the <code class="varname">CC</code> environment variable
1419 according to your preference. If you do not have a license for the MIPSpro 1421 according to your preference. If you do not have a license for the MIPSpro
1420 compiler suite, you can download a gcc tardist file from <a class="ulink" href="http://freeware.sgi.com/" target="_top">http://freeware.sgi.com/</a>.</p> 1422 compiler suite, you can download a gcc tardist file from <a class="ulink" href="http://freeware.sgi.com/" target="_top">http://freeware.sgi.com/</a>.</p>
1421<p>Please note that you will need IRIX 6.5.17 or higher, as this is the earliest 1423<p>Please note that you will need IRIX 6.5.17 or higher, as this is the earliest
1422 version of IRIX providing support for <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?if_indextoname+3+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">if_indextoname</span>(3)</span></a>, <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?if_nametoindex+3+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">if_nametoindex</span>(3)</span></a>, 1424 version of IRIX providing support for <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?if_indextoname+3+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">if_indextoname</span>(3)</span></a>, <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?if_nametoindex+3+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">if_nametoindex</span>(3)</span></a>,
1423 etc.</p> 1425 etc.</p>
1424<p>At this point in time, pkgsrc only supports one ABI at a time. That is, you cannot 1426<p>At this point in time, pkgsrc only supports one ABI at a time. That is, you cannot
1425 switch between the old 32-bit ABI, the new 32-bit ABI and the 64-bit ABI. If 1427 switch between the old 32-bit ABI, the new 32-bit ABI and the 64-bit ABI. If
1426 you start out using "abi=n32", that's what all your packages will be built 1428 you start out using "abi=n32", that's what all your packages will be built
1427 with.</p> 1429 with.</p>
1428<p>Therefore, please make sure that you have no conflicting 1430<p>Therefore, please make sure that you have no conflicting
1429 <code class="varname">CFLAGS</code> in your environment or the 1431 <code class="varname">CFLAGS</code> in your environment or the
1430 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. Particularly, make sure that you do not 1432 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. Particularly, make sure that you do not
1431 try to link n32 object files with lib64 or vice versa. Check your 1433 try to link n32 object files with lib64 or vice versa. Check your
1432 <code class="filename">/etc/compiler.defaults</code>!</p> 1434 <code class="filename">/etc/compiler.defaults</code>!</p>
1433<p>If you have the actual pkgsrc tree mounted via NFS from a different host, 1435<p>If you have the actual pkgsrc tree mounted via NFS from a different host,
1434 please make sure to set <code class="varname">WRKOBJDIR</code> to a local directory, 1436 please make sure to set <code class="varname">WRKOBJDIR</code> to a local directory,
1435 as it appears that IRIX linker occasionally runs into issues when trying to 1437 as it appears that IRIX linker occasionally runs into issues when trying to
1436 link over a network-mounted file system.</p> 1438 link over a network-mounted file system.</p>
1437<p>The bootstrapping process should set all the right options for programs such 1439<p>The bootstrapping process should set all the right options for programs such
1438 as imake(1), but you may want to set some options depending on your local 1440 as imake(1), but you may want to set some options depending on your local
1439 setup. Please see <code class="filename">pkgsrc/mk/defaults/mk.conf</code> and, of 1441 setup. Please see <code class="filename">pkgsrc/mk/defaults/mk.conf</code> and, of
1440 course, your compiler's man pages for details.</p> 1442 course, your compiler's man pages for details.</p>
1441<p>If you are using SGI's MIPSPro compiler, please set 1443<p>If you are using SGI's MIPSPro compiler, please set
1442 1444
1443 </p> 1445 </p>
1444<pre class="programlisting"> 1446<pre class="programlisting">
1445PKGSRC_COMPILER= mipspro 1447PKGSRC_COMPILER= mipspro
1446 </pre> 1448 </pre>
1447<p> 1449<p>
1448 1450
1449 in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. Otherwise, pkgsrc will assume you 1451 in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. Otherwise, pkgsrc will assume you
1450 are using gcc and may end up passing invalid flags to the compiler. Note that 1452 are using gcc and may end up passing invalid flags to the compiler. Note that
1451 bootstrap should create an appropriate <code class="filename">mk.conf.example</code> by 1453 bootstrap should create an appropriate <code class="filename">mk.conf.example</code> by
1452 default.</p> 1454 default.</p>
1453<p>If you have both the MIPSPro compiler chain installed as well as gcc, 1455<p>If you have both the MIPSPro compiler chain installed as well as gcc,
1454 but want to make sure that MIPSPro is used, please set your <code class="varname">PATH</code> 1456 but want to make sure that MIPSPro is used, please set your <code class="varname">PATH</code>
1455 to <span class="emphasis"><em>not</em></span> include the location of gcc (often 1457 to <span class="emphasis"><em>not</em></span> include the location of gcc (often
1456 <code class="filename">/usr/freeware/bin</code>), and (important) pass the 1458 <code class="filename">/usr/freeware/bin</code>), and (important) pass the
1457 '--preserve-path' flag.</p> 1459 '--preserve-path' flag.</p>
1458</div> 1460</div>
1459<div class="sect2"> 1461<div class="sect2">
1460<div class="titlepage"><div><div><h3 class="title"> 1462<div class="titlepage"><div><div><h3 class="title">
1461<a name="linux"></a>3.3.7. Linux</h3></div></div></div> 1463<a name="linux"></a>3.3.7. Linux</h3></div></div></div>
1462<p>Some versions of Linux (for example Debian GNU/Linux) need 1464<p>Some versions of Linux (for example Debian GNU/Linux) need
1463 either libtermcap or libcurses (libncurses). Installing the 1465 either libtermcap or libcurses (libncurses). Installing the
1464 distributions libncurses-dev package (or equivalent) should fix 1466 distributions libncurses-dev package (or equivalent) should fix
1465 the problem.</p> 1467 the problem.</p>
1466<p>pkgsrc supports both gcc (GNU Compiler Collection) and icc 1468<p>pkgsrc supports both gcc (GNU Compiler Collection) and icc
1467 (Intel C++ Compiler). gcc is the default. icc 8.0 and 8.1 on 1469 (Intel C++ Compiler). gcc is the default. icc 8.0 and 8.1 on
1468 i386 have been tested.</p> 1470 i386 have been tested.</p>
1469<p>To bootstrap using icc, assuming the default icc installation 1471<p>To bootstrap using icc, assuming the default icc installation
1470 directory:</p> 1472 directory:</p>
1471<pre class="programlisting"> 1473<pre class="programlisting">
1472env ICCBASE=/opt/intel/cc/10.1.008 ./bootstrap --compiler=icc 1474env ICCBASE=/opt/intel/cc/10.1.008 ./bootstrap --compiler=icc
1473 </pre> 1475 </pre>
1474<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 1476<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1475<h3 class="title">Note</h3> 1477<h3 class="title">Note</h3>
1476<p>For icc 8.0 you must add `LDFLAGS=-static-libcxa' to this.</p> 1478<p>For icc 8.0 you must add `LDFLAGS=-static-libcxa' to this.</p>
1477<p>For icc 8.1 you must add `LDFLAGS=-i-static' instead.</p> 1479<p>For icc 8.1 you must add `LDFLAGS=-i-static' instead.</p>
1478<p>For icc 10.1 neither of these appears to be necessary.</p> 1480<p>For icc 10.1 neither of these appears to be necessary.</p>
1479</div> 1481</div>
1480<p>Use a value for ICCBASE that corresponds to the directory 1482<p>Use a value for ICCBASE that corresponds to the directory
1481 where icc is installed. After bootstrapping, set 1483 where icc is installed. After bootstrapping, set
1482 <code class="varname">ICCBASE</code> in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>:</p> 1484 <code class="varname">ICCBASE</code> in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>:</p>
1483<pre class="programlisting"> 1485<pre class="programlisting">
1484ICCBASE= /opt/intel/cc/10.1.008 1486ICCBASE= /opt/intel/cc/10.1.008
1485 </pre> 1487 </pre>
1486<p>The pkgsrc default for <code class="varname">ICCBASE</code> is 1488<p>The pkgsrc default for <code class="varname">ICCBASE</code> is
1487 <code class="filename">/opt/intel_cc_80</code>. This is the default 1489 <code class="filename">/opt/intel_cc_80</code>. This is the default
1488 install directory for icc 8.0. If you are using a more recent 1490 install directory for icc 8.0. If you are using a more recent
1489 version, be sure to set the correct path explicitly. 1491 version, be sure to set the correct path explicitly.
1490 </p> 1492 </p>
1491<p>pkgsrc uses the static linking method of the runtime libraries 1493<p>pkgsrc uses the static linking method of the runtime libraries
1492 provided by icc, so binaries can be run on other systems which do not 1494 provided by icc, so binaries can be run on other systems which do not
1493 have the shared libraries installed.</p> 1495 have the shared libraries installed.</p>
1494<p>Libtool, however, extracts a list of libraries from the 1496<p>Libtool, however, extracts a list of libraries from the
1495 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ld+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">ld</span>(1)</span></a> command run when linking a C++ shared library and 1497 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ld+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">ld</span>(1)</span></a> command run when linking a C++ shared library and
1496 records it, throwing away the -Bstatic and -Bdynamic options 1498 records it, throwing away the -Bstatic and -Bdynamic options
1497 interspersed between the libraries. This means that 1499 interspersed between the libraries. This means that
1498 libtool-linked C++ shared libraries will have a runtime 1500 libtool-linked C++ shared libraries will have a runtime
1499 dependency on the icc libraries until this is fixed in 1501 dependency on the icc libraries until this is fixed in
1500 libtool.</p> 1502 libtool.</p>
1501</div> 1503</div>
1502<div class="sect2"> 1504<div class="sect2">
1503<div class="titlepage"><div><div><h3 class="title"> 1505<div class="titlepage"><div><div><h3 class="title">
1504<a name="mirbsd"></a>3.3.8. MirBSD</h3></div></div></div> 1506<a name="mirbsd"></a>3.3.8. MirBSD</h3></div></div></div>
1505<p>pkgsrc has been tested on MirBSD #10-current (2011 and newer). 1507<p>pkgsrc has been tested on MirBSD #10-current (2011 and newer).
1506 Older versions might also work. Releases before #10 are not 1508 Older versions might also work. Releases before #10 are not
1507 supported.</p> 1509 supported.</p>
1508<p>The package tools of the (older) native ports tree, 1510<p>The package tools of the (older) native ports tree,
1509 <a class="ulink" href="//www.mirbsd.org/ports.htm" target="_top">MirPorts</a>, 1511 <a class="ulink" href="//www.mirbsd.org/ports.htm" target="_top">MirPorts</a>,
1510 have the same names as the ones used by pkgsrc. Care should be taken 1512 have the same names as the ones used by pkgsrc. Care should be taken
1511 that the right tools are used. When installing packages from source, 1513 that the right tools are used. When installing packages from source,
1512 use the <code class="filename">bmake</code> command for pkgsrc and 1514 use the <code class="filename">bmake</code> command for pkgsrc and
1513 <code class="filename">mmake</code> for MirPorts.</p> 1515 <code class="filename">mmake</code> for MirPorts.</p>
1514<p>pkgsrc and MirPorts use the same location for the package 1516<p>pkgsrc and MirPorts use the same location for the package
1515 database, <code class="filename">/var/db/pkg</code>. It is strongly recommended 1517 database, <code class="filename">/var/db/pkg</code>. It is strongly recommended
1516 to use <code class="filename">/usr/pkg/db</code> instead, so that the pkgsrc 1518 to use <code class="filename">/usr/pkg/db</code> instead, so that the pkgsrc
1517 tree is self-contained. This is also the default setting used in the 1519 tree is self-contained. This is also the default setting used in the
1518 binary package builds.</p> 1520 binary package builds.</p>
1519<p>Binary packages for MirBSD/i386 can be found on the pkgsrc ftp 1521<p>Binary packages for MirBSD/i386 can be found on the pkgsrc ftp
1520 server. The bootstrap kit there already contains the 1522 server. The bootstrap kit there already contains the
1521 <span class="command"><strong>pkgin</strong></span> package manager. See the 1523 <span class="command"><strong>pkgin</strong></span> package manager. See the
1522 <a class="ulink" href="https://www.mirbsd.org/pkgsrc.htm" target="_top">pkgsrc on MirOS</a> 1524 <a class="ulink" href="https://www.mirbsd.org/pkgsrc.htm" target="_top">pkgsrc on MirOS</a>
1523 page for more details.</p> 1525 page for more details.</p>
1524</div> 1526</div>
1525<div class="sect2"> 1527<div class="sect2">
1526<div class="titlepage"><div><div><h3 class="title"> 1528<div class="titlepage"><div><div><h3 class="title">
1527<a name="openbsd"></a>3.3.9. OpenBSD</h3></div></div></div> 1529<a name="openbsd"></a>3.3.9. OpenBSD</h3></div></div></div>
1528<p>OpenBSD 5.1 has been tested and supported, 1530<p>OpenBSD 5.1 has been tested and supported,
1529 other versions may work.</p> 1531 other versions may work.</p>
1530<p>Care should be taken so that the tools that this kit installs do not conflict 1532<p>Care should be taken so that the tools that this kit installs do not conflict
1531 with the OpenBSD userland tools. There are several steps:</p> 1533 with the OpenBSD userland tools. There are several steps:</p>
1532<div class="orderedlist"><ol class="orderedlist" type="1"> 1534<div class="orderedlist"><ol class="orderedlist" type="1">
1533<li class="listitem"><p>OpenBSD stores its ports pkg database in 1535<li class="listitem"><p>OpenBSD stores its ports pkg database in
1534 <code class="filename">/var/db/pkg</code>. It is therefore 1536 <code class="filename">/var/db/pkg</code>. It is therefore
1535 recommended that you choose a different location (e.g. 1537 recommended that you choose a different location (e.g.
1536 <code class="filename">/usr/pkgdb</code>) by 1538 <code class="filename">/usr/pkgdb</code>) by
1537 using the --pkgdbdir option to the bootstrap script.</p></li> 1539 using the --pkgdbdir option to the bootstrap script.</p></li>
1538<li class="listitem"> 1540<li class="listitem">
1539<p>If you do not intend to use the OpenBSD ports tools, it's probably a 1541<p>If you do not intend to use the OpenBSD ports tools, it's probably a
1540 good idea to move them out of the way to avoid confusion, e.g.</p> 1542 good idea to move them out of the way to avoid confusion, e.g.</p>
1541<pre class="screen"> 1543<pre class="screen">
1542<code class="prompt">#</code> <strong class="userinput"><code>cd /usr/sbin</code></strong> 1544<code class="prompt">#</code> <strong class="userinput"><code>cd /usr/sbin</code></strong>
1543<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_add pkg_add.orig</code></strong> 1545<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_add pkg_add.orig</code></strong>
1544<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_create pkg_create.orig</code></strong> 1546<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_create pkg_create.orig</code></strong>
1545<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_delete pkg_delete.orig</code></strong> 1547<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_delete pkg_delete.orig</code></strong>
1546<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_info pkg_info.orig</code></strong> 1548<code class="prompt">#</code> <strong class="userinput"><code>mv pkg_info pkg_info.orig</code></strong>
1547 </pre> 1549 </pre>
1548</li> 1550</li>
1549<li class="listitem"> 1551<li class="listitem">
1550<p>An example <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file will be placed in 1552<p>An example <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file will be placed in
1551 <code class="filename">/etc/mk.conf.example</code> file 1553 <code class="filename">/etc/mk.conf.example</code> file
1552 when you use the bootstrap script. OpenBSD's make program uses 1554 when you use the bootstrap script. OpenBSD's make program uses
1553 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> 1555 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>
1554 as well. You can work around this by enclosing all the pkgsrc-specific parts 1556 as well. You can work around this by enclosing all the pkgsrc-specific parts
1555 of the file with:</p> 1557 of the file with:</p>
1556<pre class="programlisting"> 1558<pre class="programlisting">
1557.ifdef BSD_PKG_MK 1559.ifdef BSD_PKG_MK
1558# pkgsrc stuff, e.g. insert defaults/mk.conf or similar here 1560# pkgsrc stuff, e.g. insert defaults/mk.conf or similar here
1559.else 1561.else
1560# OpenBSD stuff 1562# OpenBSD stuff
1561.endif 1563.endif
1562 </pre> 1564 </pre>
1563</li> 1565</li>
1564</ol></div> 1566</ol></div>
1565</div> 1567</div>
1566<div class="sect2"> 1568<div class="sect2">
1567<div class="titlepage"><div><div><h3 class="title"> 1569<div class="titlepage"><div><div><h3 class="title">
1568<a name="solaris"></a>3.3.10. Solaris</h3></div></div></div> 1570<a name="solaris"></a>3.3.10. Solaris</h3></div></div></div>
1569<p>Solaris 2.6 through 10 are supported on both x86 and sparc. 1571<p>Solaris 2.6 through 10 are supported on both x86 and sparc.
1570 You will need a working C compiler. Both gcc 4.5.3 and 1572 You will need a working C compiler. Both gcc 4.5.3 and
1571 Sun WorkShop 5 have been tested.</p> 1573 Sun WorkShop 5 have been tested.</p>
1572<p>The following packages are required on Solaris 8 for the bootstrap 1574<p>The following packages are required on Solaris 8 for the bootstrap
1573 process and to build packages.</p> 1575 process and to build packages.</p>
1574<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1576<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1575<li class="listitem"><p>SUNWsprot</p></li> 1577<li class="listitem"><p>SUNWsprot</p></li>
1576<li class="listitem"><p>SUNWarc</p></li> 1578<li class="listitem"><p>SUNWarc</p></li>
1577<li class="listitem"><p>SUNWbtool</p></li> 1579<li class="listitem"><p>SUNWbtool</p></li>
1578<li class="listitem"><p>SUNWtoo</p></li> 1580<li class="listitem"><p>SUNWtoo</p></li>
1579<li class="listitem"><p>SUNWlibm</p></li> 1581<li class="listitem"><p>SUNWlibm</p></li>
1580</ul></div> 1582</ul></div>
1581<p>Please note that the use of GNU binutils on Solaris is 1583<p>Please note that the use of GNU binutils on Solaris is
1582 <span class="emphasis"><em>not</em></span> supported, as of June 2006.</p> 1584 <span class="emphasis"><em>not</em></span> supported, as of June 2006.</p>
1583<p>Whichever compiler you use, please ensure the compiler tools and 1585<p>Whichever compiler you use, please ensure the compiler tools and
1584 your $prefix are in your <code class="varname">PATH</code>. This includes 1586 your $prefix are in your <code class="varname">PATH</code>. This includes
1585 <code class="filename">/usr/ccs/{bin,lib}</code> 1587 <code class="filename">/usr/ccs/{bin,lib}</code>
1586 and e.g. <code class="filename">/usr/pkg/{bin,sbin}</code>.</p> 1588 and e.g. <code class="filename">/usr/pkg/{bin,sbin}</code>.</p>
1587<div class="sect3"> 1589<div class="sect3">
1588<div class="titlepage"><div><div><h4 class="title"> 1590<div class="titlepage"><div><div><h4 class="title">
1589<a name="solaris-gcc-note"></a>3.3.10.1. If you are using gcc</h4></div></div></div> 1591<a name="solaris-gcc-note"></a>3.3.10.1. If you are using gcc</h4></div></div></div>
1590<p>It makes life much simpler if you only use the same gcc consistently 1592<p>It makes life much simpler if you only use the same gcc consistently
1591 for building all packages.</p> 1593 for building all packages.</p>
1592<p>It is recommended that an external gcc be used only for bootstrapping, 1594<p>It is recommended that an external gcc be used only for bootstrapping,
1593 then either build gcc from 1595 then either build gcc from
1594 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/gcc46/README.html" target="_top"><code class="filename">lang/gcc46</code></a> or install a binary gcc 1596 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/gcc46/README.html" target="_top"><code class="filename">lang/gcc46</code></a> or install a binary gcc
1595 package, then remove gcc used during bootstrapping.</p> 1597 package, then remove gcc used during bootstrapping.</p>
1596<p>Binary packages of gcc can be found through <a class="ulink" href="http://www.sunfreeware.com/" target="_top">http://www.sunfreeware.com/</a>.</p> 1598<p>Binary packages of gcc can be found through <a class="ulink" href="http://www.sunfreeware.com/" target="_top">http://www.sunfreeware.com/</a>.</p>
1597</div> 1599</div>
1598<div class="sect3"> 1600<div class="sect3">
1599<div class="titlepage"><div><div><h4 class="title"> 1601<div class="titlepage"><div><div><h4 class="title">
1600<a name="solaris-sun-workshop-note"></a>3.3.10.2. If you are using Sun WorkShop</h4></div></div></div> 1602<a name="solaris-sun-workshop-note"></a>3.3.10.2. If you are using Sun WorkShop</h4></div></div></div>
1601<p>You will need at least the following packages installed (from WorkShop 1603<p>You will need at least the following packages installed (from WorkShop
1602 5.0)</p> 1604 5.0)</p>
1603<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1605<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1604<li class="listitem"><p>SPROcc 1606<li class="listitem"><p>SPROcc
1605 - Sun WorkShop Compiler C 5.0</p></li> 1607 - Sun WorkShop Compiler C 5.0</p></li>
1606<li class="listitem"><p>SPROcpl 1608<li class="listitem"><p>SPROcpl
1607 - Sun WorkShop Compiler C++ 5.0</p></li> 1609 - Sun WorkShop Compiler C++ 5.0</p></li>
1608<li class="listitem"><p>SPROild 1610<li class="listitem"><p>SPROild
1609 - Sun WorkShop Incremental Linker</p></li> 1611 - Sun WorkShop Incremental Linker</p></li>
1610<li class="listitem"><p>SPROlang 1612<li class="listitem"><p>SPROlang
1611 - Sun WorkShop Compilers common components</p></li> 1613 - Sun WorkShop Compilers common components</p></li>
1612</ul></div> 1614</ul></div>
1613<p>You should set the following variables in your 1615<p>You should set the following variables in your
1614 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file:</p> 1616 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file:</p>
1615<pre class="programlisting"> 1617<pre class="programlisting">
1616CC= cc 1618CC= cc
1617CXX= CC 1619CXX= CC
1618CPP= cc -E 1620CPP= cc -E
1619CXXCPP= CC -E 1621CXXCPP= CC -E
1620</pre> 1622</pre>
1621<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 1623<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1622<h3 class="title">Note</h3> 1624<h3 class="title">Note</h3>
1623<p>The <code class="varname">CPP</code> setting might break some 1625<p>The <code class="varname">CPP</code> setting might break some
1624 packages that use the C preprocessor for processing things other 1626 packages that use the C preprocessor for processing things other
1625 than C source code.</p> 1627 than C source code.</p>
1626</div> 1628</div>
1627</div> 1629</div>
1628<div class="sect3"> 1630<div class="sect3">
1629<div class="titlepage"><div><div><h4 class="title"> 1631<div class="titlepage"><div><div><h4 class="title">
1630<a name="solaris-sunpro-64"></a>3.3.10.3. Building 64-bit binaries with SunPro</h4></div></div></div> 1632<a name="solaris-sunpro-64"></a>3.3.10.3. Building 64-bit binaries with SunPro</h4></div></div></div>
1631<p>To build 64-bit packages, you just need to have the 1633<p>To build 64-bit packages, you just need to have the
1632 following lines in your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file:</p> 1634 following lines in your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file:</p>
1633<pre class="programlisting"> 1635<pre class="programlisting">
1634PKGSRC_COMPILER= sunpro 1636PKGSRC_COMPILER= sunpro
1635ABI= 64 1637ABI= 64
1636</pre> 1638</pre>
1637<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 1639<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1638<h3 class="title">Note</h3> 1640<h3 class="title">Note</h3>
1639<p>This setting has been tested for the SPARC 1641<p>This setting has been tested for the SPARC
1640 architecture. Intel and AMD machines need some more 1642 architecture. Intel and AMD machines need some more
1641 work.</p> 1643 work.</p>
1642</div> 1644</div>
1643</div> 1645</div>
1644<div class="sect3"> 1646<div class="sect3">
1645<div class="titlepage"><div><div><h4 class="title"> 1647<div class="titlepage"><div><div><h4 class="title">
1646<a name="plat.sunos.problems"></a>3.3.10.4. Common problems</h4></div></div></div> 1648<a name="plat.sunos.problems"></a>3.3.10.4. Common problems</h4></div></div></div>
1647<p>Sometimes, when using <span class="command"><strong>libtool</strong></span>, 1649<p>Sometimes, when using <span class="command"><strong>libtool</strong></span>,
1648 <code class="filename">/bin/ksh</code> crashes with a segmentation fault. 1650 <code class="filename">/bin/ksh</code> crashes with a segmentation fault.
1649 The workaround is to use another shell for the configure 1651 The workaround is to use another shell for the configure
1650 scripts, for example by installing <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/shells/bash/README.html" target="_top"><code class="filename">shells/bash</code></a> and adding the following lines 1652 scripts, for example by installing <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/shells/bash/README.html" target="_top"><code class="filename">shells/bash</code></a> and adding the following lines
1651 to your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>:</p> 1653 to your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>:</p>
1652<pre class="programlisting"> 1654<pre class="programlisting">
1653CONFIG_SHELL= ${LOCALBASE}/bin/bash 1655CONFIG_SHELL= ${LOCALBASE}/bin/bash
1654WRAPPER_SHELL= ${LOCALBASE}/bin/bash 1656WRAPPER_SHELL= ${LOCALBASE}/bin/bash
1655 </pre> 1657 </pre>
1656<p>Then, rebuild the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/libtool-base/README.html" target="_top"><code class="filename">devel/libtool-base</code></a> package.</p> 1658<p>Then, rebuild the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/libtool-base/README.html" target="_top"><code class="filename">devel/libtool-base</code></a> package.</p>
1657</div> 1659</div>
1658</div> 1660</div>
1659</div> 1661</div>
1660</div> 1662</div>
1661<div class="chapter"> 1663<div class="chapter">
1662<div class="titlepage"><div><div><h2 class="title"> 1664<div class="titlepage"><div><div><h2 class="title">
1663<a name="using"></a>Chapter 4. Using pkgsrc</h2></div></div></div> 1665<a name="using"></a>Chapter 4. Using pkgsrc</h2></div></div></div>
1664<div class="toc"> 1666<div class="toc">
1665<p><b>Table of Contents</b></p> 1667<p><b>Table of Contents</b></p>
1666<dl> 1668<dl>
1667<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt> 1669<dt><span class="sect1"><a href="#using-pkg">4.1. Using binary packages</a></span></dt>
1668<dd><dl> 1670<dd><dl>
1669<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt> 1671<dt><span class="sect2"><a href="#finding-binary-packages">4.1.1. Finding binary packages</a></span></dt>
1670<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt> 1672<dt><span class="sect2"><a href="#installing-binary-packages">4.1.2. Installing binary packages</a></span></dt>
1671<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt> 1673<dt><span class="sect2"><a href="#using.pkg_delete">4.1.3. Deinstalling packages</a></span></dt>
1672<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt> 1674<dt><span class="sect2"><a href="#using.pkg_info">4.1.4. Getting information about installed packages</a></span></dt>
1673<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt> 1675<dt><span class="sect2"><a href="#vulnerabilities">4.1.5. Checking for security vulnerabilities in installed packages</a></span></dt>
1674<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> 1676<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>
1675<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt> 1677<dt><span class="sect2"><a href="#using.pkg_admin">4.1.7. Other administrative functions</a></span></dt>
1676<dt><span class="sect2"><a href="#a-word-of-warning">4.1.8. A word of warning</a></span></dt> 1678<dt><span class="sect2"><a href="#a-word-of-warning">4.1.8. A word of warning</a></span></dt>
1677</dl></dd> 1679</dl></dd>
1678<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt> 1680<dt><span class="sect1"><a href="#building-packages-from-source">4.2. Building packages from source</a></span></dt>
1679<dd><dl> 1681<dd><dl>
1680<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt> 1682<dt><span class="sect2"><a href="#requirements">4.2.1. Requirements</a></span></dt>
1681<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt> 1683<dt><span class="sect2"><a href="#fetching-distfiles">4.2.2. Fetching distfiles</a></span></dt>
1682<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt> 1684<dt><span class="sect2"><a href="#how-to-build-and-install">4.2.3. How to build and install</a></span></dt>
1683</dl></dd> 1685</dl></dd>
1684</dl> 1686</dl>
1685</div> 1687</div>
1686<p>Basically, there are two ways of using pkgsrc. The first 1688<p>Basically, there are two ways of using pkgsrc. The first
1687is to only install the package tools and to use binary packages 1689is to only install the package tools and to use binary packages
1688that someone else has prepared. This is the <span class="quote">&#8220;<span class="quote">pkg</span>&#8221;</span> 1690that someone else has prepared. This is the <span class="quote">&#8220;<span class="quote">pkg</span>&#8221;</span>
1689in pkgsrc. The second way is to install the <span class="quote">&#8220;<span class="quote">src</span>&#8221;</span> 1691in pkgsrc. The second way is to install the <span class="quote">&#8220;<span class="quote">src</span>&#8221;</span>
1690of pkgsrc, too. Then you are able to build your own packages, 1692of pkgsrc, too. Then you are able to build your own packages,
1691and you can still use binary packages from someone else.</p> 1693and you can still use binary packages from someone else.</p>
1692<div class="sect1"> 1694<div class="sect1">
1693<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1695<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1694<a name="using-pkg"></a>4.1. Using binary packages</h2></div></div></div> 1696<a name="using-pkg"></a>4.1. Using binary packages</h2></div></div></div>
1695<p>On the <a class="ulink" href="ftp://ftp.NetBSD.org/" target="_top">ftp.NetBSD.org</a> 1697<p>On the <a class="ulink" href="ftp://ftp.NetBSD.org/" target="_top">ftp.NetBSD.org</a>
1696 server and its mirrors, there are collections of binary packages, 1698 server and its mirrors, there are collections of binary packages,
1697 ready to be installed. These binary packages have been built using the 1699 ready to be installed. These binary packages have been built using the
1698 default settings for the directories, that is:</p> 1700 default settings for the directories, that is:</p>
1699<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 1701<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1700<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> 1702<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>
1701<li class="listitem"><p><code class="filename">/usr/pkg/etc</code> for configuration files,</p></li> 1703<li class="listitem"><p><code class="filename">/usr/pkg/etc</code> for configuration files,</p></li>
1702<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> 1704<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>
1703</ul></div> 1705</ul></div>
1704<p>If you cannot use these directories for whatever reasons (maybe 1706<p>If you cannot use these directories for whatever reasons (maybe
1705 because you're not root), you cannot use these binary packages, but 1707 because you're not root), you cannot use these binary packages, but
1706 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> 1708 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>
1707<div class="sect2"> 1709<div class="sect2">
1708<div class="titlepage"><div><div><h3 class="title"> 1710<div class="titlepage"><div><div><h3 class="title">
1709<a name="finding-binary-packages"></a>4.1.1. Finding binary packages</h3></div></div></div> 1711<a name="finding-binary-packages"></a>4.1.1. Finding binary packages</h3></div></div></div>
1710<p>To install binary packages, you first need to know from where 1712<p>To install binary packages, you first need to know from where
1711 to get them. The first place where you should look is on the main 1713 to get them. The first place where you should look is on the main
1712 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> 1714 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>
1713<p>This directory contains binary packages for multiple 1715<p>This directory contains binary packages for multiple
1714 platforms. First, select your operating system. (Ignore the 1716 platforms. First, select your operating system. (Ignore the
1715 directories with version numbers attached to it, they just exist for 1717 directories with version numbers attached to it, they just exist for
1716 legacy reasons.) Then, select your hardware architecture, and in the 1718 legacy reasons.) Then, select your hardware architecture, and in the
1717 third step, the OS version and the <span class="quote">&#8220;<span class="quote">version</span>&#8221;</span> of pkgsrc.</p> 1719 third step, the OS version and the <span class="quote">&#8220;<span class="quote">version</span>&#8221;</span> of pkgsrc.</p>
1718<p>In this directory, you often find a file called 1720<p>In this directory, you often find a file called
1719 <code class="filename">bootstrap.tar.gz</code> which contains the package 1721 <code class="filename">bootstrap.tar.gz</code> which contains the package
1720 management tools. If the file is missing, it is likely that your 1722 management tools. If the file is missing, it is likely that your
1721 operating system already provides those tools. Download the file and 1723 operating system already provides those tools. Download the file and
1722 extract it in the <code class="filename">/</code> directory. It will create 1724 extract it in the <code class="filename">/</code> directory. It will create
1723 the directories <code class="filename">/usr/pkg</code> (containing the tools 1725 the directories <code class="filename">/usr/pkg</code> (containing the tools
1724 for managing binary packages) and <code class="filename">/var/db/pkg</code> 1726 for managing binary packages) and <code class="filename">/var/db/pkg</code>
1725 (the database of installed packages).</p> 1727 (the database of installed packages).</p>
1726</div> 1728</div>
1727<div class="sect2"> 1729<div class="sect2">
1728<div class="titlepage"><div><div><h3 class="title"> 1730<div class="titlepage"><div><div><h3 class="title">
1729<a name="installing-binary-packages"></a>4.1.2. Installing binary packages</h3></div></div></div> 1731<a name="installing-binary-packages"></a>4.1.2. Installing binary packages</h3></div></div></div>
1730<p>In the directory from the last section, there is a 1732<p>In the directory from the last section, there is a
1731 subdirectory called <code class="filename">All</code>, which contains all the 1733 subdirectory called <code class="filename">All</code>, which contains all the
1732 binary packages that are available for the platform, excluding those 1734 binary packages that are available for the platform, excluding those
1733 that may not be distributed via FTP or CDROM (depending on which 1735 that may not be distributed via FTP or CDROM (depending on which
1734 medium you are using).</p> 1736 medium you are using).</p>
1735<p>To install packages directly from an FTP or HTTP server, run 1737<p>To install packages directly from an FTP or HTTP server, run
1736 the following commands in a Bourne-compatible shell (be sure to 1738 the following commands in a Bourne-compatible shell (be sure to
1737 <span class="command"><strong>su</strong></span> to root first):</p> 1739 <span class="command"><strong>su</strong></span> to root first):</p>
1738<pre class="screen"> 1740<pre class="screen">
1739<code class="prompt">#</code> <strong class="userinput"><code>PATH="/usr/pkg/sbin:$PATH"</code></strong> 1741<code class="prompt">#</code> <strong class="userinput"><code>PATH="/usr/pkg/sbin:$PATH"</code></strong>
1740<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> 1742<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>
1741<code class="prompt">#</code> <strong class="userinput"><code>export PATH PKG_PATH</code></strong> 1743<code class="prompt">#</code> <strong class="userinput"><code>export PATH PKG_PATH</code></strong>
1742</pre> 1744</pre>
1743<p>Instead of URLs, you can also use local paths, for example if 1745<p>Instead of URLs, you can also use local paths, for example if
1744 you are installing from a set of CDROMs, DVDs or an NFS-mounted 1746 you are installing from a set of CDROMs, DVDs or an NFS-mounted
1745 repository. If you want to install packages from multiple sources, 1747 repository. If you want to install packages from multiple sources,
1746 you can separate them by a semicolon in 1748 you can separate them by a semicolon in
1747 <code class="varname">PKG_PATH</code>.</p> 1749 <code class="varname">PKG_PATH</code>.</p>
1748<p>After these preparations, installing a package is very 1750<p>After these preparations, installing a package is very
1749 easy:</p> 1751 easy:</p>
1750<pre class="screen"> 1752<pre class="screen">
1751<code class="prompt">#</code> <strong class="userinput"><code>pkg_add openoffice2</code></strong> 1753<code class="prompt">#</code> <strong class="userinput"><code>pkg_add openoffice2</code></strong>
1752<code class="prompt">#</code> <strong class="userinput"><code>pkg_add kde-3.5.7</code></strong> 1754<code class="prompt">#</code> <strong class="userinput"><code>pkg_add kde-3.5.7</code></strong>
1753<code class="prompt">#</code> <strong class="userinput"><code>pkg_add ap2-php5-*</code></strong> 1755<code class="prompt">#</code> <strong class="userinput"><code>pkg_add ap2-php5-*</code></strong>
1754</pre> 1756</pre>
1755<p>Note that any prerequisite packages needed to run the 1757<p>Note that any prerequisite packages needed to run the
1756 package in question will be installed, too, assuming they are 1758 package in question will be installed, too, assuming they are
1757 present where you install from.</p> 1759 present where you install from.</p>
1758<p>Adding packages might install vulnerable packages. 1760<p>Adding packages might install vulnerable packages.
1759 Thus you should run <span class="command"><strong>pkg_admin audit</strong></span> 1761 Thus you should run <span class="command"><strong>pkg_admin audit</strong></span>
1760 regularly, especially after installing new packages, and verify 1762 regularly, especially after installing new packages, and verify
1761 that the vulnerabilities are acceptable for your configuration.</p> 1763 that the vulnerabilities are acceptable for your configuration.</p>
1762<p>After you've installed packages, be sure to have 1764<p>After you've installed packages, be sure to have
1763 <code class="filename">/usr/pkg/bin</code> and <code class="filename">/usr/pkg/sbin</code> in your 1765 <code class="filename">/usr/pkg/bin</code> and <code class="filename">/usr/pkg/sbin</code> in your
1764 <code class="varname">PATH</code> so you can actually start the just 1766 <code class="varname">PATH</code> so you can actually start the just
1765 installed program.</p> 1767 installed program.</p>
1766</div> 1768</div>
1767<div class="sect2"> 1769<div class="sect2">
1768<div class="titlepage"><div><div><h3 class="title"> 1770<div class="titlepage"><div><div><h3 class="title">
1769<a name="using.pkg_delete"></a>4.1.3. Deinstalling packages</h3></div></div></div> 1771<a name="using.pkg_delete"></a>4.1.3. Deinstalling packages</h3></div></div></div>
1770<p>To deinstall a package, it does not matter whether it was 1772<p>To deinstall a package, it does not matter whether it was
1771 installed from source code or from a binary package. The 1773 installed from source code or from a binary package. The
1772 <span class="command"><strong>pkg_delete</strong></span> command does not know it anyway. 1774 <span class="command"><strong>pkg_delete</strong></span> command does not know it anyway.
1773 To delete a package, you can just run <span class="command"><strong>pkg_delete 1775 To delete a package, you can just run <span class="command"><strong>pkg_delete
1774 <em class="replaceable"><code>package-name</code></em></strong></span>. The package 1776 <em class="replaceable"><code>package-name</code></em></strong></span>. The package
1775 name can be given with or without version number. Wildcards can 1777 name can be given with or without version number. Wildcards can
1776 also be used to deinstall a set of packages, for example 1778 also be used to deinstall a set of packages, for example
1777 <code class="literal">*emacs*</code>. Be sure to include them in quotes, 1779 <code class="literal">*emacs*</code>. Be sure to include them in quotes,
1778 so that the shell does not expand them before 1780 so that the shell does not expand them before
1779 <code class="literal">pkg_delete</code> sees them.</p> 1781 <code class="literal">pkg_delete</code> sees them.</p>
1780<p>The <code class="option">-r</code> option is very powerful: it 1782<p>The <code class="option">-r</code> option is very powerful: it
1781 removes all the packages that require the package in question 1783 removes all the packages that require the package in question
1782 and then removes the package itself. For example: 1784 and then removes the package itself. For example:
1783 1785
1784 </p> 1786 </p>
1785<pre class="screen"> 1787<pre class="screen">
1786<code class="prompt">#</code> <strong class="userinput"><code>pkg_delete -r jpeg</code></strong> 1788<code class="prompt">#</code> <strong class="userinput"><code>pkg_delete -r jpeg</code></strong>
1787 </pre> 1789 </pre>
1788<p> 1790<p>
1789 1791
1790 will remove jpeg and all the packages that used it; this allows 1792 will remove jpeg and all the packages that used it; this allows
1791 upgrading the jpeg package.</p> 1793 upgrading the jpeg package.</p>
1792</div> 1794</div>
1793<div class="sect2"> 1795<div class="sect2">
1794<div class="titlepage"><div><div><h3 class="title"> 1796<div class="titlepage"><div><div><h3 class="title">
1795<a name="using.pkg_info"></a>4.1.4. Getting information about installed packages</h3></div></div></div> 1797<a name="using.pkg_info"></a>4.1.4. Getting information about installed packages</h3></div></div></div>
1796<p>The <span class="command"><strong>pkg_info</strong></span> shows information about 1798<p>The <span class="command"><strong>pkg_info</strong></span> shows information about
1797 installed packages or binary package files.</p> 1799 installed packages or binary package files.</p>
1798</div> 1800</div>
1799<div class="sect2"> 1801<div class="sect2">
1800<div class="titlepage"><div><div><h3 class="title"> 1802<div class="titlepage"><div><div><h3 class="title">
1801<a name="vulnerabilities"></a>4.1.5. Checking for security vulnerabilities in installed packages</h3></div></div></div> 1803<a name="vulnerabilities"></a>4.1.5. Checking for security vulnerabilities in installed packages</h3></div></div></div>
1802<p> 1804<p>
1803 The NetBSD Security-Officer and Packages Groups maintain a list of 1805 The NetBSD Security-Officer and Packages Groups maintain a list of
1804 known security vulnerabilities to packages which are (or have been) 1806 known security vulnerabilities to packages which are (or have been)
1805 included in pkgsrc. The list is available from the NetBSD 1807 included in pkgsrc. The list is available from the NetBSD
1806 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>. 1808 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>.
1807 </p> 1809 </p>
1808<p> 1810<p>
1809 Through <span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>, 1811 Through <span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>,
1810 this list can be downloaded 1812 this list can be downloaded
1811 automatically, and a security audit of all packages installed on a system 1813 automatically, and a security audit of all packages installed on a system
1812 can take place. 1814 can take place.
1813 </p> 1815 </p>
1814<p> 1816<p>
1815 There are two components to auditing. The first 1817 There are two components to auditing. The first
1816 step, <span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>, 1818 step, <span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>,
1817 is for downloading 1819 is for downloading
1818 the list of vulnerabilities from the NetBSD FTP site. The second 1820 the list of vulnerabilities from the NetBSD FTP site. The second
1819 step, <span class="command"><strong>pkg_admin audit</strong></span>, checks to see if any of your 1821 step, <span class="command"><strong>pkg_admin audit</strong></span>, checks to see if any of your
1820 installed packages are vulnerable. If a package is vulnerable, you 1822 installed packages are vulnerable. If a package is vulnerable, you
1821 will see output similar to the following: 1823 will see output similar to the following:
1822 </p> 1824 </p>
1823<pre class="screen">Package samba-2.0.9 has a local-root-shell vulnerability, see 1825<pre class="screen">Package samba-2.0.9 has a local-root-shell vulnerability, see
1824 http://www.samba.org/samba/whatsnew/macroexploit.html</pre> 1826 http://www.samba.org/samba/whatsnew/macroexploit.html</pre>
1825<p> 1827<p>
1826 You may wish to have the 1828 You may wish to have the
1827 <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/vulnerabilities" target="_top">vulnerabilities</a> 1829 <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/vulnerabilities" target="_top">vulnerabilities</a>
1828 file downloaded daily so that 1830 file downloaded daily so that
1829 it remains current. This may be done by adding an appropriate entry 1831 it remains current. This may be done by adding an appropriate entry
1830 to the root users <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?crontab+5+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">crontab</span>(5)</span></a> entry. For example the entry 1832 to the root users <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?crontab+5+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">crontab</span>(5)</span></a> entry. For example the entry
1831 </p> 1833 </p>
1832<pre class="screen"> 1834<pre class="screen">
1833# download vulnerabilities file 1835# download vulnerabilities file
18340 3 * * * /usr/sbin/pkg_admin fetch-pkg-vulnerabilities &gt;/dev/null 2&gt;&amp;1 18360 3 * * * /usr/sbin/pkg_admin fetch-pkg-vulnerabilities &gt;/dev/null 2&gt;&amp;1
1835 </pre> 1837 </pre>
1836<p> 1838<p>
1837 will update the vulnerability list every day at 3AM. You may wish to do 1839 will update the vulnerability list every day at 3AM. You may wish to do
1838 this more often than once a day. 1840 this more often than once a day.
1839 1841
1840 In addition, you may wish to run the package audit from the daily 1842 In addition, you may wish to run the package audit from the daily
1841 security script. This may be accomplished by adding the following 1843 security script. This may be accomplished by adding the following
1842 line to <code class="filename">/etc/security.local</code>: 1844 line to <code class="filename">/etc/security.local</code>:
1843 </p> 1845 </p>
1844<pre class="screen"> 1846<pre class="screen">
1845/usr/sbin/pkg_admin audit 1847/usr/sbin/pkg_admin audit
1846 </pre> 1848 </pre>
1847<p> 1849<p>
1848 </p> 1850 </p>
1849</div> 1851</div>
1850<div class="sect2"> 1852<div class="sect2">
1851<div class="titlepage"><div><div><h3 class="title"> 1853<div class="titlepage"><div><div><h3 class="title">
1852<a name="pkg_versions"></a>4.1.6. Finding if newer versions of your installed packages are in pkgsrc</h3></div></div></div> 1854<a name="pkg_versions"></a>4.1.6. Finding if newer versions of your installed packages are in pkgsrc</h3></div></div></div>
1853<p> 1855<p>
1854 Install <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/lintpkgsrc/README.html" target="_top"><code class="filename">pkgtools/lintpkgsrc</code></a> and run 1856 Install <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/lintpkgsrc/README.html" target="_top"><code class="filename">pkgtools/lintpkgsrc</code></a> and run
1855 <span class="command"><strong>lintpkgsrc</strong></span> with the <span class="quote">&#8220;<span class="quote">-i</span>&#8221;</span> 1857 <span class="command"><strong>lintpkgsrc</strong></span> with the <span class="quote">&#8220;<span class="quote">-i</span>&#8221;</span>
1856 argument to check if your packages are up-to-date, e.g. 1858 argument to check if your packages are up-to-date, e.g.
1857 </p> 1859 </p>
1858<pre class="screen"> 1860<pre class="screen">
1859<code class="prompt">%</code> <strong class="userinput"><code>lintpkgsrc -i</code></strong> 1861<code class="prompt">%</code> <strong class="userinput"><code>lintpkgsrc -i</code></strong>
1860... 1862...
1861Version mismatch: 'tcsh' 6.09.00 vs 6.10.00 1863Version mismatch: 'tcsh' 6.09.00 vs 6.10.00
1862 </pre> 1864 </pre>
1863<p>You can then use <span class="command"><strong>make update</strong></span> to update the 1865<p>You can then use <span class="command"><strong>make update</strong></span> to update the
1864 package on your system and rebuild any dependencies. 1866 package on your system and rebuild any dependencies.
1865 </p> 1867 </p>
1866</div> 1868</div>
1867<div class="sect2"> 1869<div class="sect2">
1868<div class="titlepage"><div><div><h3 class="title"> 1870<div class="titlepage"><div><div><h3 class="title">
1869<a name="using.pkg_admin"></a>4.1.7. Other administrative functions</h3></div></div></div> 1871<a name="using.pkg_admin"></a>4.1.7. Other administrative functions</h3></div></div></div>
1870<p>The <span class="command"><strong>pkg_admin</strong></span> executes various 1872<p>The <span class="command"><strong>pkg_admin</strong></span> executes various
1871 administrative functions on the package system.</p> 1873 administrative functions on the package system.</p>
1872</div> 1874</div>
1873<div class="sect2"> 1875<div class="sect2">
1874<div class="titlepage"><div><div><h3 class="title"> 1876<div class="titlepage"><div><div><h3 class="title">
1875<a name="a-word-of-warning"></a>4.1.8. A word of warning</h3></div></div></div> 1877<a name="a-word-of-warning"></a>4.1.8. A word of warning</h3></div></div></div>
1876<p>Please pay very careful attention to the warnings 1878<p>Please pay very careful attention to the warnings
1877 expressed in the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> manual page about the 1879 expressed in the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> manual page about the
1878 inherent dangers of installing binary packages which you did 1880 inherent dangers of installing binary packages which you did
1879 not create yourself, and the security holes that can be 1881 not create yourself, and the security holes that can be
1880 introduced onto your system by indiscriminate adding of such 1882 introduced onto your system by indiscriminate adding of such
1881 files.</p> 1883 files.</p>
1882<p>The same warning of course applies to every package you 1884<p>The same warning of course applies to every package you
1883 install from source when you haven't completely read and 1885 install from source when you haven't completely read and
1884 understood the source code of the package, the compiler that 1886 understood the source code of the package, the compiler that
1885 is used to build the package and all the other tools that are 1887 is used to build the package and all the other tools that are
1886 involved.</p> 1888 involved.</p>
1887</div> 1889</div>
1888</div> 1890</div>
1889<div class="sect1"> 1891<div class="sect1">
1890<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 1892<div class="titlepage"><div><div><h2 class="title" style="clear: both">
1891<a name="building-packages-from-source"></a>4.2. Building packages from source</h2></div></div></div> 1893<a name="building-packages-from-source"></a>4.2. Building packages from source</h2></div></div></div>
1892<p>After obtaining pkgsrc, the <code class="filename">pkgsrc</code> 1894<p>After obtaining pkgsrc, the <code class="filename">pkgsrc</code>
1893 directory now contains a set of packages, organized into 1895 directory now contains a set of packages, organized into
1894 categories. You can browse the online index of packages, or run 1896 categories. You can browse the online index of packages, or run
1895 <span class="command"><strong>make readme</strong></span> from the <code class="filename">pkgsrc</code> 1897 <span class="command"><strong>make readme</strong></span> from the <code class="filename">pkgsrc</code>
1896 directory to build local <code class="filename">README.html</code> files for 1898 directory to build local <code class="filename">README.html</code> files for
1897 all packages, viewable with any web browser such as <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/lynx/README.html" target="_top"><code class="filename">www/lynx</code></a> or <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a>.</p> 1899 all packages, viewable with any web browser such as <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/lynx/README.html" target="_top"><code class="filename">www/lynx</code></a> or <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a>.</p>
1898<p>The default <span class="emphasis"><em>prefix</em></span> for installed packages 1900<p>The default <span class="emphasis"><em>prefix</em></span> for installed packages
1899 is <code class="filename">/usr/pkg</code>. If you wish to change this, you 1901 is <code class="filename">/usr/pkg</code>. If you wish to change this, you
1900 should do so by setting <code class="varname">LOCALBASE</code> in 1902 should do so by setting <code class="varname">LOCALBASE</code> in
1901 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. You should not try to use multiple 1903 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. You should not try to use multiple
1902 different <code class="varname">LOCALBASE</code> definitions on the same 1904 different <code class="varname">LOCALBASE</code> definitions on the same
1903 system (inside a chroot is an exception). </p> 1905 system (inside a chroot is an exception). </p>
1904<p>The rest of this chapter assumes that the package is already 1906<p>The rest of this chapter assumes that the package is already
1905 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 1907 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
1906 instructions how to create your own packages.</p> 1908 instructions how to create your own packages.</p>
1907<div class="sect2"> 1909<div class="sect2">
1908<div class="titlepage"><div><div><h3 class="title"> 1910<div class="titlepage"><div><div><h3 class="title">
1909<a name="requirements"></a>4.2.1. Requirements</h3></div></div></div> 1911<a name="requirements"></a>4.2.1. Requirements</h3></div></div></div>
1910<p>To build packages from source, you need a working C 1912<p>To build packages from source, you need a working C
1911 compiler. On NetBSD, you need to install the 1913 compiler. On NetBSD, you need to install the
1912 <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 1914 <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
1913 sets. If you want to build X11-related packages, the 1915 sets. If you want to build X11-related packages, the
1914 <span class="quote">&#8220;<span class="quote">xbase</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">xcomp</span>&#8221;</span> distribution 1916 <span class="quote">&#8220;<span class="quote">xbase</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">xcomp</span>&#8221;</span> distribution
1915 sets are required, too.</p> 1917 sets are required, too.</p>
1916</div> 1918</div>
1917<div class="sect2"> 1919<div class="sect2">
1918<div class="titlepage"><div><div><h3 class="title"> 1920<div class="titlepage"><div><div><h3 class="title">
1919<a name="fetching-distfiles"></a>4.2.2. Fetching distfiles</h3></div></div></div> 1921<a name="fetching-distfiles"></a>4.2.2. Fetching distfiles</h3></div></div></div>
1920<p>The first step for building a package is downloading the 1922<p>The first step for building a package is downloading the
1921 distfiles (i.e. the unmodified source). If they have not yet been 1923 distfiles (i.e. the unmodified source). If they have not yet been
1922 downloaded, pkgsrc will fetch them automatically.</p> 1924 downloaded, pkgsrc will fetch them automatically.</p>
1923<p>If you have all files that you need in the 1925<p>If you have all files that you need in the
1924 <code class="filename">distfiles</code> directory, 1926 <code class="filename">distfiles</code> directory,
1925 you don't need to connect. If the distfiles are on CD-ROM, you can 1927 you don't need to connect. If the distfiles are on CD-ROM, you can
1926 mount the CD-ROM on <code class="filename">/cdrom</code> and add: 1928 mount the CD-ROM on <code class="filename">/cdrom</code> and add:
1927 </p> 1929 </p>
1928<pre class="screen">DISTDIR=/cdrom/pkgsrc/distfiles</pre> 1930<pre class="screen">DISTDIR=/cdrom/pkgsrc/distfiles</pre>
1929<p> 1931<p>
1930 to your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p> 1932 to your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p>
1931<p>By default a list of distribution sites will be randomly 1933<p>By default a list of distribution sites will be randomly
1932 intermixed to prevent huge load on servers which holding popular 1934 intermixed to prevent huge load on servers which holding popular
1933 packages (for example, SourceForge.net mirrors). Thus, every 1935 packages (for example, SourceForge.net mirrors). Thus, every
1934 time when you need to fetch yet another distfile all the mirrors 1936 time when you need to fetch yet another distfile all the mirrors
1935 will be tried in new (random) order. You can turn this feature 1937 will be tried in new (random) order. You can turn this feature
1936 off by setting <code class="varname">MASTER_SORT_RANDOM=NO</code> (for 1938 off by setting <code class="varname">MASTER_SORT_RANDOM=NO</code> (for
1937 <code class="varname">PKG_DEVELOPER</code>s it's already disabled).</p> 1939 <code class="varname">PKG_DEVELOPER</code>s it's already disabled).</p>
1938<p>You can overwrite some of the major distribution sites to 1940<p>You can overwrite some of the major distribution sites to
1939 fit to sites that are close to your own. By setting one or two 1941 fit to sites that are close to your own. By setting one or two
1940 variables you can modify the order in which the master sites are 1942 variables you can modify the order in which the master sites are
1941 accessed. <code class="varname">MASTER_SORT</code> contains a whitespace 1943 accessed. <code class="varname">MASTER_SORT</code> contains a whitespace
1942 delimited list of domain suffixes. 1944 delimited list of domain suffixes.
1943 <code class="varname">MASTER_SORT_REGEX</code> is even more flexible, it 1945 <code class="varname">MASTER_SORT_REGEX</code> is even more flexible, it
1944 contains a whitespace delimited list of regular expressions. It 1946 contains a whitespace delimited list of regular expressions. It
1945 has higher priority than <code class="varname">MASTER_SORT</code>. Have a 1947 has higher priority than <code class="varname">MASTER_SORT</code>. Have a
1946 look at <code class="filename">pkgsrc/mk/defaults/mk.conf</code> to find 1948 look at <code class="filename">pkgsrc/mk/defaults/mk.conf</code> to find
1947 some examples. This may save some of your bandwidth and 1949 some examples. This may save some of your bandwidth and
1948 time.</p> 1950 time.</p>
1949<p>You can change these settings either in your shell's environment, or, 1951<p>You can change these settings either in your shell's environment, or,
1950 if you want to keep the settings, by editing the 1952 if you want to keep the settings, by editing the
1951 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file, 1953 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file,
1952 and adding the definitions there.</p> 1954 and adding the definitions there.</p>
1953<p> 1955<p>
1954 If a package depends on many other packages (such as 1956 If a package depends on many other packages (such as
1955 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/kde3/README.html" target="_top"><code class="filename">meta-pkgs/kde3</code></a>), the build process may 1957 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/kde3/README.html" target="_top"><code class="filename">meta-pkgs/kde3</code></a>), the build process may
1956 alternate between periods of 1958 alternate between periods of
1957 downloading source, and compiling. To ensure you have all the source 1959 downloading source, and compiling. To ensure you have all the source
1958 downloaded initially you can run the command: 1960 downloaded initially you can run the command:
1959 </p> 1961 </p>
1960<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make fetch-list | sh</code></strong></pre> 1962<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make fetch-list | sh</code></strong></pre>
1961<p> 1963<p>
1962 which will output and run a set of shell commands to fetch the 1964 which will output and run a set of shell commands to fetch the
1963 necessary files into the <code class="filename">distfiles</code> directory. You can 1965 necessary files into the <code class="filename">distfiles</code> directory. You can
1964 also choose to download the files manually. 1966 also choose to download the files manually.
1965 </p> 1967 </p>
1966</div> 1968</div>
1967<div class="sect2"> 1969<div class="sect2">
1968<div class="titlepage"><div><div><h3 class="title"> 1970<div class="titlepage"><div><div><h3 class="title">
1969<a name="how-to-build-and-install"></a>4.2.3. How to build and install</h3></div></div></div> 1971<a name="how-to-build-and-install"></a>4.2.3. How to build and install</h3></div></div></div>
1970<p> 1972<p>
1971 Once the software has downloaded, any patches will be applied, then it 1973 Once the software has downloaded, any patches will be applied, then it
1972 will be compiled for you. This may take some time depending on your 1974 will be compiled for you. This may take some time depending on your
1973 computer, and how many other packages the software depends on and their 1975 computer, and how many other packages the software depends on and their
1974 compile time. 1976 compile time.
1975 </p> 1977 </p>
1976<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 1978<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
1977<h3 class="title">Note</h3> 1979<h3 class="title">Note</h3>
1978<p>If using bootstrap or pkgsrc on a non-NetBSD system, 1980<p>If using bootstrap or pkgsrc on a non-NetBSD system,
1979 use the pkgsrc <span class="command"><strong>bmake</strong></span> command instead of 1981 use the pkgsrc <span class="command"><strong>bmake</strong></span> command instead of
1980 <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span> in the examples in this guide.</p> 1982 <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span> in the examples in this guide.</p>
1981</div> 1983</div>
1982<p>For example, type</p> 1984<p>For example, type</p>
1983<pre class="screen"> 1985<pre class="screen">
1984<code class="prompt">%</code> <strong class="userinput"><code>cd misc/figlet</code></strong> 1986<code class="prompt">%</code> <strong class="userinput"><code>cd misc/figlet</code></strong>
1985<code class="prompt">%</code> <strong class="userinput"><code>make</code></strong> 1987<code class="prompt">%</code> <strong class="userinput"><code>make</code></strong>
1986 </pre> 1988 </pre>
1987<p>at the shell prompt to build the various components of the 1989<p>at the shell prompt to build the various components of the
1988 package.</p> 1990 package.</p>
1989<p>The next stage is to actually install the newly compiled 1991<p>The next stage is to actually install the newly compiled
1990 program onto your system. Do this by entering: 1992 program onto your system. Do this by entering:
1991 1993
1992 </p> 1994 </p>
1993<pre class="screen"> 1995<pre class="screen">
1994<code class="prompt">%</code> <strong class="userinput"><code>make install</code></strong> 1996<code class="prompt">%</code> <strong class="userinput"><code>make install</code></strong>
1995 </pre> 1997 </pre>
1996<p> 1998<p>
1997 1999
1998 while you are still in the directory for whatever package you 2000 while you are still in the directory for whatever package you
1999 are installing.</p> 2001 are installing.</p>
2000<p>Installing the package on your system may require you to 2002<p>Installing the package on your system may require you to
2001 be root. However, pkgsrc has a 2003 be root. However, pkgsrc has a
2002 <span class="emphasis"><em>just-in-time-su</em></span> feature, which allows you 2004 <span class="emphasis"><em>just-in-time-su</em></span> feature, which allows you
2003 to only become root for the actual installation step.</p> 2005 to only become root for the actual installation step.</p>
2004<p>That's it, the software should now be installed and setup for use. 2006<p>That's it, the software should now be installed and setup for use.
2005 You can now enter: 2007 You can now enter:
2006 2008
2007 </p> 2009 </p>
2008<pre class="screen"> 2010<pre class="screen">
2009<code class="prompt">%</code> <strong class="userinput"><code>make clean</code></strong> 2011<code class="prompt">%</code> <strong class="userinput"><code>make clean</code></strong>
2010 </pre> 2012 </pre>
2011<p> 2013<p>
2012 2014
2013 to remove the compiled files in the work directory, as you shouldn't need 2015 to remove the compiled files in the work directory, as you shouldn't need
2014 them any more. If other packages were also added to your system 2016 them any more. If other packages were also added to your system
2015 (dependencies) to allow your program to compile, you can tidy these up 2017 (dependencies) to allow your program to compile, you can tidy these up
2016 also with the command:</p> 2018 also with the command:</p>
2017<pre class="screen"> 2019<pre class="screen">
2018<code class="prompt">%</code> <strong class="userinput"><code>make clean-depends</code></strong> 2020<code class="prompt">%</code> <strong class="userinput"><code>make clean-depends</code></strong>
2019 </pre> 2021 </pre>
2020<p>Taking the figlet utility as an example, we can install it on our 2022<p>Taking the figlet utility as an example, we can install it on our
2021 system by building as shown in <a class="xref" href="#logs" title="Appendix B. Build logs">Appendix B, <i>Build logs</i></a>.</p> 2023 system by building as shown in <a class="xref" href="#logs" title="Appendix B. Build logs">Appendix B, <i>Build logs</i></a>.</p>
2022<p>The program is installed under the default root of the 2024<p>The program is installed under the default root of the
2023 packages tree - <code class="filename">/usr/pkg</code>. Should this not 2025 packages tree - <code class="filename">/usr/pkg</code>. Should this not
2024 conform to your tastes, set the <code class="varname">LOCALBASE</code> 2026 conform to your tastes, set the <code class="varname">LOCALBASE</code>
2025 variable in your environment, and it will use that value as the 2027 variable in your environment, and it will use that value as the
2026 root of your packages tree. So, to use 2028 root of your packages tree. So, to use
2027 <code class="filename">/usr/local</code>, set 2029 <code class="filename">/usr/local</code>, set
2028 <code class="varname">LOCALBASE=/usr/local</code> in your environment. 2030 <code class="varname">LOCALBASE=/usr/local</code> in your environment.
2029 Please note that you should use a directory which is dedicated to 2031 Please note that you should use a directory which is dedicated to
2030 packages and not shared with other programs (i.e., do not try and 2032 packages and not shared with other programs (i.e., do not try and
2031 use <code class="varname">LOCALBASE=/usr</code>). Also, you should not try 2033 use <code class="varname">LOCALBASE=/usr</code>). Also, you should not try
2032 to add any of your own files or directories (such as 2034 to add any of your own files or directories (such as
2033 <code class="filename">src/</code>, <code class="filename">obj/</code>, or 2035 <code class="filename">src/</code>, <code class="filename">obj/</code>, or
2034 <code class="filename">pkgsrc/</code>) below the 2036 <code class="filename">pkgsrc/</code>) below the
2035 <code class="varname">LOCALBASE</code> tree. This is to prevent possible 2037 <code class="varname">LOCALBASE</code> tree. This is to prevent possible
2036 conflicts between programs and other files installed by the 2038 conflicts between programs and other files installed by the
2037 package system and whatever else may have been installed 2039 package system and whatever else may have been installed
2038 there.</p> 2040 there.</p>
2039<p>Some packages look in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to 2041<p>Some packages look in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to
2040 alter some configuration options at build time. Have a look at 2042 alter some configuration options at build time. Have a look at
2041 <code class="filename">pkgsrc/mk/defaults/mk.conf</code> to get an overview 2043 <code class="filename">pkgsrc/mk/defaults/mk.conf</code> to get an overview
2042 of what will be set there by default. Environment variables such 2044 of what will be set there by default. Environment variables such
2043 as <code class="varname">LOCALBASE</code> can be set in 2045 as <code class="varname">LOCALBASE</code> can be set in
2044 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to save having to remember to 2046 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to save having to remember to
2045 set them each time you want to use pkgsrc.</p> 2047 set them each time you want to use pkgsrc.</p>
2046<p>Occasionally, people want to <span class="quote">&#8220;<span class="quote">look under the 2048<p>Occasionally, people want to <span class="quote">&#8220;<span class="quote">look under the
2047 covers</span>&#8221;</span> to see what is going on when a package is building 2049 covers</span>&#8221;</span> to see what is going on when a package is building
2048 or being installed. This may be for debugging purposes, or out of 2050 or being installed. This may be for debugging purposes, or out of
2049 simple curiosity. A number of utility values have been added to 2051 simple curiosity. A number of utility values have been added to
2050 help with this.</p> 2052 help with this.</p>
2051<div class="orderedlist"><ol class="orderedlist" type="1"> 2053<div class="orderedlist"><ol class="orderedlist" type="1">
2052<li class="listitem"> 2054<li class="listitem">
2053<p>If you invoke the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> command with 2055<p>If you invoke the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> command with
2054 <code class="varname">PKG_DEBUG_LEVEL=2</code>, then a huge amount of 2056 <code class="varname">PKG_DEBUG_LEVEL=2</code>, then a huge amount of
2055 information will be displayed. For example,</p> 2057 information will be displayed. For example,</p>
2056<pre class="screen"><strong class="userinput"><code>make patch PKG_DEBUG_LEVEL=2</code></strong></pre> 2058<pre class="screen"><strong class="userinput"><code>make patch PKG_DEBUG_LEVEL=2</code></strong></pre>
2057<p>will show all the commands that are invoked, up to and 2059<p>will show all the commands that are invoked, up to and
2058 including the <span class="quote">&#8220;<span class="quote">patch</span>&#8221;</span> stage.</p> 2060 including the <span class="quote">&#8220;<span class="quote">patch</span>&#8221;</span> stage.</p>
2059</li> 2061</li>
2060<li class="listitem"> 2062<li class="listitem">
2061<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+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> 2063<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+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>
2062 definition, then the <code class="varname">VARNAME</code> definition 2064 definition, then the <code class="varname">VARNAME</code> definition
2063 should be used, in conjunction with the show-var 2065 should be used, in conjunction with the show-var
2064 target. e.g. to show the expansion of the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> 2066 target. e.g. to show the expansion of the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>
2065 variable <code class="varname">LOCALBASE</code>:</p> 2067 variable <code class="varname">LOCALBASE</code>:</p>
2066<pre class="screen"> 2068<pre class="screen">
2067<code class="prompt">%</code> <strong class="userinput"><code>make show-var VARNAME=LOCALBASE</code></strong> 2069<code class="prompt">%</code> <strong class="userinput"><code>make show-var VARNAME=LOCALBASE</code></strong>
2068/usr/pkg 2070/usr/pkg
2069<code class="prompt">%</code> 2071<code class="prompt">%</code>
2070 </pre> 2072 </pre>
2071</li> 2073</li>
2072</ol></div> 2074</ol></div>
2073<p>If you want to install a binary package that you've either 2075<p>If you want to install a binary package that you've either
2074 created yourself (see next section), that you put into 2076 created yourself (see next section), that you put into
2075 pkgsrc/packages manually or that is located on a remote FTP 2077 pkgsrc/packages manually or that is located on a remote FTP
2076 server, you can use the "bin-install" target. This target will 2078 server, you can use the "bin-install" target. This target will
2077 install a binary package - if available - via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>, 2079 install a binary package - if available - via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>,
2078 else do a <span class="command"><strong>make package</strong></span>. The list of remote FTP 2080 else do a <span class="command"><strong>make package</strong></span>. The list of remote FTP
2079 sites searched is kept in the variable 2081 sites searched is kept in the variable
2080 <code class="varname">BINPKG_SITES</code>, which defaults to 2082 <code class="varname">BINPKG_SITES</code>, which defaults to
2081 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+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> 2083 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+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>
2082 can be put into <code class="varname">BIN_INSTALL_FLAGS</code>. See 2084 can be put into <code class="varname">BIN_INSTALL_FLAGS</code>. See
2083 <code class="filename">pkgsrc/mk/defaults/mk.conf</code> for more 2085 <code class="filename">pkgsrc/mk/defaults/mk.conf</code> for more
2084 details.</p> 2086 details.</p>
2085<p>A final word of warning: If you set up a system that has a 2087<p>A final word of warning: If you set up a system that has a
2086 non-standard setting for <code class="varname">LOCALBASE</code>, be sure to 2088 non-standard setting for <code class="varname">LOCALBASE</code>, be sure to
2087 set that before any packages are installed, as you cannot use 2089 set that before any packages are installed, as you cannot use
2088 several directories for the same purpose. Doing so will result in 2090 several directories for the same purpose. Doing so will result in
2089 pkgsrc not being able to properly detect your installed packages, 2091 pkgsrc not being able to properly detect your installed packages,
2090 and fail miserably. Note also that precompiled binary packages are 2092 and fail miserably. Note also that precompiled binary packages are
2091 usually built with the default <code class="varname">LOCALBASE</code> of 2093 usually built with the default <code class="varname">LOCALBASE</code> of
2092 <code class="filename">/usr/pkg</code>, and that you should 2094 <code class="filename">/usr/pkg</code>, and that you should
2093 <span class="emphasis"><em>not</em></span> install any if you use a non-standard 2095 <span class="emphasis"><em>not</em></span> install any if you use a non-standard
2094 <code class="varname">LOCALBASE</code>.</p> 2096 <code class="varname">LOCALBASE</code>.</p>
2095</div> 2097</div>
2096</div> 2098</div>
2097</div> 2099</div>
2098<div class="chapter"> 2100<div class="chapter">
2099<div class="titlepage"><div><div><h2 class="title"> 2101<div class="titlepage"><div><div><h2 class="title">
2100<a name="configuring"></a>Chapter 5. Configuring pkgsrc</h2></div></div></div> 2102<a name="configuring"></a>Chapter 5. Configuring pkgsrc</h2></div></div></div>
2101<div class="toc"> 2103<div class="toc">
2102<p><b>Table of Contents</b></p> 2104<p><b>Table of Contents</b></p>
2103<dl> 2105<dl>
2104<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt> 2106<dt><span class="sect1"><a href="#general-configuration">5.1. General configuration</a></span></dt>
2105<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt> 2107<dt><span class="sect1"><a href="#variables-affecting-build">5.2. Variables affecting the build process</a></span></dt>
2106<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt> 2108<dt><span class="sect1"><a href="#variables-affecting-installation">5.3. Variables affecting the installation process</a></span></dt>
2107<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt> 2109<dt><span class="sect1"><a href="#conf.compiler">5.4. Selecting and configuring the compiler</a></span></dt>
2108<dd><dl> 2110<dd><dl>
2109<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt> 2111<dt><span class="sect2"><a href="#selecting-the-compiler">5.4.1. Selecting the compiler</a></span></dt>
2110<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt> 2112<dt><span class="sect2"><a href="#conf.cflags">5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</a></span></dt>
2111<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt> 2113<dt><span class="sect2"><a href="#conf.ldflags">5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</a></span></dt>
2112</dl></dd> 2114</dl></dd>
2113<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt> 2115<dt><span class="sect1"><a href="#developer-advanced-settings">5.5. Developer/advanced settings</a></span></dt>
2114<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt> 2116<dt><span class="sect1"><a href="#selecting-build-options">5.6. Selecting Build Options</a></span></dt>
2115</dl> 2117</dl>
2116</div> 2118</div>
2117<a name="mk.conf"></a><p>The whole pkgsrc system is configured in a single file, usually 2119<a name="mk.conf"></a><p>The whole pkgsrc system is configured in a single file, usually
2118called <code class="filename">mk.conf</code>. In which directory pkgsrc looks for 2120called <code class="filename">mk.conf</code>. In which directory pkgsrc looks for
2119that file depends on the installation. On NetBSD, when you use 2121that file depends on the installation. On NetBSD, when you use
2120<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> from the base system, it is in the directory 2122<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> from the base system, it is in the directory
2121<code class="filename">/etc/</code>. In all other cases the default location is 2123<code class="filename">/etc/</code>. In all other cases the default location is
2122<code class="literal">${PREFIX}/etc/</code>, depending on where you told the 2124<code class="literal">${PREFIX}/etc/</code>, depending on where you told the
2123bootstrap program to install the binary packages.</p> 2125bootstrap program to install the binary packages.</p>
2124<p>During the bootstrap, an example configuration file is created. To 2126<p>During the bootstrap, an example configuration file is created. To
2125use that, you have to create the directory 2127use that, you have to create the directory
2126<code class="filename">${PREFIX}/etc</code> and copy the example file 2128<code class="filename">${PREFIX}/etc</code> and copy the example file
2127there.</p> 2129there.</p>
2128<p>The format of the configuration file is that of the usual 2130<p>The format of the configuration file is that of the usual
2129BSD-style <code class="filename">Makefile</code>s. The whole pkgsrc configuration 2131BSD-style <code class="filename">Makefile</code>s. The whole pkgsrc configuration
2130is done by setting variables in this file. Note that you can define all 2132is done by setting variables in this file. Note that you can define all
2131kinds of variables, and no special error checking (for example for 2133kinds of variables, and no special error checking (for example for
2132spelling mistakes) takes place, so you have to try it out to see if it 2134spelling mistakes) takes place, so you have to try it out to see if it
2133works.</p> 2135works.</p>
2134<div class="sect1"> 2136<div class="sect1">
2135<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2137<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2136<a name="general-configuration"></a>5.1. General configuration</h2></div></div></div> 2138<a name="general-configuration"></a>5.1. General configuration</h2></div></div></div>
2137<p>In this section, you can find some variables that apply to all 2139<p>In this section, you can find some variables that apply to all
2138 pkgsrc packages. A complete list of the variables that can be 2140 pkgsrc packages. A complete list of the variables that can be
2139 configured by the user is available in 2141 configured by the user is available in
2140 <code class="filename">mk/defaults/mk.conf</code>, together with some 2142 <code class="filename">mk/defaults/mk.conf</code>, together with some
2141 comments that describe each variable's intent.</p> 2143 comments that describe each variable's intent.</p>
2142<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2144<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2143<li class="listitem"><p><code class="varname">LOCALBASE</code>: Where 2145<li class="listitem"><p><code class="varname">LOCALBASE</code>: Where
2144 packages will be installed. The default is 2146 packages will be installed. The default is
2145 <code class="filename">/usr/pkg</code>. Do not mix binary packages 2147 <code class="filename">/usr/pkg</code>. Do not mix binary packages
2146 with different <code class="varname">LOCALBASE</code>s!</p></li> 2148 with different <code class="varname">LOCALBASE</code>s!</p></li>
2147<li class="listitem"><p><code class="varname">CROSSBASE</code>: Where 2149<li class="listitem"><p><code class="varname">CROSSBASE</code>: Where
2148 <span class="quote">&#8220;<span class="quote">cross</span>&#8221;</span> category packages will be 2150 <span class="quote">&#8220;<span class="quote">cross</span>&#8221;</span> category packages will be
2149 installed. The default is 2151 installed. The default is
2150 <code class="filename">${LOCALBASE}/cross</code>.</p></li> 2152 <code class="filename">${LOCALBASE}/cross</code>.</p></li>
2151<li class="listitem"><p><code class="varname">X11BASE</code>: Where 2153<li class="listitem"><p><code class="varname">X11BASE</code>: Where
2152 X11 is installed on the system. The default is 2154 X11 is installed on the system. The default is
2153 <code class="filename">/usr/X11R6</code>.</p></li> 2155 <code class="filename">/usr/X11R6</code>.</p></li>
2154<li class="listitem"><p><code class="varname">DISTDIR</code>: Where to store the 2156<li class="listitem"><p><code class="varname">DISTDIR</code>: Where to store the
2155 downloaded copies of the original source distributions used 2157 downloaded copies of the original source distributions used
2156 for building pkgsrc packages. The default is 2158 for building pkgsrc packages. The default is
2157 <code class="filename">${PKGSRCDIR}/distfiles</code>.</p></li> 2159 <code class="filename">${PKGSRCDIR}/distfiles</code>.</p></li>
2158<li class="listitem"><p><code class="varname">PKG_DBDIR</code>: Where the 2160<li class="listitem"><p><code class="varname">PKG_DBDIR</code>: Where the
2159 database about installed packages is stored. The default is 2161 database about installed packages is stored. The default is
2160 <code class="filename">/var/db/pkg</code>.</p></li> 2162 <code class="filename">/var/db/pkg</code>.</p></li>
2161<li class="listitem"><p><code class="varname">MASTER_SITE_OVERRIDE</code>: 2163<li class="listitem"><p><code class="varname">MASTER_SITE_OVERRIDE</code>:
2162 If set, override the packages' 2164 If set, override the packages'
2163 <code class="varname">MASTER_SITES</code> with this value.</p></li> 2165 <code class="varname">MASTER_SITES</code> with this value.</p></li>
2164<li class="listitem"><p><code class="varname">MASTER_SITE_BACKUP</code>: 2166<li class="listitem"><p><code class="varname">MASTER_SITE_BACKUP</code>:
2165 Backup location(s) for distribution files and patch files 2167 Backup location(s) for distribution files and patch files
2166 if not found locally or in 2168 if not found locally or in
2167 <code class="filename">${MASTER_SITES}</code> or 2169 <code class="filename">${MASTER_SITES}</code> or
2168 <code class="filename">${PATCH_SITES}</code> respectively. 2170 <code class="filename">${PATCH_SITES}</code> respectively.
2169 The defaults are 2171 The defaults are
2170 <code class="filename">ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/${DIST_SUBDIR}/</code> 2172 <code class="filename">ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/${DIST_SUBDIR}/</code>
2171 and 2173 and
2172 <code class="filename">ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/</code>.</p></li> 2174 <code class="filename">ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/</code>.</p></li>
2173<li class="listitem"><p><code class="varname">BINPKG_SITES</code>: 2175<li class="listitem"><p><code class="varname">BINPKG_SITES</code>:
2174 List of sites carrying binary pkgs. <em class="replaceable"><code>rel</code></em> and 2176 List of sites carrying binary pkgs. <em class="replaceable"><code>rel</code></em> and
2175 <em class="replaceable"><code>arch</code></em> are replaced with OS 2177 <em class="replaceable"><code>arch</code></em> are replaced with OS
2176 release (<span class="quote">&#8220;<span class="quote">2.0</span>&#8221;</span>, etc.) and architecture 2178 release (<span class="quote">&#8220;<span class="quote">2.0</span>&#8221;</span>, etc.) and architecture
2177 (<span class="quote">&#8220;<span class="quote">mipsel</span>&#8221;</span>, etc.).</p></li> 2179 (<span class="quote">&#8220;<span class="quote">mipsel</span>&#8221;</span>, etc.).</p></li>
2178<li class="listitem"><p><code class="varname">ACCEPTABLE_LICENSES</code>: 2180<li class="listitem"><p><code class="varname">ACCEPTABLE_LICENSES</code>:
2179 List of acceptable licenses. License names are case-sensitive. 2181 List of acceptable licenses. License names are case-sensitive.
2180 Whenever you try to build a package whose license is not in this 2182 Whenever you try to build a package whose license is not in this
2181 list, you will get an error message. If the license condition is 2183 list, you will get an error message. If the license condition is
2182 simple enough, the error message will include specific 2184 simple enough, the error message will include specific
2183 instructions on how to change this variable.</p></li> 2185 instructions on how to change this variable.</p></li>
2184</ul></div> 2186</ul></div>
2185</div> 2187</div>
2186<div class="sect1"> 2188<div class="sect1">
2187<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2189<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2188<a name="variables-affecting-build"></a>5.2. Variables affecting the build process</h2></div></div></div> 2190<a name="variables-affecting-build"></a>5.2. Variables affecting the build process</h2></div></div></div>
2189<p>XXX 2191<p>XXX
2190 </p> 2192 </p>
2191<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2193<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2192<li class="listitem"><p><code class="varname">PACKAGES</code>: The top level 2194<li class="listitem"><p><code class="varname">PACKAGES</code>: The top level
2193 directory for the binary packages. The default is 2195 directory for the binary packages. The default is
2194 <code class="filename">${PKGSRCDIR}/packages</code>.</p></li> 2196 <code class="filename">${PKGSRCDIR}/packages</code>.</p></li>
2195<li class="listitem"><p><code class="varname">WRKOBJDIR</code>: 2197<li class="listitem"><p><code class="varname">WRKOBJDIR</code>:
2196 The top level directory where, if defined, the separate 2198 The top level directory where, if defined, the separate
2197 working directories will get created, and symbolically 2199 working directories will get created, and symbolically
2198 linked to from <code class="filename">${WRKDIR}</code> (see below). 2200 linked to from <code class="filename">${WRKDIR}</code> (see below).
2199 This is useful for building packages on several 2201 This is useful for building packages on several
2200 architectures, then <code class="filename">${PKGSRCDIR}</code> 2202 architectures, then <code class="filename">${PKGSRCDIR}</code>
2201 can be NFS-mounted while <code class="filename">${WRKOBJDIR}</code> 2203 can be NFS-mounted while <code class="filename">${WRKOBJDIR}</code>
2202 is local to every architecture. (It should be noted that 2204 is local to every architecture. (It should be noted that
2203 <code class="varname">PKGSRCDIR</code> should not be set by the user 2205 <code class="varname">PKGSRCDIR</code> should not be set by the user
2204 &mdash; it is an internal definition which refers to the 2206 &mdash; it is an internal definition which refers to the
2205 root of the pkgsrc tree. It is possible to have many 2207 root of the pkgsrc tree. It is possible to have many
2206 pkgsrc tree instances.)</p></li> 2208 pkgsrc tree instances.)</p></li>
2207<li class="listitem"><p><code class="varname">LOCALPATCHES</code>: 2209<li class="listitem"><p><code class="varname">LOCALPATCHES</code>:
2208 Directory for local patches that aren't part of pkgsrc. 2210 Directory for local patches that aren't part of pkgsrc.
2209 See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;patches/*&#8221;</a> for more 2211 See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;patches/*&#8221;</a> for more
2210 information.</p></li> 2212 information.</p></li>
2211<li class="listitem"><p><code class="varname">PKGMAKECONF</code>: Location of 2213<li class="listitem"><p><code class="varname">PKGMAKECONF</code>: Location of
2212 the <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file used by a package's 2214 the <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file used by a package's
2213 BSD-style Makefile. If this is not set, 2215 BSD-style Makefile. If this is not set,
2214 <code class="varname">MAKECONF</code> is set to 2216 <code class="varname">MAKECONF</code> is set to
2215 <code class="filename">/dev/null</code> to avoid picking up 2217 <code class="filename">/dev/null</code> to avoid picking up
2216 settings used by builds in <code class="filename">/usr/src</code>.</p></li> 2218 settings used by builds in <code class="filename">/usr/src</code>.</p></li>
2217<li class="listitem"><p><code class="varname">DEPENDS_TARGET</code>: 2219<li class="listitem"><p><code class="varname">DEPENDS_TARGET</code>:
2218 By default, dependencies are only installed, and no binary 2220 By default, dependencies are only installed, and no binary
2219 package is created for them. You can set this variable to 2221 package is created for them. You can set this variable to
2220 <code class="literal">package-install</code> to automatically create binary 2222 <code class="literal">package-install</code> to automatically create binary
2221 packages after installing dependencies. Please note that the 2223 packages after installing dependencies. Please note that the
2222 <code class="varname">PKGSRC_KEEP_BIN_PKGS</code>can be set to 2224 <code class="varname">PKGSRC_KEEP_BIN_PKGS</code>can be set to
2223 <code class="literal">yes</code> to preserve binary packages when 2225 <code class="literal">yes</code> to preserve binary packages when
2224 using the <code class="literal">install</code> as well.</p></li> 2226 using the <code class="literal">install</code> as well.</p></li>
2225</ul></div> 2227</ul></div>
2226</div> 2228</div>
2227<div class="sect1"> 2229<div class="sect1">
2228<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2230<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2229<a name="variables-affecting-installation"></a>5.3. Variables affecting the installation process</h2></div></div></div> 2231<a name="variables-affecting-installation"></a>5.3. Variables affecting the installation process</h2></div></div></div>
2230<p>Most packages support installation into a 2232<p>Most packages support installation into a
2231 subdirectory of <code class="varname">WRKDIR</code>. This allows a package 2233 subdirectory of <code class="varname">WRKDIR</code>. This allows a package
2232 to be built, before the actual filesystem is touched. DESTDIR 2234 to be built, before the actual filesystem is touched. DESTDIR
2233 support exists in two variations:</p> 2235 support exists in two variations:</p>
2234<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2236<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2235<li class="listitem"><p>Basic DESTDIR support means that the package 2237<li class="listitem"><p>Basic DESTDIR support means that the package
2236 installation and packaging is still run as root.</p></li> 2238 installation and packaging is still run as root.</p></li>
2237<li class="listitem"><p>Full DESTDIR support can run the complete 2239<li class="listitem"><p>Full DESTDIR support can run the complete
2238 build, installation and packaging as normal user. Root 2240 build, installation and packaging as normal user. Root
2239 privileges are only needed to add packages.</p></li> 2241 privileges are only needed to add packages.</p></li>
2240</ul></div> 2242</ul></div>
2241<p>DESTDIR support is now the default. To switch back to non-DESTDIR, 2243<p>DESTDIR support is now the default. To switch back to non-DESTDIR,
2242 you can set 2244 you can set
2243 <code class="varname">USE_DESTDIR=no</code>; this setting will be deprecated though, 2245 <code class="varname">USE_DESTDIR=no</code>; this setting will be deprecated though,
2244 so it's preferable to convert a package to DESTDIR instead.</p> 2246 so it's preferable to convert a package to DESTDIR instead.</p>
2245<p>With basic DESTDIR support, <strong class="userinput"><code>make 2247<p>With basic DESTDIR support, <strong class="userinput"><code>make
2246 clean</code></strong> needs to be run as root.</p> 2248 clean</code></strong> needs to be run as root.</p>
2247<p>Considering the <code class="filename">foo/bar</code> package, 2249<p>Considering the <code class="filename">foo/bar</code> package,
2248 DESTDIR full support can be tested using the following commands 2250 DESTDIR full support can be tested using the following commands
2249 2251
2250</p> 2252</p>
2251<pre class="programlisting"> 2253<pre class="programlisting">
2252<code class="prompt">$</code> id 2254<code class="prompt">$</code> id
2253uid=1000(myusername) gid=100(users) groups=100(users),0(wheel) 2255uid=1000(myusername) gid=100(users) groups=100(users),0(wheel)
2254<code class="prompt">$</code> mkdir $HOME/packages 2256<code class="prompt">$</code> mkdir $HOME/packages
2255<code class="prompt">$</code> cd $PKGSRCDIR/foo/bar 2257<code class="prompt">$</code> cd $PKGSRCDIR/foo/bar
2256</pre> 2258</pre>
2257<p> 2259<p>
2258 2260
2259 Verify <code class="varname">DESTDIR</code> full support, no root privileges 2261 Verify <code class="varname">DESTDIR</code> full support, no root privileges
2260 should be needed 2262 should be needed
2261 2263
2262</p> 2264</p>
2263<pre class="programlisting"> 2265<pre class="programlisting">
2264<code class="prompt">$</code> make stage-install 2266<code class="prompt">$</code> make stage-install
2265</pre> 2267</pre>
2266<p> 2268<p>
2267 2269
2268 Create a package without root privileges 2270 Create a package without root privileges
2269 2271
2270</p> 2272</p>
2271<pre class="programlisting"> 2273<pre class="programlisting">
2272<code class="prompt">$</code> make PACKAGES=$HOME/packages package 2274<code class="prompt">$</code> make PACKAGES=$HOME/packages package
2273</pre> 2275</pre>
2274<p> 2276<p>
2275 2277
2276 For the following command, you must be able to gain root 2278 For the following command, you must be able to gain root
2277 privileges using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?su+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">su</span>(1)</span></a> 2279 privileges using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?su+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">su</span>(1)</span></a>
2278 2280
2279</p> 2281</p>
2280<pre class="programlisting"> 2282<pre class="programlisting">
2281<code class="prompt">$</code> make PACKAGES=$HOME/packages install 2283<code class="prompt">$</code> make PACKAGES=$HOME/packages install
2282</pre> 2284</pre>
2283<p> 2285<p>
2284 2286
2285 Then, as a simple user 2287 Then, as a simple user
2286 2288
2287</p> 2289</p>
2288<pre class="programlisting"> 2290<pre class="programlisting">
2289<code class="prompt">$</code> make clean 2291<code class="prompt">$</code> make clean
2290</pre> 2292</pre>
2291<p> 2293<p>
2292 2294
2293 </p> 2295 </p>
2294</div> 2296</div>
2295<div class="sect1"> 2297<div class="sect1">
2296<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2298<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2297<a name="conf.compiler"></a>5.4. Selecting and configuring the compiler</h2></div></div></div> 2299<a name="conf.compiler"></a>5.4. Selecting and configuring the compiler</h2></div></div></div>
2298<div class="sect2"> 2300<div class="sect2">
2299<div class="titlepage"><div><div><h3 class="title"> 2301<div class="titlepage"><div><div><h3 class="title">
2300<a name="selecting-the-compiler"></a>5.4.1. Selecting the compiler</h3></div></div></div> 2302<a name="selecting-the-compiler"></a>5.4.1. Selecting the compiler</h3></div></div></div>
2301<p>By default, pkgsrc will use GCC to build packages. This may be 2303<p>By default, pkgsrc will use GCC to build packages. This may be
2302 overridden by setting the following variables in /etc/mk.conf:</p> 2304 overridden by setting the following variables in /etc/mk.conf:</p>
2303<div class="variablelist"><dl class="variablelist"> 2305<div class="variablelist"><dl class="variablelist">
2304<dt><span class="term"><code class="varname">PKGSRC_COMPILER</code>:</span></dt> 2306<dt><span class="term"><code class="varname">PKGSRC_COMPILER</code>:</span></dt>
2305<dd> 2307<dd>
2306<p>This is a list of values specifying the chain of 2308<p>This is a list of values specifying the chain of
2307 compilers to invoke when building packages. Valid values 2309 compilers to invoke when building packages. Valid values
2308 are:</p> 2310 are:</p>
2309<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2311<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2310<li class="listitem"><p><code class="varname">ccc</code>: 2312<li class="listitem"><p><code class="varname">ccc</code>:
2311 Compaq C Compilers (Tru64)</p></li> 2313 Compaq C Compilers (Tru64)</p></li>
2312<li class="listitem"><p><code class="varname">ccache</code>: 2314<li class="listitem"><p><code class="varname">ccache</code>:
2313 compiler cache (chainable)</p></li> 2315 compiler cache (chainable)</p></li>
2314<li class="listitem"><p><code class="varname">clang</code>: 2316<li class="listitem"><p><code class="varname">clang</code>:
2315 Clang C and Objective-C compiler</p></li> 2317 Clang C and Objective-C compiler</p></li>
2316<li class="listitem"><p><code class="varname">distcc</code>: 2318<li class="listitem"><p><code class="varname">distcc</code>:
2317 distributed C/C++ (chainable)</p></li> 2319 distributed C/C++ (chainable)</p></li>
2318<li class="listitem"><p><code class="varname">f2c</code>: 2320<li class="listitem"><p><code class="varname">f2c</code>:
2319 Fortran 77 to C compiler (chainable)</p></li> 2321 Fortran 77 to C compiler (chainable)</p></li>
2320<li class="listitem"><p><code class="varname">icc</code>: 2322<li class="listitem"><p><code class="varname">icc</code>:
2321 Intel C++ Compiler (Linux)</p></li> 2323 Intel C++ Compiler (Linux)</p></li>
2322<li class="listitem"><p><code class="varname">ido</code>: 2324<li class="listitem"><p><code class="varname">ido</code>:
2323 SGI IRIS Development Option cc (IRIX 5)</p></li> 2325 SGI IRIS Development Option cc (IRIX 5)</p></li>
2324<li class="listitem"><p><code class="varname">gcc</code>: 2326<li class="listitem"><p><code class="varname">gcc</code>:
2325 GNU C/C++ Compiler</p></li> 2327 GNU C/C++ Compiler</p></li>
2326<li class="listitem"><p><code class="varname">hp</code>: 2328<li class="listitem"><p><code class="varname">hp</code>:
2327 HP-UX C/aC++ compilers</p></li> 2329 HP-UX C/aC++ compilers</p></li>
2328<li class="listitem"><p><code class="varname">mipspro</code>: 2330<li class="listitem"><p><code class="varname">mipspro</code>:
2329 Silicon Graphics, Inc. MIPSpro (n32/n64)</p></li> 2331 Silicon Graphics, Inc. MIPSpro (n32/n64)</p></li>
2330<li class="listitem"><p><code class="varname">mipspro-ucode</code>: 2332<li class="listitem"><p><code class="varname">mipspro-ucode</code>:
2331 Silicon Graphics, Inc. MIPSpro (o32)</p></li> 2333 Silicon Graphics, Inc. MIPSpro (o32)</p></li>
2332<li class="listitem"><p><code class="varname">sunpro</code>: 2334<li class="listitem"><p><code class="varname">sunpro</code>:
2333 Sun Microsystems, Inc. WorkShip/Forte/Sun ONE Studio</p></li> 2335 Sun Microsystems, Inc. WorkShip/Forte/Sun ONE Studio</p></li>
2334<li class="listitem"><p><code class="varname">xlc</code>: 2336<li class="listitem"><p><code class="varname">xlc</code>:
2335 IBM's XL C/C++ compiler suite (Darwin/MacOSX)</p></li> 2337 IBM's XL C/C++ compiler suite (Darwin/MacOSX)</p></li>
2336</ul></div> 2338</ul></div>
2337<p>The default is 2339<p>The default is
2338 <span class="quote">&#8220;<span class="quote"><code class="varname">gcc</code></span>&#8221;</span>. You can use 2340 <span class="quote">&#8220;<span class="quote"><code class="varname">gcc</code></span>&#8221;</span>. You can use
2339 <code class="varname">ccache</code> and/or 2341 <code class="varname">ccache</code> and/or
2340 <code class="varname">distcc</code> with an appropriate 2342 <code class="varname">distcc</code> with an appropriate
2341 <code class="varname">PKGSRC_COMPILER</code> setting, 2343 <code class="varname">PKGSRC_COMPILER</code> setting,
2342 e.g. <span class="quote">&#8220;<span class="quote"><code class="varname">ccache gcc</code></span>&#8221;</span>. This 2344 e.g. <span class="quote">&#8220;<span class="quote"><code class="varname">ccache gcc</code></span>&#8221;</span>. This
2343 variable should always be terminated with a value for 2345 variable should always be terminated with a value for
2344 a real compiler. Note that only one real compiler 2346 a real compiler. Note that only one real compiler
2345 should be listed (e.g. <span class="quote">&#8220;<span class="quote"><code class="varname">sunpro gcc</code></span>&#8221;</span> 2347 should be listed (e.g. <span class="quote">&#8220;<span class="quote"><code class="varname">sunpro gcc</code></span>&#8221;</span>
2346 is not allowed).</p> 2348 is not allowed).</p>
2347</dd> 2349</dd>
2348<dt><span class="term"><code class="varname">GCC_REQD</code>:</span></dt> 2350<dt><span class="term"><code class="varname">GCC_REQD</code>:</span></dt>
2349<dd><p>This specifies the minimum version of GCC to use 2351<dd><p>This specifies the minimum version of GCC to use
2350 when building packages. If the system GCC doesn't 2352 when building packages. If the system GCC doesn't
2351 satisfy this requirement, then pkgsrc will build and 2353 satisfy this requirement, then pkgsrc will build and
2352 install one of the GCC packages to use instead.</p></dd> 2354 install one of the GCC packages to use instead.</p></dd>
2353</dl></div> 2355</dl></div>
2354</div> 2356</div>
2355<div class="sect2"> 2357<div class="sect2">
2356<div class="titlepage"><div><div><h3 class="title"> 2358<div class="titlepage"><div><div><h3 class="title">
2357<a name="conf.cflags"></a>5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</h3></div></div></div> 2359<a name="conf.cflags"></a>5.4.2. Additional flags to the compiler (<code class="varname">CFLAGS</code>)</h3></div></div></div>
2358<p>If you wish to set the <code class="varname">CFLAGS</code> variable, 2360<p>If you wish to set the <code class="varname">CFLAGS</code> variable,
2359 please make sure to use the <code class="literal">+=</code> operator 2361 please make sure to use the <code class="literal">+=</code> operator
2360 instead of the <code class="literal">=</code> operator:</p> 2362 instead of the <code class="literal">=</code> operator:</p>
2361<pre class="programlisting"> 2363<pre class="programlisting">
2362CFLAGS+= -your -flags 2364CFLAGS+= -your -flags
2363</pre> 2365</pre>
2364<p>Using <code class="varname">CFLAGS=</code> (i.e. without the 2366<p>Using <code class="varname">CFLAGS=</code> (i.e. without the
2365 <span class="quote">&#8220;<span class="quote">+</span>&#8221;</span>) may lead to problems with packages that 2367 <span class="quote">&#8220;<span class="quote">+</span>&#8221;</span>) may lead to problems with packages that
2366 need to add their own flags. You may want to take a look 2368 need to add their own flags. You may want to take a look
2367 at the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/cpuflags/README.html" target="_top"><code class="filename">devel/cpuflags</code></a> 2369 at the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/cpuflags/README.html" target="_top"><code class="filename">devel/cpuflags</code></a>
2368 package if you're interested in optimization specifically 2370 package if you're interested in optimization specifically
2369 for the current CPU. </p> 2371 for the current CPU. </p>
2370</div> 2372</div>
2371<div class="sect2"> 2373<div class="sect2">
2372<div class="titlepage"><div><div><h3 class="title"> 2374<div class="titlepage"><div><div><h3 class="title">
2373<a name="conf.ldflags"></a>5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</h3></div></div></div> 2375<a name="conf.ldflags"></a>5.4.3. Additional flags to the linker (<code class="varname">LDFLAGS</code>)</h3></div></div></div>
2374<p>If you want to pass flags to the linker, both in the configure 2376<p>If you want to pass flags to the linker, both in the configure
2375step and the build step, you can do this in two ways. Either set 2377step and the build step, you can do this in two ways. Either set
2376<code class="varname">LDFLAGS</code> or <code class="varname">LIBS</code>. The difference 2378<code class="varname">LDFLAGS</code> or <code class="varname">LIBS</code>. The difference
2377between the two is that <code class="varname">LIBS</code> will be appended to 2379between the two is that <code class="varname">LIBS</code> will be appended to
2378the command line, while <code class="varname">LDFLAGS</code> come earlier. 2380the command line, while <code class="varname">LDFLAGS</code> come earlier.
2379<code class="varname">LDFLAGS</code> is pre-loaded with rpath settings for ELF 2381<code class="varname">LDFLAGS</code> is pre-loaded with rpath settings for ELF
2380machines depending on the setting of <code class="varname">USE_IMAKE</code> or 2382machines depending on the setting of <code class="varname">USE_IMAKE</code> or
2381the inclusion of <code class="filename">mk/x11.buildlink3.mk</code>. As with 2383the inclusion of <code class="filename">mk/x11.buildlink3.mk</code>. As with
2382<code class="varname">CFLAGS</code>, if you do not wish to override these 2384<code class="varname">CFLAGS</code>, if you do not wish to override these
2383settings, use the <code class="literal">+=</code> operator:</p> 2385settings, use the <code class="literal">+=</code> operator:</p>
2384<pre class="programlisting"> 2386<pre class="programlisting">
2385LDFLAGS+= -your -linkerflags 2387LDFLAGS+= -your -linkerflags
2386</pre> 2388</pre>
2387</div> 2389</div>
2388</div> 2390</div>
2389<div class="sect1"> 2391<div class="sect1">
2390<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2392<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2391<a name="developer-advanced-settings"></a>5.5. Developer/advanced settings</h2></div></div></div> 2393<a name="developer-advanced-settings"></a>5.5. Developer/advanced settings</h2></div></div></div>
2392<p>XXX 2394<p>XXX
2393 </p> 2395 </p>
2394<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2396<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2395<li class="listitem"> 2397<li class="listitem">
2396<p><code class="varname">PKG_DEVELOPER</code>: 2398<p><code class="varname">PKG_DEVELOPER</code>:
2397 Run some sanity checks that package developers want: 2399 Run some sanity checks that package developers want:
2398 </p> 2400 </p>
2399<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "> 2401<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
2400<li class="listitem"><p>make sure patches apply with zero 2402<li class="listitem"><p>make sure patches apply with zero
2401 fuzz</p></li> 2403 fuzz</p></li>
2402<li class="listitem"><p>run check-shlibs to see that all 2404<li class="listitem"><p>run check-shlibs to see that all
2403 binaries will find their shared libs.</p></li> 2405 binaries will find their shared libs.</p></li>
2404</ul></div> 2406</ul></div>
2405<p> 2407<p>
2406 </p> 2408 </p>
2407</li> 2409</li>
2408<li class="listitem"><p><code class="varname">PKG_DEBUG_LEVEL</code>: The level 2410<li class="listitem"><p><code class="varname">PKG_DEBUG_LEVEL</code>: The level
2409 of debugging output which is displayed whilst making and 2411 of debugging output which is displayed whilst making and
2410 installing the package. The default value for this is 0, 2412 installing the package. The default value for this is 0,
2411 which will not display the commands as they are executed 2413 which will not display the commands as they are executed
2412 (normal, default, quiet operation); the value 1 will display 2414 (normal, default, quiet operation); the value 1 will display
2413 all shell commands before their invocation, and the value 2 2415 all shell commands before their invocation, and the value 2
2414 will display both the shell commands before their invocation, 2416 will display both the shell commands before their invocation,
2415 and their actual execution progress with <span class="command"><strong>set 2417 and their actual execution progress with <span class="command"><strong>set
2416 -x</strong></span> will be displayed.</p></li> 2418 -x</strong></span> will be displayed.</p></li>
2417</ul></div> 2419</ul></div>
2418<p> 2420<p>
2419 </p> 2421 </p>
2420</div> 2422</div>
2421<div class="sect1"> 2423<div class="sect1">
2422<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2424<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2423<a name="selecting-build-options"></a>5.6. Selecting Build Options</h2></div></div></div> 2425<a name="selecting-build-options"></a>5.6. Selecting Build Options</h2></div></div></div>
2424<p>Some packages have build time options, usually to select 2426<p>Some packages have build time options, usually to select
2425 between different dependencies, enable optional support for big 2427 between different dependencies, enable optional support for big
2426 dependencies or enable experimental features.</p> 2428 dependencies or enable experimental features.</p>
2427<p>To see which options, if any, a package supports, and which 2429<p>To see which options, if any, a package supports, and which
2428 options are mutually exclusive, run <span class="command"><strong>make 2430 options are mutually exclusive, run <span class="command"><strong>make
2429 show-options</strong></span>, for example:</p> 2431 show-options</strong></span>, for example:</p>
2430<pre class="programlisting"> 2432<pre class="programlisting">
2431 The following options are supported by this package: 2433 The following options are supported by this package:
2432 ssl Enable SSL support. 2434 ssl Enable SSL support.
2433 Exactly one of the following gecko options is required: 2435 Exactly one of the following gecko options is required:
2434 firefox Use firefox as gecko rendering engine. 2436 firefox Use firefox as gecko rendering engine.
2435 mozilla Use mozilla as gecko rendering engine. 2437 mozilla Use mozilla as gecko rendering engine.
2436 At most one of the following database options may be selected: 2438 At most one of the following database options may be selected:
2437 mysql Enable support for MySQL database. 2439 mysql Enable support for MySQL database.
2438 pgsql Enable support for PostgreSQL database. 2440 pgsql Enable support for PostgreSQL database.
2439 2441
2440 These options are enabled by default: firefox 2442 These options are enabled by default: firefox
2441 These options are currently enabled: mozilla ssl 2443 These options are currently enabled: mozilla ssl
2442</pre> 2444</pre>
2443<p>The following variables can be defined in 2445<p>The following variables can be defined in
2444 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to select which options to 2446 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to select which options to
2445 enable for a package: <code class="varname">PKG_DEFAULT_OPTIONS</code>, 2447 enable for a package: <code class="varname">PKG_DEFAULT_OPTIONS</code>,
2446 which can be used to select or disable options for all packages 2448 which can be used to select or disable options for all packages
2447 that support them, and 2449 that support them, and
2448 <code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code>, 2450 <code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code>,
2449 which can be used to select or disable options specifically for 2451 which can be used to select or disable options specifically for
2450 package <em class="replaceable"><code>pkgbase</code></em>. Options listed in 2452 package <em class="replaceable"><code>pkgbase</code></em>. Options listed in
2451 these variables are selected, options preceded by <span class="quote">&#8220;<span class="quote">-</span>&#8221;</span> 2453 these variables are selected, options preceded by <span class="quote">&#8220;<span class="quote">-</span>&#8221;</span>
2452 are disabled. A few examples:</p> 2454 are disabled. A few examples:</p>
2453<pre class="screen"> 2455<pre class="screen">
2454<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> 2456<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>
2455PKG_DEFAULT_OPTIONS= -arts -dvdread -esound 2457PKG_DEFAULT_OPTIONS= -arts -dvdread -esound
2456PKG_OPTIONS.kdebase= debug -sasl 2458PKG_OPTIONS.kdebase= debug -sasl
2457PKG_OPTIONS.apache= suexec </pre> 2459PKG_OPTIONS.apache= suexec </pre>
2458<p>It is important to note that options that were specifically 2460<p>It is important to note that options that were specifically
2459 suggested by the package maintainer must be explicitly removed if 2461 suggested by the package maintainer must be explicitly removed if
2460 you do not wish to include the option. If you are unsure you can view 2462 you do not wish to include the option. If you are unsure you can view
2461 the current state with <span class="command"><strong>make show-options</strong></span>.</p> 2463 the current state with <span class="command"><strong>make show-options</strong></span>.</p>
2462<p>The following settings are consulted in the order given, and 2464<p>The following settings are consulted in the order given, and
2463 the last setting that selects or disables an option is 2465 the last setting that selects or disables an option is
2464 used:</p> 2466 used:</p>
2465<div class="orderedlist"><ol class="orderedlist" type="1"> 2467<div class="orderedlist"><ol class="orderedlist" type="1">
2466<li class="listitem"><p>the default options as suggested by the package 2468<li class="listitem"><p>the default options as suggested by the package
2467 maintainer</p></li> 2469 maintainer</p></li>
2468<li class="listitem"><p>the options implied by the settings of legacy 2470<li class="listitem"><p>the options implied by the settings of legacy
2469 variables (see below)</p></li> 2471 variables (see below)</p></li>
2470<li class="listitem"><p><code class="varname">PKG_DEFAULT_OPTIONS</code></p></li> 2472<li class="listitem"><p><code class="varname">PKG_DEFAULT_OPTIONS</code></p></li>
2471<li class="listitem"><p><code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code></p></li> 2473<li class="listitem"><p><code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code></p></li>
2472</ol></div> 2474</ol></div>
2473<p>For groups of mutually exclusive options, the last option 2475<p>For groups of mutually exclusive options, the last option
2474 selected is used, all others are automatically disabled. If an 2476 selected is used, all others are automatically disabled. If an
2475 option of the group is explicitly disabled, the previously 2477 option of the group is explicitly disabled, the previously
2476 selected option, if any, is used. It is an error if no option 2478 selected option, if any, is used. It is an error if no option
2477 from a required group of options is selected, and building the 2479 from a required group of options is selected, and building the
2478 package will fail.</p> 2480 package will fail.</p>
2479<p>Before the options framework was introduced, build options 2481<p>Before the options framework was introduced, build options
2480 were selected by setting a variable (often named 2482 were selected by setting a variable (often named
2481 <code class="varname">USE_<em class="replaceable"><code>FOO</code></em></code>) in 2483 <code class="varname">USE_<em class="replaceable"><code>FOO</code></em></code>) in
2482 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> for each option. To ease 2484 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> for each option. To ease
2483 transition to the options framework for the user, these legacy 2485 transition to the options framework for the user, these legacy
2484 variables are converted to the appropriate options setting 2486 variables are converted to the appropriate options setting
2485 (<code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code>) 2487 (<code class="varname">PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em></code>)
2486 automatically. A warning is issued to prompt the user to update 2488 automatically. A warning is issued to prompt the user to update
2487 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to use the options framework 2489 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to use the options framework
2488 directly. Support for the legacy variables will be removed 2490 directly. Support for the legacy variables will be removed
2489 eventually.</p> 2491 eventually.</p>
2490</div> 2492</div>
2491</div> 2493</div>
2492<div class="chapter"> 2494<div class="chapter">
2493<div class="titlepage"><div><div><h2 class="title"> 2495<div class="titlepage"><div><div><h2 class="title">
2494<a name="binary"></a>Chapter 6. Creating binary packages</h2></div></div></div> 2496<a name="binary"></a>Chapter 6. Creating binary packages</h2></div></div></div>
2495<div class="toc"> 2497<div class="toc">
2496<p><b>Table of Contents</b></p> 2498<p><b>Table of Contents</b></p>
2497<dl> 2499<dl>
2498<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt> 2500<dt><span class="sect1"><a href="#building-a-single-binary-package">6.1. Building a single binary package</a></span></dt>
2499<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt> 2501<dt><span class="sect1"><a href="#settings-for-creationg-of-binary-packages">6.2. Settings for creation of binary packages</a></span></dt>
2500</dl> 2502</dl>
2501</div> 2503</div>
2502<div class="sect1"> 2504<div class="sect1">
2503<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2505<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2504<a name="building-a-single-binary-package"></a>6.1. Building a single binary package</h2></div></div></div> 2506<a name="building-a-single-binary-package"></a>6.1. Building a single binary package</h2></div></div></div>
2505<p>Once you have built and installed a package, you can create 2507<p>Once you have built and installed a package, you can create
2506 a <span class="emphasis"><em>binary package</em></span> which can be installed on 2508 a <span class="emphasis"><em>binary package</em></span> which can be installed on
2507 another system with <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. This saves having to build 2509 another system with <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. This saves having to build
2508 the same package on a group of hosts and wasting CPU time. It also 2510 the same package on a group of hosts and wasting CPU time. It also
2509 provides a simple means for others to install your package, should 2511 provides a simple means for others to install your package, should
2510 you distribute it.</p> 2512 you distribute it.</p>
2511<p>To create a binary package, change into the appropriate 2513<p>To create a binary package, change into the appropriate
2512 directory in pkgsrc, and run <span class="command"><strong>make 2514 directory in pkgsrc, and run <span class="command"><strong>make
2513 package</strong></span>:</p> 2515 package</strong></span>:</p>
2514<pre class="screen"> 2516<pre class="screen">
2515<code class="prompt">#</code> <strong class="userinput"><code>cd misc/figlet</code></strong> 2517<code class="prompt">#</code> <strong class="userinput"><code>cd misc/figlet</code></strong>
2516<code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong> 2518<code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong>
2517 </pre> 2519 </pre>
2518<p>This will build and install your package (if not already done), 2520<p>This will build and install your package (if not already done),
2519 and then build a binary package from what was installed. You can 2521 and then build a binary package from what was installed. You can
2520 then use the <span class="command"><strong>pkg_*</strong></span> tools to manipulate 2522 then use the <span class="command"><strong>pkg_*</strong></span> tools to manipulate
2521 it. Binary packages are created by default in 2523 it. Binary packages are created by default in
2522 <code class="filename">/usr/pkgsrc/packages</code>, in the form of a 2524 <code class="filename">/usr/pkgsrc/packages</code>, in the form of a
2523 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 2525 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
2524 continuation of the above <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/misc/figlet/README.html" target="_top"><code class="filename">misc/figlet</code></a> example.</p> 2526 continuation of the above <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/misc/figlet/README.html" target="_top"><code class="filename">misc/figlet</code></a> example.</p>
2525<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 2527<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
2526 such a binary package.</p> 2528 such a binary package.</p>
2527</div> 2529</div>
2528<div class="sect1"> 2530<div class="sect1">
2529<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2531<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2530<a name="settings-for-creationg-of-binary-packages"></a>6.2. Settings for creation of binary packages</h2></div></div></div> 2532<a name="settings-for-creationg-of-binary-packages"></a>6.2. Settings for creation of binary packages</h2></div></div></div>
2531<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> 2533<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>
2532</div> 2534</div>
2533</div> 2535</div>
2534<div class="chapter"> 2536<div class="chapter">
2535<div class="titlepage"><div><div><h2 class="title"> 2537<div class="titlepage"><div><div><h2 class="title">
2536<a name="bulk"></a>Chapter 7. Creating binary packages for everything in pkgsrc (bulk 2538<a name="bulk"></a>Chapter 7. Creating binary packages for everything in pkgsrc (bulk
2537builds)</h2></div></div></div> 2539builds)</h2></div></div></div>
2538<div class="toc"> 2540<div class="toc">
2539<p><b>Table of Contents</b></p> 2541<p><b>Table of Contents</b></p>
2540<dl> 2542<dl>
2541<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt> 2543<dt><span class="sect1"><a href="#bulk.pre">7.1. Preparations</a></span></dt>
2542<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt> 2544<dt><span class="sect1"><a href="#bulk.pbulk">7.2. Running a pbulk-style bulk build</a></span></dt>
2543<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd> 2545<dd><dl><dt><span class="sect2"><a href="#bulk.pbulk.conf">7.2.1. Configuration</a></span></dt></dl></dd>
2544<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt> 2546<dt><span class="sect1"><a href="#bulk.req">7.3. Requirements of a full bulk build</a></span></dt>
2545<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt> 2547<dt><span class="sect1"><a href="#creating-cdroms">7.4. Creating a multiple CD-ROM packages collection</a></span></dt>
2546<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd> 2548<dd><dl><dt><span class="sect2"><a href="#cdpack-example">7.4.1. Example of cdpack</a></span></dt></dl></dd>
2547</dl> 2549</dl>
2548</div> 2550</div>
2549<p>For a number of reasons you may want to build binary packages 2551<p>For a number of reasons you may want to build binary packages
2550for a large selected set of packages in pkgsrc or even for all pkgsrc packages. 2552for a large selected set of packages in pkgsrc or even for all pkgsrc packages.
2551For instance, when you have multiple machines that should run the same software, 2553For instance, when you have multiple machines that should run the same software,
2552it is wasted time if they all build their packages themselves from source. 2554it is wasted time if they all build their packages themselves from source.
2553Or you may want to build a list of packages you want and check them before 2555Or you may want to build a list of packages you want and check them before
2554deploying onto production system. 2556deploying onto production system.
2555There is a way of getting a set of binary packages: 2557There is a way of getting a set of binary packages:
2556The bulk build system, or pbulk ("p" stands for "parallel). 2558The bulk build system, or pbulk ("p" stands for "parallel).
2557This chapter describes how to set it up so that the packages 2559This chapter describes how to set it up so that the packages
2558are most likely to be usable later.</p> 2560are most likely to be usable later.</p>
2559<div class="sect1"> 2561<div class="sect1">
2560<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2562<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2561<a name="bulk.pre"></a>7.1. Preparations</h2></div></div></div> 2563<a name="bulk.pre"></a>7.1. Preparations</h2></div></div></div>
2562<p>First of all, you have to decide whether you build all packages 2564<p>First of all, you have to decide whether you build all packages
2563or a limited set of them. Full bulk builds usually consume a lot more resources, 2565or a limited set of them. Full bulk builds usually consume a lot more resources,
2564both space and time, than builds for some practical sets of packages. 2566both space and time, than builds for some practical sets of packages.
2565There exists a number of particularly heavy packages that are not actually 2567There exists a number of particularly heavy packages that are not actually
2566interesting to a wide audience. 2568interesting to a wide audience.
2567 2569
2568For a limited bulk builds you need to make a list of packages you want to build. 2570For a limited bulk builds you need to make a list of packages you want to build.
2569Note, that all their dependencies will be built, so you don't need to track them manually. 2571Note, that all their dependencies will be built, so you don't need to track them manually.
2570</p> 2572</p>
2571<p>During bulk builds various packages are installed and deinstalled 2573<p>During bulk builds various packages are installed and deinstalled
2572in <code class="filename">/usr/pkg</code> (or whatever <code class="filename">LOCALBASE</code> is), 2574in <code class="filename">/usr/pkg</code> (or whatever <code class="filename">LOCALBASE</code> is),
2573so make sure that you don't need any package during the builds. 2575so make sure that you don't need any package during the builds.
2574Essentially, you should provide fresh system, either a chroot environment 2576Essentially, you should provide fresh system, either a chroot environment
2575or something even more restrictive, depending on what the operating system provides, 2577or something even more restrictive, depending on what the operating system provides,
2576or dedicate the whole physical machine. 2578or dedicate the whole physical machine.
2577As a useful side effect this makes sure that bulk builds cannot 2579As a useful side effect this makes sure that bulk builds cannot
2578break anything in your system. There have been numerous cases where 2580break anything in your system. There have been numerous cases where
2579certain packages tried to install files outside the 2581certain packages tried to install files outside the
2580<code class="filename">LOCALBASE</code> or wanted to edit some files in 2582<code class="filename">LOCALBASE</code> or wanted to edit some files in
2581<code class="filename">/etc</code>. 2583<code class="filename">/etc</code>.
2582</p> 2584</p>
2583</div> 2585</div>
2584<div class="sect1"> 2586<div class="sect1">
2585<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2587<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2586<a name="bulk.pbulk"></a>7.2. Running a pbulk-style bulk build</h2></div></div></div> 2588<a name="bulk.pbulk"></a>7.2. Running a pbulk-style bulk build</h2></div></div></div>
2587<p>Running a pbulk-style bulk build works roughly as follows:</p> 2589<p>Running a pbulk-style bulk build works roughly as follows:</p>
2588<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2590<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2589<li class="listitem"><p>First, build the pbulk infrastructure in a fresh pkgsrc location.</p></li> 2591<li class="listitem"><p>First, build the pbulk infrastructure in a fresh pkgsrc location.</p></li>
2590<li class="listitem"><p>Then, build each of the packages from a clean installation directory using the infrastructure.</p></li> 2592<li class="listitem"><p>Then, build each of the packages from a clean installation directory using the infrastructure.</p></li>
2591</ul></div> 2593</ul></div>
2592<div class="sect2"> 2594<div class="sect2">
2593<div class="titlepage"><div><div><h3 class="title"> 2595<div class="titlepage"><div><div><h3 class="title">
2594<a name="bulk.pbulk.conf"></a>7.2.1. Configuration</h3></div></div></div> 2596<a name="bulk.pbulk.conf"></a>7.2.1. Configuration</h3></div></div></div>
2595<p>To simplify configuration we provide helper script <code class="filename">mk/pbulk/pbulk.sh</code>.</p> 2597<p>To simplify configuration we provide helper script <code class="filename">mk/pbulk/pbulk.sh</code>.</p>
2596<p>In order to use it, prepare a clear system (real one, chroot environment, jail, zone, virtual machine). 2598<p>In order to use it, prepare a clear system (real one, chroot environment, jail, zone, virtual machine).
2597Configure network access to fetch distribution files. 2599Configure network access to fetch distribution files.
2598Create user with name "pbulk".</p> 2600Create user with name "pbulk".</p>
2599<p>Fetch and extract pkgsrc. Use a command like one of these:</p> 2601<p>Fetch and extract pkgsrc. Use a command like one of these:</p>
2600<pre class="screen"> 2602<pre class="screen">
2601<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> 2603<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>
2602<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> 2604<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>
2603<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> 2605<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>
2604</pre> 2606</pre>
2605<p>Or any other way that fits (e.g., curl, wget).</p> 2607<p>Or any other way that fits (e.g., curl, wget).</p>
2606<p>Deploy and configure pbulk tools, e.g.:</p> 2608<p>Deploy and configure pbulk tools, e.g.:</p>
2607<pre class="screen"> 2609<pre class="screen">
2608<code class="prompt">#</code> <strong class="userinput"><code>sh pbulk.sh -n # native (NetBSD)</code></strong> 2610<code class="prompt">#</code> <strong class="userinput"><code>sh pbulk.sh -n # native (NetBSD)</code></strong>
2609<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> 2611<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>
2610<code class="prompt">#</code> <strong class="userinput"><code>sh pbulk.sh -nlc mk.conf.frag # native, apply settings, configure for limited build</code></strong> 2612<code class="prompt">#</code> <strong class="userinput"><code>sh pbulk.sh -nlc mk.conf.frag # native, apply settings, configure for limited build</code></strong>
2611</pre> 2613</pre>
2612<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 2614<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2613<h3 class="title">Note</h3> 2615<h3 class="title">Note</h3>
2614<p><code class="filename">mk.conf.frag</code> is a fragment of 2616<p><code class="filename">mk.conf.frag</code> is a fragment of
2615<code class="filename">mk.conf</code> that contains settings you want to 2617<code class="filename">mk.conf</code> that contains settings you want to
2616apply to packages you build. For instance,</p> 2618apply to packages you build. For instance,</p>
2617<pre class="programlisting"> 2619<pre class="programlisting">
2618PKG_DEVELOPER= yes # perform more checks 2620PKG_DEVELOPER= yes # perform more checks
2619X11_TYPE= modular # use pkgsrc X11 2621X11_TYPE= modular # use pkgsrc X11
2620SKIP_LICENSE_CHECK= yes # accept all licences (useful when building all packages) 2622SKIP_LICENSE_CHECK= yes # accept all licences (useful when building all packages)
2621</pre> 2623</pre>
2622</div> 2624</div>
2623<p>If configured for limited list, replace the list in <code class="filename">/usr/pbulk/etc/pbulk.list</code> 2625<p>If configured for limited list, replace the list in <code class="filename">/usr/pbulk/etc/pbulk.list</code>
2624with your list of packages one per line without empty lines or comments. E.g.:</p> 2626with your list of packages one per line without empty lines or comments. E.g.:</p>
2625<pre class="programlisting"> 2627<pre class="programlisting">
2626www/firefox 2628www/firefox
2627mail/thunderbird 2629mail/thunderbird
2628misc/libreoffice4 2630misc/libreoffice4
2629</pre> 2631</pre>
2630<p>At this point you can also review configuration in <code class="filename">/usr/pbulk/etc</code> 2632<p>At this point you can also review configuration in <code class="filename">/usr/pbulk/etc</code>
2631and make final amendments, if wanted.</p> 2633and make final amendments, if wanted.</p>
2632<p>Start it:</p> 2634<p>Start it:</p>
2633<pre class="screen"> 2635<pre class="screen">
2634<code class="prompt">#</code> <strong class="userinput"><code>/usr/pbulk/bin/bulkbuild</code></strong> 2636<code class="prompt">#</code> <strong class="userinput"><code>/usr/pbulk/bin/bulkbuild</code></strong>
2635</pre> 2637</pre>
2636<p>After it finishes, you'll have <code class="filename">/mnt</code> filled with distribution files, binary packages, and reports, 2638<p>After it finishes, you'll have <code class="filename">/mnt</code> filled with distribution files, binary packages, and reports,
2637plain text summary in <code class="filename">/mnt/bulklog/meta/report.txt</code> 2639plain text summary in <code class="filename">/mnt/bulklog/meta/report.txt</code>
2638</p> 2640</p>
2639<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 2641<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2640<h3 class="title">Note</h3> 2642<h3 class="title">Note</h3>
2641<p>The <code class="filename">pbulk.sh</code> script does not cover all possible use cases. 2643<p>The <code class="filename">pbulk.sh</code> script does not cover all possible use cases.
2642While being ready to run, it serves as a good starting point to understand and build more complex setups. 2644While being ready to run, it serves as a good starting point to understand and build more complex setups.
2643The script is kept small enough for better understanding.</p> 2645The script is kept small enough for better understanding.</p>
2644</div> 2646</div>
2645<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 2647<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
2646<h3 class="title">Note</h3> 2648<h3 class="title">Note</h3>
2647<p>The <code class="filename">pbulk.sh</code> script supports running 2649<p>The <code class="filename">pbulk.sh</code> script supports running
2648unprivileged bulk build and helps configuring distributed bulk builds.</p> 2650unprivileged bulk build and helps configuring distributed bulk builds.</p>
2649</div> 2651</div>
2650</div> 2652</div>
2651</div> 2653</div>
2652<div class="sect1"> 2654<div class="sect1">
2653<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2655<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2654<a name="bulk.req"></a>7.3. Requirements of a full bulk build</h2></div></div></div> 2656<a name="bulk.req"></a>7.3. Requirements of a full bulk build</h2></div></div></div>
2655<p>A complete bulk build requires lots of disk space. Some of the 2657<p>A complete bulk build requires lots of disk space. Some of the
2656disk space can be read-only, some other must be writable. Some can be on 2658disk space can be read-only, some other must be writable. Some can be on
2657remote filesystems (such as NFS) and some should be local. Some can be 2659remote filesystems (such as NFS) and some should be local. Some can be
2658temporary filesystems, others must survive a sudden reboot.</p> 2660temporary filesystems, others must survive a sudden reboot.</p>
2659<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2661<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2660<li class="listitem"><p>40 GB for the distfiles (read-write, remote, temporary)</p></li> 2662<li class="listitem"><p>40 GB for the distfiles (read-write, remote, temporary)</p></li>
2661<li class="listitem"><p>30 GB for the binary packages (read-write, remote, permanent)</p></li> 2663<li class="listitem"><p>30 GB for the binary packages (read-write, remote, permanent)</p></li>
2662<li class="listitem"><p>1 GB for the pkgsrc tree (read-only, remote, permanent)</p></li> 2664<li class="listitem"><p>1 GB for the pkgsrc tree (read-only, remote, permanent)</p></li>
2663<li class="listitem"><p>5 GB for <code class="filename">LOCALBASE</code> (read-write, local, temporary)</p></li> 2665<li class="listitem"><p>5 GB for <code class="filename">LOCALBASE</code> (read-write, local, temporary)</p></li>
2664<li class="listitem"><p>10 GB for the log files (read-write, remote, permanent)</p></li> 2666<li class="listitem"><p>10 GB for the log files (read-write, remote, permanent)</p></li>
2665<li class="listitem"><p>5 GB for temporary files (read-write, local, temporary)</p></li> 2667<li class="listitem"><p>5 GB for temporary files (read-write, local, temporary)</p></li>
2666</ul></div> 2668</ul></div>
2667</div> 2669</div>
2668<div class="sect1"> 2670<div class="sect1">
2669<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2671<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2670<a name="creating-cdroms"></a>7.4. Creating a multiple CD-ROM packages collection</h2></div></div></div> 2672<a name="creating-cdroms"></a>7.4. Creating a multiple CD-ROM packages collection</h2></div></div></div>
2671<p>After your pkgsrc bulk-build has completed, you may wish to 2673<p>After your pkgsrc bulk-build has completed, you may wish to
2672 create a CD-ROM set of the resulting binary packages to assist 2674 create a CD-ROM set of the resulting binary packages to assist
2673 in installing packages on other machines. The 2675 in installing packages on other machines. The
2674 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/cdpack/README.html" target="_top"><code class="filename">pkgtools/cdpack</code></a> package provides 2676 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/cdpack/README.html" target="_top"><code class="filename">pkgtools/cdpack</code></a> package provides
2675 a simple tool for creating the ISO 9660 images. 2677 a simple tool for creating the ISO 9660 images.
2676 <span class="command"><strong>cdpack</strong></span> arranges the packages on the CD-ROMs in a 2678 <span class="command"><strong>cdpack</strong></span> arranges the packages on the CD-ROMs in a
2677 way that keeps all the dependencies for a given package on the same 2679 way that keeps all the dependencies for a given package on the same
2678 CD as that package.</p> 2680 CD as that package.</p>
2679<div class="sect2"> 2681<div class="sect2">
2680<div class="titlepage"><div><div><h3 class="title"> 2682<div class="titlepage"><div><div><h3 class="title">
2681<a name="cdpack-example"></a>7.4.1. Example of cdpack</h3></div></div></div> 2683<a name="cdpack-example"></a>7.4.1. Example of cdpack</h3></div></div></div>
2682<p>Complete documentation for cdpack is found in the cdpack(1) 2684<p>Complete documentation for cdpack is found in the cdpack(1)
2683 man page. The following short example assumes that the binary 2685 man page. The following short example assumes that the binary
2684 packages are left in 2686 packages are left in
2685 <code class="filename">/usr/pkgsrc/packages/All</code> and that 2687 <code class="filename">/usr/pkgsrc/packages/All</code> and that
2686 sufficient disk space exists in <code class="filename">/u2</code> to 2688 sufficient disk space exists in <code class="filename">/u2</code> to
2687 hold the ISO 9660 images.</p> 2689 hold the ISO 9660 images.</p>
2688<pre class="screen"> 2690<pre class="screen">
2689<code class="prompt">#</code> <strong class="userinput"><code>mkdir /u2/images</code></strong> 2691<code class="prompt">#</code> <strong class="userinput"><code>mkdir /u2/images</code></strong>
2690<code class="prompt">#</code> <strong class="userinput"><code>pkg_add /usr/pkgsrc/packages/All/cdpack</code></strong> 2692<code class="prompt">#</code> <strong class="userinput"><code>pkg_add /usr/pkgsrc/packages/All/cdpack</code></strong>
2691<code class="prompt">#</code> <strong class="userinput"><code>cdpack /usr/pkgsrc/packages/All /u2/images</code></strong> 2693<code class="prompt">#</code> <strong class="userinput"><code>cdpack /usr/pkgsrc/packages/All /u2/images</code></strong>
2692 </pre> 2694 </pre>
2693<p>If you wish to include a common set of files 2695<p>If you wish to include a common set of files
2694 (<code class="filename">COPYRIGHT</code>, <code class="filename">README</code>, 2696 (<code class="filename">COPYRIGHT</code>, <code class="filename">README</code>,
2695 etc.) on each CD in the collection, then you need to create a 2697 etc.) on each CD in the collection, then you need to create a
2696 directory which contains these files. e.g.</p> 2698 directory which contains these files. e.g.</p>
2697<pre class="screen"> 2699<pre class="screen">
2698<code class="prompt">#</code> <strong class="userinput"><code>mkdir /tmp/common</code></strong> 2700<code class="prompt">#</code> <strong class="userinput"><code>mkdir /tmp/common</code></strong>
2699<code class="prompt">#</code> <strong class="userinput"><code>echo "This is a README" &gt; /tmp/common/README</code></strong> 2701<code class="prompt">#</code> <strong class="userinput"><code>echo "This is a README" &gt; /tmp/common/README</code></strong>
2700<code class="prompt">#</code> <strong class="userinput"><code>echo "Another file" &gt; /tmp/common/COPYING</code></strong> 2702<code class="prompt">#</code> <strong class="userinput"><code>echo "Another file" &gt; /tmp/common/COPYING</code></strong>
2701<code class="prompt">#</code> <strong class="userinput"><code>mkdir /tmp/common/bin</code></strong> 2703<code class="prompt">#</code> <strong class="userinput"><code>mkdir /tmp/common/bin</code></strong>
2702<code class="prompt">#</code> <strong class="userinput"><code>echo "#!/bin/sh" &gt; /tmp/common/bin/myscript</code></strong> 2704<code class="prompt">#</code> <strong class="userinput"><code>echo "#!/bin/sh" &gt; /tmp/common/bin/myscript</code></strong>
2703<code class="prompt">#</code> <strong class="userinput"><code>echo "echo Hello world" &gt;&gt; /tmp/common/bin/myscript</code></strong> 2705<code class="prompt">#</code> <strong class="userinput"><code>echo "echo Hello world" &gt;&gt; /tmp/common/bin/myscript</code></strong>
2704<code class="prompt">#</code> <strong class="userinput"><code>chmod 755 /tmp/common/bin/myscript</code></strong> 2706<code class="prompt">#</code> <strong class="userinput"><code>chmod 755 /tmp/common/bin/myscript</code></strong>
2705 </pre> 2707 </pre>
2706<p>Now create the images:</p> 2708<p>Now create the images:</p>
2707<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cdpack -x /tmp/common /usr/pkgsrc/packages/All /u2/images</code></strong></pre> 2709<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cdpack -x /tmp/common /usr/pkgsrc/packages/All /u2/images</code></strong></pre>
2708<p>Each image will contain <code class="filename">README</code>, 2710<p>Each image will contain <code class="filename">README</code>,
2709 <code class="filename">COPYING</code>, and <code class="filename">bin/myscript</code> 2711 <code class="filename">COPYING</code>, and <code class="filename">bin/myscript</code>
2710 in their root directories.</p> 2712 in their root directories.</p>
2711</div> 2713</div>
2712</div> 2714</div>
2713</div> 2715</div>
2714<div class="chapter"> 2716<div class="chapter">
2715<div class="titlepage"><div><div><h2 class="title"> 2717<div class="titlepage"><div><div><h2 class="title">
2716<a name="files"></a>Chapter 8. Directory layout of the installed files</h2></div></div></div> 2718<a name="files"></a>Chapter 8. Directory layout of the installed files</h2></div></div></div>
2717<div class="toc"> 2719<div class="toc">
2718<p><b>Table of Contents</b></p> 2720<p><b>Table of Contents</b></p>
2719<dl> 2721<dl>
2720<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt> 2722<dt><span class="sect1"><a href="#files.localbase">8.1. File system layout in <code class="literal">${LOCALBASE}</code></a></span></dt>
2721<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt> 2723<dt><span class="sect1"><a href="#files.varbase">8.2. File system layout in <code class="literal">${VARBASE}</code></a></span></dt>
2722</dl> 2724</dl>
2723</div> 2725</div>
2724<p>The files that are installed by pkgsrc are organized in a way that 2726<p>The files that are installed by pkgsrc are organized in a way that
2725is similar to what you find in the <code class="filename">/usr</code> directory 2727is similar to what you find in the <code class="filename">/usr</code> directory
2726of the base system. But some details are different. This is because 2728of the base system. But some details are different. This is because
2727pkgsrc initially came from FreeBSD and had adopted its file system 2729pkgsrc initially came from FreeBSD and had adopted its file system
2728hierarchy. Later it was largely influenced by NetBSD. But no matter 2730hierarchy. Later it was largely influenced by NetBSD. But no matter
2729which operating system you are using pkgsrc with, you can expect the 2731which operating system you are using pkgsrc with, you can expect the
2730same layout for pkgsrc.</p> 2732same layout for pkgsrc.</p>
2731<p>There are mainly four root directories for pkgsrc, which are all 2733<p>There are mainly four root directories for pkgsrc, which are all
2732configurable in the <code class="filename">bootstrap/bootstrap</code> script. 2734configurable in the <code class="filename">bootstrap/bootstrap</code> script.
2733When pkgsrc has been installed as root, the default locations 2735When pkgsrc has been installed as root, the default locations
2734are:</p> 2736are:</p>
2735<pre class="programlisting"> 2737<pre class="programlisting">
2736LOCALBASE= /usr/pkg 2738LOCALBASE= /usr/pkg
2737PKG_SYSCONFBASE= /usr/pkg/etc 2739PKG_SYSCONFBASE= /usr/pkg/etc
2738VARBASE= /var 2740VARBASE= /var
2739PKG_DBDIR= /var/db/pkg 2741PKG_DBDIR= /var/db/pkg
2740</pre> 2742</pre>
2741<p>In unprivileged mode (when pkgsrc has been installed as any other 2743<p>In unprivileged mode (when pkgsrc has been installed as any other
2742user), the default locations are:</p> 2744user), the default locations are:</p>
2743<pre class="programlisting"> 2745<pre class="programlisting">
2744LOCALBASE= ${HOME}/pkg 2746LOCALBASE= ${HOME}/pkg
2745PKG_SYSCONFBASE= ${HOME}/pkg/etc 2747PKG_SYSCONFBASE= ${HOME}/pkg/etc
2746VARBASE= ${HOME}/pkg/var 2748VARBASE= ${HOME}/pkg/var
2747PKG_DBDIR= ${HOME}/pkg/var/db/pkg 2749PKG_DBDIR= ${HOME}/pkg/var/db/pkg
2748</pre> 2750</pre>
2749<p>What these four directories are for, and what they look like is 2751<p>What these four directories are for, and what they look like is
2750explained below.</p> 2752explained below.</p>
2751<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2753<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2752<li class="listitem"><p><code class="varname">LOCALBASE</code> corresponds to the 2754<li class="listitem"><p><code class="varname">LOCALBASE</code> corresponds to the
2753<code class="filename">/usr</code> directory in the base system. It is the 2755<code class="filename">/usr</code> directory in the base system. It is the
2754<span class="quote">&#8220;<span class="quote">main</span>&#8221;</span> directory where the files are installed and contains 2756<span class="quote">&#8220;<span class="quote">main</span>&#8221;</span> directory where the files are installed and contains
2755the well-known subdirectories like <code class="filename">bin</code>, 2757the well-known subdirectories like <code class="filename">bin</code>,
2756<code class="filename">include</code>, <code class="filename">lib</code>, 2758<code class="filename">include</code>, <code class="filename">lib</code>,
2757<code class="filename">share</code> and 2759<code class="filename">share</code> and
2758<code class="filename">sbin</code>.</p></li> 2760<code class="filename">sbin</code>.</p></li>
2759<li class="listitem"><p><code class="varname">VARBASE</code> corresponds to 2761<li class="listitem"><p><code class="varname">VARBASE</code> corresponds to
2760<code class="filename">/var</code> in the base system. Some programs (especially 2762<code class="filename">/var</code> in the base system. Some programs (especially
2761games, network daemons) need write access to it during normal 2763games, network daemons) need write access to it during normal
2762operation.</p></li> 2764operation.</p></li>
2763<li class="listitem"><p><code class="varname">PKG_SYSCONFDIR</code> corresponds to 2765<li class="listitem"><p><code class="varname">PKG_SYSCONFDIR</code> corresponds to
2764<code class="filename">/etc</code> in the base system. It contains configuration 2766<code class="filename">/etc</code> in the base system. It contains configuration
2765files of the packages, as well as pkgsrc's <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> 2767files of the packages, as well as pkgsrc's <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>
2766itself.</p></li> 2768itself.</p></li>
2767</ul></div> 2769</ul></div>
2768<div class="sect1"> 2770<div class="sect1">
2769<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2771<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2770<a name="files.localbase"></a>8.1. File system layout in <code class="literal">${LOCALBASE}</code> 2772<a name="files.localbase"></a>8.1. File system layout in <code class="literal">${LOCALBASE}</code>
2771</h2></div></div></div> 2773</h2></div></div></div>
2772<p>The following directories exist in a typical pkgsrc installation 2774<p>The following directories exist in a typical pkgsrc installation
2773in <code class="filename">${LOCALBASE}</code>.</p> 2775in <code class="filename">${LOCALBASE}</code>.</p>
2774<div class="variablelist"><dl class="variablelist"> 2776<div class="variablelist"><dl class="variablelist">
2775<dt><span class="term"><code class="filename">bin</code></span></dt> 2777<dt><span class="term"><code class="filename">bin</code></span></dt>
2776<dd><p>Contains executable programs that are intended to be 2778<dd><p>Contains executable programs that are intended to be
2777directly used by the end user.</p></dd> 2779directly used by the end user.</p></dd>
2778<dt><span class="term"><code class="filename">emul</code></span></dt> 2780<dt><span class="term"><code class="filename">emul</code></span></dt>
2779<dd><p>Contains files for the emulation layers of various other 2781<dd><p>Contains files for the emulation layers of various other
2780operating systems, especially for 2782operating systems, especially for
2781NetBSD.</p></dd> 2783NetBSD.</p></dd>
2782<dt><span class="term"><code class="filename">etc</code> (the usual location of 2784<dt><span class="term"><code class="filename">etc</code> (the usual location of
2783<code class="filename">${PKG_SYSCONFDIR}</code>)</span></dt> 2785<code class="filename">${PKG_SYSCONFDIR}</code>)</span></dt>
2784<dd><p>Contains 2786<dd><p>Contains
2785the configuration files.</p></dd> 2787the configuration files.</p></dd>
2786<dt><span class="term"><code class="filename">include</code></span></dt> 2788<dt><span class="term"><code class="filename">include</code></span></dt>
2787<dd><p>Contains headers for the C and C++ programming 2789<dd><p>Contains headers for the C and C++ programming
2788languages.</p></dd> 2790languages.</p></dd>
2789<dt><span class="term"><code class="filename">info</code></span></dt> 2791<dt><span class="term"><code class="filename">info</code></span></dt>
2790<dd><p>Contains GNU info files of various 2792<dd><p>Contains GNU info files of various
2791packages.</p></dd> 2793packages.</p></dd>
2792<dt><span class="term"><code class="filename">lib</code></span></dt> 2794<dt><span class="term"><code class="filename">lib</code></span></dt>
2793<dd><p>Contains shared and static 2795<dd><p>Contains shared and static
2794libraries.</p></dd> 2796libraries.</p></dd>
2795<dt><span class="term"><code class="filename">libdata</code></span></dt> 2797<dt><span class="term"><code class="filename">libdata</code></span></dt>
2796<dd><p>Contains data files that don't change after 2798<dd><p>Contains data files that don't change after
2797installation. Other data files belong into 2799installation. Other data files belong into
2798<code class="filename">${VARBASE}</code>.</p></dd> 2800<code class="filename">${VARBASE}</code>.</p></dd>
2799<dt><span class="term"><code class="filename">libexec</code></span></dt> 2801<dt><span class="term"><code class="filename">libexec</code></span></dt>
2800<dd><p>Contains programs that are not intended to be used by 2802<dd><p>Contains programs that are not intended to be used by
2801end users, such as helper programs or network 2803end users, such as helper programs or network
2802daemons.</p></dd> 2804daemons.</p></dd>
2803<dt><span class="term"><code class="filename">libexec/cgi-bin</code></span></dt> 2805<dt><span class="term"><code class="filename">libexec/cgi-bin</code></span></dt>
2804<dd><p>Contains programs that are intended to be executed as 2806<dd><p>Contains programs that are intended to be executed as
2805CGI scripts by a web server.</p></dd> 2807CGI scripts by a web server.</p></dd>
2806<dt><span class="term"><code class="filename">man</code> (the usual value of 2808<dt><span class="term"><code class="filename">man</code> (the usual value of
2807<code class="filename">${PKGMANDIR}</code>)</span></dt> 2809<code class="filename">${PKGMANDIR}</code>)</span></dt>
2808<dd><p>Contains brief 2810<dd><p>Contains brief
2809documentation in form of manual pages.</p></dd> 2811documentation in form of manual pages.</p></dd>
2810<dt><span class="term"><code class="filename">sbin</code></span></dt> 2812<dt><span class="term"><code class="filename">sbin</code></span></dt>
2811<dd><p>Contains programs that are intended to be used only by 2813<dd><p>Contains programs that are intended to be used only by
2812the super-user.</p></dd> 2814the super-user.</p></dd>
2813<dt><span class="term"><code class="filename">share</code></span></dt> 2815<dt><span class="term"><code class="filename">share</code></span></dt>
2814<dd><p>Contains platform-independent data files that don't 2816<dd><p>Contains platform-independent data files that don't
2815change after installation.</p></dd> 2817change after installation.</p></dd>
2816<dt><span class="term"><code class="filename">share/doc</code></span></dt> 2818<dt><span class="term"><code class="filename">share/doc</code></span></dt>
2817<dd><p>Contains documentation files provided by the 2819<dd><p>Contains documentation files provided by the
2818packages.</p></dd> 2820packages.</p></dd>
2819<dt><span class="term"><code class="filename">share/examples</code></span></dt> 2821<dt><span class="term"><code class="filename">share/examples</code></span></dt>
2820<dd><p>Contains example files provided by the packages. Among 2822<dd><p>Contains example files provided by the packages. Among
2821others, the original configuration files are saved here and copied to 2823others, the original configuration files are saved here and copied to
2822<code class="filename">${PKG_SYSCONFDIR}</code> during 2824<code class="filename">${PKG_SYSCONFDIR}</code> during
2823installation.</p></dd> 2825installation.</p></dd>
2824<dt><span class="term"><code class="filename">share/examples/rc.d</code></span></dt> 2826<dt><span class="term"><code class="filename">share/examples/rc.d</code></span></dt>
2825<dd><p>Contains the original files for rc.d 2827<dd><p>Contains the original files for rc.d
2826scripts.</p></dd> 2828scripts.</p></dd>
2827<dt><span class="term"><code class="filename">var</code> (the usual location of 2829<dt><span class="term"><code class="filename">var</code> (the usual location of
2828<code class="filename">${VARBASE}</code>)</span></dt> 2830<code class="filename">${VARBASE}</code>)</span></dt>
2829<dd><p>Contains files 2831<dd><p>Contains files
2830that may be modified after 2832that may be modified after
2831installation.</p></dd> 2833installation.</p></dd>
2832</dl></div> 2834</dl></div>
2833</div> 2835</div>
2834<div class="sect1"> 2836<div class="sect1">
2835<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2837<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2836<a name="files.varbase"></a>8.2. File system layout in <code class="literal">${VARBASE}</code> 2838<a name="files.varbase"></a>8.2. File system layout in <code class="literal">${VARBASE}</code>
2837</h2></div></div></div> 2839</h2></div></div></div>
2838<div class="variablelist"><dl class="variablelist"> 2840<div class="variablelist"><dl class="variablelist">
2839<dt><span class="term"><code class="filename">db/pkg</code> (the usual location of 2841<dt><span class="term"><code class="filename">db/pkg</code> (the usual location of
2840<code class="filename">${PKG_DBDIR}</code>)</span></dt> 2842<code class="filename">${PKG_DBDIR}</code>)</span></dt>
2841<dd><p>Contains 2843<dd><p>Contains
2842information about the currently installed 2844information about the currently installed
2843packages.</p></dd> 2845packages.</p></dd>
2844<dt><span class="term"><code class="filename">games</code></span></dt> 2846<dt><span class="term"><code class="filename">games</code></span></dt>
2845<dd><p>Contains highscore 2847<dd><p>Contains highscore
2846files.</p></dd> 2848files.</p></dd>
2847<dt><span class="term"><code class="filename">log</code></span></dt> 2849<dt><span class="term"><code class="filename">log</code></span></dt>
2848<dd><p>Contains log files.</p></dd> 2850<dd><p>Contains log files.</p></dd>
2849<dt><span class="term"><code class="filename">run</code></span></dt> 2851<dt><span class="term"><code class="filename">run</code></span></dt>
2850<dd><p>Contains informational files about daemons that are 2852<dd><p>Contains informational files about daemons that are
2851currently running.</p></dd> 2853currently running.</p></dd>
2852</dl></div> 2854</dl></div>
2853</div> 2855</div>
2854</div> 2856</div>
2855<div class="chapter"> 2857<div class="chapter">
2856<div class="titlepage"><div><div><h2 class="title"> 2858<div class="titlepage"><div><div><h2 class="title">
2857<a name="faq"></a>Chapter 9. Frequently Asked Questions</h2></div></div></div> 2859<a name="faq"></a>Chapter 9. Frequently Asked Questions</h2></div></div></div>
2858<div class="toc"> 2860<div class="toc">
2859<p><b>Table of Contents</b></p> 2861<p><b>Table of Contents</b></p>
2860<dl> 2862<dl>
2861<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt> 2863<dt><span class="sect1"><a href="#mailing-list-pointers">9.1. Are there any mailing lists for pkg-related discussion?</a></span></dt>
2862<dt><span class="sect1"><a href="#faq-pkgtools">9.2. Utilities for package management (pkgtools)</a></span></dt> 2864<dt><span class="sect1"><a href="#pkgviews-docs">9.2. Where's the pkgviews documentation?</a></span></dt>
2863<dt><span class="sect1"><a href="#non-root-pkgsrc">9.3. How to use pkgsrc as non-root</a></span></dt> 2865<dt><span class="sect1"><a href="#faq-pkgtools">9.3. Utilities for package management (pkgtools)</a></span></dt>
2864<dt><span class="sect1"><a href="#resume-transfers">9.4. How to resume transfers when fetching distfiles?</a></span></dt> 2866<dt><span class="sect1"><a href="#non-root-pkgsrc">9.4. How to use pkgsrc as non-root</a></span></dt>
2865<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> 2867<dt><span class="sect1"><a href="#resume-transfers">9.5. How to resume transfers when fetching distfiles?</a></span></dt>
2866<dt><span class="sect1"><a href="#fetch-behind-firewall">9.6. How to fetch files from behind a firewall</a></span></dt> 2868<dt><span class="sect1"><a href="#x.org-from-pkgsrc">9.6. How can I install/use modular X.org from pkgsrc?</a></span></dt>
2867<dt><span class="sect1"><a href="#fetch-https">9.7. How to fetch files from HTTPS sites</a></span></dt> 2869<dt><span class="sect1"><a href="#fetch-behind-firewall">9.7. How to fetch files from behind a firewall</a></span></dt>
2868<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> 2870<dt><span class="sect1"><a href="#fetch-https">9.8. How to fetch files from HTTPS sites</a></span></dt>
2869<dt><span class="sect1"><a href="#fetching-all-distfiles">9.9. How to fetch all distfiles at once</a></span></dt> 2871<dt><span class="sect1"><a href="#passive-ftp">9.9. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</a></span></dt>
2870<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 2872<dt><span class="sect1"><a href="#fetching-all-distfiles">9.10. How to fetch all distfiles at once</a></span></dt>
 2873<dt><span class="sect1"><a href="#tmac.andoc-missing">9.11. What does <span class="quote">&#8220;<span class="quote">Don't know how to make
2871/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt> 2874/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</a></span></dt>
2872<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> 2875<dt><span class="sect1"><a href="#bsd.own.mk-missing">9.12. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</a></span></dt>
2873<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.12. Using 'sudo' with pkgsrc</a></span></dt> 2876<dt><span class="sect1"><a href="#using-sudo-with-pkgsrc">9.13. Using 'sudo' with pkgsrc</a></span></dt>
2874<dt><span class="sect1"><a href="#faq.conf">9.13. How do I change the location of configuration files?</a></span></dt> 2877<dt><span class="sect1"><a href="#faq.conf">9.14. How do I change the location of configuration files?</a></span></dt>
2875<dt><span class="sect1"><a href="#audit-packages">9.14. Automated security checks</a></span></dt> 2878<dt><span class="sect1"><a href="#audit-packages">9.15. Automated security checks</a></span></dt>
2876<dt><span class="sect1"><a href="#ufaq-cflags">9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt> 2879<dt><span class="sect1"><a href="#ufaq-cflags">9.16. Why do some packages ignore my <code class="varname">CFLAGS</code>?</a></span></dt>
2877<dt><span class="sect1"><a href="#ufaq-fail">9.16. A package does not build. What shall I do?</a></span></dt> 2880<dt><span class="sect1"><a href="#ufaq-fail">9.17. A package does not build. What shall I do?</a></span></dt>
2878<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> 2881<dt><span class="sect1"><a href="#faq.rcs-conflicts">9.18. 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>
2879</dl> 2882</dl>
2880</div> 2883</div>
2881<p>This section contains hints, tips &amp; tricks on special things in 2884<p>This section contains hints, tips &amp; tricks on special things in
2882pkgsrc that we didn't find a better place for in the previous chapters, and 2885pkgsrc that we didn't find a better place for in the previous chapters, and
2883it contains items for both pkgsrc users and developers.</p> 2886it contains items for both pkgsrc users and developers.</p>
2884<div class="sect1"> 2887<div class="sect1">
2885<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2888<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2886<a name="mailing-list-pointers"></a>9.1. Are there any mailing lists for pkg-related discussion?</h2></div></div></div> 2889<a name="mailing-list-pointers"></a>9.1. Are there any mailing lists for pkg-related discussion?</h2></div></div></div>
2887<p>The following mailing lists may be of interest to pkgsrc users:</p> 2890<p>The following mailing lists may be of interest to pkgsrc users:</p>
2888<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2891<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2889<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-users" target="_top">pkgsrc-users</a>: 2892<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-users" target="_top">pkgsrc-users</a>:
2890 This is a general purpose list for most issues regarding 2893 This is a general purpose list for most issues regarding
2891 pkgsrc, regardless of platform, e.g. soliciting user help 2894 pkgsrc, regardless of platform, e.g. soliciting user help
2892 for pkgsrc configuration, unexpected build failures, using 2895 for pkgsrc configuration, unexpected build failures, using
2893 particular packages, upgrading pkgsrc installations, 2896 particular packages, upgrading pkgsrc installations,
2894 questions regarding the pkgsrc release branches, etc. General announcements or 2897 questions regarding the pkgsrc release branches, etc. General announcements or
2895 proposals for changes that impact the pkgsrc user community, 2898 proposals for changes that impact the pkgsrc user community,
2896 e.g. major infrastructure changes, new features, package 2899 e.g. major infrastructure changes, new features, package
2897 removals, etc., may also be posted.</p></li> 2900 removals, etc., may also be posted.</p></li>
2898<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-bulk" target="_top">pkgsrc-bulk</a>: 2901<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-bulk" target="_top">pkgsrc-bulk</a>:
2899 A list where the results of pkgsrc bulk builds are sent and 2902 A list where the results of pkgsrc bulk builds are sent and
2900 discussed.</p></li> 2903 discussed.</p></li>
2901<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-changes" target="_top">pkgsrc-changes</a>: 2904<li class="listitem"><p><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-changes" target="_top">pkgsrc-changes</a>:
2902 This list is for those who are interested in getting a 2905 This list is for those who are interested in getting a
2903 commit message for every change committed to pkgsrc. It is 2906 commit message for every change committed to pkgsrc. It is
2904 also available in digest form, meaning one daily message 2907 also available in digest form, meaning one daily message
2905 containing all commit messages for changes to the package 2908 containing all commit messages for changes to the package
2906 source tree in that 24 hour period.</p></li> 2909 source tree in that 24 hour period.</p></li>
2907</ul></div> 2910</ul></div>
2908<p>To subscribe, do:</p> 2911<p>To subscribe, do:</p>
2909<pre class="programlisting"> 2912<pre class="programlisting">
2910<code class="prompt">%</code> echo subscribe <em class="replaceable"><code>listname</code></em> | mail majordomo@NetBSD.org 2913<code class="prompt">%</code> echo subscribe <em class="replaceable"><code>listname</code></em> | mail majordomo@NetBSD.org
2911</pre> 2914</pre>
2912<p>Archives for all these mailing lists are available from 2915<p>Archives for all these mailing lists are available from
2913<a class="ulink" href="http://mail-index.NetBSD.org/" target="_top">http://mail-index.NetBSD.org/</a>.</p> 2916<a class="ulink" href="http://mail-index.NetBSD.org/" target="_top">http://mail-index.NetBSD.org/</a>.</p>
2914</div> 2917</div>
2915<div class="sect1"> 2918<div class="sect1">
2916<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 2919<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2917<a name="faq-pkgtools"></a>9.2. Utilities for package management (pkgtools)</h2></div></div></div> 2920<a name="pkgviews-docs"></a>9.2. Where's the pkgviews documentation?</h2></div></div></div>
 2921<p>Pkgviews is tightly integrated with buildlink. You can find a
 2922pkgviews User's guide in
 2923<code class="filename">pkgsrc/mk/buildlink3/PKGVIEWS_UG</code>.</p>
 2924</div>
 2925<div class="sect1">
 2926<div class="titlepage"><div><div><h2 class="title" style="clear: both">
 2927<a name="faq-pkgtools"></a>9.3. Utilities for package management (pkgtools)</h2></div></div></div>
2918<p>The directory <code class="filename">pkgsrc/pkgtools</code> contains 2928<p>The directory <code class="filename">pkgsrc/pkgtools</code> contains
2919a number of useful utilities for both users and developers of pkgsrc. This 2929a number of useful utilities for both users and developers of pkgsrc. This
2920section attempts only to make the reader aware of the utilities and when 2930section attempts only to make the reader aware of the utilities and when
2921they might be useful, and not to duplicate the documentation that comes 2931they might be useful, and not to duplicate the documentation that comes
2922with each package.</p> 2932with each package.</p>
2923<p>Utilities used by pkgsrc (automatically installed when needed):</p> 2933<p>Utilities used by pkgsrc (automatically installed when needed):</p>
2924<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/x11-links/README.html" target="_top"><code class="filename">pkgtools/x11-links</code></a>: 2934<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/x11-links/README.html" target="_top"><code class="filename">pkgtools/x11-links</code></a>:
2925 Symlinks for use by buildlink.</p></li></ul></div> 2935 Symlinks for use by buildlink.</p></li></ul></div>
2926<p>OS tool augmentation (automatically installed when needed):</p> 2936<p>OS tool augmentation (automatically installed when needed):</p>
2927<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2937<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2928<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/digest/README.html" target="_top"><code class="filename">pkgtools/digest</code></a>: 2938<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/digest/README.html" target="_top"><code class="filename">pkgtools/digest</code></a>:
2929 Calculates various kinds of checksums (including SHA1).</p></li> 2939 Calculates various kinds of checksums (including SHA1).</p></li>
2930<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/libnbcompat/README.html" target="_top"><code class="filename">pkgtools/libnbcompat</code></a>: 2940<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/libnbcompat/README.html" target="_top"><code class="filename">pkgtools/libnbcompat</code></a>:
2931 Compatibility library for pkgsrc tools.</p></li> 2941 Compatibility library for pkgsrc tools.</p></li>
2932<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/mtree/README.html" target="_top"><code class="filename">pkgtools/mtree</code></a>: Installed on 2942<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/mtree/README.html" target="_top"><code class="filename">pkgtools/mtree</code></a>: Installed on
2933 non-BSD systems due to lack of native mtree.</p></li> 2943 non-BSD systems due to lack of native mtree.</p></li>
2934<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a>: 2944<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a>:
2935 Up-to-date replacement for 2945 Up-to-date replacement for
2936 <code class="filename">/usr/sbin/pkg_install</code>, or for use on operating 2946 <code class="filename">/usr/sbin/pkg_install</code>, or for use on operating
2937 systems where pkg_install is not present.</p></li> 2947 systems where pkg_install is not present.</p></li>
2938</ul></div> 2948</ul></div>
2939<p>Utilities used by pkgsrc (not automatically installed):</p> 2949<p>Utilities used by pkgsrc (not automatically installed):</p>
2940<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2950<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2941<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_tarup/README.html" target="_top"><code class="filename">pkgtools/pkg_tarup</code></a>: 2951<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_tarup/README.html" target="_top"><code class="filename">pkgtools/pkg_tarup</code></a>:
2942 Create a binary package from an 2952 Create a binary package from an
2943 already-installed package. Used by <span class="command"><strong>make replace</strong></span> to 2953 already-installed package. Used by <span class="command"><strong>make replace</strong></span> to
2944 save the old package.</p></li> 2954 save the old package.</p></li>
2945<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/dfdisk/README.html" target="_top"><code class="filename">pkgtools/dfdisk</code></a>: 2955<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/dfdisk/README.html" target="_top"><code class="filename">pkgtools/dfdisk</code></a>:
2946 Adds extra functionality to pkgsrc, allowing it to fetch distfiles 2956 Adds extra functionality to pkgsrc, allowing it to fetch distfiles
2947 from multiple locations. It currently supports the following 2957 from multiple locations. It currently supports the following
2948 methods: multiple CD-ROMs and network FTP/HTTP connections.</p></li> 2958 methods: multiple CD-ROMs and network FTP/HTTP connections.</p></li>
2949<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/cpuflags/README.html" target="_top"><code class="filename">devel/cpuflags</code></a>: Determine 2959<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/cpuflags/README.html" target="_top"><code class="filename">devel/cpuflags</code></a>: Determine
2950 the best compiler flags to optimise code for your current 2960 the best compiler flags to optimise code for your current
2951 CPU and compiler. </p></li> 2961 CPU and compiler. </p></li>
2952</ul></div> 2962</ul></div>
2953<p>Utilities for keeping track of installed packages, being up to date, 2963<p>Utilities for keeping track of installed packages, being up to date,
2954etc:</p> 2964etc:</p>
2955<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2965<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2956<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgin/README.html" target="_top"><code class="filename">pkgtools/pkgin</code></a>: A package 2966<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgin/README.html" target="_top"><code class="filename">pkgtools/pkgin</code></a>: A package
2957 update tool similar to apt(1). Download, install, and upgrade 2967 update tool similar to apt(1). Download, install, and upgrade
2958 binary packages easily.</p></li> 2968 binary packages easily.</p></li>
2959<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_chk/README.html" target="_top"><code class="filename">pkgtools/pkg_chk</code></a>: Reports on 2969<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_chk/README.html" target="_top"><code class="filename">pkgtools/pkg_chk</code></a>: Reports on
2960 packages whose installed versions do not match the latest pkgsrc 2970 packages whose installed versions do not match the latest pkgsrc
2961 entries.</p></li> 2971 entries.</p></li>
2962<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdep/README.html" target="_top"><code class="filename">pkgtools/pkgdep</code></a>: Makes 2972<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdep/README.html" target="_top"><code class="filename">pkgtools/pkgdep</code></a>: Makes
2963 dependency graphs of packages, to aid in choosing a strategy for 2973 dependency graphs of packages, to aid in choosing a strategy for
2964 updating.</p></li> 2974 updating.</p></li>
2965<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdepgraph/README.html" target="_top"><code class="filename">pkgtools/pkgdepgraph</code></a>: Makes 2975<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdepgraph/README.html" target="_top"><code class="filename">pkgtools/pkgdepgraph</code></a>: Makes
2966 graphs from the output of <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdep/README.html" target="_top"><code class="filename">pkgtools/pkgdep</code></a> (uses graphviz).</p></li> 2976 graphs from the output of <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdep/README.html" target="_top"><code class="filename">pkgtools/pkgdep</code></a> (uses graphviz).</p></li>
2967<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>: The 2977<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>: The
2968 pkglint(1) program checks a pkgsrc entry for errors.</p></li> 2978 pkglint(1) program checks a pkgsrc entry for errors.</p></li>
2969<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/lintpkgsrc/README.html" target="_top"><code class="filename">pkgtools/lintpkgsrc</code></a>: The lintpkgsrc(1) program 2979<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/lintpkgsrc/README.html" target="_top"><code class="filename">pkgtools/lintpkgsrc</code></a>: The lintpkgsrc(1) program
2970 does various checks on the complete pkgsrc system.</p></li> 2980 does various checks on the complete pkgsrc system.</p></li>
2971<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgsurvey/README.html" target="_top"><code class="filename">pkgtools/pkgsurvey</code></a>: Report what 2981<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgsurvey/README.html" target="_top"><code class="filename">pkgtools/pkgsurvey</code></a>: Report what
2972 packages you have installed.</p></li> 2982 packages you have installed.</p></li>
2973</ul></div> 2983</ul></div>
2974<p>Utilities for people maintaining or creating individual packages:</p> 2984<p>Utilities for people maintaining or creating individual packages:</p>
2975<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2985<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2976<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a>: Automate 2986<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a>: Automate
2977 making and maintaining patches for a package (includes pkgdiff, 2987 making and maintaining patches for a package (includes pkgdiff,
2978 pkgvi, mkpatches, etc.).</p></li> 2988 pkgvi, mkpatches, etc.).</p></li>
2979<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a>: Aids in 2989<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a>: Aids in
2980 converting to pkgsrc.</p></li> 2990 converting to pkgsrc.</p></li>
2981</ul></div> 2991</ul></div>
2982<p>Utilities for people maintaining pkgsrc (or: more obscure pkg 2992<p>Utilities for people maintaining pkgsrc (or: more obscure pkg
2983utilities)</p> 2993utilities)</p>
2984<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 2994<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2985<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_comp/README.html" target="_top"><code class="filename">pkgtools/pkg_comp</code></a>: Build 2995<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_comp/README.html" target="_top"><code class="filename">pkgtools/pkg_comp</code></a>: Build
2986 packages in a chrooted area.</p></li> 2996 packages in a chrooted area.</p></li>
2987<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/libkver/README.html" target="_top"><code class="filename">pkgtools/libkver</code></a>: Spoof 2997<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/libkver/README.html" target="_top"><code class="filename">pkgtools/libkver</code></a>: Spoof
2988 kernel version for chrooted cross builds.</p></li> 2998 kernel version for chrooted cross builds.</p></li>
2989</ul></div> 2999</ul></div>
2990</div> 3000</div>
2991<div class="sect1"> 3001<div class="sect1">
2992<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3002<div class="titlepage"><div><div><h2 class="title" style="clear: both">
2993<a name="non-root-pkgsrc"></a>9.3. How to use pkgsrc as non-root</h2></div></div></div> 3003<a name="non-root-pkgsrc"></a>9.4. How to use pkgsrc as non-root</h2></div></div></div>
2994<p>If you want to use pkgsrc as non-root user, you can set some 3004<p>If you want to use pkgsrc as non-root user, you can set some
2995variables to make pkgsrc work under these conditions. At the very least, 3005variables to make pkgsrc work under these conditions. At the very least,
2996you need to set <code class="varname">UNPRIVILEGED</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>; this 3006you need to set <code class="varname">UNPRIVILEGED</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>; this
2997will turn on unprivileged mode and set multiple related variables to allow 3007will turn on unprivileged mode and set multiple related variables to allow
2998installation of packages as non-root.</p> 3008installation of packages as non-root.</p>
2999<p>In case the defaults are not enough, you may want to tune some other 3009<p>In case the defaults are not enough, you may want to tune some other
3000variables used. For example, if the automatic user/group detection leads 3010variables used. For example, if the automatic user/group detection leads
3001to incorrect values (or not the ones you would like to use), you can change 3011to incorrect values (or not the ones you would like to use), you can change
3002them by setting <code class="varname">UNPRIVILEGED_USER</code> and 3012them by setting <code class="varname">UNPRIVILEGED_USER</code> and
3003<code class="varname">UNPRIVILEGED_GROUP</code> respectively.</p> 3013<code class="varname">UNPRIVILEGED_GROUP</code> respectively.</p>
3004<p>As regards bootstrapping, please note that the 3014<p>As regards bootstrapping, please note that the
3005<span class="command"><strong>bootstrap</strong></span> script will ease non-root configuration when 3015<span class="command"><strong>bootstrap</strong></span> script will ease non-root configuration when
3006given the <span class="quote">&#8220;<span class="quote">--ignore-user-check</span>&#8221;</span> flag, as it will choose and 3016given the <span class="quote">&#8220;<span class="quote">--ignore-user-check</span>&#8221;</span> flag, as it will choose and
3007use multiple default directories under <code class="filename">~/pkg</code> as the 3017use multiple default directories under <code class="filename">~/pkg</code> as the
3008installation targets. These directories can be overridden by the 3018installation targets. These directories can be overridden by the
3009<span class="quote">&#8220;<span class="quote">--prefix</span>&#8221;</span> flag provided by the script, as well as some others 3019<span class="quote">&#8220;<span class="quote">--prefix</span>&#8221;</span> flag provided by the script, as well as some others
3010that allow finer tuning of the tree layout.</p> 3020that allow finer tuning of the tree layout.</p>
3011</div> 3021</div>
3012<div class="sect1"> 3022<div class="sect1">
3013<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3023<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3014<a name="resume-transfers"></a>9.4. How to resume transfers when fetching distfiles?</h2></div></div></div> 3024<a name="resume-transfers"></a>9.5. How to resume transfers when fetching distfiles?</h2></div></div></div>
3015<p>By default, resuming transfers in pkgsrc is disabled, but you can 3025<p>By default, resuming transfers in pkgsrc is disabled, but you can
3016enable this feature by adding the option 3026enable this feature by adding the option
3017<code class="varname">PKG_RESUME_TRANSFERS=YES</code> into 3027<code class="varname">PKG_RESUME_TRANSFERS=YES</code> into
3018<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. If, during a fetch step, an incomplete 3028<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. If, during a fetch step, an incomplete
3019distfile is found, pkgsrc will try to resume it.</p> 3029distfile is found, pkgsrc will try to resume it.</p>
3020<p>You can also 3030<p>You can also
3021use a different program than the platform default program by changing the 3031use a different program than the platform default program by changing the
3022<code class="varname">FETCH_USING</code> variable. You can specify the program by 3032<code class="varname">FETCH_USING</code> variable. You can specify the program by
3023using of ftp, fetch, wget or curl. Alternatively, fetching can be disabled 3033using of ftp, fetch, wget or curl. Alternatively, fetching can be disabled
3024by using the value manual. A value of custom disables the system defaults 3034by using the value manual. A value of custom disables the system defaults
3025and dependency tracking for the fetch program. In that case you have to 3035and dependency tracking for the fetch program. In that case you have to
3026provide <code class="varname">FETCH_CMD</code>, <code class="varname">FETCH_BEFORE_ARGS</code>, 3036provide <code class="varname">FETCH_CMD</code>, <code class="varname">FETCH_BEFORE_ARGS</code>,
3027<code class="varname">FETCH_RESUME_ARGS</code>, <code class="varname">FETCH_OUTPUT_ARGS</code>, 3037<code class="varname">FETCH_RESUME_ARGS</code>, <code class="varname">FETCH_OUTPUT_ARGS</code>,
3028<code class="varname">FETCH_AFTER_ARGS</code>.</p> 3038<code class="varname">FETCH_AFTER_ARGS</code>.</p>
3029<p>For example, if you want to use 3039<p>For example, if you want to use
3030<code class="filename">wget</code> to download, you'll have to use something 3040<code class="filename">wget</code> to download, you'll have to use something
3031like:</p> 3041like:</p>
3032<pre class="programlisting"> 3042<pre class="programlisting">
3033FETCH_USING= wget 3043FETCH_USING= wget
3034</pre> 3044</pre>
3035</div> 3045</div>
3036<div class="sect1"> 3046<div class="sect1">
3037<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3047<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3038<a name="x.org-from-pkgsrc"></a>9.5. How can I install/use modular X.org from pkgsrc?</h2></div></div></div> 3048<a name="x.org-from-pkgsrc"></a>9.6. How can I install/use modular X.org from pkgsrc?</h2></div></div></div>
3039<p>If you want to use modular X.org from pkgsrc instead of your system's own X11 3049<p>If you want to use modular X.org from pkgsrc instead of your system's own X11
3040(<code class="filename">/usr/X11R6</code>, <code class="filename">/usr/openwin</code>, ...) 3050(<code class="filename">/usr/X11R6</code>, <code class="filename">/usr/openwin</code>, ...)
3041you will have to add the following line into 3051you will have to add the following line into
3042<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>:</p> 3052<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>:</p>
3043<pre class="programlisting"> 3053<pre class="programlisting">
3044X11_TYPE=modular 3054X11_TYPE=modular
3045</pre> 3055</pre>
3046<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 3056<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
3047<h3 class="title">Note</h3> 3057<h3 class="title">Note</h3>
3048<p>The DragonFly operating system defaults to using modular X.org from pkgsrc. 3058<p>The DragonFly operating system defaults to using modular X.org from pkgsrc.
3049</p> 3059</p>
3050</div> 3060</div>
3051</div> 3061</div>
3052<div class="sect1"> 3062<div class="sect1">
3053<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3063<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3054<a name="fetch-behind-firewall"></a>9.6. How to fetch files from behind a firewall</h2></div></div></div> 3064<a name="fetch-behind-firewall"></a>9.7. How to fetch files from behind a firewall</h2></div></div></div>
3055<p>If you are sitting behind a firewall which does not allow direct 3065<p>If you are sitting behind a firewall which does not allow direct
3056connections to Internet hosts (i.e. non-NAT), you may specify the 3066connections to Internet hosts (i.e. non-NAT), you may specify the
3057relevant proxy hosts. This is done using an environment variable in the 3067relevant proxy hosts. This is done using an environment variable in the
3058form of a URL, e.g. in Amdahl, the machine 3068form of a URL, e.g. in Amdahl, the machine
3059<span class="quote">&#8220;<span class="quote">orpheus.amdahl.com</span>&#8221;</span> is one of the firewalls, and it uses 3069<span class="quote">&#8220;<span class="quote">orpheus.amdahl.com</span>&#8221;</span> is one of the firewalls, and it uses
3060port 80 as the proxy port number. So the proxy environment variables 3070port 80 as the proxy port number. So the proxy environment variables
3061are:</p> 3071are:</p>
3062<pre class="programlisting"> 3072<pre class="programlisting">
3063ftp_proxy=ftp://orpheus.amdahl.com:80/ 3073ftp_proxy=ftp://orpheus.amdahl.com:80/
3064http_proxy=http://orpheus.amdahl.com:80/ 3074http_proxy=http://orpheus.amdahl.com:80/
3065</pre> 3075</pre>
3066</div> 3076</div>
3067<div class="sect1"> 3077<div class="sect1">
3068<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3078<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3069<a name="fetch-https"></a>9.7. How to fetch files from HTTPS sites</h2></div></div></div> 3079<a name="fetch-https"></a>9.8. How to fetch files from HTTPS sites</h2></div></div></div>
3070<p>Some fetch tools are not prepared to support HTTPS by default 3080<p>Some fetch tools are not prepared to support HTTPS by default
3071(for example, the one in NetBSD 6.0), or the one installed by the 3081(for example, the one in NetBSD 6.0), or the one installed by the
3072pkgsrc bootstrap (to avoid an openssl dependency that low in the 3082pkgsrc bootstrap (to avoid an openssl dependency that low in the
3073dependency graph).</p> 3083dependency graph).</p>
3074<p>Usually you won't notice, because distribution files are 3084<p>Usually you won't notice, because distribution files are
3075mirrored weekly to <span class="quote">&#8220;<span class="quote">ftp.NetBSD.org</span>&#8221;</span>, but that might not 3085mirrored weekly to <span class="quote">&#8220;<span class="quote">ftp.NetBSD.org</span>&#8221;</span>, but that might not
3076be often enough if you are following pkgsrc-current. In that case, set 3086be often enough if you are following pkgsrc-current. In that case, set
3077<code class="varname">FETCH_USING</code> in your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file to 3087<code class="varname">FETCH_USING</code> in your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file to
3078<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 3088<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
3079with HTTPS support by default. Of course, these tools need to be 3089with HTTPS support by default. Of course, these tools need to be
3080installed before you can use them this way.</p> 3090installed before you can use them this way.</p>
3081</div> 3091</div>
3082<div class="sect1"> 3092<div class="sect1">
3083<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3093<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3084<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> 3094<a name="passive-ftp"></a>9.9. How do I tell <span class="command"><strong>make fetch</strong></span> to do passive FTP?</h2></div></div></div>
3085<p>This depends on which utility is used to retrieve distfiles. From 3095<p>This depends on which utility is used to retrieve distfiles. From
3086<code class="filename">bsd.pkg.mk</code>, <code class="varname">FETCH_CMD</code> is assigned 3096<code class="filename">bsd.pkg.mk</code>, <code class="varname">FETCH_CMD</code> is assigned
3087the first available command from the following list:</p> 3097the first available command from the following list:</p>
3088<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3098<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3089<li class="listitem"><p><code class="filename">${LOCALBASE}/bin/ftp</code></p></li> 3099<li class="listitem"><p><code class="filename">${LOCALBASE}/bin/ftp</code></p></li>
3090<li class="listitem"><p><code class="filename">/usr/bin/ftp</code></p></li> 3100<li class="listitem"><p><code class="filename">/usr/bin/ftp</code></p></li>
3091</ul></div> 3101</ul></div>
3092<p>On a default NetBSD installation, this will be 3102<p>On a default NetBSD installation, this will be
3093<code class="filename">/usr/bin/ftp</code>, which automatically tries passive 3103<code class="filename">/usr/bin/ftp</code>, which automatically tries passive
3094connections first, and falls back to active connections if the server 3104connections first, and falls back to active connections if the server
3095refuses to do passive. For the other tools, add the following to your 3105refuses to do passive. For the other tools, add the following to your
3096<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file: 3106<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file:
3097<code class="varname">PASSIVE_FETCH=1</code>.</p> 3107<code class="varname">PASSIVE_FETCH=1</code>.</p>
3098<p>Having that option present will prevent 3108<p>Having that option present will prevent
3099<code class="filename">/usr/bin/ftp</code> from falling back to active 3109<code class="filename">/usr/bin/ftp</code> from falling back to active
3100transfers.</p> 3110transfers.</p>
3101</div> 3111</div>
3102<div class="sect1"> 3112<div class="sect1">
3103<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3113<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3104<a name="fetching-all-distfiles"></a>9.9. How to fetch all distfiles at once</h2></div></div></div> 3114<a name="fetching-all-distfiles"></a>9.10. How to fetch all distfiles at once</h2></div></div></div>
3105<p>You would like to download all the distfiles in a single batch 3115<p>You would like to download all the distfiles in a single batch
3106from work or university, where you can't run a <span class="command"><strong>make 3116from work or university, where you can't run a <span class="command"><strong>make
3107fetch</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>, 3117fetch</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>,
3108but downloading the entire directory may not be appropriate.</p> 3118but downloading the entire directory may not be appropriate.</p>
3109<p>The answer here is to do a <span class="command"><strong>make fetch-list</strong></span> in 3119<p>The answer here is to do a <span class="command"><strong>make fetch-list</strong></span> in
3110<code class="filename">/usr/pkgsrc</code> or one of its subdirectories, carry the 3120<code class="filename">/usr/pkgsrc</code> or one of its subdirectories, carry the
3111resulting list to your machine at work/school and use it there. If you 3121resulting list to your machine at work/school and use it there. If you
3112don't have a NetBSD-compatible <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ftp+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">ftp</span>(1)</span></a> (like tnftp) at work, don't 3122don't have a NetBSD-compatible <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ftp+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">ftp</span>(1)</span></a> (like tnftp) at work, don't
3113forget to set <code class="varname">FETCH_CMD</code> to something that fetches a 3123forget to set <code class="varname">FETCH_CMD</code> to something that fetches a
3114URL:</p> 3124URL:</p>
3115<p>At home:</p> 3125<p>At home:</p>
3116<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cd /usr/pkgsrc</code></strong> 3126<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cd /usr/pkgsrc</code></strong>
3117<code class="prompt">%</code> <strong class="userinput"><code>make fetch-list FETCH_CMD=wget DISTDIR=/tmp/distfiles &gt;/tmp/fetch.sh</code></strong> 3127<code class="prompt">%</code> <strong class="userinput"><code>make fetch-list FETCH_CMD=wget DISTDIR=/tmp/distfiles &gt;/tmp/fetch.sh</code></strong>
3118<code class="prompt">%</code> <strong class="userinput"><code>scp /tmp/fetch.sh work:/tmp</code></strong></pre> 3128<code class="prompt">%</code> <strong class="userinput"><code>scp /tmp/fetch.sh work:/tmp</code></strong></pre>
3119<p>At work:</p> 3129<p>At work:</p>
3120<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>sh /tmp/fetch.sh</code></strong></pre> 3130<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>sh /tmp/fetch.sh</code></strong></pre>
3121<p>then tar up <code class="filename">/tmp/distfiles</code> and take it 3131<p>then tar up <code class="filename">/tmp/distfiles</code> and take it
3122home.</p> 3132home.</p>
3123<p>If you have a machine running NetBSD, and you want to get 3133<p>If you have a machine running NetBSD, and you want to get
3124<span class="emphasis"><em>all</em></span> distfiles (even ones that aren't for your 3134<span class="emphasis"><em>all</em></span> distfiles (even ones that aren't for your
3125machine architecture), you can do so by using the above-mentioned 3135machine architecture), you can do so by using the above-mentioned
3126<span class="command"><strong>make fetch-list</strong></span> approach, or fetch the distfiles 3136<span class="command"><strong>make fetch-list</strong></span> approach, or fetch the distfiles
3127directly by running:</p> 3137directly by running:</p>
3128<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make mirror-distfiles</code></strong></pre> 3138<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make mirror-distfiles</code></strong></pre>
3129<p>If you even decide to ignore 3139<p>If you even decide to ignore
3130<code class="varname">NO_{SRC,BIN}_ON_{FTP,CDROM}</code>, then you can get everything 3140<code class="varname">NO_{SRC,BIN}_ON_{FTP,CDROM}</code>, then you can get everything
3131by running:</p> 3141by running:</p>
3132<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make fetch NO_SKIP=yes</code></strong></pre> 3142<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make fetch NO_SKIP=yes</code></strong></pre>
3133</div> 3143</div>
3134<div class="sect1"> 3144<div class="sect1">
3135<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3145<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3136<a name="tmac.andoc-missing"></a>9.10. What does <span class="quote">&#8220;<span class="quote">Don't know how to make 3146<a name="tmac.andoc-missing"></a>9.11. What does <span class="quote">&#8220;<span class="quote">Don't know how to make
3137/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</h2></div></div></div> 3147/usr/share/tmac/tmac.andoc</span>&#8221;</span> mean?</h2></div></div></div>
3138<p>When compiling the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a> 3148<p>When compiling the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a>
3139package, you get the error from make that it doesn't know how to make 3149package, you get the error from make that it doesn't know how to make
3140<code class="filename">/usr/share/tmac/tmac.andoc</code>? This indicates that 3150<code class="filename">/usr/share/tmac/tmac.andoc</code>? This indicates that
3141you don't have installed the <span class="quote">&#8220;<span class="quote">text</span>&#8221;</span> set (nroff, ...) from 3151you don't have installed the <span class="quote">&#8220;<span class="quote">text</span>&#8221;</span> set (nroff, ...) from
3142the NetBSD base distribution on your machine. It is recommended to do 3152the NetBSD base distribution on your machine. It is recommended to do
3143that to format man pages.</p> 3153that to format man pages.</p>
3144<p>In the case of the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a> package, you 3154<p>In the case of the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a> package, you
3145can get away with setting <code class="varname">NOMAN=YES</code> either in the 3155can get away with setting <code class="varname">NOMAN=YES</code> either in the
3146environment or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p> 3156environment or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p>
3147</div> 3157</div>
3148<div class="sect1"> 3158<div class="sect1">
3149<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3159<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3150<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> 3160<a name="bsd.own.mk-missing"></a>9.12. What does <span class="quote">&#8220;<span class="quote">Could not find bsd.own.mk</span>&#8221;</span> mean?</h2></div></div></div>
3151<p>You didn't install the compiler set, <code class="filename">comp.tgz</code>, 3161<p>You didn't install the compiler set, <code class="filename">comp.tgz</code>,
3152when you installed your NetBSD machine. Please get and install it, by 3162when you installed your NetBSD machine. Please get and install it, by
3153extracting it in <code class="filename">/</code>:</p> 3163extracting it in <code class="filename">/</code>:</p>
3154<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cd /</code></strong> 3164<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cd /</code></strong>
3155<code class="prompt">#</code> <strong class="userinput"><code>tar --unlink -zxvpf .../comp.tgz</code></strong></pre> 3165<code class="prompt">#</code> <strong class="userinput"><code>tar --unlink -zxvpf .../comp.tgz</code></strong></pre>
3156<p><code class="filename">comp.tgz</code> is part of every NetBSD release. Get 3166<p><code class="filename">comp.tgz</code> is part of every NetBSD release. Get
3157the one that corresponds to your release (determine via <span class="command"><strong>uname 3167the one that corresponds to your release (determine via <span class="command"><strong>uname
3158-r</strong></span>).</p> 3168-r</strong></span>).</p>
3159</div> 3169</div>
3160<div class="sect1"> 3170<div class="sect1">
3161<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3171<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3162<a name="using-sudo-with-pkgsrc"></a>9.12. Using 'sudo' with pkgsrc</h2></div></div></div> 3172<a name="using-sudo-with-pkgsrc"></a>9.13. Using 'sudo' with pkgsrc</h2></div></div></div>
3163<p>When installing packages as non-root user and using the just-in-time 3173<p>When installing packages as non-root user and using the just-in-time
3164<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?su+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">su</span>(1)</span></a> feature of pkgsrc, it can become annoying to type in the root 3174<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?su+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">su</span>(1)</span></a> feature of pkgsrc, it can become annoying to type in the root
3165password for each required package installed. To avoid this, the sudo 3175password for each required package installed. To avoid this, the sudo
3166package can be used, which does password caching over a limited time. To 3176package can be used, which does password caching over a limited time. To
3167use it, install sudo (either as binary package or from 3177use it, install sudo (either as binary package or from
3168<a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/security/sudo/README.html" target="_top"><code class="filename">security/sudo</code></a>) and then put the 3178<a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/security/sudo/README.html" target="_top"><code class="filename">security/sudo</code></a>) and then put the
3169following into your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, somewhere 3179following into your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, somewhere
3170<span class="emphasis"><em>after</em></span> the definition of the 3180<span class="emphasis"><em>after</em></span> the definition of the
3171<code class="varname">LOCALBASE</code> variable:</p> 3181<code class="varname">LOCALBASE</code> variable:</p>
3172<pre class="programlisting"> 3182<pre class="programlisting">
3173.if exists(${LOCALBASE}/bin/sudo) 3183.if exists(${LOCALBASE}/bin/sudo)
3174SU_CMD= ${LOCALBASE}/bin/sudo /bin/sh -c 3184SU_CMD= ${LOCALBASE}/bin/sudo /bin/sh -c
3175.endif 3185.endif
3176</pre> 3186</pre>
3177</div> 3187</div>
3178<div class="sect1"> 3188<div class="sect1">
3179<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3189<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3180<a name="faq.conf"></a>9.13. How do I change the location of configuration files?</h2></div></div></div> 3190<a name="faq.conf"></a>9.14. How do I change the location of configuration files?</h2></div></div></div>
3181<p>As the system administrator, you can choose where configuration files 3191<p>As the system administrator, you can choose where configuration files
3182are installed. The default settings make all these files go into 3192are installed. The default settings make all these files go into
3183<code class="filename">${PREFIX}/etc</code> or some of its subdirectories; this may 3193<code class="filename">${PREFIX}/etc</code> or some of its subdirectories; this may
3184be suboptimal depending on your expectations (e.g., a read-only, 3194be suboptimal depending on your expectations (e.g., a read-only,
3185NFS-exported <code class="varname">PREFIX</code> with a need of per-machine 3195NFS-exported <code class="varname">PREFIX</code> with a need of per-machine
3186configuration of the provided packages).</p> 3196configuration of the provided packages).</p>
3187<p>In order to change the defaults, you can modify the 3197<p>In order to change the defaults, you can modify the
3188<code class="varname">PKG_SYSCONFBASE</code> variable (in 3198<code class="varname">PKG_SYSCONFBASE</code> variable (in
3189<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>) to point to your preferred configuration 3199<a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>) to point to your preferred configuration
3190directory; some common examples include <code class="filename">/etc</code> or 3200directory; some common examples include <code class="filename">/etc</code> or
3191<code class="filename">/etc/pkg</code>.</p> 3201<code class="filename">/etc/pkg</code>.</p>
3192<p>Furthermore, you can change this value on a per-package basis by 3202<p>Furthermore, you can change this value on a per-package basis by
3193setting the <code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code> variable. 3203setting the <code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code> variable.
3194<code class="varname">PKG_SYSCONFVAR</code>'s value usually matches the name of the 3204<code class="varname">PKG_SYSCONFVAR</code>'s value usually matches the name of the
3195package you would like to modify, that is, the contents of 3205package you would like to modify, that is, the contents of
3196<code class="varname">PKGBASE</code>.</p> 3206<code class="varname">PKGBASE</code>.</p>
3197<p>Note that after changing these settings, you must rebuild and 3207<p>Note that after changing these settings, you must rebuild and
3198reinstall any affected packages.</p> 3208reinstall any affected packages.</p>
3199</div> 3209</div>
3200<div class="sect1"> 3210<div class="sect1">
3201<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3211<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3202<a name="audit-packages"></a>9.14. Automated security checks</h2></div></div></div> 3212<a name="audit-packages"></a>9.15. Automated security checks</h2></div></div></div>
3203<p>Please be aware that there can often be bugs in third-party software, 3213<p>Please be aware that there can often be bugs in third-party software,
3204and some of these bugs can leave a machine vulnerable to exploitation by 3214and some of these bugs can leave a machine vulnerable to exploitation by
3205attackers. In an effort to lessen the exposure, the NetBSD packages team 3215attackers. In an effort to lessen the exposure, the NetBSD packages team
3206maintains a database of known-exploits to packages which have at one time 3216maintains a database of known-exploits to packages which have at one time
3207been included in pkgsrc. The database can be downloaded automatically, and 3217been included in pkgsrc. The database can be downloaded automatically, and
3208a security audit of all packages installed on a system can take place. To 3218a security audit of all packages installed on a system can take place. To
3209do this, refer to the following two tools (installed as part of the 3219do this, refer to the following two tools (installed as part of the
3210<a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a> package):</p> 3220<a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_install/README.html" target="_top"><code class="filename">pkgtools/pkg_install</code></a> package):</p>
3211<div class="orderedlist"><ol class="orderedlist" type="1"> 3221<div class="orderedlist"><ol class="orderedlist" type="1">
3212<li class="listitem"> 3222<li class="listitem">
3213<p><span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>, an easy way to 3223<p><span class="command"><strong>pkg_admin fetch-pkg-vulnerabilities</strong></span>, an easy way to
3214 download a list of the security vulnerabilities information. This list 3224 download a list of the security vulnerabilities information. This list
3215 is kept up to date by the pkgsrc security team, and is distributed 3225 is kept up to date by the pkgsrc security team, and is distributed
3216 from the NetBSD ftp server:</p> 3226 from the NetBSD ftp server:</p>
3217<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> 3227<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>
3218</li> 3228</li>
3219<li class="listitem"><p><span class="command"><strong>pkg_admin audit</strong></span>, an easy way to audit the 3229<li class="listitem"><p><span class="command"><strong>pkg_admin audit</strong></span>, an easy way to audit the
3220 current machine, checking each known vulnerability. If a 3230 current machine, checking each known vulnerability. If a
3221 vulnerable package is installed, it will be shown by output to stdout, 3231 vulnerable package is installed, it will be shown by output to stdout,
3222 including a description of the type of vulnerability, and a URL 3232 including a description of the type of vulnerability, and a URL
3223 containing more information.</p></li> 3233 containing more information.</p></li>
3224</ol></div> 3234</ol></div>
3225<p>Use of these tools is strongly recommended! After 3235<p>Use of these tools is strongly recommended! After
3226<span class="quote">&#8220;<span class="quote">pkg_install</span>&#8221;</span> is installed, please read 3236<span class="quote">&#8220;<span class="quote">pkg_install</span>&#8221;</span> is installed, please read
3227the package's message, which you can get by running <strong class="userinput"><code>pkg_info -D 3237the package's message, which you can get by running <strong class="userinput"><code>pkg_info -D
3228pkg_install</code></strong>.</p> 3238pkg_install</code></strong>.</p>
3229<p>If this package is installed, pkgsrc builds will use it to 3239<p>If this package is installed, pkgsrc builds will use it to
3230perform a security check before building any package. See <a class="xref" href="#variables-affecting-build" title="5.2. Variables affecting the build process">Section 5.2, &#8220;Variables affecting the build process&#8221;</a> for ways to control this 3240perform a security check before building any package. See <a class="xref" href="#variables-affecting-build" title="5.2. Variables affecting the build process">Section 5.2, &#8220;Variables affecting the build process&#8221;</a> for ways to control this
3231check.</p> 3241check.</p>
3232</div> 3242</div>
3233<div class="sect1"> 3243<div class="sect1">
3234<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3244<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3235<a name="ufaq-cflags"></a>9.15. Why do some packages ignore my <code class="varname">CFLAGS</code>?</h2></div></div></div> 3245<a name="ufaq-cflags"></a>9.16. Why do some packages ignore my <code class="varname">CFLAGS</code>?</h2></div></div></div>
3236<p>When you add your own preferences to the 3246<p>When you add your own preferences to the
3237 <code class="varname">CFLAGS</code> variable in your 3247 <code class="varname">CFLAGS</code> variable in your
3238 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, these flags are passed in 3248 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, these flags are passed in
3239 environment variables to the <code class="filename">./configure</code> 3249 environment variables to the <code class="filename">./configure</code>
3240 scripts and to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>. Some package authors ignore the 3250 scripts and to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>. Some package authors ignore the
3241 <code class="varname">CFLAGS</code> from the environment variable by 3251 <code class="varname">CFLAGS</code> from the environment variable by
3242 overriding them in the <code class="filename">Makefile</code>s of their 3252 overriding them in the <code class="filename">Makefile</code>s of their
3243 package.</p> 3253 package.</p>
3244<p>Currently there is no solution to this problem. If you 3254<p>Currently there is no solution to this problem. If you
3245 really need the package to use your <code class="varname">CFLAGS</code> 3255 really need the package to use your <code class="varname">CFLAGS</code>
3246 you should run <span class="command"><strong>make patch</strong></span> in the package 3256 you should run <span class="command"><strong>make patch</strong></span> in the package
3247 directory and then inspect any <code class="filename">Makefile</code> and 3257 directory and then inspect any <code class="filename">Makefile</code> and
3248 <code class="filename">Makefile.in</code> for whether they define 3258 <code class="filename">Makefile.in</code> for whether they define
3249 <code class="varname">CFLAGS</code> explicitly. Usually you can remove 3259 <code class="varname">CFLAGS</code> explicitly. Usually you can remove
3250 these lines. But be aware that some <span class="quote">&#8220;<span class="quote">smart</span>&#8221;</span> 3260 these lines. But be aware that some <span class="quote">&#8220;<span class="quote">smart</span>&#8221;</span>
3251 programmers write so bad code that it only works for the 3261 programmers write so bad code that it only works for the
3252 specific combination of <code class="varname">CFLAGS</code> they have 3262 specific combination of <code class="varname">CFLAGS</code> they have
3253 chosen.</p> 3263 chosen.</p>
3254</div> 3264</div>
3255<div class="sect1"> 3265<div class="sect1">
3256<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3266<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3257<a name="ufaq-fail"></a>9.16. A package does not build. What shall I do?</h2></div></div></div> 3267<a name="ufaq-fail"></a>9.17. A package does not build. What shall I do?</h2></div></div></div>
3258<div class="procedure"><ol class="procedure" type="1"> 3268<div class="procedure"><ol class="procedure" type="1">
3259<li class="step"><p>Make sure that your copy of pkgsrc is consistent. A 3269<li class="step"><p>Make sure that your copy of pkgsrc is consistent. A
3260 case that occurs often is that people only update pkgsrc in 3270 case that occurs often is that people only update pkgsrc in
3261 parts, because of performance reasons. Since pkgsrc is one large 3271 parts, because of performance reasons. Since pkgsrc is one large
3262 system, not a collection of many small systems, there are 3272 system, not a collection of many small systems, there are
3263 sometimes changes that only work when the whole pkgsrc tree is 3273 sometimes changes that only work when the whole pkgsrc tree is
3264 updated.</p></li> 3274 updated.</p></li>
3265<li class="step"><p>Make sure that you don't have any CVS conflicts. 3275<li class="step"><p>Make sure that you don't have any CVS conflicts.
3266 Search for <span class="quote">&#8220;<span class="quote">&lt;&lt;&lt;&lt;&lt;&lt;</span>&#8221;</span> or 3276 Search for <span class="quote">&#8220;<span class="quote">&lt;&lt;&lt;&lt;&lt;&lt;</span>&#8221;</span> or
3267 <span class="quote">&#8220;<span class="quote">&gt;&gt;&gt;&gt;&gt;&gt;</span>&#8221;</span> in all your pkgsrc 3277 <span class="quote">&#8220;<span class="quote">&gt;&gt;&gt;&gt;&gt;&gt;</span>&#8221;</span> in all your pkgsrc
3268 files.</p></li> 3278 files.</p></li>
3269<li class="step"><p>Make sure that you don't have old copies of the packages 3279<li class="step"><p>Make sure that you don't have old copies of the packages
3270 extracted. Run <span class="command"><strong>make clean clean-depends</strong></span> to 3280 extracted. Run <span class="command"><strong>make clean clean-depends</strong></span> to
3271 verify this.</p></li> 3281 verify this.</p></li>
3272<li class="step"><p>If the problem still exists, write a mail to the 3282<li class="step"><p>If the problem still exists, write a mail to the
3273 <code class="literal">pkgsrc-users</code> mailing list.</p></li> 3283 <code class="literal">pkgsrc-users</code> mailing list.</p></li>
3274</ol></div> 3284</ol></div>
3275</div> 3285</div>
3276<div class="sect1"> 3286<div class="sect1">
3277<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3287<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3278<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> 3288<a name="faq.rcs-conflicts"></a>9.18. 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>
3279<p>You have modified a file from pkgsrc, and someone else has 3289<p>You have modified a file from pkgsrc, and someone else has
3280modified that same file afterwards in the CVS repository. Both changes 3290modified that same file afterwards in the CVS repository. Both changes
3281are in the same region of the file, so when you updated pkgsrc, the 3291are in the same region of the file, so when you updated pkgsrc, the
3282<code class="literal">cvs</code> command marked the conflicting changes in the 3292<code class="literal">cvs</code> command marked the conflicting changes in the
3283file. Because of these markers, the file is no longer a valid 3293file. Because of these markers, the file is no longer a valid
3284<code class="filename">Makefile</code>.</p> 3294<code class="filename">Makefile</code>.</p>
3285<p>Have a look at that file, and if you don't need your local changes 3295<p>Have a look at that file, and if you don't need your local changes
3286anymore, you can remove that file and run <span class="command"><strong>cvs -q update 3296anymore, you can remove that file and run <span class="command"><strong>cvs -q update
3287-dP</strong></span> in that directory to download the current version.</p> 3297-dP</strong></span> in that directory to download the current version.</p>
3288</div> 3298</div>
3289</div> 3299</div>
3290</div> 3300</div>
3291<div class="part"> 3301<div class="part">
3292<div class="titlepage"><div><div><h1 class="title"> 3302<div class="titlepage"><div><div><h1 class="title">
3293<a name="developers-guide"></a>Part II. The pkgsrc developer's guide</h1></div></div></div> 3303<a name="developers-guide"></a>Part II. The pkgsrc developer's guide</h1></div></div></div>
3294<div class="partintro"> 3304<div class="partintro">
3295<div></div> 3305<div></div>
3296<p>This part of the book deals with creating and 3306<p>This part of the book deals with creating and
3297 modifying packages. It starts with a <span class="quote">&#8220;<span class="quote">HOWTO</span>&#8221;</span>-like 3307 modifying packages. It starts with a <span class="quote">&#8220;<span class="quote">HOWTO</span>&#8221;</span>-like
3298 guide on creating a new package. The remaining chapters are more 3308 guide on creating a new package. The remaining chapters are more
3299 like a reference manual for pkgsrc.</p> 3309 like a reference manual for pkgsrc.</p>
3300<div class="toc"> 3310<div class="toc">
3301<p><b>Table of Contents</b></p> 3311<p><b>Table of Contents</b></p>
3302<dl> 3312<dl>
3303<dt><span class="chapter"><a href="#creating">10. Creating a new pkgsrc package from scratch</a></span></dt> 3313<dt><span class="chapter"><a href="#creating">10. Creating a new pkgsrc package from scratch</a></span></dt>
3304<dd><dl> 3314<dd><dl>
3305<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt> 3315<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt>
3306<dd><dl> 3316<dd><dl>
3307<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt> 3317<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt>
3308<dt><span class="sect2"><a href="#creating.kde-app">10.1.2. KDE3 applications</a></span></dt> 3318<dt><span class="sect2"><a href="#creating.kde-app">10.1.2. KDE3 applications</a></span></dt>
3309<dt><span class="sect2"><a href="#creating.python-module">10.1.3. Python modules and programs</a></span></dt> 3319<dt><span class="sect2"><a href="#creating.python-module">10.1.3. Python modules and programs</a></span></dt>
3310</dl></dd> 3320</dl></dd>
3311<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt> 3321<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt>
3312<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> 3322<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>
3313</dl></dd> 3323</dl></dd>
3314<dt><span class="chapter"><a href="#components">11. Package components - files, directories and contents</a></span></dt> 3324<dt><span class="chapter"><a href="#components">11. Package components - files, directories and contents</a></span></dt>
3315<dd><dl> 3325<dd><dl>
3316<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt> 3326<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt>
3317<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt> 3327<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt>
3318<dt><span class="sect1"><a href="#components.patches">11.3. patches/*</a></span></dt> 3328<dt><span class="sect1"><a href="#components.patches">11.3. patches/*</a></span></dt>
3319<dd><dl> 3329<dd><dl>
3320<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt> 3330<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt>
3321<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt> 3331<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt>
3322<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt> 3332<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt>
3323<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt> 3333<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt>
3324<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt> 3334<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt>
3325</dl></dd> 3335</dl></dd>
3326<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt> 3336<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt>
3327<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt> 3337<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt>
3328<dd><dl> 3338<dd><dl>
3329<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt> 3339<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt>
3330<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt> 3340<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt>
3331<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt> 3341<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt>
3332</dl></dd> 3342</dl></dd>
3333<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt> 3343<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt>
3334<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt> 3344<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt>
3335</dl></dd> 3345</dl></dd>
3336<dt><span class="chapter"><a href="#makefile">12. Programming in <code class="filename">Makefile</code>s</a></span></dt> 3346<dt><span class="chapter"><a href="#makefile">12. Programming in <code class="filename">Makefile</code>s</a></span></dt>
3337<dd><dl> 3347<dd><dl>
3338<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt> 3348<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt>
3339<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt> 3349<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt>
3340<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd> 3350<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd>
3341<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt> 3351<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt>
3342<dd><dl> 3352<dd><dl>
3343<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt> 3353<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt>
3344<dt><span class="sect2"><a href="#converting-internal-to-external">12.3.2. Converting an internal list into an external list</a></span></dt> 3354<dt><span class="sect2"><a href="#converting-internal-to-external">12.3.2. Converting an internal list into an external list</a></span></dt>
3345<dt><span class="sect2"><a href="#passing-variable-to-shell">12.3.3. Passing variables to a shell command</a></span></dt> 3355<dt><span class="sect2"><a href="#passing-variable-to-shell">12.3.3. Passing variables to a shell command</a></span></dt>
3346<dt><span class="sect2"><a href="#quoting-guideline">12.3.4. Quoting guideline</a></span></dt> 3356<dt><span class="sect2"><a href="#quoting-guideline">12.3.4. Quoting guideline</a></span></dt>
3347<dt><span class="sect2"><a href="#bsd-make-bug-workaround">12.3.5. Workaround for a bug in BSD Make</a></span></dt> 3357<dt><span class="sect2"><a href="#bsd-make-bug-workaround">12.3.5. Workaround for a bug in BSD Make</a></span></dt>
3348</dl></dd> 3358</dl></dd>
3349</dl></dd> 3359</dl></dd>
3350<dt><span class="chapter"><a href="#plist">13. PLIST issues</a></span></dt> 3360<dt><span class="chapter"><a href="#plist">13. PLIST issues</a></span></dt>
3351<dd><dl> 3361<dd><dl>
3352<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt> 3362<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt>
3353<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt> 3363<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt>
3354<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> 3364<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>
3355<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt> 3365<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt>
3356<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt> 3366<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt>
3357<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt> 3367<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt>
3358<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt> 3368<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt>
3359<dt><span class="sect1"><a href="#faq.common-dirs">13.8. Sharing directories between packages</a></span></dt> 3369<dt><span class="sect1"><a href="#faq.common-dirs">13.8. Sharing directories between packages</a></span></dt>
3360</dl></dd> 3370</dl></dd>
3361<dt><span class="chapter"><a href="#buildlink">14. Buildlink methodology</a></span></dt> 3371<dt><span class="chapter"><a href="#buildlink">14. Buildlink methodology</a></span></dt>
3362<dd><dl> 3372<dd><dl>
3363<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt> 3373<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt>
3364<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt> 3374<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt>
3365<dd><dl> 3375<dd><dl>
3366<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt> 3376<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt>
3367<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating 3377<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating
3368 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 3378 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
3369 and 3379 and
3370 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 3380 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
3371 in <code class="filename">buildlink3.mk</code> files</a></span></dt> 3381 in <code class="filename">buildlink3.mk</code> files</a></span></dt>
3372</dl></dd> 3382</dl></dd>
3373<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt> 3383<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt>
3374<dd><dl> 3384<dd><dl>
3375<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> 3385<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>
3376<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt> 3386<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt>
3377</dl></dd> 3387</dl></dd>
3378</dl></dd> 3388</dl></dd>
3379<dt><span class="chapter"><a href="#pkginstall">15. The pkginstall framework</a></span></dt> 3389<dt><span class="chapter"><a href="#pkginstall">15. The pkginstall framework</a></span></dt>
3380<dd><dl> 3390<dd><dl>
3381<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt> 3391<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt>
3382<dd><dl> 3392<dd><dl>
3383<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt> 3393<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt>
3384<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt> 3394<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt>
3385</dl></dd> 3395</dl></dd>
3386<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt> 3396<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt>
3387<dd><dl> 3397<dd><dl>
3388<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt> 3398<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt>
3389<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt> 3399<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt>
3390<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt> 3400<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt>
3391<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt> 3401<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt>
3392</dl></dd> 3402</dl></dd>
3393<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt> 3403<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt>
3394<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> 3404<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>
3395<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt> 3405<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt>
3396<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt> 3406<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt>
3397<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd> 3407<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd>
3398<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt> 3408<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt>
3399<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> 3409<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>
3400</dl></dd> 3410</dl></dd>
3401<dt><span class="chapter"><a href="#options">16. Options handling</a></span></dt> 3411<dt><span class="chapter"><a href="#options">16. Options handling</a></span></dt>
3402<dd><dl> 3412<dd><dl>
3403<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt> 3413<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt>
3404<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> 3414<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>
3405<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt> 3415<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt>
3406<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt> 3416<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt>
3407</dl></dd> 3417</dl></dd>
3408<dt><span class="chapter"><a href="#build">17. The build process</a></span></dt> 3418<dt><span class="chapter"><a href="#build">17. The build process</a></span></dt>
3409<dd><dl> 3419<dd><dl>
3410<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt> 3420<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt>
3411<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt> 3421<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt>
3412<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt> 3422<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt>
3413<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt> 3423<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt>
3414<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 3424<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
3415<dd><dl> 3425<dd><dl>
3416<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt> 3426<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt>
3417<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt> 3427<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt>
3418</dl></dd> 3428</dl></dd>
3419<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt> 3429<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt>
3420<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt> 3430<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt>
3421<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt> 3431<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt>
3422<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt> 3432<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt>
3423<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt> 3433<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt>
3424<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 3434<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
3425<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 3435<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
3426<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt> 3436<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt>
3427<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 3437<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
3428<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt> 3438<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt>
3429<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt> 3439<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt>
3430<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt> 3440<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt>
3431</dl></dd> 3441</dl></dd>
3432<dt><span class="chapter"><a href="#tools">18. Tools needed for building or running</a></span></dt> 3442<dt><span class="chapter"><a href="#tools">18. Tools needed for building or running</a></span></dt>
3433<dd><dl> 3443<dd><dl>
3434<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt> 3444<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt>
3435<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt> 3445<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt>
3436<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt> 3446<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt>
3437<dt><span class="sect1"><a href="#tools.questions">18.4. Questions regarding the tools</a></span></dt> 3447<dt><span class="sect1"><a href="#tools.questions">18.4. Questions regarding the tools</a></span></dt>
3438</dl></dd> 3448</dl></dd>
3439<dt><span class="chapter"><a href="#fixes">19. Making your package work</a></span></dt> 3449<dt><span class="chapter"><a href="#fixes">19. Making your package work</a></span></dt>
3440<dd><dl> 3450<dd><dl>
3441<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt> 3451<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt>
3442<dd><dl> 3452<dd><dl>
3443<dt><span class="sect2"><a href="#portability-of-packages">19.1.1. Portability of packages</a></span></dt> 3453<dt><span class="sect2"><a href="#portability-of-packages">19.1.1. Portability of packages</a></span></dt>
3444<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.2. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt> 3454<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.2. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt>
3445<dt><span class="sect2"><a href="#user-interaction">19.1.3. User interaction</a></span></dt> 3455<dt><span class="sect2"><a href="#user-interaction">19.1.3. User interaction</a></span></dt>
3446<dt><span class="sect2"><a href="#handling-licenses">19.1.4. Handling licenses</a></span></dt> 3456<dt><span class="sect2"><a href="#handling-licenses">19.1.4. Handling licenses</a></span></dt>
3447<dt><span class="sect2"><a href="#restricted-packages">19.1.5. Restricted packages</a></span></dt> 3457<dt><span class="sect2"><a href="#restricted-packages">19.1.5. Restricted packages</a></span></dt>
3448<dt><span class="sect2"><a href="#dependencies">19.1.6. Handling dependencies</a></span></dt> 3458<dt><span class="sect2"><a href="#dependencies">19.1.6. Handling dependencies</a></span></dt>
3449<dt><span class="sect2"><a href="#conflicts">19.1.7. Handling conflicts with other packages</a></span></dt> 3459<dt><span class="sect2"><a href="#conflicts">19.1.7. Handling conflicts with other packages</a></span></dt>
3450<dt><span class="sect2"><a href="#not-building-packages">19.1.8. Packages that cannot or should not be built</a></span></dt> 3460<dt><span class="sect2"><a href="#not-building-packages">19.1.8. Packages that cannot or should not be built</a></span></dt>
3451<dt><span class="sect2"><a href="#undeletable-packages">19.1.9. Packages which should not be deleted, once installed</a></span></dt> 3461<dt><span class="sect2"><a href="#undeletable-packages">19.1.9. Packages which should not be deleted, once installed</a></span></dt>
3452<dt><span class="sect2"><a href="#security-handling">19.1.10. Handling packages with security problems</a></span></dt> 3462<dt><span class="sect2"><a href="#security-handling">19.1.10. Handling packages with security problems</a></span></dt>
3453<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.11. How to handle incrementing versions when fixing an existing package</a></span></dt> 3463<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.11. How to handle incrementing versions when fixing an existing package</a></span></dt>
3454<dt><span class="sect2"><a href="#fixes.subst">19.1.12. Substituting variable text in the package files (the SUBST framework)</a></span></dt> 3464<dt><span class="sect2"><a href="#fixes.subst">19.1.12. Substituting variable text in the package files (the SUBST framework)</a></span></dt>
3455</dl></dd> 3465</dl></dd>
3456<dt><span class="sect1"><a href="#fixes.fetch">19.2. Fixing problems in the <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 3466<dt><span class="sect1"><a href="#fixes.fetch">19.2. Fixing problems in the <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
3457<dd><dl> 3467<dd><dl>
3458<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt> 3468<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt>
3459<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> 3469<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>
3460</dl></dd> 3470</dl></dd>
3461<dt><span class="sect1"><a href="#fixes.configure">19.3. Fixing problems in the <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 3471<dt><span class="sect1"><a href="#fixes.configure">19.3. Fixing problems in the <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
3462<dd><dl> 3472<dd><dl>
3463<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt> 3473<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt>
3464<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt> 3474<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt>
3465<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt> 3475<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt>
3466</dl></dd> 3476</dl></dd>
3467<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt> 3477<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt>
3468<dd><dl> 3478<dd><dl>
3469<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt> 3479<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt>
3470<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt> 3480<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt>
3471<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt> 3481<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt>
3472<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt> 3482<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt>
3473<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt> 3483<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt>
3474</dl></dd> 3484</dl></dd>
3475<dt><span class="sect1"><a href="#fixes.build">19.5. Fixing problems in the <span class="emphasis"><em>build</em></span> phase</a></span></dt> 3485<dt><span class="sect1"><a href="#fixes.build">19.5. Fixing problems in the <span class="emphasis"><em>build</em></span> phase</a></span></dt>
3476<dd><dl> 3486<dd><dl>
3477<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt> 3487<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt>
3478<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt> 3488<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt>
3479<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> 3489<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>
3480<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt> 3490<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt>
3481</dl></dd> 3491</dl></dd>
3482<dt><span class="sect1"><a href="#fixes.install">19.6. Fixing problems in the <span class="emphasis"><em>install</em></span> phase</a></span></dt> 3492<dt><span class="sect1"><a href="#fixes.install">19.6. Fixing problems in the <span class="emphasis"><em>install</em></span> phase</a></span></dt>
3483<dd><dl> 3493<dd><dl>
3484<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt> 3494<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt>
3485<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt> 3495<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt>
3486<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt> 3496<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt>
3487<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt> 3497<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt>
3488<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt> 3498<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt>
3489<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt> 3499<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt>
3490<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt> 3500<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt>
3491<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt> 3501<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt>
3492<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt> 3502<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt>
3493<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt> 3503<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt>
3494<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt> 3504<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt>
3495<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt> 3505<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt>
3496<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt> 3506<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt>
3497<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt> 3507<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt>
3498<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt> 3508<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt>
3499<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt> 3509<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt>
3500<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt> 3510<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt>
3501<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in 3511<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in
3502 emulation</a></span></dt> 3512 emulation</a></span></dt>
3503<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt> 3513<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt>
3504<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt> 3514<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt>
3505</dl></dd> 3515</dl></dd>
3506<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt> 3516<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt>
3507</dl></dd> 3517</dl></dd>
3508<dt><span class="chapter"><a href="#debug">20. Debugging</a></span></dt> 3518<dt><span class="chapter"><a href="#debug">20. Debugging</a></span></dt>
3509<dt><span class="chapter"><a href="#submit">21. Submitting and Committing</a></span></dt> 3519<dt><span class="chapter"><a href="#submit">21. Submitting and Committing</a></span></dt>
3510<dd><dl> 3520<dd><dl>
3511<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt> 3521<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt>
3512<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt> 3522<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt>
3513<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt> 3523<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt>
3514<dt><span class="sect1"><a href="#committing-importing">21.4. Committing: Adding a package to CVS</a></span></dt> 3524<dt><span class="sect1"><a href="#committing-importing">21.4. Committing: Adding a package to CVS</a></span></dt>
3515<dt><span class="sect1"><a href="#updating-package">21.5. Updating a package to a newer version</a></span></dt> 3525<dt><span class="sect1"><a href="#updating-package">21.5. Updating a package to a newer version</a></span></dt>
3516<dt><span class="sect1"><a href="#renaming-package">21.6. Renaming a package in pkgsrc</a></span></dt> 3526<dt><span class="sect1"><a href="#renaming-package">21.6. Renaming a package in pkgsrc</a></span></dt>
3517<dt><span class="sect1"><a href="#moving-package">21.7. Moving a package in pkgsrc</a></span></dt> 3527<dt><span class="sect1"><a href="#moving-package">21.7. Moving a package in pkgsrc</a></span></dt>
3518</dl></dd> 3528</dl></dd>
3519<dt><span class="chapter"><a href="#devfaq">22. Frequently Asked Questions</a></span></dt> 3529<dt><span class="chapter"><a href="#devfaq">22. Frequently Asked Questions</a></span></dt>
3520<dt><span class="chapter"><a href="#gnome">23. GNOME packaging and porting</a></span></dt> 3530<dt><span class="chapter"><a href="#gnome">23. GNOME packaging and porting</a></span></dt>
3521<dd><dl> 3531<dd><dl>
3522<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt> 3532<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt>
3523<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt> 3533<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt>
3524<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt> 3534<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt>
3525<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt> 3535<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt>
3526</dl></dd> 3536</dl></dd>
3527</dl> 3537</dl>
3528</div> 3538</div>
3529</div> 3539</div>
3530<div class="chapter"> 3540<div class="chapter">
3531<div class="titlepage"><div><div><h2 class="title"> 3541<div class="titlepage"><div><div><h2 class="title">
3532<a name="creating"></a>Chapter 10. Creating a new pkgsrc package from scratch</h2></div></div></div> 3542<a name="creating"></a>Chapter 10. Creating a new pkgsrc package from scratch</h2></div></div></div>
3533<div class="toc"> 3543<div class="toc">
3534<p><b>Table of Contents</b></p> 3544<p><b>Table of Contents</b></p>
3535<dl> 3545<dl>
3536<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt> 3546<dt><span class="sect1"><a href="#creating.common">10.1. Common types of packages</a></span></dt>
3537<dd><dl> 3547<dd><dl>
3538<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt> 3548<dt><span class="sect2"><a href="#creating.perl-module">10.1.1. Perl modules</a></span></dt>
3539<dt><span class="sect2"><a href="#creating.kde-app">10.1.2. KDE3 applications</a></span></dt> 3549<dt><span class="sect2"><a href="#creating.kde-app">10.1.2. KDE3 applications</a></span></dt>
3540<dt><span class="sect2"><a href="#creating.python-module">10.1.3. Python modules and programs</a></span></dt> 3550<dt><span class="sect2"><a href="#creating.python-module">10.1.3. Python modules and programs</a></span></dt>
3541</dl></dd> 3551</dl></dd>
3542<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt> 3552<dt><span class="sect1"><a href="#creating.examples">10.2. Examples</a></span></dt>
3543<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> 3553<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>
3544</dl> 3554</dl>
3545</div> 3555</div>
3546<p>When you find a package that is not yet in pkgsrc, you 3556<p>When you find a package that is not yet in pkgsrc, you
3547most likely have a URL from where you can download the source 3557most likely have a URL from where you can download the source
3548code. Starting with this URL, creating a package involves only a 3558code. Starting with this URL, creating a package involves only a
3549few steps.</p> 3559few steps.</p>
3550<div class="procedure"><ol class="procedure" type="1"> 3560<div class="procedure"><ol class="procedure" type="1">
3551<li class="step"><p>First, install the packages <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a> and <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>.</p></li> 3561<li class="step"><p>First, install the packages <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a> and <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>.</p></li>
3552<li class="step"><p>Then, choose one of the top-level directories as the 3562<li class="step"><p>Then, choose one of the top-level directories as the
3553category in which you want to place your package. You can also create a 3563category in which you want to place your package. You can also create a
3554directory of your own (maybe called <code class="filename">local</code>). In that 3564directory of your own (maybe called <code class="filename">local</code>). In that
3555category directory, create another directory for your package and change 3565category directory, create another directory for your package and change
3556into it.</p></li> 3566into it.</p></li>
3557<li class="step"><p>Run the program <span class="command"><strong>url2pkg</strong></span>, which will ask 3567<li class="step"><p>Run the program <span class="command"><strong>url2pkg</strong></span>, which will ask
3558you for a URL. Enter the URL of the distribution file (in most cases a 3568you for a URL. Enter the URL of the distribution file (in most cases a
3559<code class="filename">.tar.gz</code> file) and watch how the basic ingredients 3569<code class="filename">.tar.gz</code> file) and watch how the basic ingredients
3560of your package are created automatically. The distribution file is 3570of your package are created automatically. The distribution file is
3561extracted automatically to fill in some details in the 3571extracted automatically to fill in some details in the
3562<code class="filename">Makefile</code> that would otherwise have to be done 3572<code class="filename">Makefile</code> that would otherwise have to be done
3563manually.</p></li> 3573manually.</p></li>
3564<li class="step"> 3574<li class="step">
3565<p>Examine the extracted files to determine the dependencies of 3575<p>Examine the extracted files to determine the dependencies of
3566your package. Ideally, this is mentioned in some 3576your package. Ideally, this is mentioned in some
3567<code class="filename">README</code> file, but things may differ. For each of 3577<code class="filename">README</code> file, but things may differ. For each of
3568these dependencies, look where it exists in pkgsrc, and if there is a 3578these dependencies, look where it exists in pkgsrc, and if there is a
3569file called <code class="filename">buildlink3.mk</code> in that directory, add a 3579file called <code class="filename">buildlink3.mk</code> in that directory, add a
3570line to your package <code class="filename">Makefile</code> which includes that 3580line to your package <code class="filename">Makefile</code> which includes that
3571file just before the last line. If the 3581file just before the last line. If the
3572<code class="filename">buildlink3.mk</code> file does not exist, it must be 3582<code class="filename">buildlink3.mk</code> file does not exist, it must be
3573created first. The <code class="filename">buildlink3.mk</code> file makes sure that the package's include files and libraries are provided.</p> 3583created first. The <code class="filename">buildlink3.mk</code> file makes sure that the package's include files and libraries are provided.</p>
3574<p>If you just need binaries from a package, add a 3584<p>If you just need binaries from a package, add a
3575<code class="varname">DEPENDS</code> line to the Makefile, which specifies the 3585<code class="varname">DEPENDS</code> line to the Makefile, which specifies the
3576version of the dependency and where it can be found in pkgsrc. This line 3586version of the dependency and where it can be found in pkgsrc. This line
3577should be placed in the third paragraph. If the dependency is only 3587should be placed in the third paragraph. If the dependency is only
3578needed for building the package, but not when using it, use 3588needed for building the package, but not when using it, use
3579<code class="varname">BUILD_DEPENDS</code> instead of <code class="varname">DEPENDS</code>. 3589<code class="varname">BUILD_DEPENDS</code> instead of <code class="varname">DEPENDS</code>.
3580Your package may then look like this:</p> 3590Your package may then look like this:</p>
3581<pre class="programlisting"> 3591<pre class="programlisting">
3582[...] 3592[...]
3583 3593
3584BUILD_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt 3594BUILD_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt
3585DEPENDS+= screen-[0-9]*:../../misc/screen 3595DEPENDS+= screen-[0-9]*:../../misc/screen
3586DEPENDS+= screen&gt;=4.0:../../misc/screen 3596DEPENDS+= screen&gt;=4.0:../../misc/screen
3587 3597
3588[...] 3598[...]
3589 3599
3590.include "../../<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>package</code></em>/buildlink3.mk" 3600.include "../../<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>package</code></em>/buildlink3.mk"
3591.include "../../devel/glib2/buildlink3.mk" 3601.include "../../devel/glib2/buildlink3.mk"
3592.include "../../mk/bsd.pkg.mk" 3602.include "../../mk/bsd.pkg.mk"
3593</pre> 3603</pre>
3594</li> 3604</li>
3595<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> to see what things still need 3605<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> to see what things still need
3596to be done to make your package a <span class="quote">&#8220;<span class="quote">good</span>&#8221;</span> one. If you don't 3606to be done to make your package a <span class="quote">&#8220;<span class="quote">good</span>&#8221;</span> one. If you don't
3597know what pkglint's warnings want to tell you, try <span class="command"><strong>pkglint 3607know what pkglint's warnings want to tell you, try <span class="command"><strong>pkglint
3598--explain</strong></span> or <span class="command"><strong>pkglint 3608--explain</strong></span> or <span class="command"><strong>pkglint
3599-e</strong></span>, which outputs additional 3609-e</strong></span>, which outputs additional
3600explanations.</p></li> 3610explanations.</p></li>
3601<li class="step"><p>In many cases the package is not yet ready to build. You can 3611<li class="step"><p>In many cases the package is not yet ready to build. You can
3602find 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 3612find 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
3603over there, you can hopefully continue here.</p></li> 3613over there, you can hopefully continue here.</p></li>
3604<li class="step"><p>Run <span class="command"><strong>bmake clean</strong></span> to clean the working 3614<li class="step"><p>Run <span class="command"><strong>bmake clean</strong></span> to clean the working
3605directory from the extracted files. Besides these files, a lot of cache 3615directory from the extracted files. Besides these files, a lot of cache
3606files and other system information has been saved in the working 3616files and other system information has been saved in the working
3607directory, which may become wrong after you edited the 3617directory, which may become wrong after you edited the
3608<code class="filename">Makefile</code>.</p></li> 3618<code class="filename">Makefile</code>.</p></li>
3609<li class="step"><p>Now, run <span class="command"><strong>bmake</strong></span> to build the package. For 3619<li class="step"><p>Now, run <span class="command"><strong>bmake</strong></span> to build the package. For
3610the 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> 3620the 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>
3611<li class="step"><p>When the package builds fine, the next step is to install 3621<li class="step"><p>When the package builds fine, the next step is to install
3612the package. Run <span class="command"><strong>bmake install</strong></span> and hope that 3622the package. Run <span class="command"><strong>bmake install</strong></span> and hope that
3613everything works.</p></li> 3623everything works.</p></li>
3614<li class="step"><p>Up to now, the file <code class="filename">PLIST</code>, which 3624<li class="step"><p>Up to now, the file <code class="filename">PLIST</code>, which
3615contains a list of the files that are installed by the package, is 3625contains a list of the files that are installed by the package, is
3616nearly empty. Run <span class="command"><strong>bmake print-PLIST 3626nearly empty. Run <span class="command"><strong>bmake print-PLIST
3617&gt;PLIST</strong></span> to generate a probably correct list. Check 3627&gt;PLIST</strong></span> to generate a probably correct list. Check
3618the file using your preferred text editor to see if the list of 3628the file using your preferred text editor to see if the list of
3619files looks plausible.</p></li> 3629files looks plausible.</p></li>
3620<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> again to see if the generated 3630<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> again to see if the generated
3621<code class="filename">PLIST</code> contains garbage or not.</p></li> 3631<code class="filename">PLIST</code> contains garbage or not.</p></li>
3622<li class="step"><p>When you ran <span class="command"><strong>bmake install</strong></span>, the package 3632<li class="step"><p>When you ran <span class="command"><strong>bmake install</strong></span>, the package
3623has been registered in the database of installed files, but with an 3633has been registered in the database of installed files, but with an
3624empty list of files. To fix this, run <span class="command"><strong>bmake deinstall</strong></span> 3634empty list of files. To fix this, run <span class="command"><strong>bmake deinstall</strong></span>
3625and <span class="command"><strong>bmake install</strong></span> again. Now the package is 3635and <span class="command"><strong>bmake install</strong></span> again. Now the package is
3626registered with the list of files from 3636registered with the list of files from
3627<code class="filename">PLIST</code>.</p></li> 3637<code class="filename">PLIST</code>.</p></li>
3628<li class="step"><p>Run <span class="command"><strong>bmake package</strong></span> to create a binary 3638<li class="step"><p>Run <span class="command"><strong>bmake package</strong></span> to create a binary
3629package from the set of installed files.</p></li> 3639package from the set of installed files.</p></li>
3630</ol></div> 3640</ol></div>
3631<div class="sect1"> 3641<div class="sect1">
3632<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3642<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3633<a name="creating.common"></a>10.1. Common types of packages</h2></div></div></div> 3643<a name="creating.common"></a>10.1. Common types of packages</h2></div></div></div>
3634<div class="sect2"> 3644<div class="sect2">
3635<div class="titlepage"><div><div><h3 class="title"> 3645<div class="titlepage"><div><div><h3 class="title">
3636<a name="creating.perl-module"></a>10.1.1. Perl modules</h3></div></div></div> 3646<a name="creating.perl-module"></a>10.1.1. Perl modules</h3></div></div></div>
3637<p>Simple Perl modules are handled automatically by 3647<p>Simple Perl modules are handled automatically by
3638<span class="command"><strong>url2pkg</strong></span>, including dependencies.</p> 3648<span class="command"><strong>url2pkg</strong></span>, including dependencies.</p>
3639</div> 3649</div>
3640<div class="sect2"> 3650<div class="sect2">
3641<div class="titlepage"><div><div><h3 class="title"> 3651<div class="titlepage"><div><div><h3 class="title">
3642<a name="creating.kde-app"></a>10.1.2. KDE3 applications</h3></div></div></div> 3652<a name="creating.kde-app"></a>10.1.2. KDE3 applications</h3></div></div></div>
3643<p>KDE3 applications should always include 3653<p>KDE3 applications should always include
3644<code class="filename">meta-pkgs/kde3/kde3.mk</code>, which contains numerous 3654<code class="filename">meta-pkgs/kde3/kde3.mk</code>, which contains numerous
3645settings that are typical of KDE3 packages.</p> 3655settings that are typical of KDE3 packages.</p>
3646</div> 3656</div>
3647<div class="sect2"> 3657<div class="sect2">
3648<div class="titlepage"><div><div><h3 class="title"> 3658<div class="titlepage"><div><div><h3 class="title">
3649<a name="creating.python-module"></a>10.1.3. Python modules and programs</h3></div></div></div> 3659<a name="creating.python-module"></a>10.1.3. Python modules and programs</h3></div></div></div>
3650<p>Python modules and programs packages are easily created using a 3660<p>Python modules and programs packages are easily created using a
3651set of predefined variables.</p> 3661set of predefined variables.</p>
3652<p> 3662<p>
3653If some Python versions are not supported by the software, set the 3663If some Python versions are not supported by the software, set the
3654<code class="varname">PYTHON_VERSIONS_INCOMPATIBLE</code> variable to the Python versions 3664<code class="varname">PYTHON_VERSIONS_INCOMPATIBLE</code> variable to the Python versions
3655that are not supported, e.g. 3665that are not supported, e.g.
3656</p> 3666</p>
3657<pre class="programlisting"> 3667<pre class="programlisting">
3658PYTHON_VERSIONS_INCOMPATIBLE= 26 3668PYTHON_VERSIONS_INCOMPATIBLE= 26
3659</pre> 3669</pre>
3660<p> 3670<p>
3661If the packaged software is a Python module, include 3671If the packaged software is a Python module, include
3662<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/extension.mk</code></span>&#8221;</span>. 3672<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/extension.mk</code></span>&#8221;</span>.
3663In this case, the package directory should be called 3673In this case, the package directory should be called
3664<span class="quote">&#8220;<span class="quote">py-software</span>&#8221;</span> and <code class="varname">PKGNAME</code> should be set to 3674<span class="quote">&#8220;<span class="quote">py-software</span>&#8221;</span> and <code class="varname">PKGNAME</code> should be set to
3665<span class="quote">&#8220;<span class="quote">${PYPKGPREFIX}-${DISTNAME}</span>&#8221;</span>, e.g. 3675<span class="quote">&#8220;<span class="quote">${PYPKGPREFIX}-${DISTNAME}</span>&#8221;</span>, e.g.
3666</p> 3676</p>
3667<pre class="programlisting"> 3677<pre class="programlisting">
3668DISTNAME= foopymodule-1.2.10 3678DISTNAME= foopymodule-1.2.10
3669PKGNAME= ${PYPKGPREFIX}-${DISTNAME} 3679PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
3670</pre> 3680</pre>
3671<p>If it is an application, include 3681<p>If it is an application, include
3672<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/application.mk</code></span>&#8221;</span>. 3682<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/application.mk</code></span>&#8221;</span>.
3673In order to correctly set the path to the Python interpreter, use the 3683In order to correctly set the path to the Python interpreter, use the
3674<code class="varname">REPLACE_PYTHON</code> variable and set it to the list of files 3684<code class="varname">REPLACE_PYTHON</code> variable and set it to the list of files
3675(paths relative to <code class="varname">WRKSRC</code>) that must be corrected. 3685(paths relative to <code class="varname">WRKSRC</code>) that must be corrected.
3676For example: 3686For example:
3677</p> 3687</p>
3678<pre class="programlisting"> 3688<pre class="programlisting">
3679REPLACE_PYTHON= *.py 3689REPLACE_PYTHON= *.py
3680</pre> 3690</pre>
3681<p>Most Python packages use either <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> or 3691<p>Most Python packages use either <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> or
3682easy-setup (<span class="quote">&#8220;<span class="quote">eggs</span>&#8221;</span>). 3692easy-setup (<span class="quote">&#8220;<span class="quote">eggs</span>&#8221;</span>).
3683If the software uses <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span>, include  3693If the software uses <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span>, include
3684<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/distutils.mk</code></span>&#8221;</span>. 3694<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/distutils.mk</code></span>&#8221;</span>.
3685so pkgsrc will use this framework. 3695so pkgsrc will use this framework.
3686<span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> uses a script called <code class="filename">setup.py</code>, 3696<span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> uses a script called <code class="filename">setup.py</code>,
3687if the <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> driver is not called 3697if the <span class="quote">&#8220;<span class="quote">distutils</span>&#8221;</span> driver is not called
3688<code class="filename">setup.py</code>, set the <code class="varname">PYSETUP</code> variable 3698<code class="filename">setup.py</code>, set the <code class="varname">PYSETUP</code> variable
3689to the name of the script.</p> 3699to the name of the script.</p>
3690<p>Otherwise, if the packaged software is egg-aware, you only need 3700<p>Otherwise, if the packaged software is egg-aware, you only need
3691to include 3701to include
3692<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/egg.mk</code></span>&#8221;</span>.</p> 3702<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/egg.mk</code></span>&#8221;</span>.</p>
3693<p>Some Python modules have separate distributions for Python-2.x 3703<p>Some Python modules have separate distributions for Python-2.x
3694and Python-3.x support. In pkgsrc this is handled by the 3704and Python-3.x support. In pkgsrc this is handled by the
3695<code class="filename">versioned_dependencies.mk</code> file. Set 3705<code class="filename">versioned_dependencies.mk</code> file. Set
3696<code class="varname">PYTHON_VERSIONED_DEPENDENCIES</code> to the list of 3706<code class="varname">PYTHON_VERSIONED_DEPENDENCIES</code> to the list of
3697packages that should be depended upon and include 3707packages that should be depended upon and include
3698<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/versioned_dependencies.mk</code></span>&#8221;</span>, 3708<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/versioned_dependencies.mk</code></span>&#8221;</span>,
3699then the pkgsrc infrastructure will depend on the appropriate package 3709then the pkgsrc infrastructure will depend on the appropriate package
3700version. For example: 3710version. For example:
3701</p> 3711</p>
3702<pre class="programlisting"> 3712<pre class="programlisting">
3703PYTHON_VERSIONED_DEPENDENCIES=dateutil dns 3713PYTHON_VERSIONED_DEPENDENCIES=dateutil dns
3704</pre> 3714</pre>
3705<p> 3715<p>
3706Look inside <code class="filename">versioned_dependencies.mk</code> for a list 3716Look inside <code class="filename">versioned_dependencies.mk</code> for a list
3707of supported packages.</p> 3717of supported packages.</p>
3708</div> 3718</div>
3709</div> 3719</div>
3710<div class="sect1"> 3720<div class="sect1">
3711<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3721<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3712<a name="creating.examples"></a>10.2. Examples</h2></div></div></div> 3722<a name="creating.examples"></a>10.2. Examples</h2></div></div></div>
3713<div class="sect2"> 3723<div class="sect2">
3714<div class="titlepage"><div><div><h3 class="title"> 3724<div class="titlepage"><div><div><h3 class="title">
3715<a name="creating.nvu"></a>10.2.1. How the www/nvu package came into pkgsrc</h3></div></div></div> 3725<a name="creating.nvu"></a>10.2.1. How the www/nvu package came into pkgsrc</h3></div></div></div>
3716<div class="sect3"> 3726<div class="sect3">
3717<div class="titlepage"><div><div><h4 class="title"> 3727<div class="titlepage"><div><div><h4 class="title">
3718<a name="creating.nvu.init"></a>10.2.1.1. The initial package</h4></div></div></div> 3728<a name="creating.nvu.init"></a>10.2.1.1. The initial package</h4></div></div></div>
3719<p>Looking at the file <code class="filename">pkgsrc/doc/TODO</code>, I saw 3729<p>Looking at the file <code class="filename">pkgsrc/doc/TODO</code>, I saw
3720that the <span class="quote">&#8220;<span class="quote">nvu</span>&#8221;</span> package has not yet been imported into 3730that the <span class="quote">&#8220;<span class="quote">nvu</span>&#8221;</span> package has not yet been imported into
3721pkgsrc. As the description says it has to do with the web, the obvious 3731pkgsrc. As the description says it has to do with the web, the obvious
3722choice for the category is <span class="quote">&#8220;<span class="quote">www</span>&#8221;</span>.</p> 3732choice for the category is <span class="quote">&#8220;<span class="quote">www</span>&#8221;</span>.</p>
3723<pre class="programlisting"> 3733<pre class="programlisting">
3724<code class="prompt">$</code> mkdir www/nvu 3734<code class="prompt">$</code> mkdir www/nvu
3725<code class="prompt">$</code> cd www/nvu 3735<code class="prompt">$</code> cd www/nvu
3726</pre> 3736</pre>
3727<p>The web site says that the sources are available as a tar file, so 3737<p>The web site says that the sources are available as a tar file, so
3728I fed that URL to the <span class="command"><strong>url2pkg</strong></span> program:</p> 3738I fed that URL to the <span class="command"><strong>url2pkg</strong></span> program:</p>
3729<pre class="programlisting"> 3739<pre class="programlisting">
3730<code class="prompt">$</code> url2pkg http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2 3740<code class="prompt">$</code> url2pkg http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2
3731</pre> 3741</pre>
3732<p>My editor popped up, and I added a <code class="varname">PKGNAME</code> line 3742<p>My editor popped up, and I added a <code class="varname">PKGNAME</code> line
3733below the <code class="varname">DISTNAME</code> line, as the package name should 3743below the <code class="varname">DISTNAME</code> line, as the package name should
3734not have the word <span class="quote">&#8220;<span class="quote">sources</span>&#8221;</span> in it. I also filled in the 3744not have the word <span class="quote">&#8220;<span class="quote">sources</span>&#8221;</span> in it. I also filled in the
3735<code class="varname">MAINTAINER</code>, <code class="varname">HOMEPAGE</code> and 3745<code class="varname">MAINTAINER</code>, <code class="varname">HOMEPAGE</code> and
3736<code class="varname">COMMENT</code> fields. Then the package 3746<code class="varname">COMMENT</code> fields. Then the package
3737<code class="filename">Makefile</code> looked like that:</p> 3747<code class="filename">Makefile</code> looked like that:</p>
3738<pre class="programlisting"> 3748<pre class="programlisting">
3739# $NetBSD$ 3749# $NetBSD$
3740# 3750#
3741 3751
3742DISTNAME= nvu-1.0-sources 3752DISTNAME= nvu-1.0-sources
3743PKGNAME= nvu-1.0 3753PKGNAME= nvu-1.0
3744CATEGORIES= www 3754CATEGORIES= www
3745MASTER_SITES= http://cvs.nvu.com/download/ 3755MASTER_SITES= http://cvs.nvu.com/download/
3746EXTRACT_SUFX= .tar.bz2 3756EXTRACT_SUFX= .tar.bz2
3747 3757
3748MAINTAINER= rillig@NetBSD.org 3758MAINTAINER= rillig@NetBSD.org
3749HOMEPAGE= http://cvs.nvu.com/ 3759HOMEPAGE= http://cvs.nvu.com/
3750COMMENT= Web Authoring System 3760COMMENT= Web Authoring System
3751 3761
3752# url2pkg-marker (please do not remove this line.) 3762# url2pkg-marker (please do not remove this line.)
3753.include "../../mk/bsd.pkg.mk" 3763.include "../../mk/bsd.pkg.mk"
3754</pre> 3764</pre>
3755<p>Then, I quit the editor and watched pkgsrc downloading a large 3765<p>Then, I quit the editor and watched pkgsrc downloading a large
3756source archive:</p> 3766source archive:</p>
3757<pre class="programlisting"> 3767<pre class="programlisting">
3758url2pkg&gt; Running "make makesum" ... 3768url2pkg&gt; Running "make makesum" ...
3759=&gt; Required installed package digest&gt;=20010302: digest-20060826 found 3769=&gt; Required installed package digest&gt;=20010302: digest-20060826 found
3760=&gt; Fetching nvu-1.0-sources.tar.bz2 3770=&gt; Fetching nvu-1.0-sources.tar.bz2
3761Requesting http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2 3771Requesting http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2
3762100% |*************************************| 28992 KB 150.77 KB/s00:00 ETA 3772100% |*************************************| 28992 KB 150.77 KB/s00:00 ETA
376329687976 bytes retrieved in 03:12 (150.77 KB/s) 377329687976 bytes retrieved in 03:12 (150.77 KB/s)
3764url2pkg&gt; Running "make extract" ... 3774url2pkg&gt; Running "make extract" ...
3765=&gt; Required installed package digest&gt;=20010302: digest-20060826 found 3775=&gt; Required installed package digest&gt;=20010302: digest-20060826 found
3766=&gt; Checksum SHA1 OK for nvu-1.0-sources.tar.bz2 3776=&gt; Checksum SHA1 OK for nvu-1.0-sources.tar.bz2
3767=&gt; Checksum RMD160 OK for nvu-1.0-sources.tar.bz2 3777=&gt; Checksum RMD160 OK for nvu-1.0-sources.tar.bz2
3768work.bacc -&gt; /tmp/roland/pkgsrc/www/nvu/work.bacc 3778work.bacc -&gt; /tmp/roland/pkgsrc/www/nvu/work.bacc
3769===&gt; Installing dependencies for nvu-1.0 3779===&gt; Installing dependencies for nvu-1.0
3770===&gt; Overriding tools for nvu-1.0 3780===&gt; Overriding tools for nvu-1.0
3771===&gt; Extracting for nvu-1.0 3781===&gt; Extracting for nvu-1.0
3772url2pkg&gt; Adjusting the Makefile. 3782url2pkg&gt; Adjusting the Makefile.
3773 3783
3774Remember to correct CATEGORIES, HOMEPAGE, COMMENT, and DESCR when you're done! 3784Remember to correct CATEGORIES, HOMEPAGE, COMMENT, and DESCR when you're done!
3775 3785
3776Good luck! (See pkgsrc/doc/pkgsrc.txt for some more help :-) 3786Good luck! (See pkgsrc/doc/pkgsrc.txt for some more help :-)
3777</pre> 3787</pre>
3778</div> 3788</div>
3779<div class="sect3"> 3789<div class="sect3">
3780<div class="titlepage"><div><div><h4 class="title"> 3790<div class="titlepage"><div><div><h4 class="title">
3781<a name="creating.nvu.problems"></a>10.2.1.2. Fixing all kinds of problems to make the package work</h4></div></div></div> 3791<a name="creating.nvu.problems"></a>10.2.1.2. Fixing all kinds of problems to make the package work</h4></div></div></div>
3782<p>Now that the package has been extracted, let's see what's inside 3792<p>Now that the package has been extracted, let's see what's inside
3783it. The package has a <code class="filename">README.txt</code>, but that only 3793it. The package has a <code class="filename">README.txt</code>, but that only
3784says something about mozilla, so it's probably useless for seeing what 3794says something about mozilla, so it's probably useless for seeing what
3785dependencies this package has. But since there is a GNU configure script 3795dependencies this package has. But since there is a GNU configure script
3786in the package, let's hope that it will complain about everything it 3796in the package, let's hope that it will complain about everything it
3787needs.</p> 3797needs.</p>
3788<pre class="programlisting"> 3798<pre class="programlisting">
3789<code class="prompt">$</code> bmake 3799<code class="prompt">$</code> bmake
3790=&gt; Required installed package digest&gt;=20010302: digest-20060826 found 3800=&gt; Required installed package digest&gt;=20010302: digest-20060826 found
3791=&gt; Checksum SHA1 OK for nvu-1.0-sources.tar.bz2 3801=&gt; Checksum SHA1 OK for nvu-1.0-sources.tar.bz2
3792=&gt; Checksum RMD160 OK for nvu-1.0-sources.tar.bz2 3802=&gt; Checksum RMD160 OK for nvu-1.0-sources.tar.bz2
3793===&gt; Patching for nvu-1.0 3803===&gt; Patching for nvu-1.0
3794===&gt; Creating toolchain wrappers for nvu-1.0 3804===&gt; Creating toolchain wrappers for nvu-1.0
3795===&gt; Configuring for nvu-1.0 3805===&gt; Configuring for nvu-1.0
3796[...] 3806[...]
3797configure: error: Perl 5.004 or higher is required. 3807configure: error: Perl 5.004 or higher is required.
3798[...] 3808[...]
3799WARNING: Please add USE_TOOLS+=perl to the package Makefile. 3809WARNING: Please add USE_TOOLS+=perl to the package Makefile.
3800[...] 3810[...]
3801</pre> 3811</pre>
3802<p>That worked quite well. So I opened the package Makefile in my 3812<p>That worked quite well. So I opened the package Makefile in my
3803editor, and since it already has a <code class="varname">USE_TOOLS</code> line, I 3813editor, and since it already has a <code class="varname">USE_TOOLS</code> line, I
3804just appended <span class="quote">&#8220;<span class="quote">perl</span>&#8221;</span> to it. Since the dependencies of the 3814just appended <span class="quote">&#8220;<span class="quote">perl</span>&#8221;</span> to it. Since the dependencies of the
3805package have changed now, and since a perl wrapper is automatically 3815package have changed now, and since a perl wrapper is automatically
3806installed in the <span class="quote">&#8220;<span class="quote">tools</span>&#8221;</span> phase, I need to build the package 3816installed in the <span class="quote">&#8220;<span class="quote">tools</span>&#8221;</span> phase, I need to build the package
3807from scratch.</p> 3817from scratch.</p>
3808<pre class="programlisting"> 3818<pre class="programlisting">
3809<code class="prompt">$</code> bmake clean 3819<code class="prompt">$</code> bmake clean
3810===&gt; Cleaning for nvu-1.0 3820===&gt; Cleaning for nvu-1.0
3811<code class="prompt">$</code> bmake 3821<code class="prompt">$</code> bmake
3812[...] 3822[...]
3813*** /tmp/roland/pkgsrc/www/nvu/work.bacc/.tools/bin/make is not \ 3823*** /tmp/roland/pkgsrc/www/nvu/work.bacc/.tools/bin/make is not \
3814GNU Make. You will not be able to build Mozilla without GNU Make. 3824GNU Make. You will not be able to build Mozilla without GNU Make.
3815[...] 3825[...]
3816</pre> 3826</pre>
3817<p>So I added <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span> to the 3827<p>So I added <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span> to the
3818<code class="varname">USE_TOOLS</code> line and tried again (from scratch).</p> 3828<code class="varname">USE_TOOLS</code> line and tried again (from scratch).</p>
3819<pre class="programlisting"> 3829<pre class="programlisting">
3820[...] 3830[...]
3821checking for GTK - version &gt;= 1.2.0... no 3831checking for GTK - version &gt;= 1.2.0... no
3822*** Could not run GTK test program, checking why... 3832*** Could not run GTK test program, checking why...
3823[...] 3833[...]
3824</pre> 3834</pre>
3825<p>Now to the other dependencies. The first question is: Where is the 3835<p>Now to the other dependencies. The first question is: Where is the
3826GTK package hidden in pkgsrc?</p> 3836GTK package hidden in pkgsrc?</p>
3827<pre class="programlisting"> 3837<pre class="programlisting">
3828<code class="prompt">$</code> echo ../../*/gtk* 3838<code class="prompt">$</code> echo ../../*/gtk*
3829[many packages ...] 3839[many packages ...]
3830<code class="prompt">$</code> echo ../../*/gtk 3840<code class="prompt">$</code> echo ../../*/gtk
3831../../x11/gtk 3841../../x11/gtk
3832<code class="prompt">$</code> echo ../../*/gtk2 3842<code class="prompt">$</code> echo ../../*/gtk2
3833../../x11/gtk2 3843../../x11/gtk2
3834<code class="prompt">$</code> echo ../../*/gtk2/bui* 3844<code class="prompt">$</code> echo ../../*/gtk2/bui*
3835../../x11/gtk2/buildlink3.mk 3845../../x11/gtk2/buildlink3.mk
3836</pre> 3846</pre>
3837<p>The first try was definitely too broad. The second one had exactly 3847<p>The first try was definitely too broad. The second one had exactly
3838one result, which is very good. But there is one pitfall with GNOME 3848one result, which is very good. But there is one pitfall with GNOME
3839packages. Before GNOME 2 had been released, there were already many 3849packages. Before GNOME 2 had been released, there were already many
3840GNOME 1 packages in pkgsrc. To be able to continue to use these 3850GNOME 1 packages in pkgsrc. To be able to continue to use these
3841packages, the GNOME 2 packages were imported as separate packages, and 3851packages, the GNOME 2 packages were imported as separate packages, and
3842their names usually have a <span class="quote">&#8220;<span class="quote">2</span>&#8221;</span> appended. So I checked 3852their names usually have a <span class="quote">&#8220;<span class="quote">2</span>&#8221;</span> appended. So I checked
3843whether this was the case here, and indeed it was.</p> 3853whether this was the case here, and indeed it was.</p>
3844<p>Since the GTK2 package has a <code class="filename">buildlink3.mk</code> 3854<p>Since the GTK2 package has a <code class="filename">buildlink3.mk</code>
3845file, adding the dependency is very easy. I just inserted an 3855file, adding the dependency is very easy. I just inserted an
3846<code class="literal">.include</code> line before the last line of the package 3856<code class="literal">.include</code> line before the last line of the package
3847<code class="filename">Makefile</code>, so that it now looks like this:</p> 3857<code class="filename">Makefile</code>, so that it now looks like this:</p>
3848<pre class="programlisting"> 3858<pre class="programlisting">
3849[...] 3859[...]
3850.include "../../x11/gtk2/buildlink3.mk" 3860.include "../../x11/gtk2/buildlink3.mk"
3851.include "../../mk/bsd.pkg.mk 3861.include "../../mk/bsd.pkg.mk
3852</pre> 3862</pre>
3853<p>After another <span class="command"><strong>bmake clean &amp;&amp; bmake</strong></span>, the answer 3863<p>After another <span class="command"><strong>bmake clean &amp;&amp; bmake</strong></span>, the answer
3854was:</p> 3864was:</p>
3855<pre class="programlisting"> 3865<pre class="programlisting">
3856[...] 3866[...]
3857checking for gtk-config... /home/roland/pkg/bin/gtk-config 3867checking for gtk-config... /home/roland/pkg/bin/gtk-config
3858checking for GTK - version &gt;= 1.2.0... no 3868checking for GTK - version &gt;= 1.2.0... no
3859*** Could not run GTK test program, checking why... 3869*** Could not run GTK test program, checking why...
3860*** The test program failed to compile or link. See the file config.log for the 3870*** The test program failed to compile or link. See the file config.log for the
3861*** exact error that occured. This usually means GTK was incorrectly installed 3871*** exact error that occured. This usually means GTK was incorrectly installed
3862*** or that you have moved GTK since it was installed. In the latter case, you 3872*** or that you have moved GTK since it was installed. In the latter case, you
3863*** may want to edit the gtk-config script: /home/roland/pkg/bin/gtk-config 3873*** may want to edit the gtk-config script: /home/roland/pkg/bin/gtk-config
3864configure: error: Test for GTK failed. 3874configure: error: Test for GTK failed.
3865[...] 3875[...]
3866</pre> 3876</pre>
3867<p>In this particular case, the assumption that <span class="quote">&#8220;<span class="quote">every package 3877<p>In this particular case, the assumption that <span class="quote">&#8220;<span class="quote">every package
3868prefers GNOME 2</span>&#8221;</span> had been wrong. The first of the lines above 3878prefers GNOME 2</span>&#8221;</span> had been wrong. The first of the lines above
3869told me that this package really wanted to have the GNOME 1 version of 3879told me that this package really wanted to have the GNOME 1 version of
3870GTK. If the package had looked for GTK2, it would have looked for 3880GTK. If the package had looked for GTK2, it would have looked for
3871<span class="command"><strong>pkg-config</strong></span> instead of <span class="command"><strong>gtk-config</strong></span>. 3881<span class="command"><strong>pkg-config</strong></span> instead of <span class="command"><strong>gtk-config</strong></span>.
3872So I changed the <code class="literal">x11/gtk2</code> to 3882So I changed the <code class="literal">x11/gtk2</code> to
3873<code class="literal">x11/gtk</code> in the package <code class="filename">Makefile</code>, 3883<code class="literal">x11/gtk</code> in the package <code class="filename">Makefile</code>,
3874and tried again.</p> 3884and tried again.</p>
3875<pre class="programlisting"> 3885<pre class="programlisting">
3876[...] 3886[...]
3877cc -o xpidl.o -c -DOSTYPE=\"NetBSD3\" -DOSARCH=\"NetBSD\" [...] 3887cc -o xpidl.o -c -DOSTYPE=\"NetBSD3\" -DOSARCH=\"NetBSD\" [...]
3878In file included from xpidl.c:42: 3888In file included from xpidl.c:42:
3879xpidl.h:53:24: libIDL/IDL.h: No such file or directory 3889xpidl.h:53:24: libIDL/IDL.h: No such file or directory
3880In file included from xpidl.c:42: 3890In file included from xpidl.c:42:
3881xpidl.h:132: error: parse error before "IDL_ns" 3891xpidl.h:132: error: parse error before "IDL_ns"
3882[...] 3892[...]
3883</pre> 3893</pre>
3884<p>The package still does not find all of its dependencies. Now the 3894<p>The package still does not find all of its dependencies. Now the
3885question is: Which package provides the 3895question is: Which package provides the
3886<code class="filename">libIDL/IDL.h</code> header file?</p> 3896<code class="filename">libIDL/IDL.h</code> header file?</p>
3887<pre class="programlisting"> 3897<pre class="programlisting">
3888<code class="prompt">$</code> echo ../../*/*idl* 3898<code class="prompt">$</code> echo ../../*/*idl*
3889../../devel/py-idle ../../wip/idled ../../x11/acidlaunch 3899../../devel/py-idle ../../wip/idled ../../x11/acidlaunch
3890<code class="prompt">$</code> echo ../../*/*IDL* 3900<code class="prompt">$</code> echo ../../*/*IDL*
3891../../net/libIDL 3901../../net/libIDL
3892</pre> 3902</pre>
3893<p>Let's take the one from the second try. So I included the 3903<p>Let's take the one from the second try. So I included the
3894<code class="filename">../../net/libIDL/buildlink3.mk</code> file and tried 3904<code class="filename">../../net/libIDL/buildlink3.mk</code> file and tried
3895again. But the error didn't change. After digging through some of the 3905again. But the error didn't change. After digging through some of the
3896code, I concluded that the build process of the package was broken and 3906code, I concluded that the build process of the package was broken and
3897couldn't have ever worked, but since the Mozilla source tree is quite 3907couldn't have ever worked, but since the Mozilla source tree is quite
3898large, I didn't want to fix it. So I added the following to the package 3908large, I didn't want to fix it. So I added the following to the package
3899<code class="filename">Makefile</code> and tried again:</p> 3909<code class="filename">Makefile</code> and tried again:</p>
3900<pre class="programlisting"> 3910<pre class="programlisting">
3901CPPFLAGS+= -I${BUILDLINK_PREFIX.libIDL}/include/libIDL-2.0 3911CPPFLAGS+= -I${BUILDLINK_PREFIX.libIDL}/include/libIDL-2.0
3902BUILDLINK_TRANSFORM+= -l:IDL:IDL-2 3912BUILDLINK_TRANSFORM+= -l:IDL:IDL-2
3903</pre> 3913</pre>
3904<p>The latter line is needed because the package expects the library 3914<p>The latter line is needed because the package expects the library
3905<code class="filename">libIDL.so</code>, but only 3915<code class="filename">libIDL.so</code>, but only
3906<code class="filename">libIDL-2.so</code> is available. So I told the compiler 3916<code class="filename">libIDL-2.so</code> is available. So I told the compiler
3907wrapper to rewrite that on the fly.</p> 3917wrapper to rewrite that on the fly.</p>
3908<p>The next problem was related to a recent change of the FreeType 3918<p>The next problem was related to a recent change of the FreeType
3909interface. I looked up in <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/seamonkey/README.html" target="_top"><code class="filename">www/seamonkey</code></a> 3919interface. I looked up in <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/seamonkey/README.html" target="_top"><code class="filename">www/seamonkey</code></a>
3910which patch files were relevant for this issue and copied them to the 3920which patch files were relevant for this issue and copied them to the
3911<code class="filename">patches</code> directory. Then I retried, fixed the 3921<code class="filename">patches</code> directory. Then I retried, fixed the
3912patches so that they applied cleanly and retried again. This time, 3922patches so that they applied cleanly and retried again. This time,
3913everything worked.</p> 3923everything worked.</p>
3914</div> 3924</div>
3915<div class="sect3"> 3925<div class="sect3">
3916<div class="titlepage"><div><div><h4 class="title"> 3926<div class="titlepage"><div><div><h4 class="title">
3917<a name="creating.nvu.inst"></a>10.2.1.3. Installing the package</h4></div></div></div> 3927<a name="creating.nvu.inst"></a>10.2.1.3. Installing the package</h4></div></div></div>
3918<pre class="programlisting"> 3928<pre class="programlisting">
3919<code class="prompt">$</code> bmake CHECK_FILES=no install 3929<code class="prompt">$</code> bmake CHECK_FILES=no install
3920[...] 3930[...]
3921<code class="prompt">$</code> bmake print-PLIST &gt;PLIST 3931<code class="prompt">$</code> bmake print-PLIST &gt;PLIST
3922<code class="prompt">$</code> bmake deinstall 3932<code class="prompt">$</code> bmake deinstall
3923<code class="prompt">$</code> bmake install 3933<code class="prompt">$</code> bmake install
3924</pre> 3934</pre>
3925</div> 3935</div>
3926</div> 3936</div>
3927</div> 3937</div>
3928</div> 3938</div>
3929<div class="chapter"> 3939<div class="chapter">
3930<div class="titlepage"><div><div><h2 class="title"> 3940<div class="titlepage"><div><div><h2 class="title">
3931<a name="components"></a>Chapter 11. Package components - files, directories and contents</h2></div></div></div> 3941<a name="components"></a>Chapter 11. Package components - files, directories and contents</h2></div></div></div>
3932<div class="toc"> 3942<div class="toc">
3933<p><b>Table of Contents</b></p> 3943<p><b>Table of Contents</b></p>
3934<dl> 3944<dl>
3935<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt> 3945<dt><span class="sect1"><a href="#components.Makefile">11.1. <code class="filename">Makefile</code></a></span></dt>
3936<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt> 3946<dt><span class="sect1"><a href="#components.distinfo">11.2. <code class="filename">distinfo</code></a></span></dt>
3937<dt><span class="sect1"><a href="#components.patches">11.3. patches/*</a></span></dt> 3947<dt><span class="sect1"><a href="#components.patches">11.3. patches/*</a></span></dt>
3938<dd><dl> 3948<dd><dl>
3939<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt> 3949<dt><span class="sect2"><a href="#components.patch.structure">11.3.1. Structure of a single patch file</a></span></dt>
3940<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt> 3950<dt><span class="sect2"><a href="#components.patches.caveats">11.3.2. Creating patch files</a></span></dt>
3941<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt> 3951<dt><span class="sect2"><a href="#components.patches.sources">11.3.3. Sources where the patch files come from</a></span></dt>
3942<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt> 3952<dt><span class="sect2"><a href="#components.patches.guidelines">11.3.4. Patching guidelines</a></span></dt>
3943<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt> 3953<dt><span class="sect2"><a href="#components.patches.feedback">11.3.5. Feedback to the author</a></span></dt>
3944</dl></dd> 3954</dl></dd>
3945<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt> 3955<dt><span class="sect1"><a href="#other-mandatory-files">11.4. Other mandatory files</a></span></dt>
3946<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt> 3956<dt><span class="sect1"><a href="#components.optional">11.5. Optional files</a></span></dt>
3947<dd><dl> 3957<dd><dl>
3948<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt> 3958<dt><span class="sect2"><a href="#components.optional.bin">11.5.1. Files affecting the binary package</a></span></dt>
3949<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt> 3959<dt><span class="sect2"><a href="#components.optional.build">11.5.2. Files affecting the build process</a></span></dt>
3950<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt> 3960<dt><span class="sect2"><a href="#components.optional.none">11.5.3. Files affecting nothing at all</a></span></dt>
3951</dl></dd> 3961</dl></dd>
3952<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt> 3962<dt><span class="sect1"><a href="#work-dir">11.6. <code class="filename">work*</code></a></span></dt>
3953<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt> 3963<dt><span class="sect1"><a href="#files-dir">11.7. <code class="filename">files/*</code></a></span></dt>
3954</dl> 3964</dl>
3955</div> 3965</div>
3956<p>Whenever you're preparing a package, there are a number of 3966<p>Whenever you're preparing a package, there are a number of
3957files involved which are described in the following 3967files involved which are described in the following
3958sections.</p> 3968sections.</p>
3959<div class="sect1"> 3969<div class="sect1">
3960<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3970<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3961<a name="components.Makefile"></a>11.1. <code class="filename">Makefile</code> 3971<a name="components.Makefile"></a>11.1. <code class="filename">Makefile</code>
3962</h2></div></div></div> 3972</h2></div></div></div>
3963<p>Building, installation and creation of a binary package are all 3973<p>Building, installation and creation of a binary package are all
3964 controlled by the package's <code class="filename">Makefile</code>. 3974 controlled by the package's <code class="filename">Makefile</code>.
3965 The <code class="filename">Makefile</code> describes various things about 3975 The <code class="filename">Makefile</code> describes various things about
3966 a package, for example from where to get it, how to configure, 3976 a package, for example from where to get it, how to configure,
3967 build, and install it.</p> 3977 build, and install it.</p>
3968<p>A package <code class="filename">Makefile</code> contains several 3978<p>A package <code class="filename">Makefile</code> contains several
3969 sections that describe the package.</p> 3979 sections that describe the package.</p>
3970<p>In the first section there are the following variables, which 3980<p>In the first section there are the following variables, which
3971 should appear exactly in the order given here. The order and 3981 should appear exactly in the order given here. The order and
3972 grouping of the variables is mostly historical and has no further 3982 grouping of the variables is mostly historical and has no further
3973 meaning.</p> 3983 meaning.</p>
3974<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3984<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3975<li class="listitem"><p><code class="varname">DISTNAME</code> is the basename of the 3985<li class="listitem"><p><code class="varname">DISTNAME</code> is the basename of the
3976 distribution file to be downloaded from the package's 3986 distribution file to be downloaded from the package's
3977 website.</p></li> 3987 website.</p></li>
3978<li class="listitem"><p><code class="varname">PKGNAME</code> is the name of the 3988<li class="listitem"><p><code class="varname">PKGNAME</code> is the name of the
3979 package, as used by pkgsrc. You need to provide it if 3989 package, as used by pkgsrc. You need to provide it if
3980 <code class="varname">DISTNAME</code> (which is the default) is not a good 3990 <code class="varname">DISTNAME</code> (which is the default) is not a good
3981 name for the package in pkgsrc or <code class="varname">DISTNAME</code> is not 3991 name for the package in pkgsrc or <code class="varname">DISTNAME</code> is not
3982 provided (no distribution file is required). Usually it is the pkgsrc 3992 provided (no distribution file is required). Usually it is the pkgsrc
3983 directory name together with the version number. It must match the 3993 directory name together with the version number. It must match the
3984 regular expression 3994 regular expression
3985 <code class="varname">^[A-Za-z0-9][A-Za-z0-9-_.+]*$</code>, that is, it 3995 <code class="varname">^[A-Za-z0-9][A-Za-z0-9-_.+]*$</code>, that is, it
3986 starts with a letter or digit, and contains only letters, digits, 3996 starts with a letter or digit, and contains only letters, digits,
3987 dashes, underscores, dots and plus signs.</p></li> 3997 dashes, underscores, dots and plus signs.</p></li>
3988<li class="listitem"> 3998<li class="listitem">
3989<p><code class="varname">CATEGORIES</code> is a list of categories 3999<p><code class="varname">CATEGORIES</code> is a list of categories
3990 which the package fits in. You can choose any of the top-level 4000 which the package fits in. You can choose any of the top-level
3991 directories of pkgsrc for it.</p> 4001 directories of pkgsrc for it.</p>
3992<p>Currently the following values are available for 4002<p>Currently the following values are available for
3993 <code class="varname">CATEGORIES</code>. If more than 4003 <code class="varname">CATEGORIES</code>. If more than
3994 one is used, they need to be separated by spaces:</p> 4004 one is used, they need to be separated by spaces:</p>
3995<pre class="programlisting"> 4005<pre class="programlisting">
3996archivers cross geography meta-pkgs security 4006archivers cross geography meta-pkgs security
3997audio databases graphics misc shells 4007audio databases graphics misc shells
3998benchmarks devel ham multimedia sysutils 4008benchmarks devel ham multimedia sysutils
3999biology editors inputmethod net textproc 4009biology editors inputmethod net textproc
4000cad emulators lang news time 4010cad emulators lang news time
4001chat finance mail parallel wm 4011chat finance mail parallel wm
4002comms fonts math pkgtools www 4012comms fonts math pkgtools www
4003converters games mbone print x11 4013converters games mbone print x11
4004</pre> 4014</pre>
4005</li> 4015</li>
4006<li class="listitem"><p><code class="varname">MASTER_SITES</code>, 4016<li class="listitem"><p><code class="varname">MASTER_SITES</code>,
4007 <code class="varname">DYNAMIC_MASTER_SITES</code>, 4017 <code class="varname">DYNAMIC_MASTER_SITES</code>,
4008 <code class="varname">DIST_SUBDIR</code>, <code class="varname">EXTRACT_SUFX</code> 4018 <code class="varname">DIST_SUBDIR</code>, <code class="varname">EXTRACT_SUFX</code>
4009 and <code class="varname">DISTFILES</code> are discussed in detail in 4019 and <code class="varname">DISTFILES</code> are discussed in detail in
4010 <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> 4020 <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>
4011</ul></div> 4021</ul></div>
4012<p>The second section contains information about separately 4022<p>The second section contains information about separately
4013 downloaded patches, if any. 4023 downloaded patches, if any.
4014 </p> 4024 </p>
4015<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4025<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4016<li class="listitem"><p><code class="varname">PATCHFILES</code>: 4026<li class="listitem"><p><code class="varname">PATCHFILES</code>:
4017 Name(s) of additional files that contain distribution patches. 4027 Name(s) of additional files that contain distribution patches.
4018 There is no default. pkgsrc will look for them at 4028 There is no default. pkgsrc will look for them at
4019 <code class="varname">PATCH_SITES</code>. 4029 <code class="varname">PATCH_SITES</code>.
4020 They will automatically be uncompressed before patching if 4030 They will automatically be uncompressed before patching if
4021 the names end with <code class="filename">.gz</code> or 4031 the names end with <code class="filename">.gz</code> or
4022 <code class="filename">.Z</code>.</p></li> 4032 <code class="filename">.Z</code>.</p></li>
4023<li class="listitem"><p><code class="varname">PATCH_SITES</code>: 4033<li class="listitem"><p><code class="varname">PATCH_SITES</code>:
4024 Primary location(s) for distribution patch files (see 4034 Primary location(s) for distribution patch files (see
4025 <code class="varname">PATCHFILES</code> above) if not found locally.</p></li> 4035 <code class="varname">PATCHFILES</code> above) if not found locally.</p></li>
4026<li class="listitem"><p><code class="varname">PATCH_DIST_STRIP</code>: 4036<li class="listitem"><p><code class="varname">PATCH_DIST_STRIP</code>:
4027 an argument to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> that sets the pathname strip count to 4037 an argument to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> that sets the pathname strip count to
4028 help find the correct files to patch. It defaults to 4038 help find the correct files to patch. It defaults to
4029 <span class="command"><strong>-p0</strong></span>.</p></li> 4039 <span class="command"><strong>-p0</strong></span>.</p></li>
4030</ul></div> 4040</ul></div>
4031<p>The third section contains the following variables. 4041<p>The third section contains the following variables.
4032 </p> 4042 </p>
4033<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4043<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4034<li class="listitem"><p><code class="varname">MAINTAINER</code> is the email 4044<li class="listitem"><p><code class="varname">MAINTAINER</code> is the email
4035 address of the person who feels responsible for this package, 4045 address of the person who feels responsible for this package,
4036 and who is most likely to look at problems or questions regarding 4046 and who is most likely to look at problems or questions regarding
4037 this package which have been reported with <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a>. 4047 this package which have been reported with <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a>.
4038 Other developers may contact the <code class="varname">MAINTAINER</code> 4048 Other developers may contact the <code class="varname">MAINTAINER</code>
4039 before making changes to the package, but are not required to 4049 before making changes to the package, but are not required to
4040 do so. When packaging a new program, set <code class="varname">MAINTAINER</code> 4050 do so. When packaging a new program, set <code class="varname">MAINTAINER</code>
4041 to yourself. If you really can't maintain the package for future 4051 to yourself. If you really can't maintain the package for future
4042 updates, set it to 4052 updates, set it to
4043 <code class="email">&lt;<a class="email" href="mailto:pkgsrc-users@NetBSD.org">pkgsrc-users@NetBSD.org</a>&gt;</code>.</p></li> 4053 <code class="email">&lt;<a class="email" href="mailto:pkgsrc-users@NetBSD.org">pkgsrc-users@NetBSD.org</a>&gt;</code>.</p></li>
4044<li class="listitem"><p><code class="varname">OWNER</code> should be used instead 4054<li class="listitem"><p><code class="varname">OWNER</code> should be used instead
4045 of <code class="varname">MAINTAINER</code> when you do not want other 4055 of <code class="varname">MAINTAINER</code> when you do not want other
4046 developers to update or change the package without contacting 4056 developers to update or change the package without contacting
4047 you first. A package Makefile should contain one of 4057 you first. A package Makefile should contain one of
4048 <code class="varname">MAINTAINER</code> or <code class="varname">OWNER</code>, but 4058 <code class="varname">MAINTAINER</code> or <code class="varname">OWNER</code>, but
4049 not both. </p></li> 4059 not both. </p></li>
4050<li class="listitem"><p><code class="varname">HOMEPAGE</code> is a URL where users can 4060<li class="listitem"><p><code class="varname">HOMEPAGE</code> is a URL where users can
4051 find more information about the package.</p></li> 4061 find more information about the package.</p></li>
4052<li class="listitem"><p><code class="varname">COMMENT</code> is a one-line 4062<li class="listitem"><p><code class="varname">COMMENT</code> is a one-line
4053 description of the package (should not include the package 4063 description of the package (should not include the package
4054 name).</p></li> 4064 name).</p></li>
4055</ul></div> 4065</ul></div>
4056<p>Other variables that affect the build: 4066<p>Other variables that affect the build:
4057 </p> 4067 </p>
4058<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 4068<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
4059<p><code class="varname">WRKSRC</code>: The directory where the 4069<p><code class="varname">WRKSRC</code>: The directory where the
4060 interesting distribution files of the package are found. The 4070 interesting distribution files of the package are found. The
4061 default is <code class="filename">${WRKDIR}/${DISTNAME}</code>, which 4071 default is <code class="filename">${WRKDIR}/${DISTNAME}</code>, which
4062 works for most packages.</p> 4072 works for most packages.</p>
4063<p>If a package doesn't create a subdirectory for itself 4073<p>If a package doesn't create a subdirectory for itself
4064 (most GNU software does, for instance), but extracts itself in 4074 (most GNU software does, for instance), but extracts itself in
4065 the current directory, you should set 4075 the current directory, you should set
4066 <code class="varname">WRKSRC=${WRKDIR}</code>.</p> 4076 <code class="varname">WRKSRC=${WRKDIR}</code>.</p>
4067<p>If a package doesn't create a subdirectory with the 4077<p>If a package doesn't create a subdirectory with the
4068 name of <code class="varname">DISTNAME</code> but some different name, 4078 name of <code class="varname">DISTNAME</code> but some different name,
4069 set <code class="varname">WRKSRC</code> to point to the proper name in 4079 set <code class="varname">WRKSRC</code> to point to the proper name in
4070 <code class="filename">${WRKDIR}</code>, for example 4080 <code class="filename">${WRKDIR}</code>, for example
4071 <code class="varname">WRKSRC=${WRKDIR}/${DISTNAME}/unix</code>. See 4081 <code class="varname">WRKSRC=${WRKDIR}/${DISTNAME}/unix</code>. See
4072 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/tcl/README.html" target="_top"><code class="filename">lang/tcl</code></a> and <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/tk/README.html" target="_top"><code class="filename">x11/tk</code></a> for other examples.</p> 4082 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/tcl/README.html" target="_top"><code class="filename">lang/tcl</code></a> and <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/tk/README.html" target="_top"><code class="filename">x11/tk</code></a> for other examples.</p>
4073<p>The name of the working directory created by pkgsrc is 4083<p>The name of the working directory created by pkgsrc is
4074 taken from the <code class="varname">WRKDIR_BASENAME</code> 4084 taken from the <code class="varname">WRKDIR_BASENAME</code>
4075 variable. By default, its value is 4085 variable. By default, its value is
4076 <code class="filename">work</code>. If you want to use the same 4086 <code class="filename">work</code>. If you want to use the same
4077 pkgsrc tree for building different kinds of binary packages, 4087 pkgsrc tree for building different kinds of binary packages,
4078 you can change the variable according to your needs. Two 4088 you can change the variable according to your needs. Two
4079 other variables handle common cases of setting 4089 other variables handle common cases of setting
4080 <code class="varname">WRKDIR_BASENAME</code> individually. If 4090 <code class="varname">WRKDIR_BASENAME</code> individually. If
4081 <code class="varname">OBJHOSTNAME</code> is defined in 4091 <code class="varname">OBJHOSTNAME</code> is defined in
4082 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, the first component of 4092 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, the first component of
4083 the host's name is attached to the directory name. If 4093 the host's name is attached to the directory name. If
4084 <code class="varname">OBJMACHINE</code> is defined, the platform name 4094 <code class="varname">OBJMACHINE</code> is defined, the platform name
4085 is attached, which might look like 4095 is attached, which might look like
4086 <code class="filename">work.i386</code> or 4096 <code class="filename">work.i386</code> or
4087 <code class="filename">work.sparc</code>.</p> 4097 <code class="filename">work.sparc</code>.</p>
4088</li></ul></div> 4098</li></ul></div>
4089<p>Please pay attention to the following gotchas:</p> 4099<p>Please pay attention to the following gotchas:</p>
4090<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4100<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4091<li class="listitem"><p>Add <code class="varname">MANCOMPRESSED</code> if man pages are 4101<li class="listitem"><p>Add <code class="varname">MANCOMPRESSED</code> if man pages are
4092 installed in compressed form by the package. For packages using 4102 installed in compressed form by the package. For packages using
4093 BSD-style makefiles which honor MANZ, there is 4103 BSD-style makefiles which honor MANZ, there is
4094 <code class="varname">MANCOMPRESSED_IF_MANZ</code>.</p></li> 4104 <code class="varname">MANCOMPRESSED_IF_MANZ</code>.</p></li>
4095<li class="listitem"><p>Replace <code class="filename">/usr/local</code> with 4105<li class="listitem"><p>Replace <code class="filename">/usr/local</code> with
4096 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span> in all files (see patches, 4106 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span> in all files (see patches,
4097 below).</p></li> 4107 below).</p></li>
4098<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> 4108<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>
4099</ul></div> 4109</ul></div>
4100</div> 4110</div>
4101<div class="sect1"> 4111<div class="sect1">
4102<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4112<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4103<a name="components.distinfo"></a>11.2. <code class="filename">distinfo</code> 4113<a name="components.distinfo"></a>11.2. <code class="filename">distinfo</code>
4104</h2></div></div></div> 4114</h2></div></div></div>
4105<p>The <code class="filename">distinfo</code> file contains the message 4115<p>The <code class="filename">distinfo</code> file contains the message
4106 digest, or checksum, of each distfile needed for the package. This 4116 digest, or checksum, of each distfile needed for the package. This
4107 ensures that the distfiles retrieved from the Internet have not been 4117 ensures that the distfiles retrieved from the Internet have not been
4108 corrupted during transfer or altered by a malign force to introduce 4118 corrupted during transfer or altered by a malign force to introduce
4109 a security hole. Due to recent rumor about weaknesses of digest 4119 a security hole. Due to recent rumor about weaknesses of digest
4110 algorithms, all distfiles are protected using both SHA1 and RMD160 4120 algorithms, all distfiles are protected using both SHA1 and RMD160
4111 message digests, as well as the file size.</p> 4121 message digests, as well as the file size.</p>
4112<p>The <code class="filename">distinfo</code> file also contains the 4122<p>The <code class="filename">distinfo</code> file also contains the
4113 checksums for all the patches found in the 4123 checksums for all the patches found in the
4114 <code class="filename">patches</code> directory (see <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;patches/*&#8221;</a>).</p> 4124 <code class="filename">patches</code> directory (see <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;patches/*&#8221;</a>).</p>
4115<p>To regenerate the <code class="filename">distinfo</code> file, use the 4125<p>To regenerate the <code class="filename">distinfo</code> file, use the
4116 <span class="command"><strong>make makedistinfo</strong></span> or <span class="command"><strong>make mdi</strong></span> 4126 <span class="command"><strong>make makedistinfo</strong></span> or <span class="command"><strong>make mdi</strong></span>
4117 command.</p> 4127 command.</p>
4118<p>Some packages have different sets of distfiles depending on 4128<p>Some packages have different sets of distfiles depending on
4119 the platform, for example <a href="ftp://ftp.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 4129 the platform, for example <a href="ftp://ftp.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
4120 <code class="filename">distinfo</code> file and care should be taken when 4130 <code class="filename">distinfo</code> file and care should be taken when
4121 upgrading such a package to ensure distfile information is not 4131 upgrading such a package to ensure distfile information is not
4122 lost.</p> 4132 lost.</p>
4123</div> 4133</div>
4124<div class="sect1"> 4134<div class="sect1">
4125<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4135<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4126<a name="components.patches"></a>11.3. patches/*</h2></div></div></div> 4136<a name="components.patches"></a>11.3. patches/*</h2></div></div></div>
4127<p>Many packages still don't work out-of-the box on the various 4137<p>Many packages still don't work out-of-the box on the various
4128 platforms that are supported by pkgsrc. Therefore, a number of custom 4138 platforms that are supported by pkgsrc. Therefore, a number of custom
4129 patch files are needed to make the package work. These patch files are 4139 patch files are needed to make the package work. These patch files are
4130 found in the <code class="filename">patches/</code> directory.</p> 4140 found in the <code class="filename">patches/</code> directory.</p>
4131<p>In the <span class="emphasis"><em>patch</em></span> phase, these patches are 4141<p>In the <span class="emphasis"><em>patch</em></span> phase, these patches are
4132 applied to the files in <code class="varname">WRKSRC</code> directory after 4142 applied to the files in <code class="varname">WRKSRC</code> directory after
4133 extracting them, in <a class="ulink" href="http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13_03" target="_top">alphabetic 4143 extracting them, in <a class="ulink" href="http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13_03" target="_top">alphabetic
4134 order</a>.</p> 4144 order</a>.</p>
4135<div class="sect2"> 4145<div class="sect2">
4136<div class="titlepage"><div><div><h3 class="title"> 4146<div class="titlepage"><div><div><h3 class="title">
4137<a name="components.patch.structure"></a>11.3.1. Structure of a single patch file</h3></div></div></div> 4147<a name="components.patch.structure"></a>11.3.1. Structure of a single patch file</h3></div></div></div>
4138<p>The <code class="filename">patch-*</code> files should be in 4148<p>The <code class="filename">patch-*</code> files should be in
4139 <span class="command"><strong>diff -bu</strong></span> format, and apply without a fuzz to avoid 4149 <span class="command"><strong>diff -bu</strong></span> format, and apply without a fuzz to avoid
4140 problems. (To force patches to apply with fuzz you can set 4150 problems. (To force patches to apply with fuzz you can set
4141 <code class="varname">PATCH_FUZZ_FACTOR=-F2</code>). Furthermore, each patch 4151 <code class="varname">PATCH_FUZZ_FACTOR=-F2</code>). Furthermore, each patch
4142 should contain only changes for a single file, and no file should be 4152 should contain only changes for a single file, and no file should be
4143 patched by more than one patch file. This helps to keep future 4153 patched by more than one patch file. This helps to keep future
4144 modifications simple.</p> 4154 modifications simple.</p>
4145<p>Each patch file is structured as follows: In the first line, 4155<p>Each patch file is structured as follows: In the first line,
4146 there is the RCS Id of the patch itself. The second line should be 4156 there is the RCS Id of the patch itself. The second line should be
4147 empty for aesthetic reasons. After that, there should be a comment for 4157 empty for aesthetic reasons. After that, there should be a comment for
4148 each change that the patch does. There are a number of standard 4158 each change that the patch does. There are a number of standard
4149 cases:</p> 4159 cases:</p>
4150<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4160<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4151<li class="listitem"><p>Patches for commonly known vulnerabilities should 4161<li class="listitem"><p>Patches for commonly known vulnerabilities should
4152 mention the vulnerability ID (CAN, CVE).</p></li> 4162 mention the vulnerability ID (CAN, CVE).</p></li>
4153<li class="listitem"><p>Patches that change source code should mention the 4163<li class="listitem"><p>Patches that change source code should mention the
4154 platform and other environment (for example, the compiler) that the 4164 platform and other environment (for example, the compiler) that the
4155 patch is needed for.</p></li> 4165 patch is needed for.</p></li>
4156</ul></div> 4166</ul></div>
4157<p>In all, the patch should be commented so that any 4167<p>In all, the patch should be commented so that any
4158 developer who knows the code of the application can make some use of 4168 developer who knows the code of the application can make some use of
4159 the patch. Special care should be taken for the upstream developers, 4169 the patch. Special care should be taken for the upstream developers,
4160 since we generally want that they accept our patches, so we have less 4170 since we generally want that they accept our patches, so we have less
4161 work in the future.</p> 4171 work in the future.</p>
4162</div> 4172</div>
4163<div class="sect2"> 4173<div class="sect2">
4164<div class="titlepage"><div><div><h3 class="title"> 4174<div class="titlepage"><div><div><h3 class="title">
4165<a name="components.patches.caveats"></a>11.3.2. Creating patch files</h3></div></div></div> 4175<a name="components.patches.caveats"></a>11.3.2. Creating patch files</h3></div></div></div>
4166<p>One important thing to mention is to pay attention that no RCS 4176<p>One important thing to mention is to pay attention that no RCS
4167 IDs get stored in the patch files, as these will cause problems when 4177 IDs get stored in the patch files, as these will cause problems when
4168 later checked into the NetBSD CVS tree. Use the 4178 later checked into the NetBSD CVS tree. Use the
4169 <span class="command"><strong>pkgdiff</strong></span> command from the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> package to avoid these 4179 <span class="command"><strong>pkgdiff</strong></span> command from the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> package to avoid these
4170 problems.</p> 4180 problems.</p>
4171<p>For even more automation, we recommend using 4181<p>For even more automation, we recommend using
4172 <span class="command"><strong>mkpatches</strong></span> from the same package to make a 4182 <span class="command"><strong>mkpatches</strong></span> from the same package to make a
4173 whole set of patches. You just have to backup files before you 4183 whole set of patches. You just have to backup files before you
4174 edit them to <code class="filename">filename.orig</code>, e.g. with 4184 edit them to <code class="filename">filename.orig</code>, e.g. with
4175 <span class="command"><strong>cp -p filename filename.orig</strong></span> or, easier, by 4185 <span class="command"><strong>cp -p filename filename.orig</strong></span> or, easier, by
4176 using <span class="command"><strong>pkgvi</strong></span> again from the same package. If 4186 using <span class="command"><strong>pkgvi</strong></span> again from the same package. If
4177 you upgrade a package this way, you can easily compare the new 4187 you upgrade a package this way, you can easily compare the new
4178 set of patches with the previously existing one with 4188 set of patches with the previously existing one with
4179 <span class="command"><strong>patchdiff</strong></span>. The files in <code class="filename">patches</code> 4189 <span class="command"><strong>patchdiff</strong></span>. The files in <code class="filename">patches</code>
4180 are replaced by new files, so carefully check if you want to take all 4190 are replaced by new files, so carefully check if you want to take all
4181 the changes.</p> 4191 the changes.</p>
4182<p>When you have finished a package, remember to generate 4192<p>When you have finished a package, remember to generate
4183 the checksums for the patch files by using the <span class="command"><strong>make 4193 the checksums for the patch files by using the <span class="command"><strong>make
4184 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> 4194 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>
4185<p>When adding a patch that corrects a problem in the 4195<p>When adding a patch that corrects a problem in the
4186 distfile (rather than e.g. enforcing pkgsrc's view of where 4196 distfile (rather than e.g. enforcing pkgsrc's view of where
4187 man pages should go), send the patch as a bug report to the 4197 man pages should go), send the patch as a bug report to the
4188 maintainer. This benefits non-pkgsrc users of the package, 4198 maintainer. This benefits non-pkgsrc users of the package,
4189 and usually makes it possible to remove the patch in future 4199 and usually makes it possible to remove the patch in future
4190 version.</p> 4200 version.</p>
4191<p>The file names of the patch files are usually of the form 4201<p>The file names of the patch files are usually of the form
4192 <code class="filename">patch-<em class="replaceable"><code>path_to_file__with__underscores.c</code></em></code>. 4202 <code class="filename">patch-<em class="replaceable"><code>path_to_file__with__underscores.c</code></em></code>.
4193 Many packages still use the previous convention 4203 Many packages still use the previous convention
4194 <code class="filename">patch-<em class="replaceable"><code>[a-z][a-z]</code></em></code>, 4204 <code class="filename">patch-<em class="replaceable"><code>[a-z][a-z]</code></em></code>,
4195 but new patches should be of the form containing the filename. 4205 but new patches should be of the form containing the filename.
4196 <span class="command"><strong>mkpatches</strong></span> included in <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> takes care of the name 4206 <span class="command"><strong>mkpatches</strong></span> included in <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> takes care of the name
4197 automatically.</p> 4207 automatically.</p>
4198</div> 4208</div>
4199<div class="sect2"> 4209<div class="sect2">
4200<div class="titlepage"><div><div><h3 class="title"> 4210<div class="titlepage"><div><div><h3 class="title">
4201<a name="components.patches.sources"></a>11.3.3. Sources where the patch files come from</h3></div></div></div> 4211<a name="components.patches.sources"></a>11.3.3. Sources where the patch files come from</h3></div></div></div>
4202<p>If you want to share patches between multiple packages 4212<p>If you want to share patches between multiple packages
4203 in pkgsrc, e.g. because they use the same distfiles, set 4213 in pkgsrc, e.g. because they use the same distfiles, set
4204 <code class="varname">PATCHDIR</code> to the path where the patch files 4214 <code class="varname">PATCHDIR</code> to the path where the patch files
4205 can be found, e.g.:</p> 4215 can be found, e.g.:</p>
4206<pre class="programlisting"> 4216<pre class="programlisting">
4207PATCHDIR= ${.CURDIR}/../xemacs/patches 4217PATCHDIR= ${.CURDIR}/../xemacs/patches
4208</pre> 4218</pre>
4209<p>Patch files that are distributed by the author or other 4219<p>Patch files that are distributed by the author or other
4210 maintainers can be listed in 4220 maintainers can be listed in
4211 <code class="varname">PATCHFILES</code>.</p> 4221 <code class="varname">PATCHFILES</code>.</p>
4212<p>If it is desired to store any patches that should not be 4222<p>If it is desired to store any patches that should not be
4213 committed into pkgsrc, they can be kept outside the pkgsrc 4223 committed into pkgsrc, they can be kept outside the pkgsrc
4214 tree in the <code class="filename">$LOCALPATCHES</code> directory. The 4224 tree in the <code class="filename">$LOCALPATCHES</code> directory. The
4215 directory tree there is expected to have the same 4225 directory tree there is expected to have the same
4216 <span class="quote">&#8220;<span class="quote">category/package</span>&#8221;</span> structure as pkgsrc, and 4226 <span class="quote">&#8220;<span class="quote">category/package</span>&#8221;</span> structure as pkgsrc, and
4217 patches are expected to be stored inside these dirs (also 4227 patches are expected to be stored inside these dirs (also
4218 known as <code class="filename">$LOCALPATCHES/$PKGPATH</code>). For 4228 known as <code class="filename">$LOCALPATCHES/$PKGPATH</code>). For
4219 example, if you want to keep a private patch for 4229 example, if you want to keep a private patch for
4220 <code class="filename">pkgsrc/graphics/png</code>, keep it in 4230 <code class="filename">pkgsrc/graphics/png</code>, keep it in
4221 <code class="filename">$LOCALPATCHES/graphics/png/mypatch</code>. All 4231 <code class="filename">$LOCALPATCHES/graphics/png/mypatch</code>. All
4222 files in the named directory are expected to be patch files, 4232 files in the named directory are expected to be patch files,
4223 and <span class="emphasis"><em>they are applied after pkgsrc patches are 4233 and <span class="emphasis"><em>they are applied after pkgsrc patches are
4224 applied</em></span>.</p> 4234 applied</em></span>.</p>
4225</div> 4235</div>
4226<div class="sect2"> 4236<div class="sect2">
4227<div class="titlepage"><div><div><h3 class="title"> 4237<div class="titlepage"><div><div><h3 class="title">
4228<a name="components.patches.guidelines"></a>11.3.4. Patching guidelines</h3></div></div></div> 4238<a name="components.patches.guidelines"></a>11.3.4. Patching guidelines</h3></div></div></div>
4229<p>When fixing a portability issue in the code do not use 4239<p>When fixing a portability issue in the code do not use
4230 preprocessor magic to check for the current operating system nor 4240 preprocessor magic to check for the current operating system nor
4231 platform. Doing so hurts portability to other platforms because 4241 platform. Doing so hurts portability to other platforms because
4232 the OS-specific details are not abstracted appropriately.</p> 4242 the OS-specific details are not abstracted appropriately.</p>
4233<p>The general rule to follow is: instead of checking for the 4243<p>The general rule to follow is: instead of checking for the
4234 operating system the application is being built on, check for the 4244 operating system the application is being built on, check for the
4235 specific <span class="emphasis"><em>features</em></span> you need. For example, 4245 specific <span class="emphasis"><em>features</em></span> you need. For example,
4236 instead of assuming that kqueue is available under NetBSD and 4246 instead of assuming that kqueue is available under NetBSD and
4237 using the <code class="varname">__NetBSD__</code> macro to conditionalize 4247 using the <code class="varname">__NetBSD__</code> macro to conditionalize
4238 kqueue support, add a check that detects kqueue itself &mdash; 4248 kqueue support, add a check that detects kqueue itself &mdash;
4239 yes, this generally involves patching the 4249 yes, this generally involves patching the
4240 <span class="command"><strong>configure</strong></span> script. There is absolutely nothing 4250 <span class="command"><strong>configure</strong></span> script. There is absolutely nothing
4241 that prevents some OSes from adopting interfaces from other OSes 4251 that prevents some OSes from adopting interfaces from other OSes
4242 (e.g. Linux implementing kqueue), something that the above checks 4252 (e.g. Linux implementing kqueue), something that the above checks
4243 cannot take into account.</p> 4253 cannot take into account.</p>
4244<p>Of course, checking for features generally involves more 4254<p>Of course, checking for features generally involves more
4245 work on the developer's side, but the resulting changes are 4255 work on the developer's side, but the resulting changes are
4246 cleaner and there are chances they will work on many other 4256 cleaner and there are chances they will work on many other
4247 platforms. Not to mention that there are higher chances of being 4257 platforms. Not to mention that there are higher chances of being
4248 later integrated into the mainstream sources. Remember: 4258 later integrated into the mainstream sources. Remember:
4249 <span class="emphasis"><em>It doesn't work unless it is right!</em></span></p> 4259 <span class="emphasis"><em>It doesn't work unless it is right!</em></span></p>
4250<p>Some typical examples:</p> 4260<p>Some typical examples:</p>
4251<div class="table"> 4261<div class="table">
4252<a name="patch-examples"></a><p class="title"><b>Table 11.1. Patching examples</b></p> 4262<a name="patch-examples"></a><p class="title"><b>Table 11.1. Patching examples</b></p>
4253<div class="table-contents"><table summary="Patching examples" border="1"> 4263<div class="table-contents"><table summary="Patching examples" border="1">
4254<colgroup> 4264<colgroup>
4255<col> 4265<col>
4256<col> 4266<col>
4257<col> 4267<col>
4258</colgroup> 4268</colgroup>
4259<thead><tr> 4269<thead><tr>
4260<th>Where</th> 4270<th>Where</th>
4261<th>Incorrect</th> 4271<th>Incorrect</th>
4262<th>Correct</th> 4272<th>Correct</th>
4263</tr></thead> 4273</tr></thead>
4264<tbody> 4274<tbody>
4265<tr> 4275<tr>
4266<td>configure script</td> 4276<td>configure script</td>
4267<td> 4277<td>
4268<pre class="programlisting"> 4278<pre class="programlisting">
4269case ${target_os} in 4279case ${target_os} in
4270netbsd*) have_kvm=yes ;; 4280netbsd*) have_kvm=yes ;;
4271*) have_kvm=no ;; 4281*) have_kvm=no ;;
4272esac 4282esac
4273</pre> 4283</pre>
4274 </td> 4284 </td>
4275<td> 4285<td>
4276<pre class="programlisting"> 4286<pre class="programlisting">
4277AC_CHECK_LIB(kvm, kvm_open, have_kvm=yes, have_kvm=no) 4287AC_CHECK_LIB(kvm, kvm_open, have_kvm=yes, have_kvm=no)
@@ -4324,2003 +4334,2005 @@ monitor_file(...) @@ -4324,2003 +4334,2005 @@ monitor_file(...)
4324#endif 4334#endif
4325} 4335}
4326</pre> 4336</pre>
4327 </td> 4337 </td>
4328</tr> 4338</tr>
4329</tbody> 4339</tbody>
4330</table></div> 4340</table></div>
4331</div> 4341</div>
4332<br class="table-break"><p>For more information, please read the <span class="emphasis"><em>Making 4342<br class="table-break"><p>For more information, please read the <span class="emphasis"><em>Making
4333 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 4343 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
4334 1</a>, <a class="ulink" href="http://www.oreillynet.com/pub/a/onlamp/2005/04/28/packaging2.html" target="_top">part 4344 1</a>, <a class="ulink" href="http://www.oreillynet.com/pub/a/onlamp/2005/04/28/packaging2.html" target="_top">part
4335 2</a>). It summarizes multiple details on how to make 4345 2</a>). It summarizes multiple details on how to make
4336 software easier to package; all the suggestions in it were 4346 software easier to package; all the suggestions in it were
4337 collected from our experience in pkgsrc work, so they are possibly 4347 collected from our experience in pkgsrc work, so they are possibly
4338 helpful when creating patches too.</p> 4348 helpful when creating patches too.</p>
4339</div> 4349</div>
4340<div class="sect2"> 4350<div class="sect2">
4341<div class="titlepage"><div><div><h3 class="title"> 4351<div class="titlepage"><div><div><h3 class="title">
4342<a name="components.patches.feedback"></a>11.3.5. Feedback to the author</h3></div></div></div> 4352<a name="components.patches.feedback"></a>11.3.5. Feedback to the author</h3></div></div></div>
4343<p>Always, always, <span class="strong"><strong>always</strong></span> 4353<p>Always, always, <span class="strong"><strong>always</strong></span>
4344 feed back any <span class="emphasis"><em>portability fixes</em></span> or 4354 feed back any <span class="emphasis"><em>portability fixes</em></span> or
4345 improvements you do to a package to the mainstream developers. 4355 improvements you do to a package to the mainstream developers.
4346 This is the only way to get their attention on portability issues 4356 This is the only way to get their attention on portability issues
4347 and to ensure that future versions can be built out-of-the box on 4357 and to ensure that future versions can be built out-of-the box on
4348 NetBSD. Furthermore, any user that gets newer distfiles will get 4358 NetBSD. Furthermore, any user that gets newer distfiles will get
4349 the fixes straight from the packaged code.</p> 4359 the fixes straight from the packaged code.</p>
4350<p>This generally involves cleaning up the patches 4360<p>This generally involves cleaning up the patches
4351 (because sometimes the patches that are 4361 (because sometimes the patches that are
4352 added to pkgsrc are quick hacks), filing bug reports in the 4362 added to pkgsrc are quick hacks), filing bug reports in the
4353 appropriate trackers for the projects and working with the 4363 appropriate trackers for the projects and working with the
4354 mainstream authors to accept your changes. It is 4364 mainstream authors to accept your changes. It is
4355 <span class="emphasis"><em>extremely important</em></span> that you do it so that 4365 <span class="emphasis"><em>extremely important</em></span> that you do it so that
4356 the packages in pkgsrc are kept simple and thus further changes 4366 the packages in pkgsrc are kept simple and thus further changes
4357 can be done without much hassle.</p> 4367 can be done without much hassle.</p>
4358<p>When you have done this, please add a URL to the upstream 4368<p>When you have done this, please add a URL to the upstream
4359 bug report to the patch comment.</p> 4369 bug report to the patch comment.</p>
4360<p>Support the idea of free software!</p> 4370<p>Support the idea of free software!</p>
4361</div> 4371</div>
4362</div> 4372</div>
4363<div class="sect1"> 4373<div class="sect1">
4364<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4374<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4365<a name="other-mandatory-files"></a>11.4. Other mandatory files</h2></div></div></div> 4375<a name="other-mandatory-files"></a>11.4. Other mandatory files</h2></div></div></div>
4366<div class="variablelist"><dl class="variablelist"> 4376<div class="variablelist"><dl class="variablelist">
4367<dt><span class="term"><code class="filename">DESCR</code></span></dt> 4377<dt><span class="term"><code class="filename">DESCR</code></span></dt>
4368<dd><p>A multi-line description of the piece of software. This should include 4378<dd><p>A multi-line description of the piece of software. This should include
4369 any credits where they are due. Please bear in mind that others do not 4379 any credits where they are due. Please bear in mind that others do not
4370 share your sense of humour (or spelling idiosyncrasies), and that others 4380 share your sense of humour (or spelling idiosyncrasies), and that others
4371 will read everything that you write here.</p></dd> 4381 will read everything that you write here.</p></dd>
4372<dt><span class="term"><code class="filename">PLIST</code></span></dt> 4382<dt><span class="term"><code class="filename">PLIST</code></span></dt>
4373<dd><p>This file governs the files that are installed on your 4383<dd><p>This file governs the files that are installed on your
4374 system: all the binaries, manual pages, etc. There are other 4384 system: all the binaries, manual pages, etc. There are other
4375 directives which may be entered in this file, to control the 4385 directives which may be entered in this file, to control the
4376 creation and deletion of directories, and the location of 4386 creation and deletion of directories, and the location of
4377 inserted files. See <a class="xref" href="#plist" title="Chapter 13. PLIST issues">Chapter 13, <i>PLIST issues</i></a> for more 4387 inserted files. See <a class="xref" href="#plist" title="Chapter 13. PLIST issues">Chapter 13, <i>PLIST issues</i></a> for more
4378 information.</p></dd> 4388 information.</p></dd>
4379</dl></div> 4389</dl></div>
4380</div> 4390</div>
4381<div class="sect1"> 4391<div class="sect1">
4382<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4392<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4383<a name="components.optional"></a>11.5. Optional files</h2></div></div></div> 4393<a name="components.optional"></a>11.5. Optional files</h2></div></div></div>
4384<div class="sect2"> 4394<div class="sect2">
4385<div class="titlepage"><div><div><h3 class="title"> 4395<div class="titlepage"><div><div><h3 class="title">
4386<a name="components.optional.bin"></a>11.5.1. Files affecting the binary package</h3></div></div></div> 4396<a name="components.optional.bin"></a>11.5.1. Files affecting the binary package</h3></div></div></div>
4387<div class="variablelist"><dl class="variablelist"> 4397<div class="variablelist"><dl class="variablelist">
4388<dt><span class="term"><code class="filename">INSTALL</code></span></dt> 4398<dt><span class="term"><code class="filename">INSTALL</code></span></dt>
4389<dd> 4399<dd>
4390<p>This shell script is invoked twice by <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. 4400<p>This shell script is invoked twice by <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>.
4391 First time after package extraction and before files are 4401 First time after package extraction and before files are
4392 moved in place, the second time after the files to install 4402 moved in place, the second time after the files to install
4393 are moved in place. This can be used to do any custom 4403 are moved in place. This can be used to do any custom
4394 procedures not possible with @exec commands in 4404 procedures not possible with @exec commands in
4395 <code class="filename">PLIST</code>. See <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> and 4405 <code class="filename">PLIST</code>. See <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> and
4396 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1+NetBSD-5.0.1+i386"><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>. 4406 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1+NetBSD-5.0.1+i386"><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>.
4397 Please note that you can modify variables in it easily by using 4407 Please note that you can modify variables in it easily by using
4398 <code class="varname">FILES_SUBST</code> in the package's 4408 <code class="varname">FILES_SUBST</code> in the package's
4399 <code class="filename">Makefile</code>:</p> 4409 <code class="filename">Makefile</code>:</p>
4400<pre class="programlisting"> 4410<pre class="programlisting">
4401FILES_SUBST+= SOMEVAR="somevalue" 4411FILES_SUBST+= SOMEVAR="somevalue"
4402</pre> 4412</pre>
4403<p>replaces "@SOMEVAR@" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in the 4413<p>replaces "@SOMEVAR@" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in the
4404 <code class="filename">INSTALL</code>. By default, substitution is 4414 <code class="filename">INSTALL</code>. By default, substitution is
4405 performed for <code class="varname">PREFIX</code>, 4415 performed for <code class="varname">PREFIX</code>,
4406 <code class="varname">LOCALBASE</code>, <code class="varname">X11BASE</code>, 4416 <code class="varname">LOCALBASE</code>, <code class="varname">X11BASE</code>,
4407 <code class="varname">VARBASE</code>, and a few others, type 4417 <code class="varname">VARBASE</code>, and a few others, type
4408 <span class="command"><strong>make help topic=FILES_SUBST</strong></span> for a 4418 <span class="command"><strong>make help topic=FILES_SUBST</strong></span> for a
4409 complete list.</p> 4419 complete list.</p>
4410</dd> 4420</dd>
4411<dt><span class="term"><code class="filename">DEINSTALL</code></span></dt> 4421<dt><span class="term"><code class="filename">DEINSTALL</code></span></dt>
4412<dd><p>This script is executed before and after any files are removed. It is 4422<dd><p>This script is executed before and after any files are removed. It is
4413 this script's responsibility to clean up any additional messy details 4423 this script's responsibility to clean up any additional messy details
4414 around the package's installation, since all pkg_delete knows is how to 4424 around the package's installation, since all pkg_delete knows is how to
4415 delete the files created in the original distribution. 4425 delete the files created in the original distribution.
4416 See <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> 4426 See <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a>
4417 and <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> for more information. 4427 and <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> for more information.
4418 The same methods to replace variables can be used as for 4428 The same methods to replace variables can be used as for
4419 the <code class="filename">INSTALL</code> file.</p></dd> 4429 the <code class="filename">INSTALL</code> file.</p></dd>
4420<dt><span class="term"><code class="filename">MESSAGE</code></span></dt> 4430<dt><span class="term"><code class="filename">MESSAGE</code></span></dt>
4421<dd> 4431<dd>
4422<p>This file is displayed after installation of the package. 4432<p>This file is displayed after installation of the package.
4423 Useful for things like legal notices on almost-free 4433 Useful for things like legal notices on almost-free
4424 software and hints for updating config files after 4434 software and hints for updating config files after
4425 installing modules for apache, PHP etc. 4435 installing modules for apache, PHP etc.
4426 Please note that you can modify variables in it easily by using 4436 Please note that you can modify variables in it easily by using
4427 <code class="varname">MESSAGE_SUBST</code> in the package's 4437 <code class="varname">MESSAGE_SUBST</code> in the package's
4428 <code class="filename">Makefile</code>:</p> 4438 <code class="filename">Makefile</code>:</p>
4429<pre class="programlisting"> 4439<pre class="programlisting">
4430MESSAGE_SUBST+= SOMEVAR="somevalue" 4440MESSAGE_SUBST+= SOMEVAR="somevalue"
4431</pre> 4441</pre>
4432<p>replaces "${SOMEVAR}" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in 4442<p>replaces "${SOMEVAR}" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in
4433 <code class="filename">MESSAGE</code>. By default, substitution is 4443 <code class="filename">MESSAGE</code>. By default, substitution is
4434 performed for <code class="varname">PKGNAME</code>, 4444 performed for <code class="varname">PKGNAME</code>,
4435 <code class="varname">PKGBASE</code>, <code class="varname">PREFIX</code>, 4445 <code class="varname">PKGBASE</code>, <code class="varname">PREFIX</code>,
4436 <code class="varname">LOCALBASE</code>, <code class="varname">X11PREFIX</code>, 4446 <code class="varname">LOCALBASE</code>, <code class="varname">X11PREFIX</code>,
4437 <code class="varname">X11BASE</code>, 4447 <code class="varname">X11BASE</code>,
4438 <code class="varname">PKG_SYSCONFDIR</code>, 4448 <code class="varname">PKG_SYSCONFDIR</code>,
4439 <code class="varname">ROOT_GROUP</code>, and 4449 <code class="varname">ROOT_GROUP</code>, and
4440 <code class="varname">ROOT_USER</code>.</p> 4450 <code class="varname">ROOT_USER</code>.</p>
4441<p>You can display a different or additional files by 4451<p>You can display a different or additional files by
4442 setting the <code class="varname">MESSAGE_SRC</code> variable. Its 4452 setting the <code class="varname">MESSAGE_SRC</code> variable. Its
4443 default is <code class="filename">MESSAGE</code>, if the file 4453 default is <code class="filename">MESSAGE</code>, if the file
4444 exists.</p> 4454 exists.</p>
4445</dd> 4455</dd>
4446<dt><span class="term"><code class="filename">ALTERNATIVES</code></span></dt> 4456<dt><span class="term"><code class="filename">ALTERNATIVES</code></span></dt>
4447<dd> 4457<dd>
4448<p>This file is used by the alternatives framework. 4458<p>This file is used by the alternatives framework.
4449 It creates, configures, and destroys generic wrappers used to 4459 It creates, configures, and destroys generic wrappers used to
4450 run programs with similar interfaces. 4460 run programs with similar interfaces.
4451 See pkg_alternatives(8) from pkgtools/pkg_alternatives 4461 See pkg_alternatives(8) from pkgtools/pkg_alternatives
4452 for more information.</p> 4462 for more information.</p>
4453<p>Each line of the file contains two filenames, first 4463<p>Each line of the file contains two filenames, first
4454 the wrapper and then the alternative provided by the package. 4464 the wrapper and then the alternative provided by the package.
4455 Both paths are relative to <code class="varname">PREFIX</code>.</p> 4465 Both paths are relative to <code class="varname">PREFIX</code>.</p>
4456</dd> 4466</dd>
4457</dl></div> 4467</dl></div>
4458</div> 4468</div>
4459<div class="sect2"> 4469<div class="sect2">
4460<div class="titlepage"><div><div><h3 class="title"> 4470<div class="titlepage"><div><div><h3 class="title">
4461<a name="components.optional.build"></a>11.5.2. Files affecting the build process</h3></div></div></div> 4471<a name="components.optional.build"></a>11.5.2. Files affecting the build process</h3></div></div></div>
4462<div class="variablelist"><dl class="variablelist"> 4472<div class="variablelist"><dl class="variablelist">
4463<dt><span class="term"><code class="filename">Makefile.common</code></span></dt> 4473<dt><span class="term"><code class="filename">Makefile.common</code></span></dt>
4464<dd><p>This file contains arbitrary things that could 4474<dd><p>This file contains arbitrary things that could
4465 also go into a <code class="filename">Makefile</code>, but its purpose is 4475 also go into a <code class="filename">Makefile</code>, but its purpose is
4466 to be used by more than one package. This file should only be 4476 to be used by more than one package. This file should only be
4467 used when the packages that will use the file are known in 4477 used when the packages that will use the file are known in
4468 advance. For other purposes it is often better to write a 4478 advance. For other purposes it is often better to write a
4469 <code class="filename">*.mk</code> file and give it a good name that 4479 <code class="filename">*.mk</code> file and give it a good name that
4470 describes what it does.</p></dd> 4480 describes what it does.</p></dd>
4471<dt><span class="term"><code class="filename">buildlink3.mk</code></span></dt> 4481<dt><span class="term"><code class="filename">buildlink3.mk</code></span></dt>
4472<dd><p>This file contains the dependency information 4482<dd><p>This file contains the dependency information
4473 for the buildlink3 framework (see <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a>).</p></dd> 4483 for the buildlink3 framework (see <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a>).</p></dd>
4474<dt><span class="term"><code class="filename">hacks.mk</code></span></dt> 4484<dt><span class="term"><code class="filename">hacks.mk</code></span></dt>
4475<dd><p>This file contains workarounds for compiler bugs 4485<dd><p>This file contains workarounds for compiler bugs
4476 and similar things. It is included automatically by the pkgsrc 4486 and similar things. It is included automatically by the pkgsrc
4477 infrastructure, so you don't need an extra 4487 infrastructure, so you don't need an extra
4478 <code class="literal">.include</code> line for 4488 <code class="literal">.include</code> line for
4479 it.</p></dd> 4489 it.</p></dd>
4480<dt><span class="term"><code class="filename">options.mk</code></span></dt> 4490<dt><span class="term"><code class="filename">options.mk</code></span></dt>
4481<dd><p>This file contains the code for the 4491<dd><p>This file contains the code for the
4482 package-specific options (see <a class="xref" href="#options" title="Chapter 16. Options handling">Chapter 16, <i>Options handling</i></a>) that can be 4492 package-specific options (see <a class="xref" href="#options" title="Chapter 16. Options handling">Chapter 16, <i>Options handling</i></a>) that can be
4483 selected by the user. If a package has only one or two options, 4493 selected by the user. If a package has only one or two options,
4484 it is equally acceptable to put the code directly into the 4494 it is equally acceptable to put the code directly into the
4485 <code class="filename">Makefile</code>.</p></dd> 4495 <code class="filename">Makefile</code>.</p></dd>
4486</dl></div> 4496</dl></div>
4487</div> 4497</div>
4488<div class="sect2"> 4498<div class="sect2">
4489<div class="titlepage"><div><div><h3 class="title"> 4499<div class="titlepage"><div><div><h3 class="title">
4490<a name="components.optional.none"></a>11.5.3. Files affecting nothing at all</h3></div></div></div> 4500<a name="components.optional.none"></a>11.5.3. Files affecting nothing at all</h3></div></div></div>
4491<div class="variablelist"><dl class="variablelist"> 4501<div class="variablelist"><dl class="variablelist">
4492<dt><span class="term"><code class="filename">README*</code></span></dt> 4502<dt><span class="term"><code class="filename">README*</code></span></dt>
4493<dd><p>These files do not take place in the creation of 4503<dd><p>These files do not take place in the creation of
4494 a package and thus are purely informative to the package 4504 a package and thus are purely informative to the package
4495 developer.</p></dd> 4505 developer.</p></dd>
4496<dt><span class="term"><code class="filename">TODO</code></span></dt> 4506<dt><span class="term"><code class="filename">TODO</code></span></dt>
4497<dd><p>This file contains things that need to be done 4507<dd><p>This file contains things that need to be done
4498 to make the package even 4508 to make the package even
4499 better.</p></dd> 4509 better.</p></dd>
4500</dl></div> 4510</dl></div>
4501</div> 4511</div>
4502</div> 4512</div>
4503<div class="sect1"> 4513<div class="sect1">
4504<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4514<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4505<a name="work-dir"></a>11.6. <code class="filename">work*</code> 4515<a name="work-dir"></a>11.6. <code class="filename">work*</code>
4506</h2></div></div></div> 4516</h2></div></div></div>
4507<p>When you type <span class="command"><strong>make</strong></span>, the distribution files are 4517<p>When you type <span class="command"><strong>make</strong></span>, the distribution files are
4508 unpacked into the directory denoted by 4518 unpacked into the directory denoted by
4509 <code class="varname">WRKDIR</code>. It can be removed by running 4519 <code class="varname">WRKDIR</code>. It can be removed by running
4510 <span class="command"><strong>make clean</strong></span>. Besides the sources, this 4520 <span class="command"><strong>make clean</strong></span>. Besides the sources, this
4511 directory is also used to keep various timestamp files. 4521 directory is also used to keep various timestamp files.
4512 The directory gets <span class="emphasis"><em>removed completely</em></span> on clean. 4522 The directory gets <span class="emphasis"><em>removed completely</em></span> on clean.
4513 The default is <code class="filename">${.CURDIR}/work</code> 4523 The default is <code class="filename">${.CURDIR}/work</code>
4514 or <code class="filename">${.CURDIR}/work.${MACHINE_ARCH}</code> 4524 or <code class="filename">${.CURDIR}/work.${MACHINE_ARCH}</code>
4515 if <code class="varname">OBJMACHINE</code> is set.</p> 4525 if <code class="varname">OBJMACHINE</code> is set.</p>
4516</div> 4526</div>
4517<div class="sect1"> 4527<div class="sect1">
4518<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4528<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4519<a name="files-dir"></a>11.7. <code class="filename">files/*</code> 4529<a name="files-dir"></a>11.7. <code class="filename">files/*</code>
4520</h2></div></div></div> 4530</h2></div></div></div>
4521<p>If you have any files that you wish to be placed in the package prior 4531<p>If you have any files that you wish to be placed in the package prior
4522 to configuration or building, you could place these files here and use 4532 to configuration or building, you could place these files here and use
4523 a <span class="command"><strong>${CP}</strong></span> command in the 4533 a <span class="command"><strong>${CP}</strong></span> command in the
4524 <span class="quote">&#8220;<span class="quote">pre-configure</span>&#8221;</span> target to achieve 4534 <span class="quote">&#8220;<span class="quote">pre-configure</span>&#8221;</span> target to achieve
4525 this. Alternatively, you could simply diff the file against 4535 this. Alternatively, you could simply diff the file against
4526 <code class="filename">/dev/null</code> and use the patch mechanism to manage 4536 <code class="filename">/dev/null</code> and use the patch mechanism to manage
4527 the creation of this file.</p> 4537 the creation of this file.</p>
4528<p>If you want to share files in this way with other 4538<p>If you want to share files in this way with other
4529 packages, set the <code class="varname">FILESDIR</code> variable to point 4539 packages, set the <code class="varname">FILESDIR</code> variable to point
4530 to the other package's <code class="filename">files</code> directory, 4540 to the other package's <code class="filename">files</code> directory,
4531 e.g.:</p> 4541 e.g.:</p>
4532<pre class="programlisting"> 4542<pre class="programlisting">
4533FILESDIR=${.CURDIR}/../xemacs/files 4543FILESDIR=${.CURDIR}/../xemacs/files
4534</pre> 4544</pre>
4535</div> 4545</div>
4536</div> 4546</div>
4537<div class="chapter"> 4547<div class="chapter">
4538<div class="titlepage"><div><div><h2 class="title"> 4548<div class="titlepage"><div><div><h2 class="title">
4539<a name="makefile"></a>Chapter 12. Programming in <code class="filename">Makefile</code>s</h2></div></div></div> 4549<a name="makefile"></a>Chapter 12. Programming in <code class="filename">Makefile</code>s</h2></div></div></div>
4540<div class="toc"> 4550<div class="toc">
4541<p><b>Table of Contents</b></p> 4551<p><b>Table of Contents</b></p>
4542<dl> 4552<dl>
4543<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt> 4553<dt><span class="sect1"><a href="#makefile.style">12.1. Caveats</a></span></dt>
4544<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt> 4554<dt><span class="sect1"><a href="#makefile.variables">12.2. <code class="filename">Makefile</code> variables</a></span></dt>
4545<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd> 4555<dd><dl><dt><span class="sect2"><a href="#makefile.variables.names">12.2.1. Naming conventions</a></span></dt></dl></dd>
4546<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt> 4556<dt><span class="sect1"><a href="#makefile.code">12.3. Code snippets</a></span></dt>
4547<dd><dl> 4557<dd><dl>
4548<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt> 4558<dt><span class="sect2"><a href="#adding-to-list">12.3.1. Adding things to a list</a></span></dt>
4549<dt><span class="sect2"><a href="#converting-internal-to-external">12.3.2. Converting an internal list into an external list</a></span></dt> 4559<dt><span class="sect2"><a href="#converting-internal-to-external">12.3.2. Converting an internal list into an external list</a></span></dt>
4550<dt><span class="sect2"><a href="#passing-variable-to-shell">12.3.3. Passing variables to a shell command</a></span></dt> 4560<dt><span class="sect2"><a href="#passing-variable-to-shell">12.3.3. Passing variables to a shell command</a></span></dt>
4551<dt><span class="sect2"><a href="#quoting-guideline">12.3.4. Quoting guideline</a></span></dt> 4561<dt><span class="sect2"><a href="#quoting-guideline">12.3.4. Quoting guideline</a></span></dt>
4552<dt><span class="sect2"><a href="#bsd-make-bug-workaround">12.3.5. Workaround for a bug in BSD Make</a></span></dt> 4562<dt><span class="sect2"><a href="#bsd-make-bug-workaround">12.3.5. Workaround for a bug in BSD Make</a></span></dt>
4553</dl></dd> 4563</dl></dd>
4554</dl> 4564</dl>
4555</div> 4565</div>
4556<p>Pkgsrc consists of many <code class="filename">Makefile</code> fragments, 4566<p>Pkgsrc consists of many <code class="filename">Makefile</code> fragments,
4557 each of which forms a well-defined part of the pkgsrc system. Using 4567 each of which forms a well-defined part of the pkgsrc system. Using
4558 the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> system as a programming language for a big system 4568 the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> system as a programming language for a big system
4559 like pkgsrc requires some discipline to keep the code correct and 4569 like pkgsrc requires some discipline to keep the code correct and
4560 understandable.</p> 4570 understandable.</p>
4561<p>The basic ingredients for <code class="filename">Makefile</code> 4571<p>The basic ingredients for <code class="filename">Makefile</code>
4562 programming are variables (which are actually macros) and shell 4572 programming are variables (which are actually macros) and shell
4563 commands. Among these shell commands may even be more complex ones 4573 commands. Among these shell commands may even be more complex ones
4564 like <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?awk+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">awk</span>(1)</span></a> programs. To make sure that every shell command runs 4574 like <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?awk+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">awk</span>(1)</span></a> programs. To make sure that every shell command runs
4565 as intended it is necessary to quote all variables correctly when they 4575 as intended it is necessary to quote all variables correctly when they
4566 are used.</p> 4576 are used.</p>
4567<p>This chapter describes some patterns, that appear quite often in 4577<p>This chapter describes some patterns, that appear quite often in
4568 <code class="filename">Makefile</code>s, including the pitfalls that come along 4578 <code class="filename">Makefile</code>s, including the pitfalls that come along
4569 with them.</p> 4579 with them.</p>
4570<div class="sect1"> 4580<div class="sect1">
4571<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4581<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4572<a name="makefile.style"></a>12.1. Caveats</h2></div></div></div> 4582<a name="makefile.style"></a>12.1. Caveats</h2></div></div></div>
4573<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 4583<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
4574<p>When you are creating a file as a 4584<p>When you are creating a file as a
4575 target of a rule, always write the data to a temporary file first 4585 target of a rule, always write the data to a temporary file first
4576 and finally rename that file. Otherwise there might occur an error 4586 and finally rename that file. Otherwise there might occur an error
4577 in the middle of generating the file, and when the user runs 4587 in the middle of generating the file, and when the user runs
4578 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> for the second time, the file exists and will not be 4588 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> for the second time, the file exists and will not be
4579 regenerated properly. Example:</p> 4589 regenerated properly. Example:</p>
4580<pre class="programlisting"> 4590<pre class="programlisting">
4581wrong: 4591wrong:
4582 @echo "line 1" &gt; ${.TARGET} 4592 @echo "line 1" &gt; ${.TARGET}
4583 @echo "line 2" &gt;&gt; ${.TARGET} 4593 @echo "line 2" &gt;&gt; ${.TARGET}
4584 @false 4594 @false
4585 4595
4586correct: 4596correct:
4587 @echo "line 1" &gt; ${.TARGET}.tmp 4597 @echo "line 1" &gt; ${.TARGET}.tmp
4588 @echo "line 2" &gt;&gt; ${.TARGET}.tmp 4598 @echo "line 2" &gt;&gt; ${.TARGET}.tmp
4589 @false 4599 @false
4590 @mv ${.TARGET}.tmp ${.TARGET} 4600 @mv ${.TARGET}.tmp ${.TARGET}
4591</pre> 4601</pre>
4592<p>When you run <span class="command"><strong>make wrong</strong></span> twice, the file 4602<p>When you run <span class="command"><strong>make wrong</strong></span> twice, the file
4593 <code class="filename">wrong</code> will exist, although there was an error 4603 <code class="filename">wrong</code> will exist, although there was an error
4594 message in the first run. On the other hand, running <span class="command"><strong>make 4604 message in the first run. On the other hand, running <span class="command"><strong>make
4595 correct</strong></span> gives an error message twice, as expected.</p> 4605 correct</strong></span> gives an error message twice, as expected.</p>
4596<p>You might remember that <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> sometimes removes 4606<p>You might remember that <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> sometimes removes
4597 <code class="literal">${.TARGET}</code> in case of error, but this only 4607 <code class="literal">${.TARGET}</code> in case of error, but this only
4598 happens when it is interrupted, for example by pressing 4608 happens when it is interrupted, for example by pressing
4599 <code class="literal">^C</code>. This does <span class="emphasis"><em>not</em></span> happen 4609 <code class="literal">^C</code>. This does <span class="emphasis"><em>not</em></span> happen
4600 when one of the commands fails (like <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?false+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">false</span>(1)</span></a> above).</p> 4610 when one of the commands fails (like <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?false+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">false</span>(1)</span></a> above).</p>
4601</li></ul></div> 4611</li></ul></div>
4602</div> 4612</div>
4603<div class="sect1"> 4613<div class="sect1">
4604<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4614<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4605<a name="makefile.variables"></a>12.2. <code class="filename">Makefile</code> variables</h2></div></div></div> 4615<a name="makefile.variables"></a>12.2. <code class="filename">Makefile</code> variables</h2></div></div></div>
4606<p><code class="filename">Makefile</code> variables contain strings that 4616<p><code class="filename">Makefile</code> variables contain strings that
4607 can be processed using the five operators ``='', ``+='', ``?='', 4617 can be processed using the five operators ``='', ``+='', ``?='',
4608 ``:='', and ``!='', which are described in the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> man 4618 ``:='', and ``!='', which are described in the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> man
4609 page.</p> 4619 page.</p>
4610<p>When a variable's value is parsed from a 4620<p>When a variable's value is parsed from a
4611 <code class="filename">Makefile</code>, the hash character ``#'' and the 4621 <code class="filename">Makefile</code>, the hash character ``#'' and the
4612 backslash character ``\'' are handled specially. If a backslash is 4622 backslash character ``\'' are handled specially. If a backslash is
4613 followed by a newline, any whitespace immediately in front of the 4623 followed by a newline, any whitespace immediately in front of the
4614 backslash, the backslash, the newline, and any whitespace 4624 backslash, the backslash, the newline, and any whitespace
4615 immediately behind the newline are replaced with a single space. A 4625 immediately behind the newline are replaced with a single space. A
4616 backslash character and an immediately following hash character are 4626 backslash character and an immediately following hash character are
4617 replaced with a single hash character. Otherwise, the backslash is 4627 replaced with a single hash character. Otherwise, the backslash is
4618 passed as is. In a variable assignment, any hash character that is 4628 passed as is. In a variable assignment, any hash character that is
4619 not preceded by a backslash starts a comment that continues upto the 4629 not preceded by a backslash starts a comment that continues upto the
4620 end of the logical line.</p> 4630 end of the logical line.</p>
4621<p><span class="emphasis"><em>Note:</em></span> Because of this parsing algorithm 4631<p><span class="emphasis"><em>Note:</em></span> Because of this parsing algorithm
4622 the only way to create a variable consisting of a single backslash 4632 the only way to create a variable consisting of a single backslash
4623 is using the ``!='' operator, for example: <code class="varname">BACKSLASH!=echo "\\"</code>.</p> 4633 is using the ``!='' operator, for example: <code class="varname">BACKSLASH!=echo "\\"</code>.</p>
4624<p>So far for defining variables. The other thing you can do with 4634<p>So far for defining variables. The other thing you can do with
4625 variables is evaluating them. A variable is evaluated when it is 4635 variables is evaluating them. A variable is evaluated when it is
4626 part of the right side of the ``:='' or the ``!='' operator, or 4636 part of the right side of the ``:='' or the ``!='' operator, or
4627 directly before executing a shell command which the variable is part 4637 directly before executing a shell command which the variable is part
4628 of. In all other cases, <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> performs lazy evaluation, that 4638 of. In all other cases, <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> performs lazy evaluation, that
4629 is, variables are not evaluated until there's no other way. The 4639 is, variables are not evaluated until there's no other way. The
4630 ``modifiers'' mentioned in the man page also evaluate the 4640 ``modifiers'' mentioned in the man page also evaluate the
4631 variable.</p> 4641 variable.</p>
4632<p>Some of the modifiers split the string into words and then 4642<p>Some of the modifiers split the string into words and then
4633 operate on the words, others operate on the string as a whole. When 4643 operate on the words, others operate on the string as a whole. When
4634 a string is split into words, it is split as you would expect 4644 a string is split into words, it is split as you would expect
4635 it from <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?sh+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">sh</span>(1)</span></a>.</p> 4645 it from <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?sh+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">sh</span>(1)</span></a>.</p>
4636<p>No rule without exception&mdash;the <span class="command"><strong>.for</strong></span> 4646<p>No rule without exception&mdash;the <span class="command"><strong>.for</strong></span>
4637 loop does not follow the shell quoting rules but splits at sequences 4647 loop does not follow the shell quoting rules but splits at sequences
4638 of whitespace.</p> 4648 of whitespace.</p>
4639<p>There are several types of variables that should be handled 4649<p>There are several types of variables that should be handled
4640 differently. Strings and two types of lists.</p> 4650 differently. Strings and two types of lists.</p>
4641<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4651<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4642<li class="listitem"><p><span class="emphasis"><em>Strings</em></span> can contain arbitrary 4652<li class="listitem"><p><span class="emphasis"><em>Strings</em></span> can contain arbitrary
4643 characters. Nevertheless, you should restrict yourself to only 4653 characters. Nevertheless, you should restrict yourself to only
4644 using printable characters. Examples are 4654 using printable characters. Examples are
4645 <code class="varname">PREFIX</code> and 4655 <code class="varname">PREFIX</code> and
4646 <code class="varname">COMMENT</code>.</p></li> 4656 <code class="varname">COMMENT</code>.</p></li>
4647<li class="listitem"><p><span class="emphasis"><em>Internal lists</em></span> are lists that 4657<li class="listitem"><p><span class="emphasis"><em>Internal lists</em></span> are lists that
4648 are never exported to any shell command. Their elements are 4658 are never exported to any shell command. Their elements are
4649 separated by whitespace. Therefore, the elements themselves cannot 4659 separated by whitespace. Therefore, the elements themselves cannot
4650 have embedded whitespace. Any other characters are allowed. 4660 have embedded whitespace. Any other characters are allowed.
4651 Internal lists can be used in <span class="command"><strong>.for</strong></span> loops. 4661 Internal lists can be used in <span class="command"><strong>.for</strong></span> loops.
4652 Examples are <code class="varname">DEPENDS</code> and 4662 Examples are <code class="varname">DEPENDS</code> and
4653 <code class="varname">BUILD_DEPENDS</code>.</p></li> 4663 <code class="varname">BUILD_DEPENDS</code>.</p></li>
4654<li class="listitem"><p><span class="emphasis"><em>External lists</em></span> are lists that 4664<li class="listitem"><p><span class="emphasis"><em>External lists</em></span> are lists that
4655 may be exported to a shell command. Their elements can contain any 4665 may be exported to a shell command. Their elements can contain any
4656 characters, including whitespace. That's why they cannot be used 4666 characters, including whitespace. That's why they cannot be used
4657 in <span class="command"><strong>.for</strong></span> loops. Examples are 4667 in <span class="command"><strong>.for</strong></span> loops. Examples are
4658 <code class="varname">DISTFILES</code> and 4668 <code class="varname">DISTFILES</code> and
4659 <code class="varname">MASTER_SITES</code>.</p></li> 4669 <code class="varname">MASTER_SITES</code>.</p></li>
4660</ul></div> 4670</ul></div>
4661<div class="sect2"> 4671<div class="sect2">
4662<div class="titlepage"><div><div><h3 class="title"> 4672<div class="titlepage"><div><div><h3 class="title">
4663<a name="makefile.variables.names"></a>12.2.1. Naming conventions</h3></div></div></div> 4673<a name="makefile.variables.names"></a>12.2.1. Naming conventions</h3></div></div></div>
4664<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4674<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4665<li class="listitem"><p>All variable names starting with an underscore 4675<li class="listitem"><p>All variable names starting with an underscore
4666 are reserved for use by the pkgsrc infrastructure. They shall 4676 are reserved for use by the pkgsrc infrastructure. They shall
4667 not be used by package 4677 not be used by package
4668 <code class="filename">Makefile</code>s.</p></li> 4678 <code class="filename">Makefile</code>s.</p></li>
4669<li class="listitem"><p>In <span class="command"><strong>.for</strong></span> loops you should use 4679<li class="listitem"><p>In <span class="command"><strong>.for</strong></span> loops you should use
4670 lowercase variable names for the iteration 4680 lowercase variable names for the iteration
4671 variables.</p></li> 4681 variables.</p></li>
4672<li class="listitem"><p>All list variables should have a ``plural'' 4682<li class="listitem"><p>All list variables should have a ``plural''
4673 name, e.g. <code class="varname">PKG_OPTIONS</code> or 4683 name, e.g. <code class="varname">PKG_OPTIONS</code> or
4674 <code class="varname">DISTFILES</code>.</p></li> 4684 <code class="varname">DISTFILES</code>.</p></li>
4675</ul></div> 4685</ul></div>
4676</div> 4686</div>
4677</div> 4687</div>
4678<div class="sect1"> 4688<div class="sect1">
4679<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4689<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4680<a name="makefile.code"></a>12.3. Code snippets</h2></div></div></div> 4690<a name="makefile.code"></a>12.3. Code snippets</h2></div></div></div>
4681<p>This section presents you with some code snippets you should 4691<p>This section presents you with some code snippets you should
4682 use in your own code. If you don't find anything appropriate here, 4692 use in your own code. If you don't find anything appropriate here,
4683 you should test your code and add it here.</p> 4693 you should test your code and add it here.</p>
4684<div class="sect2"> 4694<div class="sect2">
4685<div class="titlepage"><div><div><h3 class="title"> 4695<div class="titlepage"><div><div><h3 class="title">
4686<a name="adding-to-list"></a>12.3.1. Adding things to a list</h3></div></div></div> 4696<a name="adding-to-list"></a>12.3.1. Adding things to a list</h3></div></div></div>
4687<pre class="programlisting"> 4697<pre class="programlisting">
4688STRING= foo * bar `date` 4698STRING= foo * bar `date`
4689INT_LIST= # empty 4699INT_LIST= # empty
4690ANOTHER_INT_LIST= apache-[0-9]*:../../www/apache 4700ANOTHER_INT_LIST= apache-[0-9]*:../../www/apache
4691EXT_LIST= # empty 4701EXT_LIST= # empty
4692ANOTHER_EXT_LIST= a=b c=d 4702ANOTHER_EXT_LIST= a=b c=d
4693 4703
4694INT_LIST+= ${STRING} # 1 4704INT_LIST+= ${STRING} # 1
4695INT_LIST+= ${ANOTHER_INT_LIST} # 2 4705INT_LIST+= ${ANOTHER_INT_LIST} # 2
4696EXT_LIST+= ${STRING:Q} # 3 4706EXT_LIST+= ${STRING:Q} # 3
4697EXT_LIST+= ${ANOTHER_EXT_LIST} # 4 4707EXT_LIST+= ${ANOTHER_EXT_LIST} # 4
4698</pre> 4708</pre>
4699<p>When you add a string to an external list (example 3), it 4709<p>When you add a string to an external list (example 3), it
4700 must be quoted. In all other cases, you must not add a quoting 4710 must be quoted. In all other cases, you must not add a quoting
4701 level. You must not merge internal and external lists, unless you 4711 level. You must not merge internal and external lists, unless you
4702 are sure that all entries are correctly interpreted in both 4712 are sure that all entries are correctly interpreted in both
4703 lists.</p> 4713 lists.</p>
4704</div> 4714</div>
4705<div class="sect2"> 4715<div class="sect2">
4706<div class="titlepage"><div><div><h3 class="title"> 4716<div class="titlepage"><div><div><h3 class="title">
4707<a name="converting-internal-to-external"></a>12.3.2. Converting an internal list into an external list</h3></div></div></div> 4717<a name="converting-internal-to-external"></a>12.3.2. Converting an internal list into an external list</h3></div></div></div>
4708<pre class="programlisting"> 4718<pre class="programlisting">
4709EXT_LIST= # empty 4719EXT_LIST= # empty
4710.for i in ${INT_LIST} 4720.for i in ${INT_LIST}
4711EXT_LIST+= ${i:Q}"" 4721EXT_LIST+= ${i:Q}""
4712.endfor 4722.endfor
4713</pre> 4723</pre>
4714<p>This code converts the internal list 4724<p>This code converts the internal list
4715 <code class="varname">INT_LIST</code> into the external list 4725 <code class="varname">INT_LIST</code> into the external list
4716 <code class="varname">EXT_LIST</code>. As the elements of an internal list 4726 <code class="varname">EXT_LIST</code>. As the elements of an internal list
4717 are unquoted they must be quoted here. The reason for appending 4727 are unquoted they must be quoted here. The reason for appending
4718 <code class="varname">""</code> is explained below.</p> 4728 <code class="varname">""</code> is explained below.</p>
4719</div> 4729</div>
4720<div class="sect2"> 4730<div class="sect2">
4721<div class="titlepage"><div><div><h3 class="title"> 4731<div class="titlepage"><div><div><h3 class="title">
4722<a name="passing-variable-to-shell"></a>12.3.3. Passing variables to a shell command</h3></div></div></div> 4732<a name="passing-variable-to-shell"></a>12.3.3. Passing variables to a shell command</h3></div></div></div>
4723<p>Sometimes you may want to print an arbitrary string. There 4733<p>Sometimes you may want to print an arbitrary string. There
4724 are many ways to get it wrong and only few that can handle every 4734 are many ways to get it wrong and only few that can handle every
4725 nastiness.</p> 4735 nastiness.</p>
4726<pre class="programlisting"> 4736<pre class="programlisting">
4727STRING= foo bar &lt; &gt; * `date` $$HOME ' " 4737STRING= foo bar &lt; &gt; * `date` $$HOME ' "
4728EXT_LIST= string=${STRING:Q} x=second\ item 4738EXT_LIST= string=${STRING:Q} x=second\ item
4729 4739
4730all: 4740all:
4731 echo ${STRING} # 1 4741 echo ${STRING} # 1
4732 echo "${STRING}" # 2 4742 echo "${STRING}" # 2
4733 echo "${STRING:Q}" # 3 4743 echo "${STRING:Q}" # 3
4734 echo ${STRING:Q} # 4 4744 echo ${STRING:Q} # 4
4735 echo x${STRING:Q} | sed 1s,.,, # 5 4745 echo x${STRING:Q} | sed 1s,.,, # 5
4736 printf "%s\\n" ${STRING:Q}"" # 6 4746 printf "%s\\n" ${STRING:Q}"" # 6
4737 env ${EXT_LIST} /bin/sh -c 'echo "$$string"; echo "$$x"' 4747 env ${EXT_LIST} /bin/sh -c 'echo "$$string"; echo "$$x"'
4738</pre> 4748</pre>
4739<p>Example 1 leads to a syntax error in the shell, as the 4749<p>Example 1 leads to a syntax error in the shell, as the
4740 characters are just copied.</p> 4750 characters are just copied.</p>
4741<p>Example 2 leads to a syntax error too, and if you leave out 4751<p>Example 2 leads to a syntax error too, and if you leave out
4742 the last " character from <code class="varname">${STRING}</code>, 4752 the last " character from <code class="varname">${STRING}</code>,
4743 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?date+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">date</span>(1)</span></a> will be executed. The <code class="varname">$HOME</code> shell 4753 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?date+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">date</span>(1)</span></a> will be executed. The <code class="varname">$HOME</code> shell
4744 variable would be evaluated, too.</p> 4754 variable would be evaluated, too.</p>
4745<p>Example 3 outputs each space character preceded by a 4755<p>Example 3 outputs each space character preceded by a
4746 backslash (or not), depending on the implementation of the 4756 backslash (or not), depending on the implementation of the
4747 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?echo+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">echo</span>(1)</span></a> command.</p> 4757 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?echo+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">echo</span>(1)</span></a> command.</p>
4748<p>Example 4 handles correctly every string that does not start 4758<p>Example 4 handles correctly every string that does not start
4749 with a dash. In that case, the result depends on the 4759 with a dash. In that case, the result depends on the
4750 implementation of the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?echo+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">echo</span>(1)</span></a> command. As long as you can 4760 implementation of the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?echo+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">echo</span>(1)</span></a> command. As long as you can
4751 guarantee that your input does not start with a dash, this form is 4761 guarantee that your input does not start with a dash, this form is
4752 appropriate.</p> 4762 appropriate.</p>
4753<p>Example 5 handles even the case of a leading dash 4763<p>Example 5 handles even the case of a leading dash
4754 correctly.</p> 4764 correctly.</p>
4755<p>Example 6 also works with every string and is the 4765<p>Example 6 also works with every string and is the
4756 light-weight solution, since it does not involve a pipe, which has 4766 light-weight solution, since it does not involve a pipe, which has
4757 its own problems.</p> 4767 its own problems.</p>
4758<p>The <code class="varname">EXT_LIST</code> does not need to be quoted 4768<p>The <code class="varname">EXT_LIST</code> does not need to be quoted
4759 because the quoting has already been done when adding elements to 4769 because the quoting has already been done when adding elements to
4760 the list.</p> 4770 the list.</p>
4761<p>As internal lists shall not be passed to the shell, there is 4771<p>As internal lists shall not be passed to the shell, there is
4762 no example for it.</p> 4772 no example for it.</p>
4763</div> 4773</div>
4764<div class="sect2"> 4774<div class="sect2">
4765<div class="titlepage"><div><div><h3 class="title"> 4775<div class="titlepage"><div><div><h3 class="title">
4766<a name="quoting-guideline"></a>12.3.4. Quoting guideline</h3></div></div></div> 4776<a name="quoting-guideline"></a>12.3.4. Quoting guideline</h3></div></div></div>
4767<p>There are many possible sources of wrongly quoted variables. 4777<p>There are many possible sources of wrongly quoted variables.
4768 This section lists some of the commonly known ones.</p> 4778 This section lists some of the commonly known ones.</p>
4769<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4779<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4770<li class="listitem"> 4780<li class="listitem">
4771<p>Whenever you use the value of a list, think 4781<p>Whenever you use the value of a list, think
4772 about what happens to leading or trailing whitespace. If the 4782 about what happens to leading or trailing whitespace. If the
4773 list is a well-formed shell expression, you can apply the 4783 list is a well-formed shell expression, you can apply the
4774 <code class="varname">:M*</code> modifier to strip leading and trailing 4784 <code class="varname">:M*</code> modifier to strip leading and trailing
4775 whitespace from each word. The <code class="varname">:M</code> operator 4785 whitespace from each word. The <code class="varname">:M</code> operator
4776 first splits its argument according to the rules of the shell, 4786 first splits its argument according to the rules of the shell,
4777 and then creates a new list consisting of all words that match 4787 and then creates a new list consisting of all words that match
4778 the shell glob expression <code class="varname">*</code>, that is: all. 4788 the shell glob expression <code class="varname">*</code>, that is: all.
4779 One class of situations where this is needed is when adding a 4789 One class of situations where this is needed is when adding a
4780 variable like <code class="varname">CPPFLAGS</code> to 4790 variable like <code class="varname">CPPFLAGS</code> to
4781 <code class="varname">CONFIGURE_ARGS</code>. If the configure script 4791 <code class="varname">CONFIGURE_ARGS</code>. If the configure script
4782 invokes other configure scripts, it strips the leading and 4792 invokes other configure scripts, it strips the leading and
4783 trailing whitespace from the variable and then passes it to the 4793 trailing whitespace from the variable and then passes it to the
4784 other configure scripts. But these configure scripts expect the 4794 other configure scripts. But these configure scripts expect the
4785 (child) <code class="varname">CPPFLAGS</code> variable to be the same as 4795 (child) <code class="varname">CPPFLAGS</code> variable to be the same as
4786 the parent <code class="varname">CPPFLAGS</code>. That's why we better 4796 the parent <code class="varname">CPPFLAGS</code>. That's why we better
4787 pass the <code class="varname">CPPFLAGS</code> value properly trimmed. And 4797 pass the <code class="varname">CPPFLAGS</code> value properly trimmed. And
4788 here is how we do it:</p> 4798 here is how we do it:</p>
4789<pre class="programlisting"> 4799<pre class="programlisting">
4790CPPFLAGS= # empty 4800CPPFLAGS= # empty
4791CPPFLAGS+= -Wundef -DPREFIX=\"${PREFIX:Q}\" 4801CPPFLAGS+= -Wundef -DPREFIX=\"${PREFIX:Q}\"
4792CPPFLAGS+= ${MY_CPPFLAGS} 4802CPPFLAGS+= ${MY_CPPFLAGS}
4793 4803
4794CONFIGURE_ARGS+= CPPFLAGS=${CPPFLAGS:M*:Q} 4804CONFIGURE_ARGS+= CPPFLAGS=${CPPFLAGS:M*:Q}
4795 4805
4796all: 4806all:
4797 echo x${CPPFLAGS:Q}x # leading and trailing whitespace 4807 echo x${CPPFLAGS:Q}x # leading and trailing whitespace
4798 echo x${CONFIGURE_ARGS}x # properly trimmed 4808 echo x${CONFIGURE_ARGS}x # properly trimmed
4799</pre> 4809</pre>
4800</li> 4810</li>
4801<li class="listitem"><p>The example above contains one bug: The 4811<li class="listitem"><p>The example above contains one bug: The
4802 <code class="varname">${PREFIX}</code> is a properly quoted shell 4812 <code class="varname">${PREFIX}</code> is a properly quoted shell
4803 expression, but there is the C compiler after it, which also 4813 expression, but there is the C compiler after it, which also
4804 expects a properly quoted string (this time in C syntax). The 4814 expects a properly quoted string (this time in C syntax). The
4805 version above is therefore only correct if 4815 version above is therefore only correct if
4806 <code class="varname">${PREFIX}</code> does not have embedded backslashes 4816 <code class="varname">${PREFIX}</code> does not have embedded backslashes
4807 or double quotes. If you want to allow these, you have to add 4817 or double quotes. If you want to allow these, you have to add
4808 another layer of quoting to each variable that is used as a C 4818 another layer of quoting to each variable that is used as a C
4809 string literal. You cannot use the <code class="varname">:Q</code> 4819 string literal. You cannot use the <code class="varname">:Q</code>
4810 operator for it, as this operator only works for the 4820 operator for it, as this operator only works for the
4811 shell.</p></li> 4821 shell.</p></li>
4812<li class="listitem"> 4822<li class="listitem">
4813<p>Whenever a variable can be empty, the 4823<p>Whenever a variable can be empty, the
4814 <code class="varname">:Q</code> operator can have surprising results. Here 4824 <code class="varname">:Q</code> operator can have surprising results. Here
4815 are two completely different cases which can be solved with the 4825 are two completely different cases which can be solved with the
4816 same trick.</p> 4826 same trick.</p>
4817<pre class="programlisting"> 4827<pre class="programlisting">
4818EMPTY= # empty 4828EMPTY= # empty
4819empty_test: 4829empty_test:
4820 for i in a ${EMPTY:Q} c; do \ 4830 for i in a ${EMPTY:Q} c; do \
4821 echo "$$i"; \ 4831 echo "$$i"; \
4822 done 4832 done
4823 4833
4824for_test: 4834for_test:
4825.for i in a:\ a:\test.txt 4835.for i in a:\ a:\test.txt
4826 echo ${i:Q} 4836 echo ${i:Q}
4827 echo "foo" 4837 echo "foo"
4828.endfor 4838.endfor
4829</pre> 4839</pre>
4830<p>The first example will only print two of the three lines 4840<p>The first example will only print two of the three lines
4831 we might have expected. This is because 4841 we might have expected. This is because
4832 <code class="varname">${EMPTY:Q}</code> expands to the empty string, which 4842 <code class="varname">${EMPTY:Q}</code> expands to the empty string, which
4833 the shell cannot see. The workaround is to write 4843 the shell cannot see. The workaround is to write
4834 <code class="varname">${EMPTY:Q}""</code>. This pattern can be often found 4844 <code class="varname">${EMPTY:Q}""</code>. This pattern can be often found
4835 as <code class="varname">${TEST} -z ${VAR:Q}</code> or as <code class="varname">${TEST} 4845 as <code class="varname">${TEST} -z ${VAR:Q}</code> or as <code class="varname">${TEST}
4836 -f ${FNAME:Q}</code> (both of these are wrong).</p> 4846 -f ${FNAME:Q}</code> (both of these are wrong).</p>
4837<p>The second example will only print three lines instead of 4847<p>The second example will only print three lines instead of
4838 four. The first line looks like <code class="varname">a:\ echo foo</code>. 4848 four. The first line looks like <code class="varname">a:\ echo foo</code>.
4839 This is because the backslash of the value 4849 This is because the backslash of the value
4840 <code class="varname">a:\</code> is interpreted as a line-continuation by 4850 <code class="varname">a:\</code> is interpreted as a line-continuation by
4841 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>, which makes the second line the arguments of the 4851 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>, which makes the second line the arguments of the
4842 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?echo+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">echo</span>(1)</span></a> command from the first line. To avoid this, write 4852 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?echo+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">echo</span>(1)</span></a> command from the first line. To avoid this, write
4843 <code class="varname">${i:Q}""</code>.</p> 4853 <code class="varname">${i:Q}""</code>.</p>
4844</li> 4854</li>
4845</ul></div> 4855</ul></div>
4846</div> 4856</div>
4847<div class="sect2"> 4857<div class="sect2">
4848<div class="titlepage"><div><div><h3 class="title"> 4858<div class="titlepage"><div><div><h3 class="title">
4849<a name="bsd-make-bug-workaround"></a>12.3.5. Workaround for a bug in BSD Make</h3></div></div></div> 4859<a name="bsd-make-bug-workaround"></a>12.3.5. Workaround for a bug in BSD Make</h3></div></div></div>
4850<p>The pkgsrc bmake program does not handle the following 4860<p>The pkgsrc bmake program does not handle the following
4851 assignment correctly. In case <code class="varname">_othervar_</code> 4861 assignment correctly. In case <code class="varname">_othervar_</code>
4852 contains a ``-'' character, one of the closing braces is included 4862 contains a ``-'' character, one of the closing braces is included
4853 in <code class="varname">${VAR}</code> after this code executes.</p> 4863 in <code class="varname">${VAR}</code> after this code executes.</p>
4854<pre class="programlisting"> 4864<pre class="programlisting">
4855VAR:= ${VAR:N${_othervar_:C/-//}} 4865VAR:= ${VAR:N${_othervar_:C/-//}}
4856</pre> 4866</pre>
4857<p>For a more complex code snippet and a workaround, see the 4867<p>For a more complex code snippet and a workaround, see the
4858 package <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/regress/make-quoting/README.html" target="_top"><code class="filename">regress/make-quoting</code></a>, testcase 4868 package <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/regress/make-quoting/README.html" target="_top"><code class="filename">regress/make-quoting</code></a>, testcase
4859 <code class="varname">bug1</code>.</p> 4869 <code class="varname">bug1</code>.</p>
4860</div> 4870</div>
4861</div> 4871</div>
4862</div> 4872</div>
4863<div class="chapter"> 4873<div class="chapter">
4864<div class="titlepage"><div><div><h2 class="title"> 4874<div class="titlepage"><div><div><h2 class="title">
4865<a name="plist"></a>Chapter 13. PLIST issues</h2></div></div></div> 4875<a name="plist"></a>Chapter 13. PLIST issues</h2></div></div></div>
4866<div class="toc"> 4876<div class="toc">
4867<p><b>Table of Contents</b></p> 4877<p><b>Table of Contents</b></p>
4868<dl> 4878<dl>
4869<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt> 4879<dt><span class="sect1"><a href="#rcs-id">13.1. RCS ID</a></span></dt>
4870<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt> 4880<dt><span class="sect1"><a href="#automatic-plist-generation">13.2. Semi-automatic <code class="filename">PLIST</code> generation</a></span></dt>
4871<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> 4881<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>
4872<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt> 4882<dt><span class="sect1"><a href="#plist.misc">13.4. Variable substitution in PLIST</a></span></dt>
4873<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt> 4883<dt><span class="sect1"><a href="#manpage-compression">13.5. Man page compression</a></span></dt>
4874<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt> 4884<dt><span class="sect1"><a href="#using-PLIST_SRC">13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code></a></span></dt>
4875<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt> 4885<dt><span class="sect1"><a href="#platform-specific-plist">13.7. Platform-specific and differing PLISTs</a></span></dt>
4876<dt><span class="sect1"><a href="#faq.common-dirs">13.8. Sharing directories between packages</a></span></dt> 4886<dt><span class="sect1"><a href="#faq.common-dirs">13.8. Sharing directories between packages</a></span></dt>
4877</dl> 4887</dl>
4878</div> 4888</div>
4879<p>The <code class="filename">PLIST</code> file contains a package's 4889<p>The <code class="filename">PLIST</code> file contains a package's
4880 <span class="quote">&#8220;<span class="quote">packing list</span>&#8221;</span>, i.e. a list of files that belong to 4890 <span class="quote">&#8220;<span class="quote">packing list</span>&#8221;</span>, i.e. a list of files that belong to
4881 the package (relative to the <code class="filename">${PREFIX}</code> 4891 the package (relative to the <code class="filename">${PREFIX}</code>
4882 directory it's been installed in) plus some additional statements 4892 directory it's been installed in) plus some additional statements
4883 - see the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> man page for a full list. 4893 - see the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_create+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> man page for a full list.
4884 This chapter addresses some issues that need attention when 4894 This chapter addresses some issues that need attention when
4885 dealing with the <code class="filename">PLIST</code> file (or files, see 4895 dealing with the <code class="filename">PLIST</code> file (or files, see
4886 below!).</p> 4896 below!).</p>
4887<div class="sect1"> 4897<div class="sect1">
4888<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4898<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4889<a name="rcs-id"></a>13.1. RCS ID</h2></div></div></div> 4899<a name="rcs-id"></a>13.1. RCS ID</h2></div></div></div>
4890<p>Be sure to add a RCS ID line as the first thing in any 4900<p>Be sure to add a RCS ID line as the first thing in any
4891 <code class="filename">PLIST</code> file you write:</p> 4901 <code class="filename">PLIST</code> file you write:</p>
4892<pre class="programlisting"> 4902<pre class="programlisting">
4893@comment $NetBSD$ 4903@comment $NetBSD$
4894 </pre> 4904 </pre>
4895</div> 4905</div>
4896<div class="sect1"> 4906<div class="sect1">
4897<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4907<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4898<a name="automatic-plist-generation"></a>13.2. Semi-automatic <code class="filename">PLIST</code> generation</h2></div></div></div> 4908<a name="automatic-plist-generation"></a>13.2. Semi-automatic <code class="filename">PLIST</code> generation</h2></div></div></div>
4899<p>You can use the <span class="command"><strong>make print-PLIST</strong></span> command 4909<p>You can use the <span class="command"><strong>make print-PLIST</strong></span> command
4900 to output a PLIST that matches any new files since the package 4910 to output a PLIST that matches any new files since the package
4901 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 4911 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
4902 more information on this target.</p> 4912 more information on this target.</p>
4903</div> 4913</div>
4904<div class="sect1"> 4914<div class="sect1">
4905<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4915<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4906<a name="print-PLIST"></a>13.3. Tweaking output of <span class="command"><strong>make print-PLIST</strong></span> 4916<a name="print-PLIST"></a>13.3. Tweaking output of <span class="command"><strong>make print-PLIST</strong></span>
4907</h2></div></div></div> 4917</h2></div></div></div>
4908<p>If you have used any of the *-dirs packages, as explained in 4918<p>If you have used any of the *-dirs packages, as explained in
4909 <a class="xref" href="#faq.common-dirs" title="13.8. Sharing directories between packages">Section 13.8, &#8220;Sharing directories between packages&#8221;</a>, you may have noticed that 4919 <a class="xref" href="#faq.common-dirs" title="13.8. Sharing directories between packages">Section 13.8, &#8220;Sharing directories between packages&#8221;</a>, you may have noticed that
4910 <span class="command"><strong>make print-PLIST</strong></span> outputs a set of 4920 <span class="command"><strong>make print-PLIST</strong></span> outputs a set of
4911 <code class="varname">@comment</code>s instead of real 4921 <code class="varname">@comment</code>s instead of real
4912 <code class="varname">@dirrm</code> lines. You can also do this for 4922 <code class="varname">@dirrm</code> lines. You can also do this for
4913 specific directories and files, so that the results of that 4923 specific directories and files, so that the results of that
4914 command are very close to reality. This helps <span class="emphasis"><em>a 4924 command are very close to reality. This helps <span class="emphasis"><em>a
4915 lot</em></span> during the update of packages.</p> 4925 lot</em></span> during the update of packages.</p>
4916<p>The <code class="varname">PRINT_PLIST_AWK</code> variable takes a set 4926<p>The <code class="varname">PRINT_PLIST_AWK</code> variable takes a set
4917 of AWK patterns and actions that are used to filter the output of 4927 of AWK patterns and actions that are used to filter the output of
4918 print-PLIST. You can <span class="emphasis"><em>append</em></span> any chunk of AWK 4928 print-PLIST. You can <span class="emphasis"><em>append</em></span> any chunk of AWK
4919 scripting you like to it, but be careful with quoting.</p> 4929 scripting you like to it, but be careful with quoting.</p>
4920<p>For example, to get all files inside the 4930<p>For example, to get all files inside the
4921 <code class="filename">libdata/foo</code> directory removed from the 4931 <code class="filename">libdata/foo</code> directory removed from the
4922 resulting PLIST:</p> 4932 resulting PLIST:</p>
4923<pre class="programlisting"> 4933<pre class="programlisting">
4924PRINT_PLIST_AWK+= /^libdata\/foo/ { next; } 4934PRINT_PLIST_AWK+= /^libdata\/foo/ { next; }
4925 </pre> 4935 </pre>
4926<p>And to get all the <code class="varname">@dirrm</code> lines referring 4936<p>And to get all the <code class="varname">@dirrm</code> lines referring
4927 to a specific (shared) directory converted to 4937 to a specific (shared) directory converted to
4928 <code class="varname">@comment</code>s:</p> 4938 <code class="varname">@comment</code>s:</p>
4929<pre class="programlisting"> 4939<pre class="programlisting">
4930PRINT_PLIST_AWK+= /^@dirrm share\/specific/ { print "@comment " $$0; next; } 4940PRINT_PLIST_AWK+= /^@dirrm share\/specific/ { print "@comment " $$0; next; }
4931 </pre> 4941 </pre>
4932</div> 4942</div>
4933<div class="sect1"> 4943<div class="sect1">
4934<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4944<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4935<a name="plist.misc"></a>13.4. Variable substitution in PLIST</h2></div></div></div> 4945<a name="plist.misc"></a>13.4. Variable substitution in PLIST</h2></div></div></div>
4936<p>A number of variables are substituted automatically in 4946<p>A number of variables are substituted automatically in
4937 PLISTs when a package is installed on a system. This includes the 4947 PLISTs when a package is installed on a system. This includes the
4938 following variables:</p> 4948 following variables:</p>
4939<div class="variablelist"><dl class="variablelist"> 4949<div class="variablelist"><dl class="variablelist">
4940<dt><span class="term"><code class="varname">${MACHINE_ARCH}</code>, <code class="varname">${MACHINE_GNU_ARCH}</code></span></dt> 4950<dt><span class="term"><code class="varname">${MACHINE_ARCH}</code>, <code class="varname">${MACHINE_GNU_ARCH}</code></span></dt>
4941<dd> 4951<dd>
4942<p>Some packages like emacs and perl embed information 4952<p>Some packages like emacs and perl embed information
4943 about which architecture they were built on into the 4953 about which architecture they were built on into the
4944 pathnames where they install their files. To handle this 4954 pathnames where they install their files. To handle this
4945 case, PLIST will be preprocessed before actually used, and 4955 case, PLIST will be preprocessed before actually used, and
4946 the symbol 4956 the symbol
4947 <span class="quote">&#8220;<span class="quote"><code class="varname">${MACHINE_ARCH}</code></span>&#8221;</span> will be 4957 <span class="quote">&#8220;<span class="quote"><code class="varname">${MACHINE_ARCH}</code></span>&#8221;</span> will be
4948 replaced by what <span class="command"><strong>uname -p</strong></span> gives. The 4958 replaced by what <span class="command"><strong>uname -p</strong></span> gives. The
4949 same is done if the string 4959 same is done if the string
4950 <code class="varname">${MACHINE_GNU_ARCH}</code> is embedded in 4960 <code class="varname">${MACHINE_GNU_ARCH}</code> is embedded in
4951 PLIST somewhere - use this on packages that have GNU 4961 PLIST somewhere - use this on packages that have GNU
4952 autoconf-created configure scripts.</p> 4962 autoconf-created configure scripts.</p>
4953<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 4963<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
4954<h3 class="title">Legacy note</h3> 4964<h3 class="title">Legacy note</h3>
4955<p>There used to be a symbol 4965<p>There used to be a symbol
4956 <span class="quote">&#8220;<span class="quote"><code class="varname">$ARCH</code></span>&#8221;</span> that 4966 <span class="quote">&#8220;<span class="quote"><code class="varname">$ARCH</code></span>&#8221;</span> that
4957 was replaced by the output of <span class="command"><strong>uname 4967 was replaced by the output of <span class="command"><strong>uname
4958 -m</strong></span>, but that's no longer supported and has 4968 -m</strong></span>, but that's no longer supported and has
4959 been removed.</p> 4969 been removed.</p>
4960</div> 4970</div>
4961</dd> 4971</dd>
4962<dt><span class="term"><code class="varname">${OPSYS}</code>, <code class="varname">${LOWER_OPSYS}</code>, <code class="varname">${OS_VERSION}</code></span></dt> 4972<dt><span class="term"><code class="varname">${OPSYS}</code>, <code class="varname">${LOWER_OPSYS}</code>, <code class="varname">${OS_VERSION}</code></span></dt>
4963<dd> 4973<dd>
4964<p>Some packages want to embed the OS name and version 4974<p>Some packages want to embed the OS name and version
4965 into some paths. To do this, use these variables in the 4975 into some paths. To do this, use these variables in the
4966 <code class="filename">PLIST</code>: 4976 <code class="filename">PLIST</code>:
4967 </p> 4977 </p>
4968<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4978<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4969<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> 4979<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>
4970<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> 4980<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>
4971<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> 4981<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>
4972</ul></div> 4982</ul></div>
4973</dd> 4983</dd>
4974</dl></div> 4984</dl></div>
4975<p>For a complete list of values which are replaced by 4985<p>For a complete list of values which are replaced by
4976 default, please look in <code class="filename">bsd.pkg.mk</code> (and 4986 default, please look in <code class="filename">bsd.pkg.mk</code> (and
4977 search for <code class="varname">PLIST_SUBST</code>).</p> 4987 search for <code class="varname">PLIST_SUBST</code>).</p>
4978<p>If you want to change other variables not listed above, you 4988<p>If you want to change other variables not listed above, you
4979 can add variables and their expansions to this variable in the 4989 can add variables and their expansions to this variable in the
4980 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> 4990 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>
4981<pre class="programlisting"> 4991<pre class="programlisting">
4982PLIST_SUBST+= SOMEVAR="somevalue" 4992PLIST_SUBST+= SOMEVAR="somevalue"
4983 </pre> 4993 </pre>
4984<p>This replaces all occurrences of <span class="quote">&#8220;<span class="quote">${SOMEVAR}</span>&#8221;</span> 4994<p>This replaces all occurrences of <span class="quote">&#8220;<span class="quote">${SOMEVAR}</span>&#8221;</span>
4985 in the <code class="filename">PLIST</code> with 4995 in the <code class="filename">PLIST</code> with
4986 <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span>.</p> 4996 <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span>.</p>
4987<p>The <code class="varname">PLIST_VARS</code> variable can be used to simplify 4997<p>The <code class="varname">PLIST_VARS</code> variable can be used to simplify
4988 the common case of conditionally including some 4998 the common case of conditionally including some
4989 <code class="filename">PLIST</code> entries. It can be done by adding 4999 <code class="filename">PLIST</code> entries. It can be done by adding
4990 <code class="literal"><code class="varname">PLIST_VARS</code>+=foo</code> and 5000 <code class="literal"><code class="varname">PLIST_VARS</code>+=foo</code> and
4991 setting the corresponding <code class="varname">PLIST.foo</code> variable 5001 setting the corresponding <code class="varname">PLIST.foo</code> variable
4992 to <code class="literal">yes</code> if the entry should be included. 5002 to <code class="literal">yes</code> if the entry should be included.
4993 This will substitute <span class="quote">&#8220;<span class="quote"><code class="varname">${PLIST.foo}</code></span>&#8221;</span> 5003 This will substitute <span class="quote">&#8220;<span class="quote"><code class="varname">${PLIST.foo}</code></span>&#8221;</span>
4994 in the <code class="filename">PLIST</code> with either 5004 in the <code class="filename">PLIST</code> with either
4995 <span class="quote">&#8220;<span class="quote"><code class="literal">""</code></span>&#8221;</span> or 5005 <span class="quote">&#8220;<span class="quote"><code class="literal">""</code></span>&#8221;</span> or
4996 <span class="quote">&#8220;<span class="quote"><code class="literal">"@comment "</code></span>&#8221;</span>. 5006 <span class="quote">&#8220;<span class="quote"><code class="literal">"@comment "</code></span>&#8221;</span>.
4997 For example, in <code class="filename">Makefile</code>:</p> 5007 For example, in <code class="filename">Makefile</code>:</p>
4998<pre class="programlisting"> 5008<pre class="programlisting">
4999PLIST_VARS+= foo 5009PLIST_VARS+= foo
5000.if <em class="replaceable"><code>condition</code></em> 5010.if <em class="replaceable"><code>condition</code></em>
5001PLIST.foo= yes 5011PLIST.foo= yes
5002.else 5012.else
5003 </pre> 5013 </pre>
5004<p>And then in <code class="filename">PLIST</code>:</p> 5014<p>And then in <code class="filename">PLIST</code>:</p>
5005<pre class="programlisting"> 5015<pre class="programlisting">
5006@comment $NetBSD$ 5016@comment $NetBSD$
5007bin/bar 5017bin/bar
5008man/man1/bar.1 5018man/man1/bar.1
5009${PLIST.foo}bin/foo 5019${PLIST.foo}bin/foo
5010${PLIST.foo}man/man1/foo.1 5020${PLIST.foo}man/man1/foo.1
5011${PLIST.foo}share/bar/foo.data 5021${PLIST.foo}share/bar/foo.data
5012${PLIST.foo}@dirrm share/bar 5022${PLIST.foo}@dirrm share/bar
5013 </pre> 5023 </pre>
5014</div> 5024</div>
5015<div class="sect1"> 5025<div class="sect1">
5016<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5026<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5017<a name="manpage-compression"></a>13.5. Man page compression</h2></div></div></div> 5027<a name="manpage-compression"></a>13.5. Man page compression</h2></div></div></div>
5018<p>Man pages should be installed in compressed form if 5028<p>Man pages should be installed in compressed form if
5019 <code class="varname">MANZ</code> is set (in <code class="filename">bsd.own.mk</code>), 5029 <code class="varname">MANZ</code> is set (in <code class="filename">bsd.own.mk</code>),
5020 and uncompressed otherwise. To handle this in the 5030 and uncompressed otherwise. To handle this in the
5021 <code class="filename">PLIST</code> file, the suffix <span class="quote">&#8220;<span class="quote">.gz</span>&#8221;</span> is 5031 <code class="filename">PLIST</code> file, the suffix <span class="quote">&#8220;<span class="quote">.gz</span>&#8221;</span> is
5022 appended/removed automatically for man pages according to 5032 appended/removed automatically for man pages according to
5023 <code class="varname">MANZ</code> and <code class="varname">MANCOMPRESSED</code> being set 5033 <code class="varname">MANZ</code> and <code class="varname">MANCOMPRESSED</code> being set
5024 or not, see above for details. This modification of the 5034 or not, see above for details. This modification of the
5025 <code class="filename">PLIST</code> file is done on a copy of it, not 5035 <code class="filename">PLIST</code> file is done on a copy of it, not
5026 <code class="filename">PLIST</code> itself.</p> 5036 <code class="filename">PLIST</code> itself.</p>
5027</div> 5037</div>
5028<div class="sect1"> 5038<div class="sect1">
5029<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5039<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5030<a name="using-PLIST_SRC"></a>13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code> 5040<a name="using-PLIST_SRC"></a>13.6. Changing PLIST source with <code class="varname">PLIST_SRC</code>
5031</h2></div></div></div> 5041</h2></div></div></div>
5032<p>To use one or more files as source for the <code class="filename">PLIST</code> used 5042<p>To use one or more files as source for the <code class="filename">PLIST</code> used
5033 in generating the binary package, set the variable 5043 in generating the binary package, set the variable
5034 <code class="varname">PLIST_SRC</code> to the names of that file(s). 5044 <code class="varname">PLIST_SRC</code> to the names of that file(s).
5035 The files are later concatenated using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cat+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">cat</span>(1)</span></a>, and the order of things is 5045 The files are later concatenated using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cat+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">cat</span>(1)</span></a>, and the order of things is
5036 important. The default for <code class="varname">PLIST_SRC</code> is 5046 important. The default for <code class="varname">PLIST_SRC</code> is
5037 <code class="filename">${PKGDIR}/PLIST</code>.</p> 5047 <code class="filename">${PKGDIR}/PLIST</code>.</p>
5038</div> 5048</div>
5039<div class="sect1"> 5049<div class="sect1">
5040<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5050<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5041<a name="platform-specific-plist"></a>13.7. Platform-specific and differing PLISTs</h2></div></div></div> 5051<a name="platform-specific-plist"></a>13.7. Platform-specific and differing PLISTs</h2></div></div></div>
5042<p>Some packages decide to install a different set of files based on 5052<p>Some packages decide to install a different set of files based on
5043 the operating system being used. These differences can be 5053 the operating system being used. These differences can be
5044 automatically handled by using the following files:</p> 5054 automatically handled by using the following files:</p>
5045<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5055<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5046<li class="listitem"><p><code class="filename">PLIST.common</code></p></li> 5056<li class="listitem"><p><code class="filename">PLIST.common</code></p></li>
5047<li class="listitem"><p><code class="filename">PLIST.${OPSYS}</code></p></li> 5057<li class="listitem"><p><code class="filename">PLIST.${OPSYS}</code></p></li>
5048<li class="listitem"><p><code class="filename">PLIST.${MACHINE_ARCH}</code></p></li> 5058<li class="listitem"><p><code class="filename">PLIST.${MACHINE_ARCH}</code></p></li>
5049<li class="listitem"><p><code class="filename">PLIST.${OPSYS}-${MACHINE_ARCH}</code></p></li> 5059<li class="listitem"><p><code class="filename">PLIST.${OPSYS}-${MACHINE_ARCH}</code></p></li>
5050<li class="listitem"><p><code class="filename">PLIST.common_end</code></p></li> 5060<li class="listitem"><p><code class="filename">PLIST.common_end</code></p></li>
5051</ul></div> 5061</ul></div>
5052</div> 5062</div>
5053<div class="sect1"> 5063<div class="sect1">
5054<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5064<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5055<a name="faq.common-dirs"></a>13.8. Sharing directories between packages</h2></div></div></div> 5065<a name="faq.common-dirs"></a>13.8. Sharing directories between packages</h2></div></div></div>
5056<p>A <span class="quote">&#8220;<span class="quote">shared directory</span>&#8221;</span> is a directory where 5066<p>A <span class="quote">&#8220;<span class="quote">shared directory</span>&#8221;</span> is a directory where
5057 multiple (and unrelated) packages install files. These 5067 multiple (and unrelated) packages install files. These
5058 directories were problematic because you had to add special 5068 directories were problematic because you had to add special
5059 tricks in the PLIST to conditionally remove them, or have some 5069 tricks in the PLIST to conditionally remove them, or have some
5060 centralized package handle them.</p> 5070 centralized package handle them.</p>
5061<p>In pkgsrc, it is now easy: Each package should create 5071<p>In pkgsrc, it is now easy: Each package should create
5062 directories and install files as needed; <span class="command"><strong>pkg_delete</strong></span> 5072 directories and install files as needed; <span class="command"><strong>pkg_delete</strong></span>
5063 will remove any directories left empty after uninstalling a 5073 will remove any directories left empty after uninstalling a
5064 package.</p> 5074 package.</p>
5065<p>If a package needs an empty directory to work, create 5075<p>If a package needs an empty directory to work, create
5066 the directory during installation as usual, and also add an 5076 the directory during installation as usual, and also add an
5067 entry to the PLIST: 5077 entry to the PLIST:
5068 </p> 5078 </p>
5069<pre class="programlisting"> 5079<pre class="programlisting">
5070@pkgdir path/to/empty/directory 5080@pkgdir path/to/empty/directory
5071 </pre> 5081 </pre>
5072<p> 5082<p>
5073 </p> 5083 </p>
5074</div> 5084</div>
5075</div> 5085</div>
5076<div class="chapter"> 5086<div class="chapter">
5077<div class="titlepage"><div><div><h2 class="title"> 5087<div class="titlepage"><div><div><h2 class="title">
5078<a name="buildlink"></a>Chapter 14. Buildlink methodology</h2></div></div></div> 5088<a name="buildlink"></a>Chapter 14. Buildlink methodology</h2></div></div></div>
5079<div class="toc"> 5089<div class="toc">
5080<p><b>Table of Contents</b></p> 5090<p><b>Table of Contents</b></p>
5081<dl> 5091<dl>
5082<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt> 5092<dt><span class="sect1"><a href="#converting-to-buildlink3">14.1. Converting packages to use buildlink3</a></span></dt>
5083<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt> 5093<dt><span class="sect1"><a href="#creating-buildlink3.mk">14.2. Writing <code class="filename">buildlink3.mk</code> files</a></span></dt>
5084<dd><dl> 5094<dd><dl>
5085<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt> 5095<dt><span class="sect2"><a href="#anatomy-of-bl3">14.2.1. Anatomy of a buildlink3.mk file</a></span></dt>
5086<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating 5096<dt><span class="sect2"><a href="#updating-buildlink-depends">14.2.2. Updating
5087 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5097 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5088 and 5098 and
5089 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5099 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5090 in <code class="filename">buildlink3.mk</code> files</a></span></dt> 5100 in <code class="filename">buildlink3.mk</code> files</a></span></dt>
5091</dl></dd> 5101</dl></dd>
5092<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt> 5102<dt><span class="sect1"><a href="#writing-builtin.mk">14.3. Writing <code class="filename">builtin.mk</code> files</a></span></dt>
5093<dd><dl> 5103<dd><dl>
5094<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> 5104<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>
5095<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt> 5105<dt><span class="sect2"><a href="#native-or-pkgsrc-preference">14.3.2. Global preferences for native or pkgsrc software</a></span></dt>
5096</dl></dd> 5106</dl></dd>
5097</dl> 5107</dl>
5098</div> 5108</div>
5099<p>Buildlink is a framework in pkgsrc that controls what headers and libraries 5109<p>Buildlink is a framework in pkgsrc that controls what headers and libraries
5100 are seen by a package's configure and build processes. This is implemented 5110 are seen by a package's configure and build processes. This is implemented
5101 in a two step process:</p> 5111 in a two step process:</p>
5102<div class="orderedlist"><ol class="orderedlist" type="1"> 5112<div class="orderedlist"><ol class="orderedlist" type="1">
5103<li class="listitem"><p>Symlink headers and libraries for dependencies into 5113<li class="listitem"><p>Symlink headers and libraries for dependencies into
5104 <code class="varname">BUILDLINK_DIR</code>, which by default is a subdirectory 5114 <code class="varname">BUILDLINK_DIR</code>, which by default is a subdirectory
5105 of <code class="varname">WRKDIR</code>.</p></li> 5115 of <code class="varname">WRKDIR</code>.</p></li>
5106<li class="listitem"><p>Create wrapper scripts that are used in place of the normal compiler 5116<li class="listitem"><p>Create wrapper scripts that are used in place of the normal compiler
5107 tools that translate <code class="option">-I${LOCALBASE}/include</code> and 5117 tools that translate <code class="option">-I${LOCALBASE}/include</code> and
5108 <code class="option">-L${LOCALBASE}/lib</code> into references to 5118 <code class="option">-L${LOCALBASE}/lib</code> into references to
5109 <code class="varname">BUILDLINK_DIR</code>. The wrapper scripts also make 5119 <code class="varname">BUILDLINK_DIR</code>. The wrapper scripts also make
5110 native compiler on some operating systems look like GCC, so that 5120 native compiler on some operating systems look like GCC, so that
5111 packages that expect GCC won't require modifications to build with 5121 packages that expect GCC won't require modifications to build with
5112 those native compilers.</p></li> 5122 those native compilers.</p></li>
5113</ol></div> 5123</ol></div>
5114<p>This normalizes the environment in which a package is built so that the 5124<p>This normalizes the environment in which a package is built so that the
5115 package may be built consistently despite what other software may be 5125 package may be built consistently despite what other software may be
5116 installed. Please note that the normal system header and library paths, 5126 installed. Please note that the normal system header and library paths,
5117 e.g. <code class="filename">/usr/include</code>, 5127 e.g. <code class="filename">/usr/include</code>,
5118 <code class="filename">/usr/lib</code>, etc., are always searched -- buildlink3 is 5128 <code class="filename">/usr/lib</code>, etc., are always searched -- buildlink3 is
5119 designed to insulate the package build from non-system-supplied 5129 designed to insulate the package build from non-system-supplied
5120 software.</p> 5130 software.</p>
5121<div class="sect1"> 5131<div class="sect1">
5122<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5132<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5123<a name="converting-to-buildlink3"></a>14.1. Converting packages to use buildlink3</h2></div></div></div> 5133<a name="converting-to-buildlink3"></a>14.1. Converting packages to use buildlink3</h2></div></div></div>
5124<p>The process of converting packages to use the buildlink3 5134<p>The process of converting packages to use the buildlink3
5125 framework (<span class="quote">&#8220;<span class="quote">bl3ifying</span>&#8221;</span>) is fairly straightforward. 5135 framework (<span class="quote">&#8220;<span class="quote">bl3ifying</span>&#8221;</span>) is fairly straightforward.
5126 The things to keep in mind are:</p> 5136 The things to keep in mind are:</p>
5127<div class="orderedlist"><ol class="orderedlist" type="1"> 5137<div class="orderedlist"><ol class="orderedlist" type="1">
5128<li class="listitem"><p>Ensure that the build always calls the wrapper scripts 5138<li class="listitem"><p>Ensure that the build always calls the wrapper scripts
5129 instead of the actual toolchain. Some packages are tricky, 5139 instead of the actual toolchain. Some packages are tricky,
5130 and the only way to know for sure is the check 5140 and the only way to know for sure is the check
5131 <code class="filename">${WRKDIR}/.work.log</code> to see if the 5141 <code class="filename">${WRKDIR}/.work.log</code> to see if the
5132 wrappers are being invoked.</p></li> 5142 wrappers are being invoked.</p></li>
5133<li class="listitem"><p>Don't override <code class="varname">PREFIX</code> from within 5143<li class="listitem"><p>Don't override <code class="varname">PREFIX</code> from within
5134 the package Makefile, e.g. Java VMs, standalone shells, 5144 the package Makefile, e.g. Java VMs, standalone shells,
5135 etc., because the code to symlink files into 5145 etc., because the code to symlink files into
5136 <code class="filename">${BUILDLINK_DIR}</code> looks for files 5146 <code class="filename">${BUILDLINK_DIR}</code> looks for files
5137 relative to <span class="quote">&#8220;<span class="quote">pkg_info -qp <em class="replaceable"><code>pkgname</code></em></span>&#8221;</span>. 5147 relative to <span class="quote">&#8220;<span class="quote">pkg_info -qp <em class="replaceable"><code>pkgname</code></em></span>&#8221;</span>.
5138 </p></li> 5148 </p></li>
5139<li class="listitem"><p>Remember that <span class="emphasis"><em>only</em></span> the 5149<li class="listitem"><p>Remember that <span class="emphasis"><em>only</em></span> the
5140 <code class="filename">buildlink3.mk</code> files that you list in a 5150 <code class="filename">buildlink3.mk</code> files that you list in a
5141 package's Makefile are added as dependencies for that package. 5151 package's Makefile are added as dependencies for that package.
5142 </p></li> 5152 </p></li>
5143</ol></div> 5153</ol></div>
5144<p>If a dependency on a particular package is required for its libraries and 5154<p>If a dependency on a particular package is required for its libraries and
5145 headers, then we replace:</p> 5155 headers, then we replace:</p>
5146<pre class="programlisting"> 5156<pre class="programlisting">
5147DEPENDS+= foo&gt;=1.1.0:../../category/foo 5157DEPENDS+= foo&gt;=1.1.0:../../category/foo
5148</pre> 5158</pre>
5149<p>with</p> 5159<p>with</p>
5150<pre class="programlisting"> 5160<pre class="programlisting">
5151.include "../../category/foo/buildlink3.mk" 5161.include "../../category/foo/buildlink3.mk"
5152</pre> 5162</pre>
5153<p>The buildlink3.mk files usually define the required dependencies. 5163<p>The buildlink3.mk files usually define the required dependencies.
5154 If you need a newer version of the dependency when using buildlink3.mk 5164 If you need a newer version of the dependency when using buildlink3.mk
5155 files, then you can define it in your Makefile; for example:</p> 5165 files, then you can define it in your Makefile; for example:</p>
5156<pre class="programlisting"> 5166<pre class="programlisting">
5157BUILDLINK_API_DEPENDS.foo+= foo&gt;=1.1.0 5167BUILDLINK_API_DEPENDS.foo+= foo&gt;=1.1.0
5158.include "../../category/foo/buildlink3.mk" 5168.include "../../category/foo/buildlink3.mk"
5159</pre> 5169</pre>
5160<p>There are several <code class="filename">buildlink3.mk</code> 5170<p>There are several <code class="filename">buildlink3.mk</code>
5161 files in <code class="filename">pkgsrc/mk</code> 5171 files in <code class="filename">pkgsrc/mk</code>
5162 that handle special package issues:</p> 5172 that handle special package issues:</p>
5163<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5173<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5164<li class="listitem"><p><code class="filename">bdb.buildlink3.mk</code> chooses either 5174<li class="listitem"><p><code class="filename">bdb.buildlink3.mk</code> chooses either
5165 the native or a pkgsrc Berkeley DB implementation based on 5175 the native or a pkgsrc Berkeley DB implementation based on
5166 the values of <code class="varname">BDB_ACCEPTED</code> and 5176 the values of <code class="varname">BDB_ACCEPTED</code> and
5167 <code class="varname">BDB_DEFAULT</code>.</p></li> 5177 <code class="varname">BDB_DEFAULT</code>.</p></li>
5168<li class="listitem"><p><code class="filename">curses.buildlink3.mk</code>: If the system 5178<li class="listitem"><p><code class="filename">curses.buildlink3.mk</code>: If the system
5169 comes with neither Curses nor NCurses, this will take care 5179 comes with neither Curses nor NCurses, this will take care
5170 to install the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/ncurses/README.html" target="_top"><code class="filename">devel/ncurses</code></a> package.</p></li> 5180 to install the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/ncurses/README.html" target="_top"><code class="filename">devel/ncurses</code></a> package.</p></li>
5171<li class="listitem"><p><code class="filename">krb5.buildlink3.mk</code> uses the value 5181<li class="listitem"><p><code class="filename">krb5.buildlink3.mk</code> uses the value
5172 of <code class="varname">KRB5_ACCEPTED</code> to choose between 5182 of <code class="varname">KRB5_ACCEPTED</code> to choose between
5173 adding a dependency on Heimdal or MIT-krb5 for packages that 5183 adding a dependency on Heimdal or MIT-krb5 for packages that
5174 require a Kerberos 5 implementation.</p></li> 5184 require a Kerberos 5 implementation.</p></li>
5175<li class="listitem"><p><code class="filename">motif.buildlink3.mk</code> checks for a 5185<li class="listitem"><p><code class="filename">motif.buildlink3.mk</code> checks for a
5176 system-provided Motif installation or adds a dependency on 5186 system-provided Motif installation or adds a dependency on
5177 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/lesstif/README.html" target="_top"><code class="filename">x11/lesstif</code></a>, <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/motif/README.html" target="_top"><code class="filename">x11/motif</code></a> or <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/openmotif/README.html" target="_top"><code class="filename">x11/openmotif</code></a>. The user can set 5187 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/lesstif/README.html" target="_top"><code class="filename">x11/lesstif</code></a>, <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/motif/README.html" target="_top"><code class="filename">x11/motif</code></a> or <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/openmotif/README.html" target="_top"><code class="filename">x11/openmotif</code></a>. The user can set
5178 <code class="varname">MOTIF_TYPE</code> to <span class="quote">&#8220;<span class="quote">dt</span>&#8221;</span>, 5188 <code class="varname">MOTIF_TYPE</code> to <span class="quote">&#8220;<span class="quote">dt</span>&#8221;</span>,
5179 <span class="quote">&#8220;<span class="quote">lesstif</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">motif</span>&#8221;</span> or 5189 <span class="quote">&#8220;<span class="quote">lesstif</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">motif</span>&#8221;</span> or
5180 <span class="quote">&#8220;<span class="quote">openmotif</span>&#8221;</span> to choose 5190 <span class="quote">&#8220;<span class="quote">openmotif</span>&#8221;</span> to choose
5181 which Motif version will be used.</p></li> 5191 which Motif version will be used.</p></li>
5182<li class="listitem"><p><code class="filename">readline.buildlink3.mk</code> checks for a 5192<li class="listitem"><p><code class="filename">readline.buildlink3.mk</code> checks for a
5183 system-provided GNU readline or editline (libedit) installation, 5193 system-provided GNU readline or editline (libedit) installation,
5184 or adds a dependency on <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/readline/README.html" target="_top"><code class="filename">devel/readline</code></a>, 5194 or adds a dependency on <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/readline/README.html" target="_top"><code class="filename">devel/readline</code></a>,
5185 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/editline/README.html" target="_top"><code class="filename">devel/editline</code></a>. The user can set 5195 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/editline/README.html" target="_top"><code class="filename">devel/editline</code></a>. The user can set
5186 <code class="varname">READLINE_DEFAULT</code> to choose readline implementation. 5196 <code class="varname">READLINE_DEFAULT</code> to choose readline implementation.
5187 If your package really needs GNU readline library, its Makefile 5197 If your package really needs GNU readline library, its Makefile
5188 should include <code class="filename">devel/readline/buildlink3.mk</code> 5198 should include <code class="filename">devel/readline/buildlink3.mk</code>
5189 instead of <code class="filename">readline.buildlink3.mk</code>.</p></li> 5199 instead of <code class="filename">readline.buildlink3.mk</code>.</p></li>
5190<li class="listitem"><p><code class="filename">oss.buildlink3.mk</code> defines several 5200<li class="listitem"><p><code class="filename">oss.buildlink3.mk</code> defines several
5191 variables that may be used by packages that use the 5201 variables that may be used by packages that use the
5192 Open Sound System (OSS) API.</p></li> 5202 Open Sound System (OSS) API.</p></li>
5193<li class="listitem"><p><code class="filename">pgsql.buildlink3.mk</code> will accept 5203<li class="listitem"><p><code class="filename">pgsql.buildlink3.mk</code> will accept
5194 any of the Postgres versions in the variable 5204 any of the Postgres versions in the variable
5195 <code class="varname">PGSQL_VERSIONS_ACCEPTED</code> and default to 5205 <code class="varname">PGSQL_VERSIONS_ACCEPTED</code> and default to
5196 the version <code class="varname">PGSQL_VERSION_DEFAULT</code>. See 5206 the version <code class="varname">PGSQL_VERSION_DEFAULT</code>. See
5197 the file for more information.</p></li> 5207 the file for more information.</p></li>
5198<li class="listitem"><p><code class="filename">pthread.buildlink3.mk</code> uses the value of 5208<li class="listitem"><p><code class="filename">pthread.buildlink3.mk</code> uses the value of
5199 <code class="varname">PTHREAD_OPTS</code> and checks for native pthreads or adds 5209 <code class="varname">PTHREAD_OPTS</code> and checks for native pthreads or adds
5200 a dependency on <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/pth/README.html" target="_top"><code class="filename">devel/pth</code></a> as needed.</p></li> 5210 a dependency on <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/pth/README.html" target="_top"><code class="filename">devel/pth</code></a> as needed.</p></li>
5201<li class="listitem"><p><code class="filename">xaw.buildlink3.mk</code> uses the value of 5211<li class="listitem"><p><code class="filename">xaw.buildlink3.mk</code> uses the value of
5202 <code class="varname">XAW_TYPE</code> to choose a particular Athena widgets 5212 <code class="varname">XAW_TYPE</code> to choose a particular Athena widgets
5203 library.</p></li> 5213 library.</p></li>
5204</ul></div> 5214</ul></div>
5205<p>The comments in those <code class="filename">buildlink3.mk</code> 5215<p>The comments in those <code class="filename">buildlink3.mk</code>
5206 files provide a more complete 5216 files provide a more complete
5207 description of how to use them properly.</p> 5217 description of how to use them properly.</p>
5208</div> 5218</div>
5209<div class="sect1"> 5219<div class="sect1">
5210<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5220<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5211<a name="creating-buildlink3.mk"></a>14.2. Writing <code class="filename">buildlink3.mk</code> files</h2></div></div></div> 5221<a name="creating-buildlink3.mk"></a>14.2. Writing <code class="filename">buildlink3.mk</code> files</h2></div></div></div>
5212<a name="buildlink3.mk"></a><p>A package's <code class="filename">buildlink3.mk</code> file is 5222<a name="buildlink3.mk"></a><p>A package's <code class="filename">buildlink3.mk</code> file is
5213 included by Makefiles to indicate the need to compile and link 5223 included by Makefiles to indicate the need to compile and link
5214 against header files and libraries provided by the package. A 5224 against header files and libraries provided by the package. A
5215 <code class="filename">buildlink3.mk</code> file should always provide 5225 <code class="filename">buildlink3.mk</code> file should always provide
5216 enough information to add the correct type of dependency 5226 enough information to add the correct type of dependency
5217 relationship and include any other 5227 relationship and include any other
5218 <code class="filename">buildlink3.mk</code> files that it needs to find 5228 <code class="filename">buildlink3.mk</code> files that it needs to find
5219 headers and libraries that it needs in turn.</p> 5229 headers and libraries that it needs in turn.</p>
5220<p>To generate an initial <code class="filename">buildlink3.mk</code> 5230<p>To generate an initial <code class="filename">buildlink3.mk</code>
5221 file for further editing, Rene Hexel's <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/createbuildlink/README.html" target="_top"><code class="filename">pkgtools/createbuildlink</code></a> 5231 file for further editing, Rene Hexel's <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/createbuildlink/README.html" target="_top"><code class="filename">pkgtools/createbuildlink</code></a>
5222 package is highly recommended. For most packages, the following 5232 package is highly recommended. For most packages, the following
5223 command will generate a good starting point for 5233 command will generate a good starting point for
5224 <code class="filename">buildlink3.mk</code> files:</p> 5234 <code class="filename">buildlink3.mk</code> files:</p>
5225<pre class="screen"> 5235<pre class="screen">
5226<code class="prompt">%</code> <strong class="userinput"><code>cd pkgsrc/<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>pkgdir</code></em> 5236<code class="prompt">%</code> <strong class="userinput"><code>cd pkgsrc/<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>pkgdir</code></em>
5227<code class="prompt">%</code> createbuildlink &gt;buildlink3.mk</code></strong> 5237<code class="prompt">%</code> createbuildlink &gt;buildlink3.mk</code></strong>
5228 </pre> 5238 </pre>
5229<div class="sect2"> 5239<div class="sect2">
5230<div class="titlepage"><div><div><h3 class="title"> 5240<div class="titlepage"><div><div><h3 class="title">
5231<a name="anatomy-of-bl3"></a>14.2.1. Anatomy of a buildlink3.mk file</h3></div></div></div> 5241<a name="anatomy-of-bl3"></a>14.2.1. Anatomy of a buildlink3.mk file</h3></div></div></div>
5232<p>The following real-life example 5242<p>The following real-life example
5233 <code class="filename">buildlink3.mk</code> is taken 5243 <code class="filename">buildlink3.mk</code> is taken
5234 from <code class="filename">pkgsrc/graphics/tiff</code>:</p> 5244 from <code class="filename">pkgsrc/graphics/tiff</code>:</p>
5235<pre class="programlisting"> 5245<pre class="programlisting">
5236# $NetBSD: buildlink3.mk,v 1.16 2009/03/20 19:24:45 joerg Exp $ 5246# $NetBSD: buildlink3.mk,v 1.16 2009/03/20 19:24:45 joerg Exp $
5237 5247
5238BUILDLINK_TREE+= tiff 5248BUILDLINK_TREE+= tiff
5239 5249
5240.if !defined(TIFF_BUILDLINK3_MK) 5250.if !defined(TIFF_BUILDLINK3_MK)
5241TIFF_BUILDLINK3_MK:= 5251TIFF_BUILDLINK3_MK:=
5242 5252
5243BUILDLINK_API_DEPENDS.tiff+= tiff&gt;=3.6.1 5253BUILDLINK_API_DEPENDS.tiff+= tiff&gt;=3.6.1
5244BUILDLINK_ABI_DEPENDS.tiff+= tiff&gt;=3.7.2nb1 5254BUILDLINK_ABI_DEPENDS.tiff+= tiff&gt;=3.7.2nb1
5245BUILDLINK_PKGSRCDIR.tiff?= ../../graphics/tiff 5255BUILDLINK_PKGSRCDIR.tiff?= ../../graphics/tiff
5246 5256
5247.include "../../devel/zlib/buildlink3.mk" 5257.include "../../devel/zlib/buildlink3.mk"
5248.include "../../graphics/jpeg/buildlink3.mk" 5258.include "../../graphics/jpeg/buildlink3.mk"
5249.endif # TIFF_BUILDLINK3_MK 5259.endif # TIFF_BUILDLINK3_MK
5250 5260
5251BUILDLINK_TREE+= -tiff 5261BUILDLINK_TREE+= -tiff
5252</pre> 5262</pre>
5253<p>The header and footer manipulate 5263<p>The header and footer manipulate
5254 <code class="varname">BUILDLINK_TREE</code>, which is common across all 5264 <code class="varname">BUILDLINK_TREE</code>, which is common across all
5255 <code class="filename">buildlink3.mk</code> files and is used to track 5265 <code class="filename">buildlink3.mk</code> files and is used to track
5256 the dependency tree.</p> 5266 the dependency tree.</p>
5257<p>The main section is protected from multiple inclusion 5267<p>The main section is protected from multiple inclusion
5258 and controls how the dependency on <em class="replaceable"><code>pkg</code></em> is 5268 and controls how the dependency on <em class="replaceable"><code>pkg</code></em> is
5259 added. Several important variables are set in the section:</p> 5269 added. Several important variables are set in the section:</p>
5260<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5270<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5261<li class="listitem"><p><code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5271<li class="listitem"><p><code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5262 is the actual dependency recorded in the installed 5272 is the actual dependency recorded in the installed
5263 package; this should always be set using 5273 package; this should always be set using
5264 <span class="command"><strong>+=</strong></span> to ensure that 5274 <span class="command"><strong>+=</strong></span> to ensure that
5265 we're appending to any pre-existing list of values. This 5275 we're appending to any pre-existing list of values. This
5266 variable should be set to the first version of the 5276 variable should be set to the first version of the
5267 package that had an backwards-incompatible API change. 5277 package that had an backwards-incompatible API change.
5268 </p></li> 5278 </p></li>
5269<li class="listitem"><p><code class="varname">BUILDLINK_PKGSRCDIR.<em class="replaceable"><code>pkg</code></em></code> 5279<li class="listitem"><p><code class="varname">BUILDLINK_PKGSRCDIR.<em class="replaceable"><code>pkg</code></em></code>
5270 is the location of the <em class="replaceable"><code>pkg</code></em> 5280 is the location of the <em class="replaceable"><code>pkg</code></em>
5271 pkgsrc directory.</p></li> 5281 pkgsrc directory.</p></li>
5272<li class="listitem"><p><code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>pkg</code></em></code> 5282<li class="listitem"><p><code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>pkg</code></em></code>
5273 (not shown above) controls whether we use 5283 (not shown above) controls whether we use
5274 <code class="varname">BUILD_DEPENDS</code> or 5284 <code class="varname">BUILD_DEPENDS</code> or
5275 <code class="varname">DEPENDS</code> to add the dependency on 5285 <code class="varname">DEPENDS</code> to add the dependency on
5276 <em class="replaceable"><code>pkg</code></em>. The build dependency is 5286 <em class="replaceable"><code>pkg</code></em>. The build dependency is
5277 selected by setting 5287 selected by setting
5278 <code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>pkg</code></em></code> 5288 <code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>pkg</code></em></code>
5279 to <span class="quote">&#8220;<span class="quote">build</span>&#8221;</span>. By default, the full dependency is 5289 to <span class="quote">&#8220;<span class="quote">build</span>&#8221;</span>. By default, the full dependency is
5280 used.</p></li> 5290 used.</p></li>
5281<li class="listitem"><p><code class="varname">BUILDLINK_INCDIRS.<em class="replaceable"><code>pkg</code></em></code> 5291<li class="listitem"><p><code class="varname">BUILDLINK_INCDIRS.<em class="replaceable"><code>pkg</code></em></code>
5282 and 5292 and
5283 <code class="varname">BUILDLINK_LIBDIRS.<em class="replaceable"><code>pkg</code></em></code> 5293 <code class="varname">BUILDLINK_LIBDIRS.<em class="replaceable"><code>pkg</code></em></code>
5284 (not shown above) are lists of subdirectories of 5294 (not shown above) are lists of subdirectories of
5285 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code> 5295 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code>
5286 to add to the header and library search paths. These 5296 to add to the header and library search paths. These
5287 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> 5297 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>
5288 respectively.</p></li> 5298 respectively.</p></li>
5289<li class="listitem"><p><code class="varname">BUILDLINK_CPPFLAGS.<em class="replaceable"><code>pkg</code></em></code> 5299<li class="listitem"><p><code class="varname">BUILDLINK_CPPFLAGS.<em class="replaceable"><code>pkg</code></em></code>
5290 (not shown above) is the list of preprocessor flags to add 5300 (not shown above) is the list of preprocessor flags to add
5291 to <code class="varname">CPPFLAGS</code>, which are passed on to the 5301 to <code class="varname">CPPFLAGS</code>, which are passed on to the
5292 configure and build phases. The <span class="quote">&#8220;<span class="quote">-I</span>&#8221;</span> option 5302 configure and build phases. The <span class="quote">&#8220;<span class="quote">-I</span>&#8221;</span> option
5293 should be avoided and instead be handled using 5303 should be avoided and instead be handled using
5294 <code class="varname">BUILDLINK_INCDIRS.<em class="replaceable"><code>pkg</code></em></code> as 5304 <code class="varname">BUILDLINK_INCDIRS.<em class="replaceable"><code>pkg</code></em></code> as
5295 above.</p></li> 5305 above.</p></li>
5296</ul></div> 5306</ul></div>
5297<p>The following variables are all optionally defined within 5307<p>The following variables are all optionally defined within
5298 this second section (protected against multiple inclusion) and 5308 this second section (protected against multiple inclusion) and
5299 control which package files are symlinked into 5309 control which package files are symlinked into
5300 <code class="filename">${BUILDLINK_DIR}</code> and how their names are 5310 <code class="filename">${BUILDLINK_DIR}</code> and how their names are
5301 transformed during the symlinking:</p> 5311 transformed during the symlinking:</p>
5302<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5312<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5303<li class="listitem"><p><code class="varname">BUILDLINK_FILES.<em class="replaceable"><code>pkg</code></em></code> 5313<li class="listitem"><p><code class="varname">BUILDLINK_FILES.<em class="replaceable"><code>pkg</code></em></code>
5304 (not shown above) is a shell glob pattern relative to 5314 (not shown above) is a shell glob pattern relative to
5305 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code> 5315 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code>
5306 to be symlinked into 5316 to be symlinked into
5307 <code class="filename">${BUILDLINK_DIR}</code>, 5317 <code class="filename">${BUILDLINK_DIR}</code>,
5308 e.g. <code class="filename">include/*.h</code>.</p></li> 5318 e.g. <code class="filename">include/*.h</code>.</p></li>
5309<li class="listitem"><p><code class="varname">BUILDLINK_FILES_CMD.<em class="replaceable"><code>pkg</code></em></code> 5319<li class="listitem"><p><code class="varname">BUILDLINK_FILES_CMD.<em class="replaceable"><code>pkg</code></em></code>
5310 (not shown above) is a shell pipeline that 5320 (not shown above) is a shell pipeline that
5311 outputs to stdout a list of files relative to 5321 outputs to stdout a list of files relative to
5312 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code>. 5322 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code>.
5313 The resulting files are to be symlinked 5323 The resulting files are to be symlinked
5314 into <code class="filename">${BUILDLINK_DIR}</code>. By default, 5324 into <code class="filename">${BUILDLINK_DIR}</code>. By default,
5315 this takes the <code class="filename">+CONTENTS</code> of a 5325 this takes the <code class="filename">+CONTENTS</code> of a
5316 <em class="replaceable"><code>pkg</code></em> and filters it through 5326 <em class="replaceable"><code>pkg</code></em> and filters it through
5317 <code class="varname">${BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em>}</code>.</p></li> 5327 <code class="varname">${BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em>}</code>.</p></li>
5318<li class="listitem"><p><code class="varname">BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em></code> 5328<li class="listitem"><p><code class="varname">BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em></code>
5319 (not shown above) is a filter command that filters 5329 (not shown above) is a filter command that filters
5320 <code class="filename">+CONTENTS</code> input into a list of files 5330 <code class="filename">+CONTENTS</code> input into a list of files
5321 relative to 5331 relative to
5322 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code> 5332 <code class="filename">${BUILDLINK_PREFIX.<em class="replaceable"><code>pkg</code></em>}</code>
5323 on stdout. By default, 5333 on stdout. By default for overwrite packages,
5324 <code class="varname">BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em></code> 5334 <code class="varname">BUILDLINK_CONTENTS_FILTER.<em class="replaceable"><code>pkg</code></em></code>
5325 outputs the contents of the <code class="filename">include</code> 5335 outputs the contents of the <code class="filename">include</code>
5326 and <code class="filename">lib</code> directories in the package 5336 and <code class="filename">lib</code> directories in the package
5327 <code class="filename">+CONTENTS</code>.</p></li> 5337 <code class="filename">+CONTENTS</code>, and for pkgviews packages,
 5338 it outputs any libtool archives in
 5339 <code class="filename">lib</code> directories.</p></li>
5328<li class="listitem"><p><code class="varname">BUILDLINK_FNAME_TRANSFORM.<em class="replaceable"><code>pkg</code></em></code> 5340<li class="listitem"><p><code class="varname">BUILDLINK_FNAME_TRANSFORM.<em class="replaceable"><code>pkg</code></em></code>
5329 (not shown above) is a list of sed arguments used to 5341 (not shown above) is a list of sed arguments used to
5330 transform the name of the source filename into a 5342 transform the name of the source filename into a
5331 destination filename, e.g. <span class="command"><strong>-e 5343 destination filename, e.g. <span class="command"><strong>-e
5332 "s|/curses.h|/ncurses.h|g"</strong></span>.</p></li> 5344 "s|/curses.h|/ncurses.h|g"</strong></span>.</p></li>
5333</ul></div> 5345</ul></div>
5334<p>This section can additionally include any 5346<p>This section can additionally include any
5335 <code class="filename">buildlink3.mk</code> needed for 5347 <code class="filename">buildlink3.mk</code> needed for
5336 <em class="replaceable"><code>pkg</code></em>'s library dependencies. 5348 <em class="replaceable"><code>pkg</code></em>'s library dependencies.
5337 Including these <code class="filename">buildlink3.mk</code> files 5349 Including these <code class="filename">buildlink3.mk</code> files
5338 means that the headers and libraries for these 5350 means that the headers and libraries for these
5339 dependencies are also symlinked into 5351 dependencies are also symlinked into
5340 <code class="filename">${BUILDLINK_DIR}</code> 5352 <code class="filename">${BUILDLINK_DIR}</code>
5341 whenever the <em class="replaceable"><code>pkg</code></em> 5353 whenever the <em class="replaceable"><code>pkg</code></em>
5342 <code class="filename">buildlink3.mk</code> 5354 <code class="filename">buildlink3.mk</code>
5343 file is included. Dependencies are only added for directly 5355 file is included. Dependencies are only added for directly
5344 include <code class="filename">buildlink3.mk</code> files.</p> 5356 include <code class="filename">buildlink3.mk</code> files.</p>
5345<p>When providing a <code class="filename">buildlink3.mk</code> and 5357<p>When providing a <code class="filename">buildlink3.mk</code> and
5346 including other <code class="filename">buildlink3.mk</code> files in it, 5358 including other <code class="filename">buildlink3.mk</code> files in it,
5347 please only add necessary ones, i.e., those whose libraries or 5359 please only add necessary ones, i.e., those whose libraries or
5348 header files are automatically exposed when the package is 5360 header files are automatically exposed when the package is
5349 use.</p> 5361 use.</p>
5350<p>In particular, if only an executable 5362<p>In particular, if only an executable
5351 (<code class="filename">bin/foo</code>) is linked against a library, that 5363 (<code class="filename">bin/foo</code>) is linked against a library, that
5352 library does not need to be propagated in the 5364 library does not need to be propagated in the
5353 <code class="filename">buildlink3.mk</code> file.</p> 5365 <code class="filename">buildlink3.mk</code> file.</p>
5354<p>The following steps should help you decide if a 5366<p>The following steps should help you decide if a
5355 <code class="filename">buildlink3.mk</code> file needs to be included: 5367 <code class="filename">buildlink3.mk</code> file needs to be included:
5356 </p> 5368 </p>
5357<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5369<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5358<li class="listitem"><p>Look at the installed header files: What 5370<li class="listitem"><p>Look at the installed header files: What
5359 headers do they include? The packages providing these files 5371 headers do they include? The packages providing these files
5360 must be buildlinked.</p></li> 5372 must be buildlinked.</p></li>
5361<li class="listitem"><p>Run <code class="filename">ldd</code> on all installed 5373<li class="listitem"><p>Run <code class="filename">ldd</code> on all installed
5362 libraries and look against what other libraries they link. 5374 libraries and look against what other libraries they link.
5363 Some of the packages providing these probably need to be 5375 Some of the packages providing these probably need to be
5364 buildlinked; however, it's not automatic, since e.g. GTK on 5376 buildlinked; however, it's not automatic, since e.g. GTK on
5365 some systems pulls in the X libraries, so they will show up in 5377 some systems pulls in the X libraries, so they will show up in
5366 the <code class="filename">ldd</code> output, while on others (like OS 5378 the <code class="filename">ldd</code> output, while on others (like OS
5367 X) it won't. <code class="filename">ldd</code> output can thus only be 5379 X) it won't. <code class="filename">ldd</code> output can thus only be
5368 used as a hint.</p></li> 5380 used as a hint.</p></li>
5369</ul></div> 5381</ul></div>
5370<p> 5382<p>
5371 </p> 5383 </p>
5372</div> 5384</div>
5373<div class="sect2"> 5385<div class="sect2">
5374<div class="titlepage"><div><div><h3 class="title"> 5386<div class="titlepage"><div><div><h3 class="title">
5375<a name="updating-buildlink-depends"></a>14.2.2. Updating 5387<a name="updating-buildlink-depends"></a>14.2.2. Updating
5376 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5388 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5377 and 5389 and
5378 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5390 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5379 in <code class="filename">buildlink3.mk</code> files</h3></div></div></div> 5391 in <code class="filename">buildlink3.mk</code> files</h3></div></div></div>
5380<p>These two variables differ in that one describes source 5392<p>These two variables differ in that one describes source
5381 compatibility (API) and the other binary compatibility (ABI). 5393 compatibility (API) and the other binary compatibility (ABI).
5382 The difference is that a change in the API breaks compilation of 5394 The difference is that a change in the API breaks compilation of
5383 programs while changes in the ABI stop compiled programs from 5395 programs while changes in the ABI stop compiled programs from
5384 running.</p> 5396 running.</p>
5385<p>Changes to the 5397<p>Changes to the
5386 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5398 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5387 variable in a <code class="filename">buildlink3.mk</code> file happen 5399 variable in a <code class="filename">buildlink3.mk</code> file happen
5388 very rarely. One possible reason is that all packages depending 5400 very rarely. One possible reason is that all packages depending
5389 on this already need a newer version. In case it is bumped see 5401 on this already need a newer version. In case it is bumped see
5390 the description below.</p> 5402 the description below.</p>
5391<p>The most common example of an ABI change is that the major 5403<p>The most common example of an ABI change is that the major
5392 version of a shared library is increased. In this case, 5404 version of a shared library is increased. In this case,
5393 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5405 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5394 should be adjusted to require at least the new package version. 5406 should be adjusted to require at least the new package version.
5395 Then the packages that depend on this package need their 5407 Then the packages that depend on this package need their
5396 <code class="varname">PKGREVISION</code>s increased and, if they have 5408 <code class="varname">PKGREVISION</code>s increased and, if they have
5397 <code class="filename">buildlink3.mk</code> files, their 5409 <code class="filename">buildlink3.mk</code> files, their
5398 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5410 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5399 adjusted, too. This is needed so pkgsrc will require the correct 5411 adjusted, too. This is needed so pkgsrc will require the correct
5400 package dependency and not settle for an older one when building 5412 package dependency and not settle for an older one when building
5401 the source.</p> 5413 the source.</p>
5402<p>See <a class="xref" href="#dependencies" title="19.1.6. Handling dependencies">Section 19.1.6, &#8220;Handling dependencies&#8221;</a> for 5414<p>See <a class="xref" href="#dependencies" title="19.1.6. Handling dependencies">Section 19.1.6, &#8220;Handling dependencies&#8221;</a> for
5403 more information about dependencies on other packages, 5415 more information about dependencies on other packages,
5404 including the <code class="varname">BUILDLINK_ABI_DEPENDS</code> and 5416 including the <code class="varname">BUILDLINK_ABI_DEPENDS</code> and
5405 <code class="varname">ABI_DEPENDS</code> definitions.</p> 5417 <code class="varname">ABI_DEPENDS</code> definitions.</p>
5406<p>Please take careful consideration before adjusting 5418<p>Please take careful consideration before adjusting
5407 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5419 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5408 or 5420 or
5409 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5421 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5410 as we don't want to cause unneeded package deletions and 5422 as we don't want to cause unneeded package deletions and
5411 rebuilds. In many cases, new versions of packages work just 5423 rebuilds. In many cases, new versions of packages work just
5412 fine with older dependencies.</p> 5424 fine with older dependencies.</p>
5413<p>Also it is not needed to set 5425<p>Also it is not needed to set
5414 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 5426 <code class="varname">BUILDLINK_ABI_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
5415 when it is identical to 5427 when it is identical to
5416 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>. </p> 5428 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>. </p>
5417</div> 5429</div>
5418</div> 5430</div>
5419<div class="sect1"> 5431<div class="sect1">
5420<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5432<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5421<a name="writing-builtin.mk"></a>14.3. Writing <code class="filename">builtin.mk</code> files</h2></div></div></div> 5433<a name="writing-builtin.mk"></a>14.3. Writing <code class="filename">builtin.mk</code> files</h2></div></div></div>
5422<p>Some packages in pkgsrc install headers and libraries that 5434<p>Some packages in pkgsrc install headers and libraries that
5423 coincide with headers and libraries present in the base system. 5435 coincide with headers and libraries present in the base system.
5424 Aside from a <code class="filename">buildlink3.mk</code> file, these 5436 Aside from a <code class="filename">buildlink3.mk</code> file, these
5425 packages should also include a <code class="filename">builtin.mk</code> 5437 packages should also include a <code class="filename">builtin.mk</code>
5426 file that includes the necessary checks to decide whether using 5438 file that includes the necessary checks to decide whether using
5427 the built-in software or the pkgsrc software is 5439 the built-in software or the pkgsrc software is
5428 appropriate.</p> 5440 appropriate.</p>
5429<p>The only requirements of a builtin.mk file for 5441<p>The only requirements of a builtin.mk file for
5430 <em class="replaceable"><code>pkg</code></em> are:</p> 5442 <em class="replaceable"><code>pkg</code></em> are:</p>
5431<div class="orderedlist"><ol class="orderedlist" type="1"> 5443<div class="orderedlist"><ol class="orderedlist" type="1">
5432<li class="listitem"><p>It should set 5444<li class="listitem"><p>It should set
5433 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 5445 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
5434 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> 5446 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>
5435 after it is included.</p></li> 5447 after it is included.</p></li>
5436<li class="listitem"><p>It should <span class="emphasis"><em>not</em></span> override any 5448<li class="listitem"><p>It should <span class="emphasis"><em>not</em></span> override any
5437 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 5449 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
5438 which is already set before the 5450 which is already set before the
5439 <code class="filename">builtin.mk</code> file is included.</p></li> 5451 <code class="filename">builtin.mk</code> file is included.</p></li>
5440<li class="listitem"><p>It should be written to allow multiple inclusion. This 5452<li class="listitem"><p>It should be written to allow multiple inclusion. This
5441 is <span class="emphasis"><em>very</em></span> important and takes careful 5453 is <span class="emphasis"><em>very</em></span> important and takes careful
5442 attention to <code class="filename">Makefile</code> coding.</p></li> 5454 attention to <code class="filename">Makefile</code> coding.</p></li>
5443</ol></div> 5455</ol></div>
5444<div class="sect2"> 5456<div class="sect2">
5445<div class="titlepage"><div><div><h3 class="title"> 5457<div class="titlepage"><div><div><h3 class="title">
5446<a name="anatomy-of-builtin.mk"></a>14.3.1. Anatomy of a <code class="filename">builtin.mk</code> file</h3></div></div></div> 5458<a name="anatomy-of-builtin.mk"></a>14.3.1. Anatomy of a <code class="filename">builtin.mk</code> file</h3></div></div></div>
5447<p>The following is the recommended template for builtin.mk 5459<p>The following is the recommended template for builtin.mk
5448 files:</p> 5460 files:</p>
5449<pre class="programlisting"> 5461<pre class="programlisting">
5450.if !defined(IS_BUILTIN.foo) 5462.if !defined(IS_BUILTIN.foo)
5451# 5463#
5452# IS_BUILTIN.foo is set to "yes" or "no" depending on whether "foo" 5464# IS_BUILTIN.foo is set to "yes" or "no" depending on whether "foo"
5453# genuinely exists in the system or not. 5465# genuinely exists in the system or not.
5454# 5466#
5455IS_BUILTIN.foo?= no 5467IS_BUILTIN.foo?= no
5456 5468
5457# BUILTIN_PKG.foo should be set here if "foo" is built-in and its package 5469# BUILTIN_PKG.foo should be set here if "foo" is built-in and its package
5458# version can be determined. 5470# version can be determined.
5459# 5471#
5460. if !empty(IS_BUILTIN.foo:M[yY][eE][sS]) 5472. if !empty(IS_BUILTIN.foo:M[yY][eE][sS])
5461BUILTIN_PKG.foo?= foo-1.0 5473BUILTIN_PKG.foo?= foo-1.0
5462. endif 5474. endif
5463.endif # IS_BUILTIN.foo 5475.endif # IS_BUILTIN.foo
5464 5476
5465.if !defined(USE_BUILTIN.foo) 5477.if !defined(USE_BUILTIN.foo)
5466USE_BUILTIN.foo?= ${IS_BUILTIN.foo} 5478USE_BUILTIN.foo?= ${IS_BUILTIN.foo}
5467. if defined(BUILTIN_PKG.foo) 5479. if defined(BUILTIN_PKG.foo)
5468. for _depend_ in ${BUILDLINK_API_DEPENDS.foo} 5480. for _depend_ in ${BUILDLINK_API_DEPENDS.foo}
5469. if !empty(USE_BUILTIN.foo:M[yY][eE][sS]) 5481. if !empty(USE_BUILTIN.foo:M[yY][eE][sS])
5470USE_BUILTIN.foo!= \ 5482USE_BUILTIN.foo!= \
5471 ${PKG_ADMIN} pmatch '${_depend_}' ${BUILTIN_PKG.foo} \ 5483 ${PKG_ADMIN} pmatch '${_depend_}' ${BUILTIN_PKG.foo} \
5472 &amp;&amp; ${ECHO} "yes" || ${ECHO} "no" 5484 &amp;&amp; ${ECHO} "yes" || ${ECHO} "no"
5473. endif 5485. endif
5474. endfor 5486. endfor
5475. endif 5487. endif
5476.endif # USE_BUILTIN.foo 5488.endif # USE_BUILTIN.foo
5477 5489
5478CHECK_BUILTIN.foo?= no 5490CHECK_BUILTIN.foo?= no
5479.if !empty(CHECK_BUILTIN.foo:M[nN][oO]) 5491.if !empty(CHECK_BUILTIN.foo:M[nN][oO])
5480# 5492#
5481# Here we place code that depends on whether USE_BUILTIN.foo is set to 5493# Here we place code that depends on whether USE_BUILTIN.foo is set to
5482# "yes" or "no". 5494# "yes" or "no".
5483# 5495#
5484.endif # CHECK_BUILTIN.foo 5496.endif # CHECK_BUILTIN.foo
5485</pre> 5497</pre>
5486<p>The first section sets 5498<p>The first section sets
5487 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 5499 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
5488 depending on if <em class="replaceable"><code>pkg</code></em> really exists 5500 depending on if <em class="replaceable"><code>pkg</code></em> really exists
5489 in the base system. This should not be a base system software 5501 in the base system. This should not be a base system software
5490 with similar functionality to <em class="replaceable"><code>pkg</code></em>; 5502 with similar functionality to <em class="replaceable"><code>pkg</code></em>;
5491 it should only be <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> if the actual package is 5503 it should only be <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> if the actual package is
5492 included as part of the base system. This variable is only 5504 included as part of the base system. This variable is only
5493 used internally within the <code class="filename">builtin.mk</code> 5505 used internally within the <code class="filename">builtin.mk</code>
5494 file.</p> 5506 file.</p>
5495<p>The second section sets 5507<p>The second section sets
5496 <code class="varname">BUILTIN_PKG.<em class="replaceable"><code>pkg</code></em></code> 5508 <code class="varname">BUILTIN_PKG.<em class="replaceable"><code>pkg</code></em></code>
5497 to the version of <em class="replaceable"><code>pkg</code></em> in the base 5509 to the version of <em class="replaceable"><code>pkg</code></em> in the base
5498 system if it exists (if 5510 system if it exists (if
5499 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 5511 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
5500 is <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>). This variable is only used internally 5512 is <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>). This variable is only used internally
5501 within the <code class="filename">builtin.mk</code> file.</p> 5513 within the <code class="filename">builtin.mk</code> file.</p>
5502<p>The third section sets 5514<p>The third section sets
5503 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 5515 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
5504 and is <span class="emphasis"><em>required</em></span> in all 5516 and is <span class="emphasis"><em>required</em></span> in all
5505 <code class="filename">builtin.mk</code> files. The code in this 5517 <code class="filename">builtin.mk</code> files. The code in this
5506 section must make the determination whether the built-in 5518 section must make the determination whether the built-in
5507 software is adequate to satisfy the dependencies listed in 5519 software is adequate to satisfy the dependencies listed in
5508 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>. 5520 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>.
5509 This is typically done by comparing 5521 This is typically done by comparing
5510 <code class="varname">BUILTIN_PKG.<em class="replaceable"><code>pkg</code></em></code> 5522 <code class="varname">BUILTIN_PKG.<em class="replaceable"><code>pkg</code></em></code>
5511 against each of the dependencies in 5523 against each of the dependencies in
5512 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>. 5524 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>.
5513 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 5525 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
5514 <span class="emphasis"><em>must</em></span> be set to the correct value by the 5526 <span class="emphasis"><em>must</em></span> be set to the correct value by the
5515 end of the <code class="filename">builtin.mk</code> file. Note that 5527 end of the <code class="filename">builtin.mk</code> file. Note that
5516 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 5528 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
5517 may be <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> even if 5529 may be <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> even if
5518 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 5530 <code class="varname">IS_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
5519 is <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span> because we may make the determination 5531 is <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span> because we may make the determination
5520 that the built-in version of the software is similar enough to 5532 that the built-in version of the software is similar enough to
5521 be used as a replacement.</p> 5533 be used as a replacement.</p>
5522<p>The last section is guarded by 5534<p>The last section is guarded by
5523 <code class="varname">CHECK_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>, 5535 <code class="varname">CHECK_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>,
5524 and includes code that uses the value of 5536 and includes code that uses the value of
5525 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code> 5537 <code class="varname">USE_BUILTIN.<em class="replaceable"><code>pkg</code></em></code>
5526 set in the previous section. This typically includes, e.g., 5538 set in the previous section. This typically includes, e.g.,
5527 adding additional dependency restrictions and listing additional 5539 adding additional dependency restrictions and listing additional
5528 files to symlink into <code class="filename">${BUILDLINK_DIR}</code> (via 5540 files to symlink into <code class="filename">${BUILDLINK_DIR}</code> (via
5529 <code class="varname">BUILDLINK_FILES.<em class="replaceable"><code>pkg</code></em></code>).</p> 5541 <code class="varname">BUILDLINK_FILES.<em class="replaceable"><code>pkg</code></em></code>).</p>
5530</div> 5542</div>
5531<div class="sect2"> 5543<div class="sect2">
5532<div class="titlepage"><div><div><h3 class="title"> 5544<div class="titlepage"><div><div><h3 class="title">
5533<a name="native-or-pkgsrc-preference"></a>14.3.2. Global preferences for native or pkgsrc software</h3></div></div></div> 5545<a name="native-or-pkgsrc-preference"></a>14.3.2. Global preferences for native or pkgsrc software</h3></div></div></div>
5534<p>When building packages, it's possible to choose whether to set 5546<p>When building packages, it's possible to choose whether to set
5535 a global preference for using either the built-in (native) 5547 a global preference for using either the built-in (native)
5536 version or the pkgsrc version of software to satisfy a 5548 version or the pkgsrc version of software to satisfy a
5537 dependency. This is controlled by setting 5549 dependency. This is controlled by setting
5538 <code class="varname">PREFER_PKGSRC</code> and 5550 <code class="varname">PREFER_PKGSRC</code> and
5539 <code class="varname">PREFER_NATIVE</code>. These variables take values 5551 <code class="varname">PREFER_NATIVE</code>. These variables take values
5540 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 5552 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
5541 packages. <code class="varname">PREFER_PKGSRC</code> tells pkgsrc to 5553 packages. <code class="varname">PREFER_PKGSRC</code> tells pkgsrc to
5542 use the pkgsrc versions of software, while 5554 use the pkgsrc versions of software, while
5543 <code class="varname">PREFER_NATIVE</code> tells pkgsrc to use the 5555 <code class="varname">PREFER_NATIVE</code> tells pkgsrc to use the
5544 built-in versions. Preferences are determined by the most 5556 built-in versions. Preferences are determined by the most
5545 specific instance of the package in either 5557 specific instance of the package in either
5546 <code class="varname">PREFER_PKGSRC</code> or 5558 <code class="varname">PREFER_PKGSRC</code> or
5547 <code class="varname">PREFER_NATIVE</code>. If a package is specified 5559 <code class="varname">PREFER_NATIVE</code>. If a package is specified
5548 in neither or in both variables, then 5560 in neither or in both variables, then
5549 <code class="varname">PREFER_PKGSRC</code> has precedence over 5561 <code class="varname">PREFER_PKGSRC</code> has precedence over
5550 <code class="varname">PREFER_NATIVE</code>. For example, to require 5562 <code class="varname">PREFER_NATIVE</code>. For example, to require
5551 using pkgsrc versions of software for all but the most basic 5563 using pkgsrc versions of software for all but the most basic
5552 bits on a NetBSD system, you can set:</p> 5564 bits on a NetBSD system, you can set:</p>
5553<pre class="programlisting"> 5565<pre class="programlisting">
5554PREFER_PKGSRC= yes 5566PREFER_PKGSRC= yes
5555PREFER_NATIVE= getopt skey tcp_wrappers 5567PREFER_NATIVE= getopt skey tcp_wrappers
5556</pre> 5568</pre>
5557<p>A package <span class="emphasis"><em>must</em></span> have a 5569<p>A package <span class="emphasis"><em>must</em></span> have a
5558 <code class="filename">builtin.mk</code> 5570 <code class="filename">builtin.mk</code>
5559 file to be listed in <code class="varname">PREFER_NATIVE</code>, 5571 file to be listed in <code class="varname">PREFER_NATIVE</code>,
5560 otherwise it is simply ignored in that list.</p> 5572 otherwise it is simply ignored in that list.</p>
5561</div> 5573</div>
5562</div> 5574</div>
5563</div> 5575</div>
5564<div class="chapter"> 5576<div class="chapter">
5565<div class="titlepage"><div><div><h2 class="title"> 5577<div class="titlepage"><div><div><h2 class="title">
5566<a name="pkginstall"></a>Chapter 15. The pkginstall framework</h2></div></div></div> 5578<a name="pkginstall"></a>Chapter 15. The pkginstall framework</h2></div></div></div>
5567<div class="toc"> 5579<div class="toc">
5568<p><b>Table of Contents</b></p> 5580<p><b>Table of Contents</b></p>
5569<dl> 5581<dl>
5570<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt> 5582<dt><span class="sect1"><a href="#files-and-dirs-outside-prefix">15.1. Files and directories outside the installation prefix</a></span></dt>
5571<dd><dl> 5583<dd><dl>
5572<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt> 5584<dt><span class="sect2"><a href="#dirs-outside-prefix">15.1.1. Directory manipulation</a></span></dt>
5573<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt> 5585<dt><span class="sect2"><a href="#files-outside-prefix">15.1.2. File manipulation</a></span></dt>
5574</dl></dd> 5586</dl></dd>
5575<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt> 5587<dt><span class="sect1"><a href="#conf-files">15.2. Configuration files</a></span></dt>
5576<dd><dl> 5588<dd><dl>
5577<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt> 5589<dt><span class="sect2"><a href="#conf-files-sysconfdir">15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</a></span></dt>
5578<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt> 5590<dt><span class="sect2"><a href="#conf-files-configure">15.2.2. Telling the software where configuration files are</a></span></dt>
5579<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt> 5591<dt><span class="sect2"><a href="#conf-files-patching">15.2.3. Patching installations</a></span></dt>
5580<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt> 5592<dt><span class="sect2"><a href="#conf-files-disable">15.2.4. Disabling handling of configuration files</a></span></dt>
5581</dl></dd> 5593</dl></dd>
5582<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt> 5594<dt><span class="sect1"><a href="#rcd-scripts">15.3. System startup scripts</a></span></dt>
5583<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> 5595<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>
5584<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt> 5596<dt><span class="sect1"><a href="#users-and-groups">15.4. System users and groups</a></span></dt>
5585<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt> 5597<dt><span class="sect1"><a href="#shells">15.5. System shells</a></span></dt>
5586<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd> 5598<dd><dl><dt><span class="sect2"><a href="#shells-disable">15.5.1. Disabling shell registration</a></span></dt></dl></dd>
5587<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt> 5599<dt><span class="sect1"><a href="#fonts">15.6. Fonts</a></span></dt>
5588<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> 5600<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>
5589</dl> 5601</dl>
5590</div> 5602</div>
5591<p>This chapter describes the framework known as 5603<p>This chapter describes the framework known as
5592<code class="literal">pkginstall</code>, whose key features are:</p> 5604<code class="literal">pkginstall</code>, whose key features are:</p>
5593<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5605<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5594<li class="listitem"><p>Generic installation and manipulation of directories and files 5606<li class="listitem"><p>Generic installation and manipulation of directories and files
5595 outside the pkgsrc-handled tree, <code class="varname">LOCALBASE</code>.</p></li> 5607 outside the pkgsrc-handled tree, <code class="varname">LOCALBASE</code>.</p></li>
5596<li class="listitem"><p>Automatic handling of configuration files during installation, 5608<li class="listitem"><p>Automatic handling of configuration files during installation,
5597 provided that packages are correctly designed.</p></li> 5609 provided that packages are correctly designed.</p></li>
5598<li class="listitem"><p>Generation and installation of system startup scripts.</p></li> 5610<li class="listitem"><p>Generation and installation of system startup scripts.</p></li>
5599<li class="listitem"><p>Registration of system users and groups.</p></li> 5611<li class="listitem"><p>Registration of system users and groups.</p></li>
5600<li class="listitem"><p>Registration of system shells.</p></li> 5612<li class="listitem"><p>Registration of system shells.</p></li>
5601<li class="listitem"><p>Automatic updating of fonts databases.</p></li> 5613<li class="listitem"><p>Automatic updating of fonts databases.</p></li>
5602</ul></div> 5614</ul></div>
5603<p>The following sections inspect each of the above points in detail.</p> 5615<p>The following sections inspect each of the above points in detail.</p>
5604<p>You may be thinking that many of the things described here could be 5616<p>You may be thinking that many of the things described here could be
5605easily done with simple code in the package's post-installation target 5617easily done with simple code in the package's post-installation target
5606(<code class="literal">post-install</code>). <span class="emphasis"><em>This is incorrect</em></span>, 5618(<code class="literal">post-install</code>). <span class="emphasis"><em>This is incorrect</em></span>,
5607as the code in them is only executed when building from source. Machines 5619as the code in them is only executed when building from source. Machines
5608using binary packages could not benefit from it at all (as the code itself 5620using binary packages could not benefit from it at all (as the code itself
5609could be unavailable). Therefore, the only way to achieve any of the items 5621could be unavailable). Therefore, the only way to achieve any of the items
5610described above is by means of the installation scripts, which are 5622described above is by means of the installation scripts, which are
5611automatically generated by pkginstall.</p> 5623automatically generated by pkginstall.</p>
5612<div class="sect1"> 5624<div class="sect1">
5613<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5625<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5614<a name="files-and-dirs-outside-prefix"></a>15.1. Files and directories outside the installation prefix</h2></div></div></div> 5626<a name="files-and-dirs-outside-prefix"></a>15.1. Files and directories outside the installation prefix</h2></div></div></div>
5615<p>As you already know, the <code class="filename">PLIST</code> file holds a list 5627<p>As you already know, the <code class="filename">PLIST</code> file holds a list
5616of files and directories that belong to a package. The names used in it 5628of files and directories that belong to a package. The names used in it
5617are relative to the installation prefix (<code class="filename">${PREFIX}</code>), 5629are relative to the installation prefix (<code class="filename">${PREFIX}</code>),
5618which means that it cannot register files outside this directory (absolute 5630which means that it cannot register files outside this directory (absolute
5619path names are not allowed). Despite this restriction, some packages need 5631path names are not allowed). Despite this restriction, some packages need
5620to install files outside this location; e.g., under 5632to install files outside this location; e.g., under
5621<code class="filename">${VARBASE}</code> or 5633<code class="filename">${VARBASE}</code> or
5622<code class="filename">${PKG_SYSCONFDIR}</code>. The only way to achieve this 5634<code class="filename">${PKG_SYSCONFDIR}</code>. The only way to achieve this
5623is to create such files during installation time by using 5635is to create such files during installation time by using
5624installation scripts.</p> 5636installation scripts.</p>
5625<p>The generic installation scripts are shell scripts that can 5637<p>The generic installation scripts are shell scripts that can
5626contain arbitrary code. The list of scripts to execute is taken from 5638contain arbitrary code. The list of scripts to execute is taken from
5627the <code class="varname">INSTALL_FILE</code> variable, which defaults to 5639the <code class="varname">INSTALL_FILE</code> variable, which defaults to
5628<code class="filename">INSTALL</code>. A similar variable exists for package 5640<code class="filename">INSTALL</code>. A similar variable exists for package
5629removal (<code class="varname">DEINSTALL_FILE</code>, whose default is 5641removal (<code class="varname">DEINSTALL_FILE</code>, whose default is
5630<code class="filename">DEINSTALL</code>). These scripts can run arbitrary 5642<code class="filename">DEINSTALL</code>). These scripts can run arbitrary
5631commands, so they have the potential to create and manage files 5643commands, so they have the potential to create and manage files
5632anywhere in the file system.</p> 5644anywhere in the file system.</p>
5633<p>Using these general installation files is not recommended, but 5645<p>Using these general installation files is not recommended, but
5634may be needed in some special cases. One reason for avoiding them is 5646may be needed in some special cases. One reason for avoiding them is
5635that the user has to trust the packager that there is no unwanted or 5647that the user has to trust the packager that there is no unwanted or
5636simply erroneous code included in the installation script. Also, 5648simply erroneous code included in the installation script. Also,
5637previously there were many similar scripts for the same functionality, 5649previously there were many similar scripts for the same functionality,
5638and fixing a common error involved finding and changing all of 5650and fixing a common error involved finding and changing all of
5639them.</p> 5651them.</p>
5640<p>The pkginstall framework offers another, standardized way. It 5652<p>The pkginstall framework offers another, standardized way. It
5641provides generic scripts to abstract the manipulation of such files 5653provides generic scripts to abstract the manipulation of such files
5642and directories based on variables set in the package's 5654and directories based on variables set in the package's
5643<code class="filename">Makefile</code>. The rest of this section describes 5655<code class="filename">Makefile</code>. The rest of this section describes
5644these variables.</p> 5656these variables.</p>
5645<div class="sect2"> 5657<div class="sect2">
5646<div class="titlepage"><div><div><h3 class="title"> 5658<div class="titlepage"><div><div><h3 class="title">
5647<a name="dirs-outside-prefix"></a>15.1.1. Directory manipulation</h3></div></div></div> 5659<a name="dirs-outside-prefix"></a>15.1.1. Directory manipulation</h3></div></div></div>
5648<p>The following variables can be set to request the creation of 5660<p>The following variables can be set to request the creation of
5649directories anywhere in the file system:</p> 5661directories anywhere in the file system:</p>
5650<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5662<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5651<li class="listitem"><p><code class="varname">MAKE_DIRS</code> and <code class="varname">OWN_DIRS</code> 5663<li class="listitem"><p><code class="varname">MAKE_DIRS</code> and <code class="varname">OWN_DIRS</code>
5652 contain a list of directories that should be created and should attempt 5664 contain a list of directories that should be created and should attempt
5653 to be destroyed by the installation scripts. The difference between 5665 to be destroyed by the installation scripts. The difference between
5654 the two is that the latter prompts the administrator to remove any 5666 the two is that the latter prompts the administrator to remove any
5655 directories that may be left after deinstallation (because they were 5667 directories that may be left after deinstallation (because they were
5656 not empty), while the former does not.</p></li> 5668 not empty), while the former does not.</p></li>
5657<li class="listitem"> 5669<li class="listitem">
5658<p><code class="varname">MAKE_DIRS_PERMS</code> and 5670<p><code class="varname">MAKE_DIRS_PERMS</code> and
5659 <code class="varname">OWN_DIRS_PERMS</code> contain a list of tuples describing 5671 <code class="varname">OWN_DIRS_PERMS</code> contain a list of tuples describing
5660 which directories should be created and should attempt to be destroyed 5672 which directories should be created and should attempt to be destroyed
5661 by the installation scripts. Each tuple holds the following values, 5673 by the installation scripts. Each tuple holds the following values,
5662 separated by spaces: the directory name, its owner, its group and its 5674 separated by spaces: the directory name, its owner, its group and its
5663 numerical mode. For example:</p> 5675 numerical mode. For example:</p>
5664<pre class="programlisting"> 5676<pre class="programlisting">
5665MAKE_DIRS_PERMS+= ${VARBASE}/foo/private ${ROOT_USER} ${ROOT_GROUP} 0700 5677MAKE_DIRS_PERMS+= ${VARBASE}/foo/private ${ROOT_USER} ${ROOT_GROUP} 0700
5666</pre> 5678</pre>
5667<p>The difference between the two is exactly the same as their 5679<p>The difference between the two is exactly the same as their
5668 non-<code class="varname">PERMS</code> counterparts.</p> 5680 non-<code class="varname">PERMS</code> counterparts.</p>
5669</li> 5681</li>
5670</ul></div> 5682</ul></div>
5671</div> 5683</div>
5672<div class="sect2"> 5684<div class="sect2">
5673<div class="titlepage"><div><div><h3 class="title"> 5685<div class="titlepage"><div><div><h3 class="title">
5674<a name="files-outside-prefix"></a>15.1.2. File manipulation</h3></div></div></div> 5686<a name="files-outside-prefix"></a>15.1.2. File manipulation</h3></div></div></div>
5675<p>Creating non-empty files outside the installation prefix is tricky 5687<p>Creating non-empty files outside the installation prefix is tricky
5676because the <code class="filename">PLIST</code> forces all files to be inside it. 5688because the <code class="filename">PLIST</code> forces all files to be inside it.
5677To overcome this problem, the only solution is to extract the file in the 5689To overcome this problem, the only solution is to extract the file in the
5678known place (i.e., inside the installation prefix) and copy it to the 5690known place (i.e., inside the installation prefix) and copy it to the
5679appropriate location during installation (done by the installation scripts 5691appropriate location during installation (done by the installation scripts
5680generated by pkginstall). We will call the former the <span class="emphasis"><em>master 5692generated by pkginstall). We will call the former the <span class="emphasis"><em>master
5681file</em></span> in the following paragraphs, which describe the variables 5693file</em></span> in the following paragraphs, which describe the variables
5682that can be used to automatically and consistently handle files outside the 5694that can be used to automatically and consistently handle files outside the
5683installation prefix:</p> 5695installation prefix:</p>
5684<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5696<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5685<li class="listitem"> 5697<li class="listitem">
5686<p><code class="varname">CONF_FILES</code> and 5698<p><code class="varname">CONF_FILES</code> and
5687 <code class="varname">REQD_FILES</code> are pairs of master and target files. 5699 <code class="varname">REQD_FILES</code> are pairs of master and target files.
5688 During installation time, the master file is copied to the target one 5700 During installation time, the master file is copied to the target one
5689 if and only if the latter does not exist. Upon deinstallation, the 5701 if and only if the latter does not exist. Upon deinstallation, the
5690 target file is removed provided that it was not modified by the 5702 target file is removed provided that it was not modified by the
5691 installation.</p> 5703 installation.</p>
5692<p>The difference between the two is that the latter prompts the 5704<p>The difference between the two is that the latter prompts the
5693 administrator to remove any files that may be left after 5705 administrator to remove any files that may be left after
5694 deinstallation (because they were not empty), while the former does 5706 deinstallation (because they were not empty), while the former does
5695 not.</p> 5707 not.</p>
5696</li> 5708</li>
5697<li class="listitem"> 5709<li class="listitem">
5698<p><code class="varname">CONF_FILES_PERMS</code> and 5710<p><code class="varname">CONF_FILES_PERMS</code> and
5699 <code class="varname">REQD_FILES_PERMS</code> contain tuples describing master 5711 <code class="varname">REQD_FILES_PERMS</code> contain tuples describing master
5700 files as well as their target locations. For each of them, it also 5712 files as well as their target locations. For each of them, it also
5701 specifies their owner, their group and their numeric permissions, in 5713 specifies their owner, their group and their numeric permissions, in
5702 this order. For example:</p> 5714 this order. For example:</p>
5703<pre class="programlisting"> 5715<pre class="programlisting">
5704REQD_FILES_PERMS+= ${PREFIX}/share/somefile ${VARBASE}/somefile ${ROOT_USER} ${ROOT_GROUP} 0700 5716REQD_FILES_PERMS+= ${PREFIX}/share/somefile ${VARBASE}/somefile ${ROOT_USER} ${ROOT_GROUP} 0700
5705</pre> 5717</pre>
5706<p>The difference between the two is exactly the same as their 5718<p>The difference between the two is exactly the same as their
5707 non-<code class="varname">PERMS</code> counterparts.</p> 5719 non-<code class="varname">PERMS</code> counterparts.</p>
5708</li> 5720</li>
5709</ul></div> 5721</ul></div>
5710</div> 5722</div>
5711</div> 5723</div>
5712<div class="sect1"> 5724<div class="sect1">
5713<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5725<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5714<a name="conf-files"></a>15.2. Configuration files</h2></div></div></div> 5726<a name="conf-files"></a>15.2. Configuration files</h2></div></div></div>
5715<p>Configuration files are special in the sense that they are installed 5727<p>Configuration files are special in the sense that they are installed
5716in their own specific directory, <code class="varname">PKG_SYSCONFDIR</code>, and 5728in their own specific directory, <code class="varname">PKG_SYSCONFDIR</code>, and
5717need special treatment during installation (most of which is automated by 5729need special treatment during installation (most of which is automated by
5718pkginstall). The main concept you must bear in mind is that files marked 5730pkginstall). The main concept you must bear in mind is that files marked
5719as configuration files are automatically copied to the right place (somewhere 5731as configuration files are automatically copied to the right place (somewhere
5720inside <code class="varname">PKG_SYSCONFDIR</code>) during installation <span class="emphasis"><em>if 5732inside <code class="varname">PKG_SYSCONFDIR</code>) during installation <span class="emphasis"><em>if
5721and only if</em></span> they didn't exist before. Similarly, they will not 5733and only if</em></span> they didn't exist before. Similarly, they will not
5722be removed if they have local modifications. This ensures that 5734be removed if they have local modifications. This ensures that
5723administrators never lose any custom changes they may have made.</p> 5735administrators never lose any custom changes they may have made.</p>
5724<div class="sect2"> 5736<div class="sect2">
5725<div class="titlepage"><div><div><h3 class="title"> 5737<div class="titlepage"><div><div><h3 class="title">
5726<a name="conf-files-sysconfdir"></a>15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</h3></div></div></div> 5738<a name="conf-files-sysconfdir"></a>15.2.1. How <code class="varname">PKG_SYSCONFDIR</code> is set</h3></div></div></div>
5727<p>As said before, the <code class="varname">PKG_SYSCONFDIR</code> variable 5739<p>As said before, the <code class="varname">PKG_SYSCONFDIR</code> variable
5728specifies where configuration files shall be installed. Its contents are 5740specifies where configuration files shall be installed. Its contents are
5729set based upon the following variables:</p> 5741set based upon the following variables:</p>
5730<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 5742<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
5731<li class="listitem"><p><code class="varname">PKG_SYSCONFBASE</code>: The configuration's root 5743<li class="listitem"><p><code class="varname">PKG_SYSCONFBASE</code>: The configuration's root
5732 directory. Defaults to <code class="filename">${PREFIX}/etc</code> although it may 5744 directory. Defaults to <code class="filename">${PREFIX}/etc</code> although it may
5733 be overridden by the user to point to his preferred location (e.g., 5745 be overridden by the user to point to his preferred location (e.g.,
5734 <code class="filename">/etc</code>, <code class="filename">/etc/pkg</code>, etc.). 5746 <code class="filename">/etc</code>, <code class="filename">/etc/pkg</code>, etc.).
5735 Packages must not use it directly.</p></li> 5747 Packages must not use it directly.</p></li>
5736<li class="listitem"> 5748<li class="listitem">
5737<p><code class="varname">PKG_SYSCONFSUBDIR</code>: A subdirectory of 5749<p><code class="varname">PKG_SYSCONFSUBDIR</code>: A subdirectory of
5738 <code class="varname">PKG_SYSCONFBASE</code> under which the configuration files 5750 <code class="varname">PKG_SYSCONFBASE</code> under which the configuration files
5739 for the package being built shall be installed. The definition of this 5751 for the package being built shall be installed. The definition of this
5740 variable only makes sense in the package's 5752 variable only makes sense in the package's
5741 <code class="filename">Makefile</code> (i.e., it is not user-customizable).</p> 5753 <code class="filename">Makefile</code> (i.e., it is not user-customizable).</p>
5742<p>As an example, consider the Apache package, 5754<p>As an example, consider the Apache package,
5743 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/apache24/README.html" target="_top"><code class="filename">www/apache24</code></a>, which places its 5755 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/apache24/README.html" target="_top"><code class="filename">www/apache24</code></a>, which places its
5744 configuration files under the 5756 configuration files under the
5745 <code class="filename">httpd/</code> subdirectory of 5757 <code class="filename">httpd/</code> subdirectory of
5746 <code class="varname">PKG_SYSCONFBASE</code>. This should be set in the package 5758 <code class="varname">PKG_SYSCONFBASE</code>. This should be set in the package
5747 Makefile.</p> 5759 Makefile.</p>
5748</li> 5760</li>
5749<li class="listitem"><p><code class="varname">PKG_SYSCONFVAR</code>: Specifies the name of the 5761<li class="listitem"><p><code class="varname">PKG_SYSCONFVAR</code>: Specifies the name of the
5750 variable that holds this package's configuration directory (if 5762 variable that holds this package's configuration directory (if
5751 different from <code class="varname">PKG_SYSCONFBASE</code>). It defaults to 5763 different from <code class="varname">PKG_SYSCONFBASE</code>). It defaults to
5752 <code class="varname">PKGBASE</code>'s value, and is always prefixed with 5764 <code class="varname">PKGBASE</code>'s value, and is always prefixed with
5753 <code class="literal">PKG_SYSCONFDIR</code>.</p></li> 5765 <code class="literal">PKG_SYSCONFDIR</code>.</p></li>
5754<li class="listitem"><p><code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code>: Holds the 5766<li class="listitem"><p><code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code>: Holds the
5755 directory where the configuration files for the package identified by 5767 directory where the configuration files for the package identified by
5756 <code class="varname">PKG_SYSCONFVAR</code>'s shall be placed.</p></li> 5768 <code class="varname">PKG_SYSCONFVAR</code>'s shall be placed.</p></li>
5757</ul></div> 5769</ul></div>
5758<p>Based on the above variables, pkginstall determines the value of 5770<p>Based on the above variables, pkginstall determines the value of
5759<code class="varname">PKG_SYSCONFDIR</code>, which is the <span class="emphasis"><em>only</em></span> 5771<code class="varname">PKG_SYSCONFDIR</code>, which is the <span class="emphasis"><em>only</em></span>
5760variable that can be used within a package to refer to its configuration 5772variable that can be used within a package to refer to its configuration
5761directory. The algorithm used to set its value is basically the 5773directory. The algorithm used to set its value is basically the
5762following:</p> 5774following:</p>
5763<div class="orderedlist"><ol class="orderedlist" type="1"> 5775<div class="orderedlist"><ol class="orderedlist" type="1">
5764<li class="listitem"><p>If <code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code> is set, 5776<li class="listitem"><p>If <code class="varname">PKG_SYSCONFDIR.${PKG_SYSCONFVAR}</code> is set,
5765 its value is used.</p></li> 5777 its value is used.</p></li>
5766<li class="listitem"><p>If the previous variable is not defined but 5778<li class="listitem"><p>If the previous variable is not defined but
5767 <code class="varname">PKG_SYSCONFSUBDIR</code> is set in the package's 5779 <code class="varname">PKG_SYSCONFSUBDIR</code> is set in the package's
5768 <code class="filename">Makefile</code>, the resulting value is 5780 <code class="filename">Makefile</code>, the resulting value is
5769 <code class="filename">${PKG_SYSCONFBASE}/${PKG_SYSCONFSUBDIR}</code>.</p></li> 5781 <code class="filename">${PKG_SYSCONFBASE}/${PKG_SYSCONFSUBDIR}</code>.</p></li>
5770<li class="listitem"><p>Otherwise, it is set to 5782<li class="listitem"><p>Otherwise, it is set to
5771 <code class="filename">${PKG_SYSCONFBASE}</code>.</p></li> 5783 <code class="filename">${PKG_SYSCONFBASE}</code>.</p></li>
5772</ol></div> 5784</ol></div>
5773<p>It is worth mentioning that <code class="filename">${PKG_SYSCONFDIR}</code> is 5785<p>It is worth mentioning that <code class="filename">${PKG_SYSCONFDIR}</code> is
5774automatically 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 5786automatically 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
5775subdirectories of <code class="filename">${PKG_SYSCONFDIR}</code>, they still have to 5787subdirectories of <code class="filename">${PKG_SYSCONFDIR}</code>, they still have to
5776be created with OWN_DIRS or MAKE_DIRS.</p> 5788be created with OWN_DIRS or MAKE_DIRS.</p>
5777</div> 5789</div>
5778<div class="sect2"> 5790<div class="sect2">
5779<div class="titlepage"><div><div><h3 class="title"> 5791<div class="titlepage"><div><div><h3 class="title">
5780<a name="conf-files-configure"></a>15.2.2. Telling the software where configuration files are</h3></div></div></div> 5792<a name="conf-files-configure"></a>15.2.2. Telling the software where configuration files are</h3></div></div></div>
5781<p>Given that pkgsrc (and users!) expect configuration files to be in a 5793<p>Given that pkgsrc (and users!) expect configuration files to be in a
5782known place, you need to teach each package where it shall install its 5794known place, you need to teach each package where it shall install its
5783files. In some cases you will have to patch the package Makefiles to 5795files. In some cases you will have to patch the package Makefiles to
5784achieve it. If you are lucky, though, it may be as easy as passing an 5796achieve it. If you are lucky, though, it may be as easy as passing an
5785extra flag to the configuration script; this is the case of GNU Autoconf- 5797extra flag to the configuration script; this is the case of GNU Autoconf-
5786generated files:</p> 5798generated files:</p>
5787<pre class="programlisting"> 5799<pre class="programlisting">
5788CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR} 5800CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR}
5789</pre> 5801</pre>
5790<p>Note that this specifies where the package has to <span class="emphasis"><em>look 5802<p>Note that this specifies where the package has to <span class="emphasis"><em>look
5791for</em></span> its configuration files, not where they will be originally 5803for</em></span> its configuration files, not where they will be originally
5792installed (although the difference is never explicit, 5804installed (although the difference is never explicit,
5793unfortunately).</p> 5805unfortunately).</p>
5794</div> 5806</div>
5795<div class="sect2"> 5807<div class="sect2">
5796<div class="titlepage"><div><div><h3 class="title"> 5808<div class="titlepage"><div><div><h3 class="title">
5797<a name="conf-files-patching"></a>15.2.3. Patching installations</h3></div></div></div> 5809<a name="conf-files-patching"></a>15.2.3. Patching installations</h3></div></div></div>
5798<p>As said before, pkginstall automatically handles configuration files. 5810<p>As said before, pkginstall automatically handles configuration files.
5799This means that <span class="strong"><strong>the packages themselves must not 5811This means that <span class="strong"><strong>the packages themselves must not
5800touch the contents of <code class="filename">${PKG_SYSCONFDIR}</code> 5812touch the contents of <code class="filename">${PKG_SYSCONFDIR}</code>
5801directly</strong></span>. Bad news is that many software installation scripts 5813directly</strong></span>. Bad news is that many software installation scripts
5802will, out of the box, mess with the contents of that directory. So what is 5814will, out of the box, mess with the contents of that directory. So what is
5803the correct procedure to fix this issue?</p> 5815the correct procedure to fix this issue?</p>
5804<p>You must teach the package (usually by manually patching it) to 5816<p>You must teach the package (usually by manually patching it) to
5805install any configuration files under the examples hierarchy, 5817install any configuration files under the examples hierarchy,
5806<code class="filename">share/examples/${PKGBASE}/</code>. This way, the 5818<code class="filename">share/examples/${PKGBASE}/</code>. This way, the
5807<code class="filename">PLIST</code> registers them and the administrator always 5819<code class="filename">PLIST</code> registers them and the administrator always
5808has the original copies available.</p> 5820has the original copies available.</p>
5809<p>Once the required configuration files are in place (i.e., under the 5821<p>Once the required configuration files are in place (i.e., under the
5810examples hierarchy), the pkginstall framework can use them as master copies 5822examples hierarchy), the pkginstall framework can use them as master copies
5811during the package installation to update what is in 5823during the package installation to update what is in
5812<code class="filename">${PKG_SYSCONFDIR}</code>. To achieve this, the variables 5824<code class="filename">${PKG_SYSCONFDIR}</code>. To achieve this, the variables
5813<code class="varname">CONF_FILES</code> and <code class="varname">CONF_FILES_PERMS</code> are 5825<code class="varname">CONF_FILES</code> and <code class="varname">CONF_FILES_PERMS</code> are
5814used. 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 5826used. 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
5815about their syntax and their purpose. Here is an example, taken from the 5827about their syntax and their purpose. Here is an example, taken from the
5816<a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/mail/mutt/README.html" target="_top"><code class="filename">mail/mutt</code></a> package:</p> 5828<a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/mail/mutt/README.html" target="_top"><code class="filename">mail/mutt</code></a> package:</p>
5817<pre class="programlisting"> 5829<pre class="programlisting">
5818EGDIR= ${PREFIX}/share/doc/mutt/samples 5830EGDIR= ${PREFIX}/share/doc/mutt/samples
5819CONF_FILES= ${EGDIR}/Muttrc ${PKG_SYSCONFDIR}/Muttrc 5831CONF_FILES= ${EGDIR}/Muttrc ${PKG_SYSCONFDIR}/Muttrc
5820</pre> 5832</pre>
5821<p>Note that the <code class="varname">EGDIR</code> variable is specific to that 5833<p>Note that the <code class="varname">EGDIR</code> variable is specific to that
5822package and has no meaning outside it.</p> 5834package and has no meaning outside it.</p>
5823</div> 5835</div>
5824<div class="sect2"> 5836<div class="sect2">
5825<div class="titlepage"><div><div><h3 class="title"> 5837<div class="titlepage"><div><div><h3 class="title">
5826<a name="conf-files-disable"></a>15.2.4. Disabling handling of configuration files</h3></div></div></div> 5838<a name="conf-files-disable"></a>15.2.4. Disabling handling of configuration files</h3></div></div></div>
5827<p>The automatic copying of config files can be toggled by setting the 5839<p>The automatic copying of config files can be toggled by setting the
5828environment variable <code class="varname">PKG_CONFIG</code> prior to package 5840environment variable <code class="varname">PKG_CONFIG</code> prior to package
5829installation.</p> 5841installation.</p>
5830</div> 5842</div>
5831</div> 5843</div>
5832<div class="sect1"> 5844<div class="sect1">
5833<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5845<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5834<a name="rcd-scripts"></a>15.3. System startup scripts</h2></div></div></div> 5846<a name="rcd-scripts"></a>15.3. System startup scripts</h2></div></div></div>
5835<p>System startup scripts are special files because they must be 5847<p>System startup scripts are special files because they must be
5836installed in a place known by the underlying OS, usually outside the 5848installed in a place known by the underlying OS, usually outside the
5837installation 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 5849installation 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
5838can be used. However, pkginstall provides a special mechanism to handle 5850can be used. However, pkginstall provides a special mechanism to handle
5839these files.</p> 5851these files.</p>
5840<p>In order to provide system startup scripts, the package has 5852<p>In order to provide system startup scripts, the package has
5841to:</p> 5853to:</p>
5842<div class="orderedlist"><ol class="orderedlist" type="1"> 5854<div class="orderedlist"><ol class="orderedlist" type="1">
5843<li class="listitem"><p>Store the script inside <code class="filename">${FILESDIR}</code>, with 5855<li class="listitem"><p>Store the script inside <code class="filename">${FILESDIR}</code>, with
5844 the <code class="literal">.sh</code> suffix appended. Considering the 5856 the <code class="literal">.sh</code> suffix appended. Considering the
5845 <a href="ftp://ftp.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 5857 <a href="ftp://ftp.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
5846 <code class="filename">cupsd.sh</code> in its files directory.</p></li> 5858 <code class="filename">cupsd.sh</code> in its files directory.</p></li>
5847<li class="listitem"> 5859<li class="listitem">
5848<p>Tell pkginstall to handle it, appending the name of the script, 5860<p>Tell pkginstall to handle it, appending the name of the script,
5849 without its extension, to the <code class="varname">RCD_SCRIPTS</code> variable. 5861 without its extension, to the <code class="varname">RCD_SCRIPTS</code> variable.
5850 Continuing the previous example:</p> 5862 Continuing the previous example:</p>
5851<pre class="programlisting"> 5863<pre class="programlisting">
5852RCD_SCRIPTS+= cupsd 5864RCD_SCRIPTS+= cupsd
5853</pre> 5865</pre>
5854</li> 5866</li>
5855</ol></div> 5867</ol></div>
5856<p>Once this is done, pkginstall will do the following steps for each 5868<p>Once this is done, pkginstall will do the following steps for each
5857script in an automated fashion:</p> 5869script in an automated fashion:</p>
5858<div class="orderedlist"><ol class="orderedlist" type="1"> 5870<div class="orderedlist"><ol class="orderedlist" type="1">
5859<li class="listitem"><p>Process the file found in the files directory applying all the 5871<li class="listitem"><p>Process the file found in the files directory applying all the
5860 substitutions described in the <code class="filename">FILES_SUBST</code> 5872 substitutions described in the <code class="filename">FILES_SUBST</code>
5861 variable.</p></li> 5873 variable.</p></li>
5862<li class="listitem"><p>Copy the script from the files directory to the examples 5874<li class="listitem"><p>Copy the script from the files directory to the examples
5863 hierarchy, <code class="filename">${PREFIX}/share/examples/rc.d/</code>. Note 5875 hierarchy, <code class="filename">${PREFIX}/share/examples/rc.d/</code>. Note
5864 that this master file must be explicitly registered in the 5876 that this master file must be explicitly registered in the
5865 <code class="filename">PLIST</code>.</p></li> 5877 <code class="filename">PLIST</code>.</p></li>
5866<li class="listitem"><p>Add code to the installation scripts to copy the startup script 5878<li class="listitem"><p>Add code to the installation scripts to copy the startup script
5867 from the examples hierarchy into the system-wide startup scripts 5879 from the examples hierarchy into the system-wide startup scripts
5868 directory.</p></li> 5880 directory.</p></li>
5869</ol></div> 5881</ol></div>
5870<div class="sect2"> 5882<div class="sect2">
5871<div class="titlepage"><div><div><h3 class="title"> 5883<div class="titlepage"><div><div><h3 class="title">
5872<a name="rcd-scripts-disable"></a>15.3.1. Disabling handling of system startup scripts</h3></div></div></div> 5884<a name="rcd-scripts-disable"></a>15.3.1. Disabling handling of system startup scripts</h3></div></div></div>
5873<p>The automatic copying of config files can be toggled by setting the 5885<p>The automatic copying of config files can be toggled by setting the
5874environment variable <code class="varname">PKG_RCD_SCRIPTS</code> prior to package 5886environment variable <code class="varname">PKG_RCD_SCRIPTS</code> prior to package
5875installation. Note that the scripts will be always copied inside the 5887installation. Note that the scripts will be always copied inside the
5876examples hierarchy, <code class="filename">${PREFIX}/share/examples/rc.d/</code>, no 5888examples hierarchy, <code class="filename">${PREFIX}/share/examples/rc.d/</code>, no
5877matter what the value of this variable is.</p> 5889matter what the value of this variable is.</p>
5878</div> 5890</div>
5879</div> 5891</div>
5880<div class="sect1"> 5892<div class="sect1">
5881<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5893<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5882<a name="users-and-groups"></a>15.4. System users and groups</h2></div></div></div> 5894<a name="users-and-groups"></a>15.4. System users and groups</h2></div></div></div>
5883<p>If a package needs to create special users and/or groups during 5895<p>If a package needs to create special users and/or groups during
5884installation, it can do so by using the pkginstall framework.</p> 5896installation, it can do so by using the pkginstall framework.</p>
5885<p>Users can be created by adding entries to the 5897<p>Users can be created by adding entries to the
5886<code class="varname">PKG_USERS</code> variable. Each entry has the following 5898<code class="varname">PKG_USERS</code> variable. Each entry has the following
5887syntax:</p> 5899syntax:</p>
5888<pre class="programlisting"> 5900<pre class="programlisting">
5889user:group 5901user:group
5890</pre> 5902</pre>
5891<p>Further specification of user details may be done by setting 5903<p>Further specification of user details may be done by setting
5892per-user variables. 5904per-user variables.
5893<code class="varname">PKG_UID.<em class="replaceable"><code>user</code></em></code> is the 5905<code class="varname">PKG_UID.<em class="replaceable"><code>user</code></em></code> is the
5894numeric UID for the user. 5906numeric UID for the user.
5895<code class="varname">PKG_GECOS.<em class="replaceable"><code>user</code></em></code> is the 5907<code class="varname">PKG_GECOS.<em class="replaceable"><code>user</code></em></code> is the
5896user's description or comment. 5908user's description or comment.
5897<code class="varname">PKG_HOME.<em class="replaceable"><code>user</code></em></code> is the 5909<code class="varname">PKG_HOME.<em class="replaceable"><code>user</code></em></code> is the
5898user's home directory, and defaults to 5910user's home directory, and defaults to
5899<code class="filename">/nonexistent</code> if not specified. 5911<code class="filename">/nonexistent</code> if not specified.
5900<code class="varname">PKG_SHELL.<em class="replaceable"><code>user</code></em></code> is the 5912<code class="varname">PKG_SHELL.<em class="replaceable"><code>user</code></em></code> is the
5901user's shell, and defaults to <code class="filename">/sbin/nologin</code> if 5913user's shell, and defaults to <code class="filename">/sbin/nologin</code> if
5902not specified.</p> 5914not specified.</p>
5903<p>Similarly, groups can be created by adding entries to the 5915<p>Similarly, groups can be created by adding entries to the
5904<code class="varname">PKG_GROUPS</code> variable, whose syntax is:</p> 5916<code class="varname">PKG_GROUPS</code> variable, whose syntax is:</p>
5905<pre class="programlisting"> 5917<pre class="programlisting">
5906group 5918group
5907</pre> 5919</pre>
5908<p>The numeric GID of the group may be set by defining 5920<p>The numeric GID of the group may be set by defining
5909<code class="varname">PKG_GID.<em class="replaceable"><code>group</code></em></code>.</p> 5921<code class="varname">PKG_GID.<em class="replaceable"><code>group</code></em></code>.</p>
5910<p>If a package needs to create the users and groups at an earlier 5922<p>If a package needs to create the users and groups at an earlier
5911stage, then it can set <code class="varname">USERGROUP_PHASE</code> to 5923stage, then it can set <code class="varname">USERGROUP_PHASE</code> to
5912either <code class="literal">configure</code> or <code class="literal">build</code> to 5924either <code class="literal">configure</code> or <code class="literal">build</code> to
5913indicate the phase before which the users and groups are created. In 5925indicate the phase before which the users and groups are created. In
5914this case, the numeric UIDs and GIDs of the created users and groups 5926this case, the numeric UIDs and GIDs of the created users and groups
5915are automatically hardcoded into the final installation scripts.</p> 5927are automatically hardcoded into the final installation scripts.</p>
5916</div> 5928</div>
5917<div class="sect1"> 5929<div class="sect1">
5918<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5930<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5919<a name="shells"></a>15.5. System shells</h2></div></div></div> 5931<a name="shells"></a>15.5. System shells</h2></div></div></div>
5920<p>Packages that install system shells should register them in the shell 5932<p>Packages that install system shells should register them in the shell
5921database, <code class="filename">/etc/shells</code>, to make things easier to the 5933database, <code class="filename">/etc/shells</code>, to make things easier to the
5922administrator. This must be done from the installation scripts to keep 5934administrator. This must be done from the installation scripts to keep
5923binary packages working on any system. pkginstall provides an easy way to 5935binary packages working on any system. pkginstall provides an easy way to
5924accomplish this task.</p> 5936accomplish this task.</p>
5925<p>When a package provides a shell interpreter, it has to set the 5937<p>When a package provides a shell interpreter, it has to set the
5926<code class="varname">PKG_SHELL</code> variable to its absolute file name. This will 5938<code class="varname">PKG_SHELL</code> variable to its absolute file name. This will
5927add some hooks to the installation scripts to handle it. Consider the 5939add some hooks to the installation scripts to handle it. Consider the
5928following example, taken from <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/shells/zsh/README.html" target="_top"><code class="filename">shells/zsh</code></a>:</p> 5940following example, taken from <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/shells/zsh/README.html" target="_top"><code class="filename">shells/zsh</code></a>:</p>
5929<pre class="programlisting"> 5941<pre class="programlisting">
5930PKG_SHELL= ${PREFIX}/bin/zsh 5942PKG_SHELL= ${PREFIX}/bin/zsh
5931</pre> 5943</pre>
5932<div class="sect2"> 5944<div class="sect2">
5933<div class="titlepage"><div><div><h3 class="title"> 5945<div class="titlepage"><div><div><h3 class="title">
5934<a name="shells-disable"></a>15.5.1. Disabling shell registration</h3></div></div></div> 5946<a name="shells-disable"></a>15.5.1. Disabling shell registration</h3></div></div></div>
5935<p>The automatic registration of shell interpreters can be disabled by 5947<p>The automatic registration of shell interpreters can be disabled by
5936the administrator by setting the <code class="filename">PKG_REGISTER_SHELLS</code> 5948the administrator by setting the <code class="filename">PKG_REGISTER_SHELLS</code>
5937environment variable to <code class="literal">NO</code>.</p> 5949environment variable to <code class="literal">NO</code>.</p>
5938</div> 5950</div>
5939</div> 5951</div>
5940<div class="sect1"> 5952<div class="sect1">
5941<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5953<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5942<a name="fonts"></a>15.6. Fonts</h2></div></div></div> 5954<a name="fonts"></a>15.6. Fonts</h2></div></div></div>
5943<p>Packages that install X11 fonts should update the database files 5955<p>Packages that install X11 fonts should update the database files
5944that index the fonts within each fonts directory. This can easily be 5956that index the fonts within each fonts directory. This can easily be
5945accomplished within the pkginstall framework.</p> 5957accomplished within the pkginstall framework.</p>
5946<p>When a package installs X11 fonts, it must list the directories in 5958<p>When a package installs X11 fonts, it must list the directories in
5947which fonts are installed in the 5959which fonts are installed in the
5948<code class="varname">FONTS_DIRS.<em class="replaceable"><code>type</code></em></code> variables, 5960<code class="varname">FONTS_DIRS.<em class="replaceable"><code>type</code></em></code> variables,
5949where <em class="replaceable"><code>type</code></em> can be one of <span class="quote">&#8220;<span class="quote">ttf</span>&#8221;</span>, 5961where <em class="replaceable"><code>type</code></em> can be one of <span class="quote">&#8220;<span class="quote">ttf</span>&#8221;</span>,
5950<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 5962<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
5951installation scripts to run the appropriate commands to update the fonts 5963installation scripts to run the appropriate commands to update the fonts
5952database files within each of those directories. For convenience, if the 5964database files within each of those directories. For convenience, if the
5953directory path is relative, it is taken to be relative to the package's 5965directory path is relative, it is taken to be relative to the package's
5954installation prefix. Consider the following example, taken from <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/fonts/dbz-ttf/README.html" target="_top"><code class="filename">fonts/dbz-ttf</code></a>:</p> 5966installation prefix. Consider the following example, taken from <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/fonts/dbz-ttf/README.html" target="_top"><code class="filename">fonts/dbz-ttf</code></a>:</p>
5955<pre class="programlisting"> 5967<pre class="programlisting">
5956FONTS_DIRS.ttf= ${PREFIX}/share/fonts/X11/TTF 5968FONTS_DIRS.ttf= ${PREFIX}/share/fonts/X11/TTF
5957</pre> 5969</pre>
5958<div class="sect2"> 5970<div class="sect2">
5959<div class="titlepage"><div><div><h3 class="title"> 5971<div class="titlepage"><div><div><h3 class="title">
5960<a name="fonts-disable"></a>15.6.1. Disabling automatic update of the fonts databases</h3></div></div></div> 5972<a name="fonts-disable"></a>15.6.1. Disabling automatic update of the fonts databases</h3></div></div></div>
5961<p>The automatic update of fonts databases can be disabled by 5973<p>The automatic update of fonts databases can be disabled by
5962the administrator by setting the <code class="filename">PKG_UPDATE_FONTS_DB</code> 5974the administrator by setting the <code class="filename">PKG_UPDATE_FONTS_DB</code>
5963environment variable to <code class="literal">NO</code>.</p> 5975environment variable to <code class="literal">NO</code>.</p>
5964</div> 5976</div>
5965</div> 5977</div>
5966</div> 5978</div>
5967<div class="chapter"> 5979<div class="chapter">
5968<div class="titlepage"><div><div><h2 class="title"> 5980<div class="titlepage"><div><div><h2 class="title">
5969<a name="options"></a>Chapter 16. Options handling</h2></div></div></div> 5981<a name="options"></a>Chapter 16. Options handling</h2></div></div></div>
5970<div class="toc"> 5982<div class="toc">
5971<p><b>Table of Contents</b></p> 5983<p><b>Table of Contents</b></p>
5972<dl> 5984<dl>
5973<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt> 5985<dt><span class="sect1"><a href="#global-default-options">16.1. Global default options</a></span></dt>
5974<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> 5986<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>
5975<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt> 5987<dt><span class="sect1"><a href="#option-names">16.3. Option Names</a></span></dt>
5976<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt> 5988<dt><span class="sect1"><a href="#option-build">16.4. Determining the options of dependencies</a></span></dt>
5977</dl> 5989</dl>
5978</div> 5990</div>
5979<p>Many packages have the ability to be built to support different 5991<p>Many packages have the ability to be built to support different
5980sets of features. <code class="filename">bsd.options.mk</code> is a framework 5992sets of features. <code class="filename">bsd.options.mk</code> is a framework
5981in pkgsrc that provides generic handling of those options that 5993in pkgsrc that provides generic handling of those options that
5982determine different ways in which the packages can be built. It's 5994determine different ways in which the packages can be built. It's
5983possible for the user to specify exactly which sets of options will be 5995possible for the user to specify exactly which sets of options will be
5984built into a package or to allow a set of global default options 5996built into a package or to allow a set of global default options
5985apply.</p> 5997apply.</p>
5986<p>There are two broad classes of behaviors that one might want to 5998<p>There are two broad classes of behaviors that one might want to
5987control via options. One is whether some particular feature is 5999control via options. One is whether some particular feature is
5988enabled in a program that will be built anyway, often by including or 6000enabled in a program that will be built anyway, often by including or
5989not including a dependency on some other package. The other is 6001not including a dependency on some other package. The other is
5990whether or not an additional program will be built as part of the 6002whether or not an additional program will be built as part of the
5991package. Generally, it is better to make a split package for such 6003package. Generally, it is better to make a split package for such
5992additional programs instead of using options, because it enables 6004additional programs instead of using options, because it enables
5993binary packages to be built which can then be added separately. For 6005binary packages to be built which can then be added separately. For
5994example, the foo package might have minimal dependencies (those 6006example, the foo package might have minimal dependencies (those
5995packages without which foo doesn't make sense), and then the foo-gfoo 6007packages without which foo doesn't make sense), and then the foo-gfoo
5996package might include the GTK frontend program gfoo. This is better 6008package might include the GTK frontend program gfoo. This is better
5997than including a gtk option to foo that adds gfoo, because either that 6009than including a gtk option to foo that adds gfoo, because either that
5998option is default, in which case binary users can't get foo without 6010option is default, in which case binary users can't get foo without
5999gfoo, or not default, in which case they can't get gfoo. With split 6011gfoo, or not default, in which case they can't get gfoo. With split
6000packages, they can install foo without having GTK, and later decide to 6012packages, they can install foo without having GTK, and later decide to
6001install gfoo (pulling in GTK at that time). This is an advantage to 6013install gfoo (pulling in GTK at that time). This is an advantage to
6002source users too, avoiding the need for rebuilds.</p> 6014source users too, avoiding the need for rebuilds.</p>
6003<p>Plugins with widely varying dependencies should usually be split 6015<p>Plugins with widely varying dependencies should usually be split
6004instead of options.</p> 6016instead of options.</p>
6005<p>It is often more work to maintain split packages, especially if 6017<p>It is often more work to maintain split packages, especially if
6006the upstream package does not support this. The decision of split 6018the upstream package does not support this. The decision of split
6007vs. option should be made based on the likelihood that users will want 6019vs. option should be made based on the likelihood that users will want
6008or object to the various pieces, the size of the dependencies that are 6020or object to the various pieces, the size of the dependencies that are
6009included, and the amount of work.</p> 6021included, and the amount of work.</p>
6010<p>A further consideration is licensing. Non-free parts, or parts 6022<p>A further consideration is licensing. Non-free parts, or parts
6011that depend on non-free dependencies (especially plugins) should 6023that depend on non-free dependencies (especially plugins) should
6012almost always be split if feasible.</p> 6024almost always be split if feasible.</p>
6013<div class="sect1"> 6025<div class="sect1">
6014<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6026<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6015<a name="global-default-options"></a>16.1. Global default options</h2></div></div></div> 6027<a name="global-default-options"></a>16.1. Global default options</h2></div></div></div>
6016<p>Global default options are listed in 6028<p>Global default options are listed in
6017<code class="varname">PKG_DEFAULT_OPTIONS</code>, which is a list of the options 6029<code class="varname">PKG_DEFAULT_OPTIONS</code>, which is a list of the options
6018that should be built into every package if that option is supported. 6030that should be built into every package if that option is supported.
6019This variable should be set in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p> 6031This variable should be set in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.</p>
6020</div> 6032</div>
6021<div class="sect1"> 6033<div class="sect1">
6022<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6034<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6023<a name="converting-to-options"></a>16.2. Converting packages to use <code class="filename">bsd.options.mk</code> 6035<a name="converting-to-options"></a>16.2. Converting packages to use <code class="filename">bsd.options.mk</code>
6024</h2></div></div></div> 6036</h2></div></div></div>
6025<p>The following example shows how 6037<p>The following example shows how
6026<code class="filename">bsd.options.mk</code> should be used 6038<code class="filename">bsd.options.mk</code> should be used
6027by the hypothetical ``wibble'' package, either in the package 6039by the hypothetical ``wibble'' package, either in the package
6028<code class="filename">Makefile</code>, or in a file, 6040<code class="filename">Makefile</code>, or in a file,
6029e.g. <code class="filename">options.mk</code>, that is included by the 6041e.g. <code class="filename">options.mk</code>, that is included by the
6030main package <code class="filename">Makefile</code>.</p> 6042main package <code class="filename">Makefile</code>.</p>
6031<pre class="programlisting"> 6043<pre class="programlisting">
6032PKG_OPTIONS_VAR= PKG_OPTIONS.wibble 6044PKG_OPTIONS_VAR= PKG_OPTIONS.wibble
6033PKG_SUPPORTED_OPTIONS= wibble-foo ldap 6045PKG_SUPPORTED_OPTIONS= wibble-foo ldap
6034PKG_OPTIONS_OPTIONAL_GROUPS= database 6046PKG_OPTIONS_OPTIONAL_GROUPS= database
6035PKG_OPTIONS_GROUP.database= mysql pgsql 6047PKG_OPTIONS_GROUP.database= mysql pgsql
6036PKG_SUGGESTED_OPTIONS= wibble-foo 6048PKG_SUGGESTED_OPTIONS= wibble-foo
6037PKG_OPTIONS_LEGACY_VARS+= WIBBLE_USE_OPENLDAP:ldap 6049PKG_OPTIONS_LEGACY_VARS+= WIBBLE_USE_OPENLDAP:ldap
6038PKG_OPTIONS_LEGACY_OPTS+= foo:wibble-foo 6050PKG_OPTIONS_LEGACY_OPTS+= foo:wibble-foo
6039 6051
6040.include "../../mk/bsd.prefs.mk" 6052.include "../../mk/bsd.prefs.mk"
6041 6053
6042# this package was previously named wibble2 6054# this package was previously named wibble2
6043.if defined(PKG_OPTIONS.wibble2) 6055.if defined(PKG_OPTIONS.wibble2)
6044PKG_LEGACY_OPTIONS+= ${PKG_OPTIONS.wibble2} 6056PKG_LEGACY_OPTIONS+= ${PKG_OPTIONS.wibble2}
6045PKG_OPTIONS_DEPRECATED_WARNINGS+= \ 6057PKG_OPTIONS_DEPRECATED_WARNINGS+= \
6046 "Deprecated variable PKG_OPTIONS.wibble2 used, use ${PKG_OPTIONS_VAR} instead." 6058 "Deprecated variable PKG_OPTIONS.wibble2 used, use ${PKG_OPTIONS_VAR} instead."
6047.endif 6059.endif
6048 6060
6049.include "../../mk/bsd.options.mk" 6061.include "../../mk/bsd.options.mk"
6050 6062
6051# Package-specific option-handling 6063# Package-specific option-handling
6052 6064
6053### 6065###
6054### FOO support 6066### FOO support
6055### 6067###
6056.if !empty(PKG_OPTIONS:Mwibble-foo) 6068.if !empty(PKG_OPTIONS:Mwibble-foo)
6057CONFIGURE_ARGS+= --enable-foo 6069CONFIGURE_ARGS+= --enable-foo
6058.endif 6070.endif
6059 6071
6060### 6072###
6061### LDAP support 6073### LDAP support
6062### 6074###
6063.if !empty(PKG_OPTIONS:Mldap) 6075.if !empty(PKG_OPTIONS:Mldap)
6064. include "../../databases/openldap-client/buildlink3.mk" 6076. include "../../databases/openldap-client/buildlink3.mk"
6065CONFIGURE_ARGS+= --enable-ldap=${BUILDLINK_PREFIX.openldap-client} 6077CONFIGURE_ARGS+= --enable-ldap=${BUILDLINK_PREFIX.openldap-client}
6066.endif 6078.endif
6067 6079
6068### 6080###
6069### database support 6081### database support
6070### 6082###
6071.if !empty(PKG_OPTIONS:Mmysql) 6083.if !empty(PKG_OPTIONS:Mmysql)
6072. include "../../mk/mysql.buildlink3.mk" 6084. include "../../mk/mysql.buildlink3.mk"
6073.endif 6085.endif
6074.if !empty(PKG_OPTIONS:Mpgsql) 6086.if !empty(PKG_OPTIONS:Mpgsql)
6075. include "../../mk/pgsql.buildlink3.mk" 6087. include "../../mk/pgsql.buildlink3.mk"
6076.endif 6088.endif
6077</pre> 6089</pre>
6078<p>The first section contains the information about which build 6090<p>The first section contains the information about which build
6079options are supported by the package, and any default options settings 6091options are supported by the package, and any default options settings
6080if needed.</p> 6092if needed.</p>
6081<div class="orderedlist"><ol class="orderedlist" type="1"> 6093<div class="orderedlist"><ol class="orderedlist" type="1">
6082<li class="listitem"><p><code class="varname">PKG_OPTIONS_VAR</code> is the name of the 6094<li class="listitem"><p><code class="varname">PKG_OPTIONS_VAR</code> is the name of the
6083<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> variable that the user can set to override the default 6095<a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> variable that the user can set to override the default
6084options. It should be set to 6096options. It should be set to
6085PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em>. Do not set it to 6097PKG_OPTIONS.<em class="replaceable"><code>pkgbase</code></em>. Do not set it to
6086PKG_OPTIONS.${PKGBASE}, since <code class="varname">PKGBASE</code> is not defined 6098PKG_OPTIONS.${PKGBASE}, since <code class="varname">PKGBASE</code> is not defined
6087at the point where the options are processed.</p></li> 6099at the point where the options are processed.</p></li>
6088<li class="listitem"><p><code class="varname">PKG_SUPPORTED_OPTIONS</code> is a list of 6100<li class="listitem"><p><code class="varname">PKG_SUPPORTED_OPTIONS</code> is a list of
6089build options supported by the package.</p></li> 6101build options supported by the package.</p></li>
6090<li class="listitem"><p><code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code> is a 6102<li class="listitem"><p><code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code> is a
6091list of names of groups of mutually exclusive options. The options in 6103list of names of groups of mutually exclusive options. The options in
6092each group are listed in 6104each group are listed in
6093<code class="varname">PKG_OPTIONS_GROUP.<em class="replaceable"><code>groupname</code></em></code>. 6105<code class="varname">PKG_OPTIONS_GROUP.<em class="replaceable"><code>groupname</code></em></code>.
6094The most specific setting of any option from the group takes 6106The most specific setting of any option from the group takes
6095precedence over all other options in the group. Options from the 6107precedence over all other options in the group. Options from the
6096groups will be automatically added to 6108groups will be automatically added to
6097<code class="varname">PKG_SUPPORTED_OPTIONS</code>.</p></li> 6109<code class="varname">PKG_SUPPORTED_OPTIONS</code>.</p></li>
6098<li class="listitem"><p><code class="varname">PKG_OPTIONS_REQUIRED_GROUPS</code> is like 6110<li class="listitem"><p><code class="varname">PKG_OPTIONS_REQUIRED_GROUPS</code> is like
6099<code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code>, but building the 6111<code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code>, but building the
6100packages will fail if no option from the group is 6112packages will fail if no option from the group is
6101selected.</p></li> 6113selected.</p></li>
6102<li class="listitem"><p><code class="varname">PKG_OPTIONS_NONEMPTY_SETS</code> is a list 6114<li class="listitem"><p><code class="varname">PKG_OPTIONS_NONEMPTY_SETS</code> is a list
6103of names of sets of options. At least one option from each set must 6115of names of sets of options. At least one option from each set must
6104be selected. The options in each set are listed in 6116be selected. The options in each set are listed in
6105<code class="varname">PKG_OPTIONS_SET.<em class="replaceable"><code>setname</code></em></code>. 6117<code class="varname">PKG_OPTIONS_SET.<em class="replaceable"><code>setname</code></em></code>.
6106Options from the sets will be automatically added to 6118Options from the sets will be automatically added to
6107<code class="varname">PKG_SUPPORTED_OPTIONS</code>. Building the package will 6119<code class="varname">PKG_SUPPORTED_OPTIONS</code>. Building the package will
6108fail if no option from the set is selected.</p></li> 6120fail if no option from the set is selected.</p></li>
6109<li class="listitem"><p><code class="varname">PKG_SUGGESTED_OPTIONS</code> is a list of 6121<li class="listitem"><p><code class="varname">PKG_SUGGESTED_OPTIONS</code> is a list of
6110build options which are enabled by default.</p></li> 6122build options which are enabled by default.</p></li>
6111<li class="listitem"><p><code class="varname">PKG_OPTIONS_LEGACY_VARS</code> is a list 6123<li class="listitem"><p><code class="varname">PKG_OPTIONS_LEGACY_VARS</code> is a list
6112of 6124of
6113<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> 6125<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>
6114pairs that map legacy <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> variables to 6126pairs that map legacy <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> variables to
6115their option counterparts. Pairs should be added with 6127their option counterparts. Pairs should be added with
6116<span class="quote">&#8220;<span class="quote">+=</span>&#8221;</span> to keep the listing of global legacy variables. A 6128<span class="quote">&#8220;<span class="quote">+=</span>&#8221;</span> to keep the listing of global legacy variables. A
6117warning will be issued if the user uses a legacy 6129warning will be issued if the user uses a legacy
6118variable.</p></li> 6130variable.</p></li>
6119<li class="listitem"><p><code class="varname">PKG_OPTIONS_LEGACY_OPTS</code> is a list 6131<li class="listitem"><p><code class="varname">PKG_OPTIONS_LEGACY_OPTS</code> is a list
6120of 6132of
6121<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> 6133<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>
6122pairs that map options that have been renamed to their new 6134pairs that map options that have been renamed to their new
6123counterparts. Pairs should be added with <span class="quote">&#8220;<span class="quote">+=</span>&#8221;</span> to keep 6135counterparts. Pairs should be added with <span class="quote">&#8220;<span class="quote">+=</span>&#8221;</span> to keep
6124the listing of global legacy options. A warning will be issued if 6136the listing of global legacy options. A warning will be issued if
6125the user uses a legacy option.</p></li> 6137the user uses a legacy option.</p></li>
6126<li class="listitem"><p><code class="varname">PKG_LEGACY_OPTIONS</code> is a list of 6138<li class="listitem"><p><code class="varname">PKG_LEGACY_OPTIONS</code> is a list of
6127options implied by deprecated variables used. This can be used for 6139options implied by deprecated variables used. This can be used for
6128cases that neither <code class="varname">PKG_OPTIONS_LEGACY_VARS</code> nor 6140cases that neither <code class="varname">PKG_OPTIONS_LEGACY_VARS</code> nor
6129<code class="varname">PKG_OPTIONS_LEGACY_OPTS</code> can handle, e. g. when 6141<code class="varname">PKG_OPTIONS_LEGACY_OPTS</code> can handle, e. g. when
6130<code class="varname">PKG_OPTIONS_VAR</code> is renamed.</p></li> 6142<code class="varname">PKG_OPTIONS_VAR</code> is renamed.</p></li>
6131<li class="listitem"><p><code class="varname">PKG_OPTIONS_DEPRECATED_WARNINGS</code> is 6143<li class="listitem"><p><code class="varname">PKG_OPTIONS_DEPRECATED_WARNINGS</code> is
6132a list of warnings about deprecated variables or options used, and 6144a list of warnings about deprecated variables or options used, and
6133what to use instead.</p></li> 6145what to use instead.</p></li>
6134</ol></div> 6146</ol></div>
6135<p>A package should never modify 6147<p>A package should never modify
6136<code class="varname">PKG_DEFAULT_OPTIONS</code> or the variable named in 6148<code class="varname">PKG_DEFAULT_OPTIONS</code> or the variable named in
6137<code class="varname">PKG_OPTIONS_VAR</code>. These are strictly user-settable. 6149<code class="varname">PKG_OPTIONS_VAR</code>. These are strictly user-settable.
6138To suggest a default set of options, use 6150To suggest a default set of options, use
6139<code class="varname">PKG_SUGGESTED_OPTIONS</code>.</p> 6151<code class="varname">PKG_SUGGESTED_OPTIONS</code>.</p>
6140<p><code class="varname">PKG_OPTIONS_VAR</code> must be defined before 6152<p><code class="varname">PKG_OPTIONS_VAR</code> must be defined before
6141including <code class="filename">bsd.options.mk</code>. If none of 6153including <code class="filename">bsd.options.mk</code>. If none of
6142<code class="varname">PKG_SUPPORTED_OPTIONS</code>, 6154<code class="varname">PKG_SUPPORTED_OPTIONS</code>,
6143<code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code>, and 6155<code class="varname">PKG_OPTIONS_OPTIONAL_GROUPS</code>, and
6144<code class="varname">PKG_OPTIONS_REQUIRED_GROUPS</code> are defined (as can 6156<code class="varname">PKG_OPTIONS_REQUIRED_GROUPS</code> are defined (as can
6145happen with platform-specific options if none of them is supported on 6157happen with platform-specific options if none of them is supported on
6146the current platform), <code class="varname">PKG_OPTIONS</code> is set to the 6158the current platform), <code class="varname">PKG_OPTIONS</code> is set to the
6147empty list and the package is otherwise treated as not using the 6159empty list and the package is otherwise treated as not using the
6148options framework.</p> 6160options framework.</p>
6149<p>After the inclusion of <code class="filename">bsd.options.mk</code>, the 6161<p>After the inclusion of <code class="filename">bsd.options.mk</code>, the
6150variable <code class="varname">PKG_OPTIONS</code> contains the list of selected 6162variable <code class="varname">PKG_OPTIONS</code> contains the list of selected
6151build options, properly filtered to remove unsupported and duplicate 6163build options, properly filtered to remove unsupported and duplicate
6152options.</p> 6164options.</p>
6153<p>The remaining sections contain the logic that is specific to 6165<p>The remaining sections contain the logic that is specific to
6154each option. The correct way to check for an option is to check 6166each option. The correct way to check for an option is to check
6155whether it is listed in <code class="varname">PKG_OPTIONS</code>:</p> 6167whether it is listed in <code class="varname">PKG_OPTIONS</code>:</p>
6156<pre class="programlisting"> 6168<pre class="programlisting">
6157.if !empty(PKG_OPTIONS:M<em class="replaceable"><code>option</code></em>) 6169.if !empty(PKG_OPTIONS:M<em class="replaceable"><code>option</code></em>)
6158</pre> 6170</pre>
6159</div> 6171</div>
6160<div class="sect1"> 6172<div class="sect1">
6161<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6173<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6162<a name="option-names"></a>16.3. Option Names</h2></div></div></div> 6174<a name="option-names"></a>16.3. Option Names</h2></div></div></div>
6163<p>Options that enable similar features in different packages (like 6175<p>Options that enable similar features in different packages (like
6164optional support for a library) should use a common name in all 6176optional support for a library) should use a common name in all
6165packages that support it (like the name of the library). If another 6177packages that support it (like the name of the library). If another
6166package already has an option with the same meaning, use the same 6178package already has an option with the same meaning, use the same
6167name.</p> 6179name.</p>
6168<p>Options that enable features specific to one package, where it's 6180<p>Options that enable features specific to one package, where it's
6169unlikely that another (unrelated) package has the same (or a similar) 6181unlikely that another (unrelated) package has the same (or a similar)
6170optional feature, should use a name prefixed with 6182optional feature, should use a name prefixed with
6171<code class="varname"><em class="replaceable"><code>pkgname</code></em>-</code>.</p> 6183<code class="varname"><em class="replaceable"><code>pkgname</code></em>-</code>.</p>
6172<p>If a group of related packages share an optional feature 6184<p>If a group of related packages share an optional feature
6173specific to that group, prefix it with the name of the 6185specific to that group, prefix it with the name of the
6174<span class="quote">&#8220;<span class="quote">main</span>&#8221;</span> package 6186<span class="quote">&#8220;<span class="quote">main</span>&#8221;</span> package
6175(e. g. <code class="varname">djbware-errno-hack</code>).</p> 6187(e. g. <code class="varname">djbware-errno-hack</code>).</p>
6176<p>For new options, add a line to 6188<p>For new options, add a line to
6177<code class="filename">mk/defaults/options.description</code>. Lines have two 6189<code class="filename">mk/defaults/options.description</code>. Lines have two
6178fields, separated by tab. The first field is the option name, the 6190fields, separated by tab. The first field is the option name, the
6179second its description. The description should be a whole sentence 6191second its description. The description should be a whole sentence
6180(starting with an uppercase letter and ending with a period) that 6192(starting with an uppercase letter and ending with a period) that
6181describes what enabling the option does. E. g. <span class="quote">&#8220;<span class="quote">Enable ispell 6193describes what enabling the option does. E. g. <span class="quote">&#8220;<span class="quote">Enable ispell
6182support.</span>&#8221;</span> The file is sorted by option names.</p> 6194support.</span>&#8221;</span> The file is sorted by option names.</p>
6183</div> 6195</div>
6184<div class="sect1"> 6196<div class="sect1">
6185<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6197<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6186<a name="option-build"></a>16.4. Determining the options of dependencies</h2></div></div></div> 6198<a name="option-build"></a>16.4. Determining the options of dependencies</h2></div></div></div>
6187<p>When writing <a class="link" href="#buildlink3.mk"><code class="filename">buildlink3.mk</code></a> files, it is often necessary to list 6199<p>When writing <a class="link" href="#buildlink3.mk"><code class="filename">buildlink3.mk</code></a> files, it is often necessary to list
6188different dependencies based on the options with which the package was 6200different dependencies based on the options with which the package was
6189built. For querying these options, the file 6201built. For querying these options, the file
6190<code class="filename">pkgsrc/mk/pkg-build-options.mk</code> should be used. A 6202<code class="filename">pkgsrc/mk/pkg-build-options.mk</code> should be used. A
6191typical example looks like this:</p> 6203typical example looks like this:</p>
6192<pre class="programlisting"> 6204<pre class="programlisting">
6193pkgbase := libpurple 6205pkgbase := libpurple
6194.include "../../mk/pkg-build-options.mk" 6206.include "../../mk/pkg-build-options.mk"
6195 6207
6196.if !empty(PKG_BUILD_OPTIONS.libpurple:Mdbus) 6208.if !empty(PKG_BUILD_OPTIONS.libpurple:Mdbus)
6197... 6209...
6198.endif 6210.endif
6199</pre> 6211</pre>
6200<p>Including <code class="filename">pkg-build-options.mk</code> here will set 6212<p>Including <code class="filename">pkg-build-options.mk</code> here will set
6201the variable <code class="varname">PKG_BUILD_OPTIONS.libpurple</code> to the build 6213the variable <code class="varname">PKG_BUILD_OPTIONS.libpurple</code> to the build
6202options of the libpurple package, which can then be queried like 6214options of the libpurple package, which can then be queried like
6203<code class="varname">PKG_OPTIONS</code> in the <code class="filename">options.mk</code> 6215<code class="varname">PKG_OPTIONS</code> in the <code class="filename">options.mk</code>
6204file. See the file <code class="filename">pkg-build-options.mk</code> for more 6216file. See the file <code class="filename">pkg-build-options.mk</code> for more
6205details.</p> 6217details.</p>
6206</div> 6218</div>
6207</div> 6219</div>
6208<div class="chapter"> 6220<div class="chapter">
6209<div class="titlepage"><div><div><h2 class="title"> 6221<div class="titlepage"><div><div><h2 class="title">
6210<a name="build"></a>Chapter 17. The build process</h2></div></div></div> 6222<a name="build"></a>Chapter 17. The build process</h2></div></div></div>
6211<div class="toc"> 6223<div class="toc">
6212<p><b>Table of Contents</b></p> 6224<p><b>Table of Contents</b></p>
6213<dl> 6225<dl>
6214<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt> 6226<dt><span class="sect1"><a href="#build.intro">17.1. Introduction</a></span></dt>
6215<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt> 6227<dt><span class="sect1"><a href="#build.prefix">17.2. Program location</a></span></dt>
6216<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt> 6228<dt><span class="sect1"><a href="#build.builddirs">17.3. Directories used during the build process</a></span></dt>
6217<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt> 6229<dt><span class="sect1"><a href="#build.running">17.4. Running a phase</a></span></dt>
6218<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 6230<dt><span class="sect1"><a href="#build.fetch">17.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
6219<dd><dl> 6231<dd><dl>
6220<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt> 6232<dt><span class="sect2"><a href="#build.fetch.what">17.5.1. What to fetch and where to get it from</a></span></dt>
6221<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt> 6233<dt><span class="sect2"><a href="#build.fetch.how">17.5.2. How are the files fetched?</a></span></dt>
6222</dl></dd> 6234</dl></dd>
6223<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt> 6235<dt><span class="sect1"><a href="#build.checksum">17.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt>
6224<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt> 6236<dt><span class="sect1"><a href="#build.extract">17.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt>
6225<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt> 6237<dt><span class="sect1"><a href="#build.patch">17.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt>
6226<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt> 6238<dt><span class="sect1"><a href="#build.tools">17.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt>
6227<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt> 6239<dt><span class="sect1"><a href="#build.wrapper">17.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt>
6228<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 6240<dt><span class="sect1"><a href="#build.configure">17.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
6229<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 6241<dt><span class="sect1"><a href="#build.build">17.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
6230<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt> 6242<dt><span class="sect1"><a href="#build.test">17.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt>
6231<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 6243<dt><span class="sect1"><a href="#build.install">17.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
6232<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt> 6244<dt><span class="sect1"><a href="#build.package">17.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt>
6233<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt> 6245<dt><span class="sect1"><a href="#build.clean">17.16. Cleaning up</a></span></dt>
6234<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt> 6246<dt><span class="sect1"><a href="#build.helpful-targets">17.17. Other helpful targets</a></span></dt>
6235</dl> 6247</dl>
6236</div> 6248</div>
6237<div class="sect1"> 6249<div class="sect1">
6238<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6250<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6239<a name="build.intro"></a>17.1. Introduction</h2></div></div></div> 6251<a name="build.intro"></a>17.1. Introduction</h2></div></div></div>
6240<p>This chapter gives a detailed description on how a package is 6252<p>This chapter gives a detailed description on how a package is
6241 built. Building a package is separated into different 6253 built. Building a package is separated into different
6242 <span class="emphasis"><em>phases</em></span> (for example <code class="varname">fetch</code>, 6254 <span class="emphasis"><em>phases</em></span> (for example <code class="varname">fetch</code>,
6243 <code class="varname">build</code>, <code class="varname">install</code>), all of which are 6255 <code class="varname">build</code>, <code class="varname">install</code>), all of which are
6244 described in the following sections. Each phase is split into 6256 described in the following sections. Each phase is split into
6245 so-called <span class="emphasis"><em>stages</em></span>, which take the name of the 6257 so-called <span class="emphasis"><em>stages</em></span>, which take the name of the
6246 containing phase, prefixed by one of <code class="varname">pre-</code>, 6258 containing phase, prefixed by one of <code class="varname">pre-</code>,
6247 <code class="varname">do-</code> or <code class="varname">post-</code>. (Examples are 6259 <code class="varname">do-</code> or <code class="varname">post-</code>. (Examples are
6248 <code class="varname">pre-configure</code>, <code class="varname">post-build</code>.) Most 6260 <code class="varname">pre-configure</code>, <code class="varname">post-build</code>.) Most
6249 of the actual work is done in the <code class="varname">do-*</code> stages.</p> 6261 of the actual work is done in the <code class="varname">do-*</code> stages.</p>
6250<p>Never override the regular targets (like 6262<p>Never override the regular targets (like
6251 <code class="varname">fetch</code>), if you have to, override the 6263 <code class="varname">fetch</code>), if you have to, override the
6252 <code class="varname">do-*</code> ones instead.</p> 6264 <code class="varname">do-*</code> ones instead.</p>
6253<p>The basic steps for building a program are always the same. First 6265<p>The basic steps for building a program are always the same. First
6254 the program's source (<span class="emphasis"><em>distfile</em></span>) must be brought to 6266 the program's source (<span class="emphasis"><em>distfile</em></span>) must be brought to
6255 the local system and then extracted. After any pkgsrc-specific patches 6267 the local system and then extracted. After any pkgsrc-specific patches
6256 to compile properly are applied, the software can be configured, then 6268 to compile properly are applied, the software can be configured, then
6257 built (usually by compiling), and finally the generated binaries, etc. 6269 built (usually by compiling), and finally the generated binaries, etc.
6258 can be put into place on the system.</p> 6270 can be put into place on the system.</p>
6259<p>To get more details about what is happening at each step, 6271<p>To get more details about what is happening at each step,
6260 you can set the <code class="varname">PKG_VERBOSE</code> variable, or the 6272 you can set the <code class="varname">PKG_VERBOSE</code> variable, or the
6261 <code class="varname">PATCH_DEBUG</code> variable if you are just interested 6273 <code class="varname">PATCH_DEBUG</code> variable if you are just interested
6262 in more details about the <span class="emphasis"><em>patch</em></span> step.</p> 6274 in more details about the <span class="emphasis"><em>patch</em></span> step.</p>
6263</div> 6275</div>
6264<div class="sect1"> 6276<div class="sect1">
6265<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6277<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6266<a name="build.prefix"></a>17.2. Program location</h2></div></div></div> 6278<a name="build.prefix"></a>17.2. Program location</h2></div></div></div>
6267<p>Before outlining the process performed by the NetBSD package system in 6279<p>Before outlining the process performed by the NetBSD package system in
6268 the next section, here's a brief discussion on where programs are 6280 the next section, here's a brief discussion on where programs are
6269 installed, and which variables influence this.</p> 6281 installed, and which variables influence this.</p>
6270<p>The automatic variable <code class="varname">PREFIX</code> indicates 6282<p>The automatic variable <code class="varname">PREFIX</code> indicates
6271 where all files of the final program shall be installed. It is 6283 where all files of the final program shall be installed. It is
6272 usually set to <code class="varname">LOCALBASE</code> 6284 usually set to <code class="varname">LOCALBASE</code>
6273 (<code class="filename">/usr/pkg</code>), or <code class="varname">CROSSBASE</code> 6285 (<code class="filename">/usr/pkg</code>), or <code class="varname">CROSSBASE</code>
6274 for pkgs in the <code class="filename">cross</code> category. The value of 6286 for pkgs in the <code class="filename">cross</code> category. The value of
6275 <code class="varname">PREFIX</code> needs to be put 6287 <code class="varname">PREFIX</code> needs to be put
6276 into the various places in the program's source where paths to 6288 into the various places in the program's source where paths to
6277 these files are encoded. See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;patches/*&#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> 6289 these files are encoded. See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;patches/*&#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>
6278<p>When choosing which of these variables to use, 6290<p>When choosing which of these variables to use,
6279 follow the following rules:</p> 6291 follow the following rules:</p>
6280<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6292<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6281<li class="listitem"><p><code class="varname">PREFIX</code> always points to the location 6293<li class="listitem"><p><code class="varname">PREFIX</code> always points to the location
6282 where the current pkg will be installed. When referring to a 6294 where the current pkg will be installed. When referring to a
6283 pkg's own installation path, use 6295 pkg's own installation path, use
6284 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span>.</p></li> 6296 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span>.</p></li>
6285<li class="listitem"><p><code class="varname">LOCALBASE</code> is where all non-X11 pkgs 6297<li class="listitem"><p><code class="varname">LOCALBASE</code> is where all non-X11 pkgs
6286 are installed. If you need to construct a -I or -L argument 6298 are installed. If you need to construct a -I or -L argument
6287 to the compiler to find includes and libraries installed by 6299 to the compiler to find includes and libraries installed by
6288 another non-X11 pkg, use <span class="quote">&#8220;<span class="quote">${LOCALBASE}</span>&#8221;</span>. The name 6300 another non-X11 pkg, use <span class="quote">&#8220;<span class="quote">${LOCALBASE}</span>&#8221;</span>. The name
6289 <code class="varname">LOCALBASE</code> stems from FreeBSD, which 6301 <code class="varname">LOCALBASE</code> stems from FreeBSD, which
6290 installed all packages in <code class="filename">/usr/local</code>. As 6302 installed all packages in <code class="filename">/usr/local</code>. As
6291 pkgsrc leaves <code class="filename">/usr/local</code> for the system 6303 pkgsrc leaves <code class="filename">/usr/local</code> for the system
6292 administrator, this variable is a misnomer.</p></li> 6304 administrator, this variable is a misnomer.</p></li>
6293<li class="listitem"><p><code class="varname">X11BASE</code> is where the actual X11 6305<li class="listitem"><p><code class="varname">X11BASE</code> is where the actual X11
6294 distribution (from xsrc, etc.) is installed. When looking for 6306 distribution (from xsrc, etc.) is installed. When looking for
6295 <span class="emphasis"><em>standard</em></span> X11 includes (not those 6307 <span class="emphasis"><em>standard</em></span> X11 includes (not those
6296 installed by a package), use <span class="quote">&#8220;<span class="quote">${X11BASE}</span>&#8221;</span>.</p></li> 6308 installed by a package), use <span class="quote">&#8220;<span class="quote">${X11BASE}</span>&#8221;</span>.</p></li>
6297<li class="listitem"> 6309<li class="listitem">
6298<p>X11-based packages are special in that they may be 6310<p>X11-based packages are special in that they may be
6299 installed in either <code class="varname">X11BASE</code> or 6311 installed in either <code class="varname">X11BASE</code> or
6300 <code class="varname">LOCALBASE</code>.</p> 6312 <code class="varname">LOCALBASE</code>.</p>
6301<p>Usually, X11 packages should be installed under 6313<p>Usually, X11 packages should be installed under
6302 <code class="varname">LOCALBASE</code> whenever possible. Note that you 6314 <code class="varname">LOCALBASE</code> whenever possible. Note that you
6303 will need to include 6315 will need to include
6304 <code class="filename">../../mk/x11.buildlink3.mk</code> in them to 6316 <code class="filename">../../mk/x11.buildlink3.mk</code> in them to
6305 request the presence of X11 and to get the right compilation 6317 request the presence of X11 and to get the right compilation
6306 flags.</p> 6318 flags.</p>
6307<p>Even though, there are some packages that cannot be installed 6319<p>Even though, there are some packages that cannot be installed
6308 under <code class="varname">LOCALBASE</code>: those that come with app-defaults 6320 under <code class="varname">LOCALBASE</code>: those that come with app-defaults
6309 files. These packages are special and they must be placed under 6321 files. These packages are special and they must be placed under
6310 <code class="varname">X11BASE</code>. To accomplish this, set either 6322 <code class="varname">X11BASE</code>. To accomplish this, set either
6311 <code class="varname">USE_X11BASE</code> or <code class="varname">USE_IMAKE</code> in 6323 <code class="varname">USE_X11BASE</code> or <code class="varname">USE_IMAKE</code> in
6312 your package.</p> 6324 your package.</p>
6313<p>Some notes: If you need 6325<p>Some notes: If you need
6314 to find includes or libraries installed by a pkg that has 6326 to find includes or libraries installed by a pkg that has
6315 <code class="varname">USE_IMAKE</code> or <code class="varname">USE_X11BASE</code> in 6327 <code class="varname">USE_IMAKE</code> or <code class="varname">USE_X11BASE</code> in
6316 its pkg <code class="filename">Makefile</code>, you need to look in 6328 its pkg <code class="filename">Makefile</code>, you need to look in
6317 <span class="emphasis"><em>both</em></span> <code class="filename">${X11BASE}</code> and 6329 <span class="emphasis"><em>both</em></span> <code class="filename">${X11BASE}</code> and
6318 <code class="filename">${LOCALBASE}</code>. To force installation of 6330 <code class="filename">${LOCALBASE}</code>. To force installation of
6319 all X11 packages in <code class="varname">LOCALBASE</code>, the 6331 all X11 packages in <code class="varname">LOCALBASE</code>, the
6320 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/xpkgwedge/README.html" target="_top"><code class="filename">pkgtools/xpkgwedge</code></a> package 6332 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/xpkgwedge/README.html" target="_top"><code class="filename">pkgtools/xpkgwedge</code></a> package
6321 is enabled by default.</p> 6333 is enabled by default.</p>
6322</li> 6334</li>
6323<li class="listitem"><p><code class="varname">X11PREFIX</code> should be used to refer to 6335<li class="listitem"><p><code class="varname">X11PREFIX</code> should be used to refer to
6324 the installed location of an X11 6336 the installed location of an X11
6325 package. <code class="varname">X11PREFIX</code> will be set to 6337 package. <code class="varname">X11PREFIX</code> will be set to
6326 <code class="varname">X11BASE</code> if xpkgwedge is not installed, and 6338 <code class="varname">X11BASE</code> if xpkgwedge is not installed, and
@@ -6340,4345 +6352,4357 @@ details.

 @@ -6340,4345 +6352,4357 @@ details.

6340<p>This is best illustrated by example.</p> 6352<p>This is best illustrated by example.</p>
6341<p>The following lines are taken from 6353<p>The following lines are taken from
6342 <code class="filename">pkgsrc/wm/scwm/Makefile</code>:</p> 6354 <code class="filename">pkgsrc/wm/scwm/Makefile</code>:</p>
6343<pre class="programlisting"> 6355<pre class="programlisting">
6344EVAL_PREFIX+= GTKDIR=gtk+ 6356EVAL_PREFIX+= GTKDIR=gtk+
6345CONFIGURE_ARGS+= --with-guile-prefix=${LOCALBASE:Q} 6357CONFIGURE_ARGS+= --with-guile-prefix=${LOCALBASE:Q}
6346CONFIGURE_ARGS+= --with-gtk-prefix=${GTKDIR:Q} 6358CONFIGURE_ARGS+= --with-gtk-prefix=${GTKDIR:Q}
6347CONFIGURE_ARGS+= --enable-multibyte 6359CONFIGURE_ARGS+= --enable-multibyte
6348</pre> 6360</pre>
6349<p>Specific defaults can be defined for the packages 6361<p>Specific defaults can be defined for the packages
6350 evaluated using <code class="varname">EVAL_PREFIX</code>, by using a 6362 evaluated using <code class="varname">EVAL_PREFIX</code>, by using a
6351 definition of the form:</p> 6363 definition of the form:</p>
6352<pre class="programlisting"> 6364<pre class="programlisting">
6353GTKDIR_DEFAULT= ${LOCALBASE} 6365GTKDIR_DEFAULT= ${LOCALBASE}
6354</pre> 6366</pre>
6355<p>where <code class="varname">GTKDIR</code> corresponds 6367<p>where <code class="varname">GTKDIR</code> corresponds
6356 to the first definition in 6368 to the first definition in
6357 the <code class="varname">EVAL_PREFIX</code> pair.</p> 6369 the <code class="varname">EVAL_PREFIX</code> pair.</p>
6358</li> 6370</li>
6359<li class="listitem"><p>Within <code class="filename">${PREFIX}</code>, packages should 6371<li class="listitem"><p>Within <code class="filename">${PREFIX}</code>, packages should
6360 install files according to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?hier+7+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">hier</span>(7)</span></a>, with the exception that 6372 install files according to <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?hier+7+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">hier</span>(7)</span></a>, with the exception that
6361 manual pages go into <code class="filename">${PREFIX}/man</code>, not 6373 manual pages go into <code class="filename">${PREFIX}/man</code>, not
6362 <code class="filename">${PREFIX}/share/man</code>.</p></li> 6374 <code class="filename">${PREFIX}/share/man</code>.</p></li>
6363</ul></div> 6375</ul></div>
6364</div> 6376</div>
6365<div class="sect1"> 6377<div class="sect1">
6366<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6378<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6367<a name="build.builddirs"></a>17.3. Directories used during the build process</h2></div></div></div> 6379<a name="build.builddirs"></a>17.3. Directories used during the build process</h2></div></div></div>
6368<p>When building a package, various directories are used to store 6380<p>When building a package, various directories are used to store
6369 source files, temporary files, pkgsrc-internal files, and so on. These 6381 source files, temporary files, pkgsrc-internal files, and so on. These
6370 directories are explained here.</p> 6382 directories are explained here.</p>
6371<p>Some of the directory variables contain relative pathnames. There 6383<p>Some of the directory variables contain relative pathnames. There
6372 are two common base directories for these relative directories: 6384 are two common base directories for these relative directories:
6373 <code class="varname">PKGSRCDIR/PKGPATH</code> is used for directories that are 6385 <code class="varname">PKGSRCDIR/PKGPATH</code> is used for directories that are
6374 pkgsrc-specific. <code class="varname">WRKSRC</code> is used for directories 6386 pkgsrc-specific. <code class="varname">WRKSRC</code> is used for directories
6375 inside the package itself.</p> 6387 inside the package itself.</p>
6376<div class="variablelist"><dl class="variablelist"> 6388<div class="variablelist"><dl class="variablelist">
6377<dt><span class="term"><code class="varname">PKGSRCDIR</code></span></dt> 6389<dt><span class="term"><code class="varname">PKGSRCDIR</code></span></dt>
6378<dd><p>This is an absolute pathname that points to the pkgsrc 6390<dd><p>This is an absolute pathname that points to the pkgsrc
6379 root directory. Generally, you don't need 6391 root directory. Generally, you don't need
6380 it.</p></dd> 6392 it.</p></dd>
6381<dt><span class="term"><code class="varname">PKGDIR</code></span></dt> 6393<dt><span class="term"><code class="varname">PKGDIR</code></span></dt>
6382<dd><p>This is an absolute pathname that points to the 6394<dd><p>This is an absolute pathname that points to the
6383 current package.</p></dd> 6395 current package.</p></dd>
6384<dt><span class="term"><code class="varname">PKGPATH</code></span></dt> 6396<dt><span class="term"><code class="varname">PKGPATH</code></span></dt>
6385<dd><p>This is a pathname relative to 6397<dd><p>This is a pathname relative to
6386 <code class="varname">PKGSRCDIR</code> that points to the current 6398 <code class="varname">PKGSRCDIR</code> that points to the current
6387 package.</p></dd> 6399 package.</p></dd>
6388<dt><span class="term"><code class="varname">WRKDIR</code></span></dt> 6400<dt><span class="term"><code class="varname">WRKDIR</code></span></dt>
6389<dd><p>This is an absolute pathname pointing to the directory 6401<dd><p>This is an absolute pathname pointing to the directory
6390 where all work takes place. The distfiles are extracted to this 6402 where all work takes place. The distfiles are extracted to this
6391 directory. It also contains temporary directories and log files used by 6403 directory. It also contains temporary directories and log files used by
6392 the various pkgsrc frameworks, like <span class="emphasis"><em>buildlink</em></span> or 6404 the various pkgsrc frameworks, like <span class="emphasis"><em>buildlink</em></span> or
6393 the <span class="emphasis"><em>wrappers</em></span>.</p></dd> 6405 the <span class="emphasis"><em>wrappers</em></span>.</p></dd>
6394<dt><span class="term"><code class="varname">WRKSRC</code></span></dt> 6406<dt><span class="term"><code class="varname">WRKSRC</code></span></dt>
6395<dd><p>This is an absolute pathname pointing to the directory 6407<dd><p>This is an absolute pathname pointing to the directory
6396 where the distfiles are extracted. It is usually a direct subdirectory 6408 where the distfiles are extracted. It is usually a direct subdirectory
6397 of <code class="varname">WRKDIR</code>, and often it's the only directory entry 6409 of <code class="varname">WRKDIR</code>, and often it's the only directory entry
6398 that isn't hidden. This variable may be changed by a package 6410 that isn't hidden. This variable may be changed by a package
6399 <code class="filename">Makefile</code>.</p></dd> 6411 <code class="filename">Makefile</code>.</p></dd>
6400</dl></div> 6412</dl></div>
6401<p>The <code class="varname">CREATE_WRKDIR_SYMLINK</code> definition takes either 6413<p>The <code class="varname">CREATE_WRKDIR_SYMLINK</code> definition takes either
6402 the value <span class="emphasis"><em>yes</em></span> or <span class="emphasis"><em>no</em></span> and defaults 6414 the value <span class="emphasis"><em>yes</em></span> or <span class="emphasis"><em>no</em></span> and defaults
6403 to <span class="emphasis"><em>no</em></span>. It indicates whether a symbolic link to the 6415 to <span class="emphasis"><em>no</em></span>. It indicates whether a symbolic link to the
6404 <code class="varname">WRKDIR</code> is to be created in the pkgsrc entry's directory. 6416 <code class="varname">WRKDIR</code> is to be created in the pkgsrc entry's directory.
6405 If users would like to have their pkgsrc trees behave in a 6417 If users would like to have their pkgsrc trees behave in a
6406 read-only manner, then the value of 6418 read-only manner, then the value of
6407 <code class="varname">CREATE_WRKDIR_SYMLINK</code> should be set to 6419 <code class="varname">CREATE_WRKDIR_SYMLINK</code> should be set to
6408 <span class="emphasis"><em>no</em></span>.</p> 6420 <span class="emphasis"><em>no</em></span>.</p>
6409</div> 6421</div>
6410<div class="sect1"> 6422<div class="sect1">
6411<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6423<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6412<a name="build.running"></a>17.4. Running a phase</h2></div></div></div> 6424<a name="build.running"></a>17.4. Running a phase</h2></div></div></div>
6413<p>You can run a particular phase by typing <span class="command"><strong>make 6425<p>You can run a particular phase by typing <span class="command"><strong>make
6414 phase</strong></span>, where <span class="emphasis"><em>phase</em></span> is the name of the 6426 phase</strong></span>, where <span class="emphasis"><em>phase</em></span> is the name of the
6415 phase. This will automatically run all phases that are required for this 6427 phase. This will automatically run all phases that are required for this
6416 phase. The default phase is <code class="varname">build</code>, that is, when you 6428 phase. The default phase is <code class="varname">build</code>, that is, when you
6417 run <span class="command"><strong>make</strong></span> without parameters in a package directory, 6429 run <span class="command"><strong>make</strong></span> without parameters in a package directory,
6418 the package will be built, but not installed.</p> 6430 the package will be built, but not installed.</p>
6419</div> 6431</div>
6420<div class="sect1"> 6432<div class="sect1">
6421<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6433<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6422<a name="build.fetch"></a>17.5. The <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div> 6434<a name="build.fetch"></a>17.5. The <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div>
6423<p>The first step in building a package is to fetch the 6435<p>The first step in building a package is to fetch the
6424 distribution files (distfiles) from the sites that are providing 6436 distribution files (distfiles) from the sites that are providing
6425 them. This is the task of the <span class="emphasis"><em>fetch</em></span> 6437 them. This is the task of the <span class="emphasis"><em>fetch</em></span>
6426 phase.</p> 6438 phase.</p>
6427<div class="sect2"> 6439<div class="sect2">
6428<div class="titlepage"><div><div><h3 class="title"> 6440<div class="titlepage"><div><div><h3 class="title">
6429<a name="build.fetch.what"></a>17.5.1. What to fetch and where to get it from</h3></div></div></div> 6441<a name="build.fetch.what"></a>17.5.1. What to fetch and where to get it from</h3></div></div></div>
6430<p>In simple cases, <code class="varname">MASTER_SITES</code> 6442<p>In simple cases, <code class="varname">MASTER_SITES</code>
6431 defines all URLs from where the distfile, whose name is 6443 defines all URLs from where the distfile, whose name is
6432 derived from the <code class="varname">DISTNAME</code> variable, is 6444 derived from the <code class="varname">DISTNAME</code> variable, is
6433 fetched. The more complicated cases are described 6445 fetched. The more complicated cases are described
6434 below.</p> 6446 below.</p>
6435<p>The variable <code class="varname">DISTFILES</code> specifies 6447<p>The variable <code class="varname">DISTFILES</code> specifies
6436 the list of distfiles that have to be fetched. Its value 6448 the list of distfiles that have to be fetched. Its value
6437 defaults to <code class="literal">${DEFAULT_DISTFILES}</code> and 6449 defaults to <code class="literal">${DEFAULT_DISTFILES}</code> and
6438 its value is <code class="literal">${DISTNAME}${EXTRACT_SUFX}</code>, 6450 its value is <code class="literal">${DISTNAME}${EXTRACT_SUFX}</code>,
6439 so that most packages don't need to define it at all. 6451 so that most packages don't need to define it at all.
6440 <code class="varname">EXTRACT_SUFX</code> is 6452 <code class="varname">EXTRACT_SUFX</code> is
6441 <code class="literal">.tar.gz</code> by default, but can be changed 6453 <code class="literal">.tar.gz</code> by default, but can be changed
6442 freely. Note that if your package requires additional 6454 freely. Note that if your package requires additional
6443 distfiles to the default one, you cannot just append the 6455 distfiles to the default one, you cannot just append the
6444 additional filenames using the <code class="literal">+=</code> 6456 additional filenames using the <code class="literal">+=</code>
6445 operator, but you have write for example:</p> 6457 operator, but you have write for example:</p>
6446<pre class="programlisting"> 6458<pre class="programlisting">
6447DISTFILES= ${DEFAULT_DISTFILES} additional-files.tar.gz 6459DISTFILES= ${DEFAULT_DISTFILES} additional-files.tar.gz
6448</pre> 6460</pre>
6449<p>Each distfile is fetched from a list of sites, usually 6461<p>Each distfile is fetched from a list of sites, usually
6450 <code class="varname">MASTER_SITES</code>. If the package has multiple 6462 <code class="varname">MASTER_SITES</code>. If the package has multiple
6451 <code class="varname">DISTFILES</code> or multiple 6463 <code class="varname">DISTFILES</code> or multiple
6452 <code class="varname">PATCHFILES</code> from different sites, you can 6464 <code class="varname">PATCHFILES</code> from different sites, you can
6453 set 6465 set
6454 <code class="varname">SITES.<em class="replaceable"><code>distfile</code></em></code> 6466 <code class="varname">SITES.<em class="replaceable"><code>distfile</code></em></code>
6455 to the list of URLs where the file 6467 to the list of URLs where the file
6456 <code class="filename"><em class="replaceable"><code>distfile</code></em></code> 6468 <code class="filename"><em class="replaceable"><code>distfile</code></em></code>
6457 (including the suffix) can be found.</p> 6469 (including the suffix) can be found.</p>
6458<pre class="programlisting"> 6470<pre class="programlisting">
6459DISTFILES= ${DISTNAME}${EXTRACT_SUFX} 6471DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
6460DISTFILES+= foo-file.tar.gz 6472DISTFILES+= foo-file.tar.gz
6461SITES.foo-file.tar.gz= \ 6473SITES.foo-file.tar.gz= \
6462http://www.somewhere.com/somehow/ \ 6474http://www.somewhere.com/somehow/ \
6463http://www.somewhereelse.com/mirror/somehow/ 6475http://www.somewhereelse.com/mirror/somehow/
6464</pre> 6476</pre>
6465<p>When actually fetching the distfiles, each item from 6477<p>When actually fetching the distfiles, each item from
6466 <code class="varname">MASTER_SITES</code> or 6478 <code class="varname">MASTER_SITES</code> or
6467 <code class="varname">SITES.*</code> gets the name of each distfile 6479 <code class="varname">SITES.*</code> gets the name of each distfile
6468 appended to it, without an intermediate slash. Therefore, 6480 appended to it, without an intermediate slash. Therefore,
6469 all site values have to end with a slash or other separator 6481 all site values have to end with a slash or other separator
6470 character. This allows for example to set 6482 character. This allows for example to set
6471 <code class="varname">MASTER_SITES</code> to a URL of a CGI script 6483 <code class="varname">MASTER_SITES</code> to a URL of a CGI script
6472 that gets the name of the distfile as a parameter. In this 6484 that gets the name of the distfile as a parameter. In this
6473 case, the definition would look like:</p> 6485 case, the definition would look like:</p>
6474<pre class="programlisting"> 6486<pre class="programlisting">
6475MASTER_SITES= http://www.example.com/download.cgi?file= 6487MASTER_SITES= http://www.example.com/download.cgi?file=
6476</pre> 6488</pre>
6477<p> The exception to this rule are URLs starting with a dash. 6489<p> The exception to this rule are URLs starting with a dash.
6478 In that case the URL is taken as is, fetched and the result 6490 In that case the URL is taken as is, fetched and the result
6479 stored under the name of the distfile. You can use this style 6491 stored under the name of the distfile. You can use this style
6480 for the case when the download URL style does not match the 6492 for the case when the download URL style does not match the
6481 above common case. For example, if permanent download URL is a 6493 above common case. For example, if permanent download URL is a
6482 redirector to the real download URL, or the download file name 6494 redirector to the real download URL, or the download file name
6483 is offered by an HTTP Content-Disposition header. In the 6495 is offered by an HTTP Content-Disposition header. In the
6484 following example, <code class="filename">foo-1.0.0.tar.gz</code> will be 6496 following example, <code class="filename">foo-1.0.0.tar.gz</code> will be
6485 created instead of the default 6497 created instead of the default
6486 <code class="filename">v1.0.0.tar.gz</code>.</p> 6498 <code class="filename">v1.0.0.tar.gz</code>.</p>
6487<pre class="programlisting"> 6499<pre class="programlisting">
6488DISTNAME= foo-1.0.0 6500DISTNAME= foo-1.0.0
6489MASTER_SITES= -http://www.example.com/archive/v1.0.0.tar.gz 6501MASTER_SITES= -http://www.example.com/archive/v1.0.0.tar.gz
6490</pre> 6502</pre>
6491<p>There are some predefined values for 6503<p>There are some predefined values for
6492 <code class="varname">MASTER_SITES</code>, which can be used in 6504 <code class="varname">MASTER_SITES</code>, which can be used in
6493 packages. The names of the variables should speak for 6505 packages. The names of the variables should speak for
6494 themselves.</p> 6506 themselves.</p>
6495<pre class="programlisting"> 6507<pre class="programlisting">
6496${MASTER_SITE_APACHE} 6508${MASTER_SITE_APACHE}
6497${MASTER_SITE_BACKUP} 6509${MASTER_SITE_BACKUP}
6498${MASTER_SITE_CYGWIN} 6510${MASTER_SITE_CYGWIN}
6499${MASTER_SITE_DEBIAN} 6511${MASTER_SITE_DEBIAN}
6500${MASTER_SITE_FREEBSD} 6512${MASTER_SITE_FREEBSD}
6501${MASTER_SITE_FREEBSD_LOCAL} 6513${MASTER_SITE_FREEBSD_LOCAL}
6502${MASTER_SITE_GENTOO} 6514${MASTER_SITE_GENTOO}
6503${MASTER_SITE_GNOME} 6515${MASTER_SITE_GNOME}
6504${MASTER_SITE_GNU} 6516${MASTER_SITE_GNU}
6505${MASTER_SITE_GNUSTEP} 6517${MASTER_SITE_GNUSTEP}
6506${MASTER_SITE_HASKELL_HACKAGE} 6518${MASTER_SITE_HASKELL_HACKAGE}
6507${MASTER_SITE_IFARCHIVE} 6519${MASTER_SITE_IFARCHIVE}
6508${MASTER_SITE_KDE} 6520${MASTER_SITE_KDE}
6509${MASTER_SITE_MOZILLA} 6521${MASTER_SITE_MOZILLA}
6510${MASTER_SITE_MOZILLA_ALL} 6522${MASTER_SITE_MOZILLA_ALL}
6511${MASTER_SITE_MOZILLA_ESR} 6523${MASTER_SITE_MOZILLA_ESR}
6512${MASTER_SITE_MYSQL} 6524${MASTER_SITE_MYSQL}
6513${MASTER_SITE_NETLIB} 6525${MASTER_SITE_NETLIB}
6514${MASTER_SITE_OPENOFFICE} 6526${MASTER_SITE_OPENOFFICE}
6515${MASTER_SITE_PERL_CPAN} 6527${MASTER_SITE_PERL_CPAN}
6516${MASTER_SITE_PGSQL} 6528${MASTER_SITE_PGSQL}
6517${MASTER_SITE_RUBYGEMS} 6529${MASTER_SITE_RUBYGEMS}
6518${MASTER_SITE_R_CRAN} 6530${MASTER_SITE_R_CRAN}
6519${MASTER_SITE_SOURCEFORGE} 6531${MASTER_SITE_SOURCEFORGE}
6520${MASTER_SITE_SOURCEFORGE_JP} 6532${MASTER_SITE_SOURCEFORGE_JP}
6521${MASTER_SITE_SUNSITE} 6533${MASTER_SITE_SUNSITE}
6522${MASTER_SITE_SUSE} 6534${MASTER_SITE_SUSE}
6523${MASTER_SITE_TEX_CTAN} 6535${MASTER_SITE_TEX_CTAN}
6524${MASTER_SITE_XCONTRIB} 6536${MASTER_SITE_XCONTRIB}
6525${MASTER_SITE_XEMACS} 6537${MASTER_SITE_XEMACS}
6526${MASTER_SITE_XORG} 6538${MASTER_SITE_XORG}
6527</pre> 6539</pre>
6528<p>Some explanations for the less self-explaining ones: 6540<p>Some explanations for the less self-explaining ones:
6529 <code class="varname">MASTER_SITE_BACKUP</code> contains backup sites 6541 <code class="varname">MASTER_SITE_BACKUP</code> contains backup sites
6530 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 6542 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
6531 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> 6543 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>
6532<p>If you choose one of these predefined sites, you may 6544<p>If you choose one of these predefined sites, you may
6533 want to specify a subdirectory of that site. Since these 6545 want to specify a subdirectory of that site. Since these
6534 macros may expand to more than one actual site, you 6546 macros may expand to more than one actual site, you
6535 <span class="emphasis"><em>must</em></span> use the following construct to 6547 <span class="emphasis"><em>must</em></span> use the following construct to
6536 specify a subdirectory:</p> 6548 specify a subdirectory:</p>
6537<pre class="programlisting"> 6549<pre class="programlisting">
6538MASTER_SITES= ${MASTER_SITE_GNU:=subdirectory/name/} 6550MASTER_SITES= ${MASTER_SITE_GNU:=subdirectory/name/}
6539MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=project_name/} 6551MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=project_name/}
6540</pre> 6552</pre>
6541<p>Note the trailing slash after the subdirectory 6553<p>Note the trailing slash after the subdirectory
6542 name.</p> 6554 name.</p>
6543</div> 6555</div>
6544<div class="sect2"> 6556<div class="sect2">
6545<div class="titlepage"><div><div><h3 class="title"> 6557<div class="titlepage"><div><div><h3 class="title">
6546<a name="build.fetch.how"></a>17.5.2. How are the files fetched?</h3></div></div></div> 6558<a name="build.fetch.how"></a>17.5.2. How are the files fetched?</h3></div></div></div>
6547<p>The <span class="emphasis"><em>fetch</em></span> phase makes sure that 6559<p>The <span class="emphasis"><em>fetch</em></span> phase makes sure that
6548 all the distfiles exist in a local directory 6560 all the distfiles exist in a local directory
6549 (<code class="varname">DISTDIR</code>, which can be set by the pkgsrc 6561 (<code class="varname">DISTDIR</code>, which can be set by the pkgsrc
6550 user). If the files do not exist, they are fetched using 6562 user). If the files do not exist, they are fetched using
6551 commands of the form</p> 6563 commands of the form</p>
6552<pre class="programlisting"> 6564<pre class="programlisting">
6553${FETCH_CMD} ${FETCH_BEFORE_ARGS} ${site}${file} ${FETCH_AFTER_ARGS} 6565${FETCH_CMD} ${FETCH_BEFORE_ARGS} ${site}${file} ${FETCH_AFTER_ARGS}
6554</pre> 6566</pre>
6555<p>where <code class="literal">${site}</code> varies through 6567<p>where <code class="literal">${site}</code> varies through
6556 several possibilities in turn: first, 6568 several possibilities in turn: first,
6557 <code class="varname">MASTER_SITE_OVERRIDE</code> is tried, then the 6569 <code class="varname">MASTER_SITE_OVERRIDE</code> is tried, then the
6558 sites specified in either <code class="varname">SITES.file</code> if 6570 sites specified in either <code class="varname">SITES.file</code> if
6559 defined, else <code class="varname">MASTER_SITES</code> or 6571 defined, else <code class="varname">MASTER_SITES</code> or
6560 <code class="varname">PATCH_SITES</code>, as applies, then finally the 6572 <code class="varname">PATCH_SITES</code>, as applies, then finally the
6561 value of <code class="varname">MASTER_SITE_BACKUP</code>. The order of 6573 value of <code class="varname">MASTER_SITE_BACKUP</code>. The order of
6562 all except the first and the last can be optionally sorted 6574 all except the first and the last can be optionally sorted
6563 by the user, via setting either 6575 by the user, via setting either
6564 <code class="varname">MASTER_SORT_RANDOM</code>, and 6576 <code class="varname">MASTER_SORT_RANDOM</code>, and
6565 <code class="varname">MASTER_SORT_AWK</code> or 6577 <code class="varname">MASTER_SORT_AWK</code> or
6566 <code class="varname">MASTER_SORT_REGEX</code>.</p> 6578 <code class="varname">MASTER_SORT_REGEX</code>.</p>
6567<p> The specific command and arguments used depend on the 6579<p> The specific command and arguments used depend on the
6568 <code class="varname">FETCH_USING</code> parameter. The example above is 6580 <code class="varname">FETCH_USING</code> parameter. The example above is
6569 for <code class="literal">FETCH_USING=custom</code>.</p> 6581 for <code class="literal">FETCH_USING=custom</code>.</p>
6570<p>The distfiles mirror run by the NetBSD Foundation uses the 6582<p>The distfiles mirror run by the NetBSD Foundation uses the
6571 <span class="emphasis"><em>mirror-distfiles</em></span> target to mirror the 6583 <span class="emphasis"><em>mirror-distfiles</em></span> target to mirror the
6572 distfiles, if they are freely distributable. Packages setting 6584 distfiles, if they are freely distributable. Packages setting
6573 <code class="varname">NO_SRC_ON_FTP</code> (usually to 6585 <code class="varname">NO_SRC_ON_FTP</code> (usually to
6574 <span class="quote">&#8220;<span class="quote">${RESTRICTED}</span>&#8221;</span>) will not have their distfiles 6586 <span class="quote">&#8220;<span class="quote">${RESTRICTED}</span>&#8221;</span>) will not have their distfiles
6575 mirrored.</p> 6587 mirrored.</p>
6576</div> 6588</div>
6577</div> 6589</div>
6578<div class="sect1"> 6590<div class="sect1">
6579<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6591<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6580<a name="build.checksum"></a>17.6. The <span class="emphasis"><em>checksum</em></span> phase</h2></div></div></div> 6592<a name="build.checksum"></a>17.6. The <span class="emphasis"><em>checksum</em></span> phase</h2></div></div></div>
6581<p>After the distfile(s) are fetched, their checksum is 6593<p>After the distfile(s) are fetched, their checksum is
6582 generated and compared with the checksums stored in the 6594 generated and compared with the checksums stored in the
6583 distinfo file. If the checksums don't match, the build is 6595 distinfo file. If the checksums don't match, the build is
6584 aborted. This is to ensure the same distfile is used for 6596 aborted. This is to ensure the same distfile is used for
6585 building, and that the distfile wasn't changed, e.g. by some 6597 building, and that the distfile wasn't changed, e.g. by some
6586 malign force, deliberately changed distfiles on the master 6598 malign force, deliberately changed distfiles on the master
6587 distribution site or network lossage.</p> 6599 distribution site or network lossage.</p>
6588</div> 6600</div>
6589<div class="sect1"> 6601<div class="sect1">
6590<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6602<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6591<a name="build.extract"></a>17.7. The <span class="emphasis"><em>extract</em></span> phase</h2></div></div></div> 6603<a name="build.extract"></a>17.7. The <span class="emphasis"><em>extract</em></span> phase</h2></div></div></div>
6592<p>When the distfiles are present on the local system, they 6604<p>When the distfiles are present on the local system, they
6593 need to be extracted, as they usually come in the form of some 6605 need to be extracted, as they usually come in the form of some
6594 compressed archive format.</p> 6606 compressed archive format.</p>
6595<p>By default, all <code class="varname">DISTFILES</code> are 6607<p>By default, all <code class="varname">DISTFILES</code> are
6596 extracted. If you only need some of them, you can set the 6608 extracted. If you only need some of them, you can set the
6597 <code class="varname">EXTRACT_ONLY</code> variable to the list of those 6609 <code class="varname">EXTRACT_ONLY</code> variable to the list of those
6598 files.</p> 6610 files.</p>
6599<p>Extracting the files is usually done by a little 6611<p>Extracting the files is usually done by a little
6600 program, <code class="filename">mk/extract/extract</code>, which 6612 program, <code class="filename">mk/extract/extract</code>, which
6601 already knows how to extract various archive formats, so most 6613 already knows how to extract various archive formats, so most
6602 likely you will not need to change anything here. But if you 6614 likely you will not need to change anything here. But if you
6603 need, the following variables may help you:</p> 6615 need, the following variables may help you:</p>
6604<div class="variablelist"><dl class="variablelist"> 6616<div class="variablelist"><dl class="variablelist">
6605<dt><span class="term"><code class="varname">EXTRACT_OPTS_{BIN,LHA,PAX,RAR,TAR,ZIP,ZOO}</code></span></dt> 6617<dt><span class="term"><code class="varname">EXTRACT_OPTS_{BIN,LHA,PAX,RAR,TAR,ZIP,ZOO}</code></span></dt>
6606<dd><p>Use these variables to override the default 6618<dd><p>Use these variables to override the default
6607 options for an extract command, which are defined in 6619 options for an extract command, which are defined in
6608 <code class="filename">mk/extract/extract</code>.</p></dd> 6620 <code class="filename">mk/extract/extract</code>.</p></dd>
6609<dt><span class="term"><code class="varname">EXTRACT_USING</code></span></dt> 6621<dt><span class="term"><code class="varname">EXTRACT_USING</code></span></dt>
6610<dd><p>This variable can be set to 6622<dd><p>This variable can be set to
6611 <code class="literal">bsdtar</code>, <code class="literal">gtar</code>, <code class="literal">nbtar</code> 6623 <code class="literal">bsdtar</code>, <code class="literal">gtar</code>, <code class="literal">nbtar</code>
6612 (which is the default value), <code class="literal">pax</code>, or an 6624 (which is the default value), <code class="literal">pax</code>, or an
6613 absolute pathname pointing to the command with which tar 6625 absolute pathname pointing to the command with which tar
6614 archives should be extracted. It is preferred to choose bsdtar over gtar 6626 archives should be extracted. It is preferred to choose bsdtar over gtar
6615 if NetBSD's pax-as-tar is not good enough.</p></dd> 6627 if NetBSD's pax-as-tar is not good enough.</p></dd>
6616</dl></div> 6628</dl></div>
6617<p>If the <code class="filename">extract</code> program doesn't 6629<p>If the <code class="filename">extract</code> program doesn't
6618 serve your needs, you can also override the 6630 serve your needs, you can also override the
6619 <code class="varname">EXTRACT_CMD</code> variable, which holds the 6631 <code class="varname">EXTRACT_CMD</code> variable, which holds the
6620 command used for extracting the files. This command is 6632 command used for extracting the files. This command is
6621 executed in the <code class="filename">${WRKSRC}</code> 6633 executed in the <code class="filename">${WRKSRC}</code>
6622 directory. During execution of this command, the shell 6634 directory. During execution of this command, the shell
6623 variable <code class="varname">extract_file</code> holds the absolute 6635 variable <code class="varname">extract_file</code> holds the absolute
6624 pathname of the file that is going to be extracted.</p> 6636 pathname of the file that is going to be extracted.</p>
6625<p>And if that still does not suffice, you can override the 6637<p>And if that still does not suffice, you can override the
6626 <code class="varname">do-extract</code> target in the package 6638 <code class="varname">do-extract</code> target in the package
6627 Makefile.</p> 6639 Makefile.</p>
6628</div> 6640</div>
6629<div class="sect1"> 6641<div class="sect1">
6630<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6642<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6631<a name="build.patch"></a>17.8. The <span class="emphasis"><em>patch</em></span> phase</h2></div></div></div> 6643<a name="build.patch"></a>17.8. The <span class="emphasis"><em>patch</em></span> phase</h2></div></div></div>
6632<p>After extraction, all the patches named by the 6644<p>After extraction, all the patches named by the
6633 <code class="varname">PATCHFILES</code>, those present in the patches 6645 <code class="varname">PATCHFILES</code>, those present in the patches
6634 subdirectory of the package as well as in 6646 subdirectory of the package as well as in
6635 $LOCALPATCHES/$PKGPATH (e.g. 6647 $LOCALPATCHES/$PKGPATH (e.g.
6636 <code class="filename">/usr/local/patches/graphics/png</code>) are 6648 <code class="filename">/usr/local/patches/graphics/png</code>) are
6637 applied. Patchfiles ending in <code class="filename">.Z</code> or 6649 applied. Patchfiles ending in <code class="filename">.Z</code> or
6638 <code class="filename">.gz</code> are uncompressed before they are 6650 <code class="filename">.gz</code> are uncompressed before they are
6639 applied, files ending in <code class="filename">.orig</code> or 6651 applied, files ending in <code class="filename">.orig</code> or
6640 <code class="filename">.rej</code> are ignored. Any special options to 6652 <code class="filename">.rej</code> are ignored. Any special options to
6641 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> can be handed in 6653 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> can be handed in
6642 <code class="varname">PATCH_DIST_ARGS</code>. See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;patches/*&#8221;</a> for more details.</p> 6654 <code class="varname">PATCH_DIST_ARGS</code>. See <a class="xref" href="#components.patches" title="11.3. patches/*">Section 11.3, &#8220;patches/*&#8221;</a> for more details.</p>
6643<p>By default <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> is given special args to make 6655<p>By default <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?patch+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> is given special args to make
6644 it fail if the patches apply with some lines of fuzz. Please 6656 it fail if the patches apply with some lines of fuzz. Please
6645 fix (regen) the patches so that they apply cleanly. The 6657 fix (regen) the patches so that they apply cleanly. The
6646 rationale behind this is that patches that don't apply cleanly 6658 rationale behind this is that patches that don't apply cleanly
6647 may end up being applied in the wrong place, and cause severe 6659 may end up being applied in the wrong place, and cause severe
6648 harm there.</p> 6660 harm there.</p>
6649</div> 6661</div>
6650<div class="sect1"> 6662<div class="sect1">
6651<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6663<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6652<a name="build.tools"></a>17.9. The <span class="emphasis"><em>tools</em></span> phase</h2></div></div></div> 6664<a name="build.tools"></a>17.9. The <span class="emphasis"><em>tools</em></span> phase</h2></div></div></div>
6653<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>. 6665<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>.
6654 </p> 6666 </p>
6655</div> 6667</div>
6656<div class="sect1"> 6668<div class="sect1">
6657<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6669<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6658<a name="build.wrapper"></a>17.10. The <span class="emphasis"><em>wrapper</em></span> phase</h2></div></div></div> 6670<a name="build.wrapper"></a>17.10. The <span class="emphasis"><em>wrapper</em></span> phase</h2></div></div></div>
6659<p>This phase creates wrapper programs for the compilers and 6671<p>This phase creates wrapper programs for the compilers and
6660 linkers. The following variables can be used to tweak the 6672 linkers. The following variables can be used to tweak the
6661 wrappers.</p> 6673 wrappers.</p>
6662<div class="variablelist"><dl class="variablelist"> 6674<div class="variablelist"><dl class="variablelist">
6663<dt><span class="term"><code class="varname">ECHO_WRAPPER_MSG</code></span></dt> 6675<dt><span class="term"><code class="varname">ECHO_WRAPPER_MSG</code></span></dt>
6664<dd><p>The command used to print progress 6676<dd><p>The command used to print progress
6665 messages. Does nothing by default. Set to 6677 messages. Does nothing by default. Set to
6666 <code class="literal">${ECHO}</code> to see the progress 6678 <code class="literal">${ECHO}</code> to see the progress
6667 messages.</p></dd> 6679 messages.</p></dd>
6668<dt><span class="term"><code class="varname">WRAPPER_DEBUG</code></span></dt> 6680<dt><span class="term"><code class="varname">WRAPPER_DEBUG</code></span></dt>
6669<dd><p>This variable can be set to 6681<dd><p>This variable can be set to
6670 <code class="literal">yes</code> (default) or <code class="literal">no</code>, 6682 <code class="literal">yes</code> (default) or <code class="literal">no</code>,
6671 depending on whether you want additional information in the 6683 depending on whether you want additional information in the
6672 wrapper log file.</p></dd> 6684 wrapper log file.</p></dd>
6673<dt><span class="term"><code class="varname">WRAPPER_UPDATE_CACHE</code></span></dt> 6685<dt><span class="term"><code class="varname">WRAPPER_UPDATE_CACHE</code></span></dt>
6674<dd><p>This variable can be set to 6686<dd><p>This variable can be set to
6675 <code class="literal">yes</code> or <code class="literal">no</code>, depending 6687 <code class="literal">yes</code> or <code class="literal">no</code>, depending
6676 on whether the wrapper should use its cache, which will 6688 on whether the wrapper should use its cache, which will
6677 improve the speed. The default value is 6689 improve the speed. The default value is
6678 <code class="literal">yes</code>, but is forced to 6690 <code class="literal">yes</code>, but is forced to
6679 <code class="literal">no</code> if the platform does not support 6691 <code class="literal">no</code> if the platform does not support
6680 it.</p></dd> 6692 it.</p></dd>
6681<dt><span class="term"><code class="varname">WRAPPER_REORDER_CMDS</code></span></dt> 6693<dt><span class="term"><code class="varname">WRAPPER_REORDER_CMDS</code></span></dt>
6682<dd><p>A list of reordering commands. A reordering 6694<dd><p>A list of reordering commands. A reordering
6683 command has the form 6695 command has the form
6684 <code class="literal">reorder:l:<em class="replaceable"><code>lib1</code></em>:<em class="replaceable"><code>lib2</code></em></code>. 6696 <code class="literal">reorder:l:<em class="replaceable"><code>lib1</code></em>:<em class="replaceable"><code>lib2</code></em></code>.
6685 It ensures that that 6697 It ensures that that
6686 <code class="literal">-l<em class="replaceable"><code>lib1</code></em></code> occurs 6698 <code class="literal">-l<em class="replaceable"><code>lib1</code></em></code> occurs
6687 before <code class="literal">-l<em class="replaceable"><code>lib2</code></em></code>. 6699 before <code class="literal">-l<em class="replaceable"><code>lib2</code></em></code>.
6688 </p></dd> 6700 </p></dd>
6689<dt><span class="term"><code class="varname">WRAPPER_TRANSFORM_CMDS</code></span></dt> 6701<dt><span class="term"><code class="varname">WRAPPER_TRANSFORM_CMDS</code></span></dt>
6690<dd><p>A list of transformation commands. [TODO: 6702<dd><p>A list of transformation commands. [TODO:
6691 investigate further]</p></dd> 6703 investigate further]</p></dd>
6692</dl></div> 6704</dl></div>
6693</div> 6705</div>
6694<div class="sect1"> 6706<div class="sect1">
6695<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6707<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6696<a name="build.configure"></a>17.11. The <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div> 6708<a name="build.configure"></a>17.11. The <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div>
6697<p>Most pieces of software need information on the header 6709<p>Most pieces of software need information on the header
6698 files, system calls, and library routines which are available 6710 files, system calls, and library routines which are available
6699 on the platform they run on. The process of determining this 6711 on the platform they run on. The process of determining this
6700 information is known as configuration, and is usually 6712 information is known as configuration, and is usually
6701 automated. In most cases, a script is supplied with the 6713 automated. In most cases, a script is supplied with the
6702 distfiles, and its invocation results in generation of header 6714 distfiles, and its invocation results in generation of header
6703 files, Makefiles, etc.</p> 6715 files, Makefiles, etc.</p>
6704<p>If the package contains a configure script, this can be 6716<p>If the package contains a configure script, this can be
6705 invoked by setting <code class="varname">HAS_CONFIGURE</code> to 6717 invoked by setting <code class="varname">HAS_CONFIGURE</code> to
6706 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. If the configure script is a GNU autoconf 6718 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. If the configure script is a GNU autoconf
6707 script, you should set <code class="varname">GNU_CONFIGURE</code> to 6719 script, you should set <code class="varname">GNU_CONFIGURE</code> to
6708 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> instead. What happens in the 6720 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> instead. What happens in the
6709 <span class="emphasis"><em>configure</em></span> phase is roughly:</p> 6721 <span class="emphasis"><em>configure</em></span> phase is roughly:</p>
6710<pre class="programlisting"> 6722<pre class="programlisting">
6711.for d in ${CONFIGURE_DIRS} 6723.for d in ${CONFIGURE_DIRS}
6712 cd ${WRKSRC} \ 6724 cd ${WRKSRC} \
6713 &amp;&amp; cd ${d} \ 6725 &amp;&amp; cd ${d} \
6714 &amp;&amp; env ${CONFIGURE_ENV} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS} 6726 &amp;&amp; env ${CONFIGURE_ENV} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}
6715.endfor 6727.endfor
6716</pre> 6728</pre>
6717<p><code class="varname">CONFIGURE_DIRS</code> (default: 6729<p><code class="varname">CONFIGURE_DIRS</code> (default:
6718 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to 6730 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to
6719 <code class="varname">WRKSRC</code>. In each of these directories, the 6731 <code class="varname">WRKSRC</code>. In each of these directories, the
6720 configure script is run with the environment 6732 configure script is run with the environment
6721 <code class="varname">CONFIGURE_ENV</code> and arguments 6733 <code class="varname">CONFIGURE_ENV</code> and arguments
6722 <code class="varname">CONFIGURE_ARGS</code>. The variables 6734 <code class="varname">CONFIGURE_ARGS</code>. The variables
6723 <code class="varname">CONFIGURE_ENV</code>, 6735 <code class="varname">CONFIGURE_ENV</code>,
6724 <code class="varname">CONFIGURE_SCRIPT</code> (default: 6736 <code class="varname">CONFIGURE_SCRIPT</code> (default:
6725 <span class="quote">&#8220;<span class="quote">./configure</span>&#8221;</span>) and 6737 <span class="quote">&#8220;<span class="quote">./configure</span>&#8221;</span>) and
6726 <code class="varname">CONFIGURE_ARGS</code> may all be changed by the 6738 <code class="varname">CONFIGURE_ARGS</code> may all be changed by the
6727 package.</p> 6739 package.</p>
6728<p>If the program uses the Perl way of configuration (mainly Perl 6740<p>If the program uses the Perl way of configuration (mainly Perl
6729 modules, but not only), i.e. a file called 6741 modules, but not only), i.e. a file called
6730 <code class="filename">Makefile.PL</code>, it should include 6742 <code class="filename">Makefile.PL</code>, it should include
6731 <code class="filename">../../lang/perl5/module.mk</code>. To set any parameter for 6743 <code class="filename">../../lang/perl5/module.mk</code>. To set any parameter for
6732 <code class="filename">Makefile.PL</code> use the <code class="varname">MAKE_PARAMS</code> 6744 <code class="filename">Makefile.PL</code> use the <code class="varname">MAKE_PARAMS</code>
6733 variable (e.g., <code class="literal">MAKE_PARAMS+=foo=bar</code></p> 6745 variable (e.g., <code class="literal">MAKE_PARAMS+=foo=bar</code></p>
6734<p>If the program uses an <code class="filename">Imakefile</code> 6746<p>If the program uses an <code class="filename">Imakefile</code>
6735 for configuration, the appropriate steps can be invoked by 6747 for configuration, the appropriate steps can be invoked by
6736 setting <code class="varname">USE_IMAKE</code> to 6748 setting <code class="varname">USE_IMAKE</code> to
6737 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. (If you only want the package installed in 6749 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. (If you only want the package installed in
6738 <code class="varname">${X11PREFIX}</code> but xmkmf not being run, set 6750 <code class="varname">${X11PREFIX}</code> but xmkmf not being run, set
6739 <code class="varname">USE_X11BASE</code> instead.) You can add variables to 6751 <code class="varname">USE_X11BASE</code> instead.) You can add variables to
6740 xmkmf's environment by adding them to the 6752 xmkmf's environment by adding them to the
6741 <code class="varname">SCRIPTS_ENV</code> variable.</p> 6753 <code class="varname">SCRIPTS_ENV</code> variable.</p>
6742<p>If the program uses <code class="filename">cmake</code> 6754<p>If the program uses <code class="filename">cmake</code>
6743 for configuration, the appropriate steps can be invoked by 6755 for configuration, the appropriate steps can be invoked by
6744 setting <code class="varname">USE_CMAKE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. 6756 setting <code class="varname">USE_CMAKE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.
6745 You can add variables to cmake's environment by adding them to the 6757 You can add variables to cmake's environment by adding them to the
6746 <code class="varname">CONFIGURE_ENV</code> variable and arguments to cmake 6758 <code class="varname">CONFIGURE_ENV</code> variable and arguments to cmake
6747 by adding them to the <code class="varname">CMAKE_ARGS</code> variable. 6759 by adding them to the <code class="varname">CMAKE_ARGS</code> variable.
6748 The top directory argument is given by the 6760 The top directory argument is given by the
6749 <code class="varname">CMAKE_ARG_PATH</code> variable, that defaults to 6761 <code class="varname">CMAKE_ARG_PATH</code> variable, that defaults to
6750 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> (relative to <code class="varname">CONFIGURE_DIRS</code>)</p> 6762 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> (relative to <code class="varname">CONFIGURE_DIRS</code>)</p>
6751<p>If there is no configure step at all, set 6763<p>If there is no configure step at all, set
6752 <code class="varname">NO_CONFIGURE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p> 6764 <code class="varname">NO_CONFIGURE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p>
6753</div> 6765</div>
6754<div class="sect1"> 6766<div class="sect1">
6755<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6767<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6756<a name="build.build"></a>17.12. The <span class="emphasis"><em>build</em></span> phase</h2></div></div></div> 6768<a name="build.build"></a>17.12. The <span class="emphasis"><em>build</em></span> phase</h2></div></div></div>
6757<p>For building a package, a rough equivalent of the 6769<p>For building a package, a rough equivalent of the
6758 following code is executed.</p> 6770 following code is executed.</p>
6759<pre class="programlisting"> 6771<pre class="programlisting">
6760.for d in ${BUILD_DIRS} 6772.for d in ${BUILD_DIRS}
6761 cd ${WRKSRC} \ 6773 cd ${WRKSRC} \
6762 &amp;&amp; cd ${d} \ 6774 &amp;&amp; cd ${d} \
6763 &amp;&amp; env ${MAKE_ENV} \ 6775 &amp;&amp; env ${MAKE_ENV} \
6764 ${MAKE_PROGRAM} ${BUILD_MAKE_FLAGS} \ 6776 ${MAKE_PROGRAM} ${BUILD_MAKE_FLAGS} \
6765 -f ${MAKE_FILE} \ 6777 -f ${MAKE_FILE} \
6766 ${BUILD_TARGET} 6778 ${BUILD_TARGET}
6767.endfor 6779.endfor
6768</pre> 6780</pre>
6769<p><code class="varname">BUILD_DIRS</code> (default: 6781<p><code class="varname">BUILD_DIRS</code> (default:
6770 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to 6782 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to
6771 <code class="varname">WRKSRC</code>. In each of these directories, 6783 <code class="varname">WRKSRC</code>. In each of these directories,
6772 <code class="varname">MAKE_PROGRAM</code> is run with the environment 6784 <code class="varname">MAKE_PROGRAM</code> is run with the environment
6773 <code class="varname">MAKE_ENV</code> and arguments 6785 <code class="varname">MAKE_ENV</code> and arguments
6774 <code class="varname">BUILD_MAKE_FLAGS</code>. The variables 6786 <code class="varname">BUILD_MAKE_FLAGS</code>. The variables
6775 <code class="varname">MAKE_ENV</code>, 6787 <code class="varname">MAKE_ENV</code>,
6776 <code class="varname">BUILD_MAKE_FLAGS</code>, 6788 <code class="varname">BUILD_MAKE_FLAGS</code>,
6777 <code class="varname">MAKE_FILE</code> and 6789 <code class="varname">MAKE_FILE</code> and
6778 <code class="varname">BUILD_TARGET</code> may all be changed by the 6790 <code class="varname">BUILD_TARGET</code> may all be changed by the
6779 package.</p> 6791 package.</p>
6780<p>The default value of <code class="varname">MAKE_PROGRAM</code> is 6792<p>The default value of <code class="varname">MAKE_PROGRAM</code> is
6781 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span> if <code class="varname">USE_TOOLS</code> contains 6793 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span> if <code class="varname">USE_TOOLS</code> contains
6782 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span> otherwise. The 6794 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span> otherwise. The
6783 default value of <code class="varname">MAKE_FILE</code> is 6795 default value of <code class="varname">MAKE_FILE</code> is
6784 <span class="quote">&#8220;<span class="quote">Makefile</span>&#8221;</span>, and <code class="varname">BUILD_TARGET</code> 6796 <span class="quote">&#8220;<span class="quote">Makefile</span>&#8221;</span>, and <code class="varname">BUILD_TARGET</code>
6785 defaults to <span class="quote">&#8220;<span class="quote">all</span>&#8221;</span>.</p> 6797 defaults to <span class="quote">&#8220;<span class="quote">all</span>&#8221;</span>.</p>
6786<p>If there is no build step at all, set 6798<p>If there is no build step at all, set
6787 <code class="varname">NO_BUILD</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p> 6799 <code class="varname">NO_BUILD</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p>
6788</div> 6800</div>
6789<div class="sect1"> 6801<div class="sect1">
6790<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6802<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6791<a name="build.test"></a>17.13. The <span class="emphasis"><em>test</em></span> phase</h2></div></div></div> 6803<a name="build.test"></a>17.13. The <span class="emphasis"><em>test</em></span> phase</h2></div></div></div>
6792<p>[TODO]</p> 6804<p>[TODO]</p>
6793</div> 6805</div>
6794<div class="sect1"> 6806<div class="sect1">
6795<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6807<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6796<a name="build.install"></a>17.14. The <span class="emphasis"><em>install</em></span> phase</h2></div></div></div> 6808<a name="build.install"></a>17.14. The <span class="emphasis"><em>install</em></span> phase</h2></div></div></div>
6797<p>Once the build stage has completed, the final step is to 6809<p>Once the build stage has completed, the final step is to
6798 install the software in public directories, so users can 6810 install the software in public directories, so users can
6799 access the programs and files.</p> 6811 access the programs and files.</p>
6800<p>In the <span class="emphasis"><em>install</em></span> phase, a rough 6812<p>In the <span class="emphasis"><em>install</em></span> phase, a rough
6801 equivalent of the following code is executed. Additionally, 6813 equivalent of the following code is executed. Additionally,
6802 before and after this code, much magic is performed to do 6814 before and after this code, much magic is performed to do
6803 consistency checks, registering the package, and so on.</p> 6815 consistency checks, registering the package, and so on.</p>
6804<pre class="programlisting"> 6816<pre class="programlisting">
6805.for d in ${INSTALL_DIRS} 6817.for d in ${INSTALL_DIRS}
6806 cd ${WRKSRC} \ 6818 cd ${WRKSRC} \
6807 &amp;&amp; cd ${d} \ 6819 &amp;&amp; cd ${d} \
6808 &amp;&amp; env ${MAKE_ENV} \ 6820 &amp;&amp; env ${MAKE_ENV} \
6809 ${MAKE_PROGRAM} ${INSTALL_MAKE_FLAGS} \ 6821 ${MAKE_PROGRAM} ${INSTALL_MAKE_FLAGS} \
6810 -f ${MAKE_FILE} \ 6822 -f ${MAKE_FILE} \
6811 ${INSTALL_TARGET} 6823 ${INSTALL_TARGET}
6812.endfor 6824.endfor
6813</pre> 6825</pre>
6814<p>The variable's meanings are analogous to the ones in the 6826<p>The variable's meanings are analogous to the ones in the
6815 <span class="emphasis"><em>build</em></span> phase. 6827 <span class="emphasis"><em>build</em></span> phase.
6816 <code class="varname">INSTALL_DIRS</code> defaults to 6828 <code class="varname">INSTALL_DIRS</code> defaults to
6817 <code class="varname">BUILD_DIRS</code>. <code class="varname">INSTALL_TARGET</code> 6829 <code class="varname">BUILD_DIRS</code>. <code class="varname">INSTALL_TARGET</code>
6818 is <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> by default, plus 6830 is <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> by default, plus
6819 <span class="quote">&#8220;<span class="quote">install.man</span>&#8221;</span> if <code class="varname">USE_IMAKE</code> is 6831 <span class="quote">&#8220;<span class="quote">install.man</span>&#8221;</span> if <code class="varname">USE_IMAKE</code> is
6820 defined and <code class="varname">NO_INSTALL_MANPAGES</code> is not 6832 defined and <code class="varname">NO_INSTALL_MANPAGES</code> is not
6821 defined.</p> 6833 defined.</p>
6822<p>In the <span class="emphasis"><em>install</em></span> phase, the following 6834<p>In the <span class="emphasis"><em>install</em></span> phase, the following
6823 variables are useful. They are all variations of the 6835 variables are useful. They are all variations of the
6824 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?install+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a> command that have the owner, group and 6836 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?install+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a> command that have the owner, group and
6825 permissions preset. <code class="varname">INSTALL</code> is the plain 6837 permissions preset. <code class="varname">INSTALL</code> is the plain
6826 install command. The specialized variants, together with their 6838 install command. The specialized variants, together with their
6827 intended use, are:</p> 6839 intended use, are:</p>
6828<div class="variablelist"><dl class="variablelist"> 6840<div class="variablelist"><dl class="variablelist">
6829<dt><span class="term"><code class="varname">INSTALL_PROGRAM_DIR</code></span></dt> 6841<dt><span class="term"><code class="varname">INSTALL_PROGRAM_DIR</code></span></dt>
6830<dd><p>directories that contain 6842<dd><p>directories that contain
6831 binaries</p></dd> 6843 binaries</p></dd>
6832<dt><span class="term"><code class="varname">INSTALL_SCRIPT_DIR</code></span></dt> 6844<dt><span class="term"><code class="varname">INSTALL_SCRIPT_DIR</code></span></dt>
6833<dd><p>directories that contain 6845<dd><p>directories that contain
6834 scripts</p></dd> 6846 scripts</p></dd>
6835<dt><span class="term"><code class="varname">INSTALL_LIB_DIR</code></span></dt> 6847<dt><span class="term"><code class="varname">INSTALL_LIB_DIR</code></span></dt>
6836<dd><p>directories that contain shared and static 6848<dd><p>directories that contain shared and static
6837 libraries</p></dd> 6849 libraries</p></dd>
6838<dt><span class="term"><code class="varname">INSTALL_DATA_DIR</code></span></dt> 6850<dt><span class="term"><code class="varname">INSTALL_DATA_DIR</code></span></dt>
6839<dd><p>directories that contain data 6851<dd><p>directories that contain data
6840 files</p></dd> 6852 files</p></dd>
6841<dt><span class="term"><code class="varname">INSTALL_MAN_DIR</code></span></dt> 6853<dt><span class="term"><code class="varname">INSTALL_MAN_DIR</code></span></dt>
6842<dd><p>directories that contain man 6854<dd><p>directories that contain man
6843 pages</p></dd> 6855 pages</p></dd>
6844<dt><span class="term"><code class="varname">INSTALL_PROGRAM</code></span></dt> 6856<dt><span class="term"><code class="varname">INSTALL_PROGRAM</code></span></dt>
6845<dd><p>binaries that can be stripped from debugging 6857<dd><p>binaries that can be stripped from debugging
6846 symbols</p></dd> 6858 symbols</p></dd>
6847<dt><span class="term"><code class="varname">INSTALL_SCRIPT</code></span></dt> 6859<dt><span class="term"><code class="varname">INSTALL_SCRIPT</code></span></dt>
6848<dd><p>binaries that cannot be 6860<dd><p>binaries that cannot be
6849 stripped</p></dd> 6861 stripped</p></dd>
6850<dt><span class="term"><code class="varname">INSTALL_GAME</code></span></dt> 6862<dt><span class="term"><code class="varname">INSTALL_GAME</code></span></dt>
6851<dd><p>game 6863<dd><p>game
6852 binaries</p></dd> 6864 binaries</p></dd>
6853<dt><span class="term"><code class="varname">INSTALL_LIB</code></span></dt> 6865<dt><span class="term"><code class="varname">INSTALL_LIB</code></span></dt>
6854<dd><p>shared and static 6866<dd><p>shared and static
6855 libraries</p></dd> 6867 libraries</p></dd>
6856<dt><span class="term"><code class="varname">INSTALL_DATA</code></span></dt> 6868<dt><span class="term"><code class="varname">INSTALL_DATA</code></span></dt>
6857<dd><p>data files</p></dd> 6869<dd><p>data files</p></dd>
6858<dt><span class="term"><code class="varname">INSTALL_GAME_DATA</code></span></dt> 6870<dt><span class="term"><code class="varname">INSTALL_GAME_DATA</code></span></dt>
6859<dd><p>data files for 6871<dd><p>data files for
6860 games</p></dd> 6872 games</p></dd>
6861<dt><span class="term"><code class="varname">INSTALL_MAN</code></span></dt> 6873<dt><span class="term"><code class="varname">INSTALL_MAN</code></span></dt>
6862<dd><p>man pages</p></dd> 6874<dd><p>man pages</p></dd>
6863</dl></div> 6875</dl></div>
6864<p>Some other variables are:</p> 6876<p>Some other variables are:</p>
6865<div class="variablelist"><dl class="variablelist"> 6877<div class="variablelist"><dl class="variablelist">
6866<dt><span class="term"><code class="varname">INSTALLATION_DIRS</code></span></dt> 6878<dt><span class="term"><code class="varname">INSTALLATION_DIRS</code></span></dt>
6867<dd><p>A list of directories relative to 6879<dd><p>A list of directories relative to
6868 <code class="varname">PREFIX</code> that are created by pkgsrc at the 6880 <code class="varname">PREFIX</code> that are created by pkgsrc at the
6869 beginning of the <span class="emphasis"><em>install</em></span> phase. 6881 beginning of the <span class="emphasis"><em>install</em></span> phase.
6870 The package is supposed to create all needed directories itself 6882 The package is supposed to create all needed directories itself
6871 before installing files to it and list all other directories here. 6883 before installing files to it and list all other directories here.
6872 </p></dd> 6884 </p></dd>
6873</dl></div> 6885</dl></div>
6874<p>In the rare cases that a package shouldn't install anything, 6886<p>In the rare cases that a package shouldn't install anything,
6875 set <code class="varname">NO_INSTALL</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This is 6887 set <code class="varname">NO_INSTALL</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This is
6876 mostly relevant for packages in the <code class="filename">regress</code> 6888 mostly relevant for packages in the <code class="filename">regress</code>
6877 category.</p> 6889 category.</p>
6878</div> 6890</div>
6879<div class="sect1"> 6891<div class="sect1">
6880<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6892<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6881<a name="build.package"></a>17.15. The <span class="emphasis"><em>package</em></span> phase</h2></div></div></div> 6893<a name="build.package"></a>17.15. The <span class="emphasis"><em>package</em></span> phase</h2></div></div></div>
6882<p>Once the install stage has completed, a binary package of 6894<p>Once the install stage has completed, a binary package of
6883 the installed files can be built. These binary packages can be 6895 the installed files can be built. These binary packages can be
6884 used for quick installation without previous compilation, e.g. by 6896 used for quick installation without previous compilation, e.g. by
6885 the <span class="command"><strong>make bin-install</strong></span> or by using 6897 the <span class="command"><strong>make bin-install</strong></span> or by using
6886 <span class="command"><strong>pkg_add</strong></span>.</p> 6898 <span class="command"><strong>pkg_add</strong></span>.</p>
6887<p>By default, the binary packages are created in 6899<p>By default, the binary packages are created in
6888 <code class="filename">${PACKAGES}/All</code> and symlinks are created in 6900 <code class="filename">${PACKAGES}/All</code> and symlinks are created in
6889 <code class="filename">${PACKAGES}/<em class="replaceable"><code>category</code></em></code>, 6901 <code class="filename">${PACKAGES}/<em class="replaceable"><code>category</code></em></code>,
6890 one for each category in the <code class="varname">CATEGORIES</code> 6902 one for each category in the <code class="varname">CATEGORIES</code>
6891 variable. <code class="varname">PACKAGES</code> defaults to 6903 variable. <code class="varname">PACKAGES</code> defaults to
6892 <code class="filename">pkgsrc/packages</code>.</p> 6904 <code class="filename">pkgsrc/packages</code>.</p>
6893</div> 6905</div>
6894<div class="sect1"> 6906<div class="sect1">
6895<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6907<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6896<a name="build.clean"></a>17.16. Cleaning up</h2></div></div></div> 6908<a name="build.clean"></a>17.16. Cleaning up</h2></div></div></div>
6897<p>Once you're finished with a package, you can clean the work 6909<p>Once you're finished with a package, you can clean the work
6898 directory by running <span class="command"><strong>make clean</strong></span>. If you want 6910 directory by running <span class="command"><strong>make clean</strong></span>. If you want
6899 to clean the work directories of all dependencies too, use 6911 to clean the work directories of all dependencies too, use
6900 <span class="command"><strong>make clean-depends</strong></span>.</p> 6912 <span class="command"><strong>make clean-depends</strong></span>.</p>
6901</div> 6913</div>
6902<div class="sect1"> 6914<div class="sect1">
6903<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 6915<div class="titlepage"><div><div><h2 class="title" style="clear: both">
6904<a name="build.helpful-targets"></a>17.17. Other helpful targets</h2></div></div></div> 6916<a name="build.helpful-targets"></a>17.17. Other helpful targets</h2></div></div></div>
6905<div class="variablelist"><dl class="variablelist"> 6917<div class="variablelist"><dl class="variablelist">
6906<dt><span class="term">pre/post-*</span></dt> 6918<dt><span class="term">pre/post-*</span></dt>
6907<dd><p>For any of the main targets described in the 6919<dd><p>For any of the main targets described in the
6908 previous section, two auxiliary targets exist with 6920 previous section, two auxiliary targets exist with
6909 <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 6921 <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
6910 prefix for the main target's name. These targets are 6922 prefix for the main target's name. These targets are
6911 invoked before and after the main target is called, 6923 invoked before and after the main target is called,
6912 allowing extra configuration or installation steps be 6924 allowing extra configuration or installation steps be
6913 performed from a package's Makefile, for example, which 6925 performed from a package's Makefile, for example, which
6914 a program's configure script or install target 6926 a program's configure script or install target
6915 omitted.</p></dd> 6927 omitted.</p></dd>
6916<dt><span class="term">do-*</span></dt> 6928<dt><span class="term">do-*</span></dt>
6917<dd><p>Should one of the main targets do the wrong thing, 6929<dd><p>Should one of the main targets do the wrong thing,
6918 and should there be no variable to fix this, you can 6930 and should there be no variable to fix this, you can
6919 redefine it with the do-* target. (Note that redefining 6931 redefine it with the do-* target. (Note that redefining
6920 the target itself instead of the do-* target is a bad 6932 the target itself instead of the do-* target is a bad
6921 idea, as the pre-* and post-* targets won't be called 6933 idea, as the pre-* and post-* targets won't be called
6922 anymore, etc.) You will not usually need to do 6934 anymore, etc.) You will not usually need to do
6923 this.</p></dd> 6935 this.</p></dd>
6924<dt><span class="term">reinstall</span></dt> 6936<dt><span class="term">reinstall</span></dt>
6925<dd> 6937<dd>
6926<p>If you did a <span class="command"><strong>make install</strong></span> and 6938<p>If you did a <span class="command"><strong>make install</strong></span> and
6927 you noticed some file was not installed properly, you 6939 you noticed some file was not installed properly, you
6928 can repeat the installation with this target, which will 6940 can repeat the installation with this target, which will
6929 ignore the <span class="quote">&#8220;<span class="quote">already installed</span>&#8221;</span> flag.</p> 6941 ignore the <span class="quote">&#8220;<span class="quote">already installed</span>&#8221;</span> flag.</p>
6930<p>This is the default value of 6942<p>This is the default value of
6931 <code class="varname">DEPENDS_TARGET</code> except in the case of 6943 <code class="varname">DEPENDS_TARGET</code> except in the case of
6932 <span class="command"><strong>make update</strong></span> and <span class="command"><strong>make 6944 <span class="command"><strong>make update</strong></span> and <span class="command"><strong>make
6933 package</strong></span>, where the defaults are 6945 package</strong></span>, where the defaults are
6934 <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span>, 6946 <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span>,
6935 respectively.</p> 6947 respectively.</p>
6936</dd> 6948</dd>
6937<dt><span class="term">deinstall</span></dt> 6949<dt><span class="term">deinstall</span></dt>
6938<dd> 6950<dd>
6939<p>This target does a <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> in the 6951<p>This target does a <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> in the
6940 current directory, effectively de-installing the 6952 current directory, effectively de-installing the
6941 package. The following variables can be used to tune the 6953 package. The following variables can be used to tune the
6942 behaviour:</p> 6954 behaviour:</p>
6943<div class="variablelist"><dl class="variablelist"> 6955<div class="variablelist"><dl class="variablelist">
6944<dt><span class="term"><code class="varname">PKG_VERBOSE</code></span></dt> 6956<dt><span class="term"><code class="varname">PKG_VERBOSE</code></span></dt>
6945<dd><p>Add a "-v" to the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> command.</p></dd> 6957<dd><p>Add a "-v" to the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> command.</p></dd>
6946<dt><span class="term"><code class="varname">DEINSTALLDEPENDS</code></span></dt> 6958<dt><span class="term"><code class="varname">DEINSTALLDEPENDS</code></span></dt>
6947<dd><p>Remove all packages that require (depend on) 6959<dd><p>Remove all packages that require (depend on)
6948 the given package. This can be used to remove any 6960 the given package. This can be used to remove any
6949 packages that may have been pulled in by a given 6961 packages that may have been pulled in by a given
6950 package, e.g. if <span class="command"><strong>make deinstall 6962 package, e.g. if <span class="command"><strong>make deinstall
6951 DEINSTALLDEPENDS=1</strong></span> is done in 6963 DEINSTALLDEPENDS=1</strong></span> is done in
6952 <code class="filename">pkgsrc/x11/kde</code>, this is 6964 <code class="filename">pkgsrc/x11/kde</code>, this is
6953 likely to remove whole KDE. Works by adding 6965 likely to remove whole KDE. Works by adding
6954 <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+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> 6966 <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+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a>
6955 command line.</p></dd> 6967 command line.</p></dd>
6956</dl></div> 6968</dl></div>
6957</dd> 6969</dd>
6958<dt><span class="term">bin-install</span></dt> 6970<dt><span class="term">bin-install</span></dt>
6959<dd><p>Install a binary package from local disk and via FTP 6971<dd><p>Install a binary package from local disk and via FTP
6960 from a list of sites (see the 6972 from a list of sites (see the
6961 <code class="varname">BINPKG_SITES</code> variable), and do a 6973 <code class="varname">BINPKG_SITES</code> variable), and do a
6962 <span class="command"><strong>make package</strong></span> if no binary package is 6974 <span class="command"><strong>make package</strong></span> if no binary package is
6963 available anywhere. The arguments given to 6975 available anywhere. The arguments given to
6964 <span class="command"><strong>pkg_add</strong></span> can be set via 6976 <span class="command"><strong>pkg_add</strong></span> can be set via
6965 <code class="varname">BIN_INSTALL_FLAGS</code> e.g., to do verbose 6977 <code class="varname">BIN_INSTALL_FLAGS</code> e.g., to do verbose
6966 operation, etc.</p></dd> 6978 operation, etc.</p></dd>
6967<dt><span class="term">update</span></dt> 6979<dt><span class="term">update</span></dt>
6968<dd> 6980<dd>
6969<p>This target causes the current package to be 6981<p>This target causes the current package to be
6970 updated to the latest version. The package and all 6982 updated to the latest version. The package and all
6971 depending packages first get de-installed, then current 6983 depending packages first get de-installed, then current
6972 versions of the corresponding packages get compiled and 6984 versions of the corresponding packages get compiled and
6973 installed. This is similar to manually noting which 6985 installed. This is similar to manually noting which
6974 packages are currently installed, then performing a 6986 packages are currently installed, then performing a
6975 series of <span class="command"><strong>make deinstall</strong></span> and 6987 series of <span class="command"><strong>make deinstall</strong></span> and
6976 <span class="command"><strong>make install</strong></span> (or whatever 6988 <span class="command"><strong>make install</strong></span> (or whatever
6977 <code class="varname">UPDATE_TARGET</code> is set to) for these 6989 <code class="varname">UPDATE_TARGET</code> is set to) for these
6978 packages.</p> 6990 packages.</p>
6979<p>You can use the <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> target to 6991<p>You can use the <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> target to
6980 resume package updating in case a previous <span class="command"><strong>make 6992 resume package updating in case a previous <span class="command"><strong>make
6981 update</strong></span> was interrupted for some reason. 6993 update</strong></span> was interrupted for some reason.
6982 However, in this case, make sure you don't call 6994 However, in this case, make sure you don't call
6983 <span class="command"><strong>make clean</strong></span> or otherwise remove the 6995 <span class="command"><strong>make clean</strong></span> or otherwise remove the
6984 list of dependent packages in <code class="varname">WRKDIR</code>. 6996 list of dependent packages in <code class="varname">WRKDIR</code>.
6985 Otherwise, you lose the ability to automatically update 6997 Otherwise, you lose the ability to automatically update
6986 the current package along with the dependent packages 6998 the current package along with the dependent packages
6987 you have installed.</p> 6999 you have installed.</p>
6988<p>Resuming an interrupted <span class="command"><strong>make 7000<p>Resuming an interrupted <span class="command"><strong>make
6989 update</strong></span> will only work as long as the package 7001 update</strong></span> will only work as long as the package
6990 tree remains unchanged. If the source code for one of 7002 tree remains unchanged. If the source code for one of
6991 the packages to be updated has been changed, resuming 7003 the packages to be updated has been changed, resuming
6992 <span class="command"><strong>make update</strong></span> will most certainly 7004 <span class="command"><strong>make update</strong></span> will most certainly
6993 fail!</p> 7005 fail!</p>
6994<p>The following variables can be used either on the 7006<p>The following variables can be used either on the
6995 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to 7007 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to
6996 alter the behaviour of <span class="command"><strong>make 7008 alter the behaviour of <span class="command"><strong>make
6997 update</strong></span>:</p> 7009 update</strong></span>:</p>
6998<div class="variablelist"><dl class="variablelist"> 7010<div class="variablelist"><dl class="variablelist">
6999<dt><span class="term"><code class="varname">UPDATE_TARGET</code></span></dt> 7011<dt><span class="term"><code class="varname">UPDATE_TARGET</code></span></dt>
7000<dd><p>Install target to recursively use for the 7012<dd><p>Install target to recursively use for the
7001 updated package and the dependent packages. 7013 updated package and the dependent packages.
7002 Defaults to <code class="varname">DEPENDS_TARGET</code> if 7014 Defaults to <code class="varname">DEPENDS_TARGET</code> if
7003 set, <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> otherwise for 7015 set, <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> otherwise for
7004 <span class="command"><strong>make update</strong></span>. Other good 7016 <span class="command"><strong>make update</strong></span>. Other good
7005 targets are <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> or 7017 targets are <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> or
7006 <span class="quote">&#8220;<span class="quote">bin-install</span>&#8221;</span>. Do not set this to 7018 <span class="quote">&#8220;<span class="quote">bin-install</span>&#8221;</span>. Do not set this to
7007 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> or you will get stuck in an 7019 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> or you will get stuck in an
7008 endless loop!</p></dd> 7020 endless loop!</p></dd>
7009<dt><span class="term"><code class="varname">NOCLEAN</code></span></dt> 7021<dt><span class="term"><code class="varname">NOCLEAN</code></span></dt>
7010<dd><p>Don't clean up after updating. Useful if 7022<dd><p>Don't clean up after updating. Useful if
7011 you want to leave the work sources of the updated 7023 you want to leave the work sources of the updated
7012 packages around for inspection or other purposes. 7024 packages around for inspection or other purposes.
7013 Be sure you eventually clean up the source tree 7025 Be sure you eventually clean up the source tree
7014 (see the <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target below) 7026 (see the <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target below)
7015 or you may run into troubles with old source code 7027 or you may run into troubles with old source code
7016 still lying around on your next 7028 still lying around on your next
7017 <span class="command"><strong>make</strong></span> or <span class="command"><strong>make 7029 <span class="command"><strong>make</strong></span> or <span class="command"><strong>make
7018 update</strong></span>.</p></dd> 7030 update</strong></span>.</p></dd>
7019<dt><span class="term"><code class="varname">REINSTALL</code></span></dt> 7031<dt><span class="term"><code class="varname">REINSTALL</code></span></dt>
7020<dd><p>Deinstall each package before installing 7032<dd><p>Deinstall each package before installing
7021 (making <code class="varname">DEPENDS_TARGET</code>). This 7033 (making <code class="varname">DEPENDS_TARGET</code>). This
7022 may be necessary if the 7034 may be necessary if the
7023 <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target (see below) was 7035 <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target (see below) was
7024 called after interrupting a running <span class="command"><strong>make 7036 called after interrupting a running <span class="command"><strong>make
7025 update</strong></span>.</p></dd> 7037 update</strong></span>.</p></dd>
7026<dt><span class="term"><code class="varname">DEPENDS_TARGET</code></span></dt> 7038<dt><span class="term"><code class="varname">DEPENDS_TARGET</code></span></dt>
7027<dd><p>Allows you to disable recursion and hardcode 7039<dd><p>Allows you to disable recursion and hardcode
7028 the target for packages. The default is 7040 the target for packages. The default is
7029 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> for the update target, 7041 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> for the update target,
7030 facilitating a recursive update of prerequisite 7042 facilitating a recursive update of prerequisite
7031 packages. Only set 7043 packages. Only set
7032 <code class="varname">DEPENDS_TARGET</code> if you want to 7044 <code class="varname">DEPENDS_TARGET</code> if you want to
7033 disable recursive updates. Use 7045 disable recursive updates. Use
7034 <code class="varname">UPDATE_TARGET</code> instead to just 7046 <code class="varname">UPDATE_TARGET</code> instead to just
7035 set a specific target for each package to be 7047 set a specific target for each package to be
7036 installed during <span class="command"><strong>make update</strong></span> 7048 installed during <span class="command"><strong>make update</strong></span>
7037 (see above).</p></dd> 7049 (see above).</p></dd>
7038</dl></div> 7050</dl></div>
7039</dd> 7051</dd>
7040<dt><span class="term">clean-update</span></dt> 7052<dt><span class="term">clean-update</span></dt>
7041<dd> 7053<dd>
7042<p>Clean the source tree for all packages that would 7054<p>Clean the source tree for all packages that would
7043 get updated if <span class="command"><strong>make update</strong></span> was called 7055 get updated if <span class="command"><strong>make update</strong></span> was called
7044 from the current directory. This target should not be 7056 from the current directory. This target should not be
7045 used if the current package (or any of its depending 7057 used if the current package (or any of its depending
7046 packages) have already been de-installed (e.g., after 7058 packages) have already been de-installed (e.g., after
7047 calling <span class="command"><strong>make update</strong></span>) or you may lose 7059 calling <span class="command"><strong>make update</strong></span>) or you may lose
7048 some packages you intended to update. As a rule of 7060 some packages you intended to update. As a rule of
7049 thumb: only use this target <span class="emphasis"><em>before</em></span> 7061 thumb: only use this target <span class="emphasis"><em>before</em></span>
7050 the first time you run <span class="command"><strong>make update</strong></span> 7062 the first time you run <span class="command"><strong>make update</strong></span>
7051 and only if you have a dirty package tree (e.g., if you 7063 and only if you have a dirty package tree (e.g., if you
7052 used <code class="varname">NOCLEAN</code>).</p> 7064 used <code class="varname">NOCLEAN</code>).</p>
7053<p>If you are unsure about whether your tree is 7065<p>If you are unsure about whether your tree is
7054 clean, you can either perform a <span class="command"><strong>make 7066 clean, you can either perform a <span class="command"><strong>make
7055 clean</strong></span> at the top of the tree, or use the 7067 clean</strong></span> at the top of the tree, or use the
7056 following sequence of commands from the directory of the 7068 following sequence of commands from the directory of the
7057 package you want to update (<span class="emphasis"><em>before</em></span> 7069 package you want to update (<span class="emphasis"><em>before</em></span>
7058 running <span class="command"><strong>make update</strong></span> for the first 7070 running <span class="command"><strong>make update</strong></span> for the first
7059 time, otherwise you lose all the packages you wanted to 7071 time, otherwise you lose all the packages you wanted to
7060 update!):</p> 7072 update!):</p>
7061<pre class="screen"> 7073<pre class="screen">
7062<code class="prompt">#</code> <strong class="userinput"><code>make clean-update</code></strong> 7074<code class="prompt">#</code> <strong class="userinput"><code>make clean-update</code></strong>
7063<code class="prompt">#</code> <strong class="userinput"><code>make clean CLEANDEPENDS=YES</code></strong> 7075<code class="prompt">#</code> <strong class="userinput"><code>make clean CLEANDEPENDS=YES</code></strong>
7064<code class="prompt">#</code> <strong class="userinput"><code>make update</code></strong> 7076<code class="prompt">#</code> <strong class="userinput"><code>make update</code></strong>
7065 </pre> 7077 </pre>
7066<p>The following variables can be used either on the 7078<p>The following variables can be used either on the
7067 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to alter the behaviour of 7079 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to alter the behaviour of
7068 <span class="command"><strong>make clean-update</strong></span>:</p> 7080 <span class="command"><strong>make clean-update</strong></span>:</p>
7069<div class="variablelist"><dl class="variablelist"> 7081<div class="variablelist"><dl class="variablelist">
7070<dt><span class="term"><code class="varname">CLEAR_DIRLIST</code></span></dt> 7082<dt><span class="term"><code class="varname">CLEAR_DIRLIST</code></span></dt>
7071<dd><p>After <span class="command"><strong>make clean</strong></span>, do not 7083<dd><p>After <span class="command"><strong>make clean</strong></span>, do not
7072 reconstruct the list of directories to update for 7084 reconstruct the list of directories to update for
7073 this package. Only use this if <span class="command"><strong>make 7085 this package. Only use this if <span class="command"><strong>make
7074 update</strong></span> successfully installed all 7086 update</strong></span> successfully installed all
7075 packages you wanted to update. Normally, this is 7087 packages you wanted to update. Normally, this is
7076 done automatically on <span class="command"><strong>make 7088 done automatically on <span class="command"><strong>make
7077 update</strong></span>, but may have been suppressed by 7089 update</strong></span>, but may have been suppressed by
7078 the <code class="varname">NOCLEAN</code> variable (see 7090 the <code class="varname">NOCLEAN</code> variable (see
7079 above).</p></dd> 7091 above).</p></dd>
7080</dl></div> 7092</dl></div>
7081</dd> 7093</dd>
7082<dt><span class="term">replace</span></dt> 7094<dt><span class="term">replace</span></dt>
7083<dd> 7095<dd>
7084<p>Update the installation of the current package. This 7096<p>Update the installation of the current package. This
7085 differs from update in that it does not replace dependent 7097 differs from update in that it does not replace dependent
7086 packages. You will need to install <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_tarup/README.html" target="_top"><code class="filename">pkgtools/pkg_tarup</code></a> for this 7098 packages. You will need to install <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_tarup/README.html" target="_top"><code class="filename">pkgtools/pkg_tarup</code></a> for this
7087 target to work.</p> 7099 target to work.</p>
7088<p><span class="emphasis"><em>Be careful when using this 7100<p><span class="emphasis"><em>Be careful when using this
7089 target!</em></span> There are no guarantees that dependent 7101 target!</em></span> There are no guarantees that dependent
7090 packages will still work, in particular they will most 7102 packages will still work, in particular they will most
7091 certainly break if you <span class="command"><strong>make replace</strong></span> a 7103 certainly break if you <span class="command"><strong>make replace</strong></span> a
7092 library package whose shared library major version changed 7104 library package whose shared library major version changed
7093 between your installed version and the new one. For this 7105 between your installed version and the new one. For this
7094 reason, this target is not officially supported and only 7106 reason, this target is not officially supported and only
7095 recommended for advanced users.</p> 7107 recommended for advanced users.</p>
7096</dd> 7108</dd>
7097<dt><span class="term">info</span></dt> 7109<dt><span class="term">info</span></dt>
7098<dd><p>This target invokes <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_info+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_info</span>(1)</span></a> for the current 7110<dd><p>This target invokes <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_info+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_info</span>(1)</span></a> for the current
7099 package. You can use this to check which version of a 7111 package. You can use this to check which version of a
7100 package is installed.</p></dd> 7112 package is installed.</p></dd>
7101<dt><span class="term">index</span></dt> 7113<dt><span class="term">index</span></dt>
7102<dd> 7114<dd>
7103<p>This is a top-level command, i.e. it should be used in 7115<p>This is a top-level command, i.e. it should be used in
7104 the <code class="filename">pkgsrc</code> directory. It creates a 7116 the <code class="filename">pkgsrc</code> directory. It creates a
7105 database of all packages in the local pkgsrc tree, including 7117 database of all packages in the local pkgsrc tree, including
7106 dependencies, comment, maintainer, and some other useful 7118 dependencies, comment, maintainer, and some other useful
7107 information. Individual entries are created by running 7119 information. Individual entries are created by running
7108 <span class="command"><strong>make describe</strong></span> in the packages' 7120 <span class="command"><strong>make describe</strong></span> in the packages'
7109 directories. This index file is saved as 7121 directories. This index file is saved as
7110 <code class="filename">pkgsrc/INDEX</code>. It can be displayed in 7122 <code class="filename">pkgsrc/INDEX</code>. It can be displayed in
7111 verbose format by running <span class="command"><strong>make 7123 verbose format by running <span class="command"><strong>make
7112 print-index</strong></span>. You can search in it with 7124 print-index</strong></span>. You can search in it with
7113 <span class="command"><strong>make search 7125 <span class="command"><strong>make search
7114 key=<em class="replaceable"><code>something</code></em></strong></span>. You can 7126 key=<em class="replaceable"><code>something</code></em></strong></span>. You can
7115 extract a list of all packages that depend on a particular 7127 extract a list of all packages that depend on a particular
7116 one by running <span class="command"><strong>make show-deps 7128 one by running <span class="command"><strong>make show-deps
7117 PKG=<em class="replaceable"><code>somepackage</code></em></strong></span>.</p> 7129 PKG=<em class="replaceable"><code>somepackage</code></em></strong></span>.</p>
7118<p>Running this command takes a very long time, some 7130<p>Running this command takes a very long time, some
7119 hours even on fast machines!</p> 7131 hours even on fast machines!</p>
7120</dd> 7132</dd>
7121<dt><span class="term">readme</span></dt> 7133<dt><span class="term">readme</span></dt>
7122<dd> 7134<dd>
7123<p>This target generates a 7135<p>This target generates a
7124 <code class="filename">README.html</code> file, which can be 7136 <code class="filename">README.html</code> file, which can be
7125 viewed using a browser such as <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a> or <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/links/README.html" target="_top"><code class="filename">www/links</code></a>. The generated files 7137 viewed using a browser such as <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/README.html" target="_top"><code class="filename">www/firefox</code></a> or <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/links/README.html" target="_top"><code class="filename">www/links</code></a>. The generated files
7126 contain references to any packages which are in the 7138 contain references to any packages which are in the
7127 <code class="varname">PACKAGES</code> directory on the local 7139 <code class="varname">PACKAGES</code> directory on the local
7128 host. The generated files can be made to refer to URLs 7140 host. The generated files can be made to refer to URLs
7129 based on <code class="varname">FTP_PKG_URL_HOST</code> and 7141 based on <code class="varname">FTP_PKG_URL_HOST</code> and
7130 <code class="varname">FTP_PKG_URL_DIR</code>. For example, if I 7142 <code class="varname">FTP_PKG_URL_DIR</code>. For example, if I
7131 wanted to generate <code class="filename">README.html</code> 7143 wanted to generate <code class="filename">README.html</code>
7132 files which pointed to binary packages on the local 7144 files which pointed to binary packages on the local
7133 machine, in the directory 7145 machine, in the directory
7134 <code class="filename">/usr/packages</code>, set 7146 <code class="filename">/usr/packages</code>, set
7135 <code class="varname">FTP_PKG_URL_HOST=file://localhost</code> and 7147 <code class="varname">FTP_PKG_URL_HOST=file://localhost</code> and
7136 <code class="varname">FTP_PKG_URL_DIR=/usr/packages</code>. The 7148 <code class="varname">FTP_PKG_URL_DIR=/usr/packages</code>. The
7137 <code class="varname">${PACKAGES}</code> directory and its 7149 <code class="varname">${PACKAGES}</code> directory and its
7138 subdirectories will be searched for all the binary 7150 subdirectories will be searched for all the binary
7139 packages.</p> 7151 packages.</p>
7140<p>The target can be run at the toplevel or in category 7152<p>The target can be run at the toplevel or in category
7141 directories, in which case it descends recursively.</p> 7153 directories, in which case it descends recursively.</p>
7142</dd> 7154</dd>
7143<dt><span class="term">readme-all</span></dt> 7155<dt><span class="term">readme-all</span></dt>
7144<dd><p>This is a top-level command, run it in 7156<dd><p>This is a top-level command, run it in
7145 <code class="filename">pkgsrc</code>. Use this target to create a 7157 <code class="filename">pkgsrc</code>. Use this target to create a
7146 file <code class="filename">README-all.html</code> which contains a 7158 file <code class="filename">README-all.html</code> which contains a
7147 list of all packages currently available in the NetBSD 7159 list of all packages currently available in the NetBSD
7148 Packages Collection, together with the category they belong 7160 Packages Collection, together with the category they belong
7149 to and a short description. This file is compiled from the 7161 to and a short description. This file is compiled from the
7150 <code class="filename">pkgsrc/*/README.html</code> files, so be sure 7162 <code class="filename">pkgsrc/*/README.html</code> files, so be sure
7151 to run this <span class="emphasis"><em>after</em></span> a <span class="command"><strong>make 7163 to run this <span class="emphasis"><em>after</em></span> a <span class="command"><strong>make
7152 readme</strong></span>.</p></dd> 7164 readme</strong></span>.</p></dd>
7153<dt><span class="term">cdrom-readme</span></dt> 7165<dt><span class="term">cdrom-readme</span></dt>
7154<dd><p>This is very much the same as the 7166<dd><p>This is very much the same as the
7155 <span class="quote">&#8220;<span class="quote">readme</span>&#8221;</span> target (see above), but is to be 7167 <span class="quote">&#8220;<span class="quote">readme</span>&#8221;</span> target (see above), but is to be
7156 used when generating a pkgsrc tree to be written to a 7168 used when generating a pkgsrc tree to be written to a
7157 CD-ROM. This target also produces 7169 CD-ROM. This target also produces
7158 <code class="filename">README.html</code> files, and can be made 7170 <code class="filename">README.html</code> files, and can be made
7159 to refer to URLs based on 7171 to refer to URLs based on
7160 <code class="varname">CDROM_PKG_URL_HOST</code> and 7172 <code class="varname">CDROM_PKG_URL_HOST</code> and
7161 <code class="varname">CDROM_PKG_URL_DIR</code>.</p></dd> 7173 <code class="varname">CDROM_PKG_URL_DIR</code>.</p></dd>
7162<dt><span class="term">show-distfiles</span></dt> 7174<dt><span class="term">show-distfiles</span></dt>
7163<dd><p>This target shows which distfiles and patchfiles 7175<dd><p>This target shows which distfiles and patchfiles
7164 are needed to build the package 7176 are needed to build the package
7165 (<code class="varname">ALLFILES</code>, which contains all 7177 (<code class="varname">ALLFILES</code>, which contains all
7166 <code class="varname">DISTFILES</code> and 7178 <code class="varname">DISTFILES</code> and
7167 <code class="varname">PATCHFILES</code>, but not 7179 <code class="varname">PATCHFILES</code>, but not
7168 <code class="filename">patches/*</code>).</p></dd> 7180 <code class="filename">patches/*</code>).</p></dd>
7169<dt><span class="term">show-downlevel</span></dt> 7181<dt><span class="term">show-downlevel</span></dt>
7170<dd><p>This target shows nothing if the package is not 7182<dd><p>This target shows nothing if the package is not
7171 installed. If a version of this package is installed, 7183 installed. If a version of this package is installed,
7172 but is not the version provided in this version of 7184 but is not the version provided in this version of
7173 pkgsrc, then a warning message is displayed. This target 7185 pkgsrc, then a warning message is displayed. This target
7174 can be used to show which of your installed packages are 7186 can be used to show which of your installed packages are
7175 downlevel, and so the old versions can be deleted, and 7187 downlevel, and so the old versions can be deleted, and
7176 the current ones added.</p></dd> 7188 the current ones added.</p></dd>
7177<dt><span class="term">show-pkgsrc-dir</span></dt> 7189<dt><span class="term">show-pkgsrc-dir</span></dt>
7178<dd><p>This target shows the directory in the pkgsrc 7190<dd><p>This target shows the directory in the pkgsrc
7179 hierarchy from which the package can be built and 7191 hierarchy from which the package can be built and
7180 installed. This may not be the same directory as the one 7192 installed. This may not be the same directory as the one
7181 from which the package was installed. This target is 7193 from which the package was installed. This target is
7182 intended to be used by people who may wish to upgrade 7194 intended to be used by people who may wish to upgrade
7183 many packages on a single host, and can be invoked from 7195 many packages on a single host, and can be invoked from
7184 the top-level pkgsrc Makefile by using the 7196 the top-level pkgsrc Makefile by using the
7185 <span class="quote">&#8220;<span class="quote">show-host-specific-pkgs</span>&#8221;</span> target.</p></dd> 7197 <span class="quote">&#8220;<span class="quote">show-host-specific-pkgs</span>&#8221;</span> target.</p></dd>
7186<dt><span class="term">show-installed-depends</span></dt> 7198<dt><span class="term">show-installed-depends</span></dt>
7187<dd><p>This target shows which installed packages match 7199<dd><p>This target shows which installed packages match
7188 the current package's <code class="varname">DEPENDS</code>. Useful 7200 the current package's <code class="varname">DEPENDS</code>. Useful
7189 if out of date dependencies are causing build 7201 if out of date dependencies are causing build
7190 problems.</p></dd> 7202 problems.</p></dd>
7191<dt><span class="term">check-shlibs</span></dt> 7203<dt><span class="term">check-shlibs</span></dt>
7192<dd><p>After a package is installed, check all its 7204<dd><p>After a package is installed, check all its
7193 binaries and (on ELF platforms) shared libraries to see 7205 binaries and (on ELF platforms) shared libraries to see
7194 if they find the shared libs they need. Run by default 7206 if they find the shared libs they need. Run by default
7195 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> 7207 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>
7196<dt><span class="term">print-PLIST</span></dt> 7208<dt><span class="term">print-PLIST</span></dt>
7197<dd> 7209<dd>
7198<p>After a <span class="quote">&#8220;<span class="quote">make install</span>&#8221;</span> from a new or 7210<p>After a <span class="quote">&#8220;<span class="quote">make install</span>&#8221;</span> from a new or
7199 upgraded pkg, this prints out an attempt to generate a 7211 upgraded pkg, this prints out an attempt to generate a
7200 new <code class="filename">PLIST</code> from a <span class="command"><strong>find 7212 new <code class="filename">PLIST</code> from a <span class="command"><strong>find
7201 -newer work/.extract_done</strong></span>. An attempt is made 7213 -newer work/.extract_done</strong></span>. An attempt is made
7202 to care for shared libs etc., but it is 7214 to care for shared libs etc., but it is
7203 <span class="emphasis"><em>strongly</em></span> recommended to review the 7215 <span class="emphasis"><em>strongly</em></span> recommended to review the
7204 result before putting it into 7216 result before putting it into
7205 <code class="filename">PLIST</code>. On upgrades, it's useful to 7217 <code class="filename">PLIST</code>. On upgrades, it's useful to
7206 diff the output of this command against an already 7218 diff the output of this command against an already
7207 existing <code class="filename">PLIST</code> file.</p> 7219 existing <code class="filename">PLIST</code> file.</p>
7208<p>If the package installs files via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?tar+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a> or 7220<p>If the package installs files via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?tar+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a> or
7209 other methods that don't update file access times, be 7221 other methods that don't update file access times, be
7210 sure to add these files manually to your 7222 sure to add these files manually to your
7211 <code class="filename">PLIST</code>, as the <span class="quote">&#8220;<span class="quote">find 7223 <code class="filename">PLIST</code>, as the <span class="quote">&#8220;<span class="quote">find
7212 -newer</span>&#8221;</span> command used by this target won't catch 7224 -newer</span>&#8221;</span> command used by this target won't catch
7213 them!</p> 7225 them!</p>
7214<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 7226<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
7215 information on this target.</p> 7227 information on this target.</p>
7216</dd> 7228</dd>
7217<dt><span class="term">bulk-package</span></dt> 7229<dt><span class="term">bulk-package</span></dt>
7218<dd> 7230<dd>
7219<p>Used to do bulk builds. If an appropriate binary 7231<p>Used to do bulk builds. If an appropriate binary
7220 package already exists, no action is taken. If not, this 7232 package already exists, no action is taken. If not, this
7221 target will compile, install and package it (and its 7233 target will compile, install and package it (and its
7222 depends, if <code class="varname">PKG_DEPENDS</code> is set 7234 depends, if <code class="varname">PKG_DEPENDS</code> is set
7223 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 7235 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
7224builds)</i></a>). 7236builds)</i></a>).
7225 After creating the binary package, the sources, the 7237 After creating the binary package, the sources, the
7226 just-installed package and its required packages are 7238 just-installed package and its required packages are
7227 removed, preserving free disk space.</p> 7239 removed, preserving free disk space.</p>
7228<p><span class="emphasis"><em>Beware that this target may deinstall 7240<p><span class="emphasis"><em>Beware that this target may deinstall
7229 all packages installed on a system!</em></span></p> 7241 all packages installed on a system!</em></span></p>
7230</dd> 7242</dd>
7231<dt><span class="term">bulk-install</span></dt> 7243<dt><span class="term">bulk-install</span></dt>
7232<dd> 7244<dd>
7233<p>Used during bulk-installs to install required 7245<p>Used during bulk-installs to install required
7234 packages. If an up-to-date binary package is available, 7246 packages. If an up-to-date binary package is available,
7235 it will be installed via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. If not, 7247 it will be installed via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. If not,
7236 <span class="command"><strong>make bulk-package</strong></span> will be executed, 7248 <span class="command"><strong>make bulk-package</strong></span> will be executed,
7237 but the installed binary won't be removed.</p> 7249 but the installed binary won't be removed.</p>
7238<p>A binary package is considered 7250<p>A binary package is considered
7239 <span class="quote">&#8220;<span class="quote">up-to-date</span>&#8221;</span> to be installed via 7251 <span class="quote">&#8220;<span class="quote">up-to-date</span>&#8221;</span> to be installed via
7240 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> if:</p> 7252 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_add+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> if:</p>
7241<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7253<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7242<li class="listitem"><p>None of the package's files 7254<li class="listitem"><p>None of the package's files
7243 (<code class="filename">Makefile</code>, ...) were modified 7255 (<code class="filename">Makefile</code>, ...) were modified
7244 since it was built.</p></li> 7256 since it was built.</p></li>
7245<li class="listitem"><p>None of the package's required (binary) 7257<li class="listitem"><p>None of the package's required (binary)
7246 packages were modified since it was built.</p></li> 7258 packages were modified since it was built.</p></li>
7247</ul></div> 7259</ul></div>
7248<p><span class="emphasis"><em>Beware that this target may deinstall 7260<p><span class="emphasis"><em>Beware that this target may deinstall
7249 all packages installed on a system!</em></span></p> 7261 all packages installed on a system!</em></span></p>
7250</dd> 7262</dd>
7251</dl></div> 7263</dl></div>
7252</div> 7264</div>
7253</div> 7265</div>
7254<div class="chapter"> 7266<div class="chapter">
7255<div class="titlepage"><div><div><h2 class="title"> 7267<div class="titlepage"><div><div><h2 class="title">
7256<a name="tools"></a>Chapter 18. Tools needed for building or running</h2></div></div></div> 7268<a name="tools"></a>Chapter 18. Tools needed for building or running</h2></div></div></div>
7257<div class="toc"> 7269<div class="toc">
7258<p><b>Table of Contents</b></p> 7270<p><b>Table of Contents</b></p>
7259<dl> 7271<dl>
7260<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt> 7272<dt><span class="sect1"><a href="#pkgsrc-tools">18.1. Tools for pkgsrc builds</a></span></dt>
7261<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt> 7273<dt><span class="sect1"><a href="#package-tools">18.2. Tools needed by packages</a></span></dt>
7262<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt> 7274<dt><span class="sect1"><a href="#platform-tools">18.3. Tools provided by platforms</a></span></dt>
7263<dt><span class="sect1"><a href="#tools.questions">18.4. Questions regarding the tools</a></span></dt> 7275<dt><span class="sect1"><a href="#tools.questions">18.4. Questions regarding the tools</a></span></dt>
7264</dl> 7276</dl>
7265</div> 7277</div>
7266<p>The <code class="varname">USE_TOOLS</code> definition is used both internally 7278<p>The <code class="varname">USE_TOOLS</code> definition is used both internally
7267by pkgsrc and also for individual packages to define what commands 7279by pkgsrc and also for individual packages to define what commands
7268are needed for building a package (like <code class="varname">BUILD_DEPENDS</code>) 7280are needed for building a package (like <code class="varname">BUILD_DEPENDS</code>)
7269or for later run-time of an installed packaged (such as 7281or for later run-time of an installed packaged (such as
7270<code class="varname">DEPENDS</code>). 7282<code class="varname">DEPENDS</code>).
7271If the native system provides an adequate tool, then in many cases, a pkgsrc 7283If the native system provides an adequate tool, then in many cases, a pkgsrc
7272package will not be used.</p> 7284package will not be used.</p>
7273<p>When building a package, the replacement tools are 7285<p>When building a package, the replacement tools are
7274made available in a directory (as symlinks or wrapper scripts) 7286made available in a directory (as symlinks or wrapper scripts)
7275that is early in the executable search path. Just like the buildlink 7287that is early in the executable search path. Just like the buildlink
7276system, this helps with consistent builds.</p> 7288system, this helps with consistent builds.</p>
7277<p>A tool may be needed to help build a specific package. For example, 7289<p>A tool may be needed to help build a specific package. For example,
7278perl, GNU make (gmake) or yacc may be needed.</p> 7290perl, GNU make (gmake) or yacc may be needed.</p>
7279<p>Also a tool may be needed, for example, because the native system's supplied 7291<p>Also a tool may be needed, for example, because the native system's supplied
7280tool may be inefficient for building a package with pkgsrc. 7292tool may be inefficient for building a package with pkgsrc.
7281For example, a package may need GNU awk, bison (instead of 7293For example, a package may need GNU awk, bison (instead of
7282yacc) or a better sed.</p> 7294yacc) or a better sed.</p>
7283<p>The tools used by a package can be listed by running 7295<p>The tools used by a package can be listed by running
7284<span class="command"><strong>make show-tools</strong></span>.</p> 7296<span class="command"><strong>make show-tools</strong></span>.</p>
7285<div class="sect1"> 7297<div class="sect1">
7286<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 7298<div class="titlepage"><div><div><h2 class="title" style="clear: both">
7287<a name="pkgsrc-tools"></a>18.1. Tools for pkgsrc builds</h2></div></div></div> 7299<a name="pkgsrc-tools"></a>18.1. Tools for pkgsrc builds</h2></div></div></div>
7288<p>The default set of tools used by pkgsrc is defined in 7300<p>The default set of tools used by pkgsrc is defined in
7289<code class="filename">bsd.pkg.mk</code>. This includes standard Unix tools, 7301<code class="filename">bsd.pkg.mk</code>. This includes standard Unix tools,
7290such as: <span class="command"><strong>cat</strong></span>, <span class="command"><strong>awk</strong></span>, 7302such as: <span class="command"><strong>cat</strong></span>, <span class="command"><strong>awk</strong></span>,
7291<span class="command"><strong>chmod</strong></span>, <span class="command"><strong>test</strong></span>, and so on. 7303<span class="command"><strong>chmod</strong></span>, <span class="command"><strong>test</strong></span>, and so on.
7292These can be seen by running: 7304These can be seen by running:
7293<span class="command"><strong>make show-var VARNAME=USE_TOOLS</strong></span>.</p> 7305<span class="command"><strong>make show-var VARNAME=USE_TOOLS</strong></span>.</p>
7294<p>If a package needs a specific program to build 7306<p>If a package needs a specific program to build
7295then the <code class="varname">USE_TOOLS</code> variable can be used 7307then the <code class="varname">USE_TOOLS</code> variable can be used
7296to define the tools needed.</p> 7308to define the tools needed.</p>
7297</div> 7309</div>
7298<div class="sect1"> 7310<div class="sect1">
7299<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 7311<div class="titlepage"><div><div><h2 class="title" style="clear: both">
7300<a name="package-tools"></a>18.2. Tools needed by packages</h2></div></div></div> 7312<a name="package-tools"></a>18.2. Tools needed by packages</h2></div></div></div>
7301<p>In the following examples, the :run means that it is needed at 7313<p>In the following examples, the :run means that it is needed at
7302run-time (and becomes a DEPENDS). 7314run-time (and becomes a DEPENDS).
7303The default is a build dependency which can be set with 7315The default is a build dependency which can be set with
7304:build. (So in this example, it is the same as gmake:build 7316:build. (So in this example, it is the same as gmake:build
7305and pkg-config:build.)</p> 7317and pkg-config:build.)</p>
7306<pre class="programlisting"> 7318<pre class="programlisting">
7307USE_TOOLS+= gmake perl:run pkg-config 7319USE_TOOLS+= gmake perl:run pkg-config
7308</pre> 7320</pre>
7309<p>When using the tools framework, a 7321<p>When using the tools framework, a
7310<code class="varname">TOOLS_PATH.foo</code> variable is defined 7322<code class="varname">TOOLS_PATH.foo</code> variable is defined
7311which contains the full path to the appropriate tool. For example, 7323which contains the full path to the appropriate tool. For example,
7312<code class="varname">TOOLS_PATH.bash</code> could be <span class="quote">&#8220;<span class="quote">/bin/bash</span>&#8221;</span> 7324<code class="varname">TOOLS_PATH.bash</code> could be <span class="quote">&#8220;<span class="quote">/bin/bash</span>&#8221;</span>
7313on Linux systems.</p> 7325on Linux systems.</p>
7314<p>If you always need a pkgsrc version of the 7326<p>If you always need a pkgsrc version of the
7315tool at run-time, then just use <code class="varname">DEPENDS</code> instead. 7327tool at run-time, then just use <code class="varname">DEPENDS</code> instead.
7316</p> 7328</p>
7317</div> 7329</div>
7318<div class="sect1"> 7330<div class="sect1">
7319<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 7331<div class="titlepage"><div><div><h2 class="title" style="clear: both">
7320<a name="platform-tools"></a>18.3. Tools provided by platforms</h2></div></div></div> 7332<a name="platform-tools"></a>18.3. Tools provided by platforms</h2></div></div></div>
7321<p>When improving or porting pkgsrc to a new platform, have a look 7333<p>When improving or porting pkgsrc to a new platform, have a look
7322at (or create) the corresponding platform specific make file fragment under 7334at (or create) the corresponding platform specific make file fragment under
7323<code class="filename">pkgsrc/mk/tools/tools.${OPSYS}.mk</code> which defines 7335<code class="filename">pkgsrc/mk/tools/tools.${OPSYS}.mk</code> which defines
7324the name of the common tools. For example:</p> 7336the name of the common tools. For example:</p>
7325<pre class="programlisting"> 7337<pre class="programlisting">
7326.if exists(/usr/bin/bzcat) 7338.if exists(/usr/bin/bzcat)
7327TOOLS_PLATFORM.bzcat?= /usr/bin/bzcat 7339TOOLS_PLATFORM.bzcat?= /usr/bin/bzcat
7328.elif exists(/usr/bin/bzip2) 7340.elif exists(/usr/bin/bzip2)
7329TOOLS_PLATFORM.bzcat?= /usr/bin/bzip2 -cd 7341TOOLS_PLATFORM.bzcat?= /usr/bin/bzip2 -cd
7330.endif 7342.endif
7331 7343
7332TOOLS_PLATFORM.true?= true # shell builtin 7344TOOLS_PLATFORM.true?= true # shell builtin
7333</pre> 7345</pre>
7334</div> 7346</div>
7335<div class="sect1"> 7347<div class="sect1">
7336<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 7348<div class="titlepage"><div><div><h2 class="title" style="clear: both">
7337<a name="tools.questions"></a>18.4. Questions regarding the tools</h2></div></div></div> 7349<a name="tools.questions"></a>18.4. Questions regarding the tools</h2></div></div></div>
7338<div class="qandaset"> 7350<div class="qandaset">
7339<a name="idm77719184"></a><dl> 7351<a name="idm77799312"></a><dl>
7340<dt>18.4.1. <a href="#tools.new">How do I add a new tool?</a> 7352<dt>18.4.1. <a href="#tools.new">How do I add a new tool?</a>
7341</dt> 7353</dt>
7342<dt>18.4.2. <a href="#tools.listall">How do I get a list of all available 7354<dt>18.4.2. <a href="#tools.listall">How do I get a list of all available
7343 tools?</a> 7355 tools?</a>
7344</dt> 7356</dt>
7345<dt>18.4.3. <a href="#tools.used">How can I get a list of all the tools that a 7357<dt>18.4.3. <a href="#tools.used">How can I get a list of all the tools that a
7346 package is using while being built? I want to know whether it 7358 package is using while being built? I want to know whether it
7347 uses sed or not.</a> 7359 uses sed or not.</a>
7348</dt> 7360</dt>
7349</dl> 7361</dl>
7350<table border="0" style="width: 100%;"> 7362<table border="0" style="width: 100%;">
7351<colgroup> 7363<colgroup>
7352<col align="left" width="1%"> 7364<col align="left" width="1%">
7353<col> 7365<col>
7354</colgroup> 7366</colgroup>
7355<tbody> 7367<tbody>
7356<tr class="question"> 7368<tr class="question">
7357<td align="left" valign="top"> 7369<td align="left" valign="top">
7358<a name="tools.new"></a><a name="idm77718800"></a><p><b>18.4.1.</b></p> 7370<a name="tools.new"></a><a name="idm77798928"></a><p><b>18.4.1.</b></p>
7359</td> 7371</td>
7360<td align="left" valign="top"><p>How do I add a new tool?</p></td> 7372<td align="left" valign="top"><p>How do I add a new tool?</p></td>
7361</tr> 7373</tr>
7362<tr class="answer"> 7374<tr class="answer">
7363<td align="left" valign="top"></td> 7375<td align="left" valign="top"></td>
7364<td align="left" valign="top"><p>TODO</p></td> 7376<td align="left" valign="top"><p>TODO</p></td>
7365</tr> 7377</tr>
7366<tr class="question"> 7378<tr class="question">
7367<td align="left" valign="top"> 7379<td align="left" valign="top">
7368<a name="tools.listall"></a><a name="idm77717776"></a><p><b>18.4.2.</b></p> 7380<a name="tools.listall"></a><a name="idm77797904"></a><p><b>18.4.2.</b></p>
7369</td> 7381</td>
7370<td align="left" valign="top"><p>How do I get a list of all available 7382<td align="left" valign="top"><p>How do I get a list of all available
7371 tools?</p></td> 7383 tools?</p></td>
7372</tr> 7384</tr>
7373<tr class="answer"> 7385<tr class="answer">
7374<td align="left" valign="top"></td> 7386<td align="left" valign="top"></td>
7375<td align="left" valign="top"><p>TODO</p></td> 7387<td align="left" valign="top"><p>TODO</p></td>
7376</tr> 7388</tr>
7377<tr class="question"> 7389<tr class="question">
7378<td align="left" valign="top"> 7390<td align="left" valign="top">
7379<a name="tools.used"></a><a name="idm77716752"></a><p><b>18.4.3.</b></p> 7391<a name="tools.used"></a><a name="idm77796752"></a><p><b>18.4.3.</b></p>
7380</td> 7392</td>
7381<td align="left" valign="top"><p>How can I get a list of all the tools that a 7393<td align="left" valign="top"><p>How can I get a list of all the tools that a
7382 package is using while being built? I want to know whether it 7394 package is using while being built? I want to know whether it
7383 uses sed or not.</p></td> 7395 uses sed or not.</p></td>
7384</tr> 7396</tr>
7385<tr class="answer"> 7397<tr class="answer">
7386<td align="left" valign="top"></td> 7398<td align="left" valign="top"></td>
7387<td align="left" valign="top"><p>Currently, you can't. (TODO: But I want to be able 7399<td align="left" valign="top"><p>Currently, you can't. (TODO: But I want to be able
7388 to do it.)</p></td> 7400 to do it.)</p></td>
7389</tr> 7401</tr>
7390</tbody> 7402</tbody>
7391</table> 7403</table>
7392</div> 7404</div>
7393</div> 7405</div>
7394</div> 7406</div>
7395<div class="chapter"> 7407<div class="chapter">
7396<div class="titlepage"><div><div><h2 class="title"> 7408<div class="titlepage"><div><div><h2 class="title">
7397<a name="fixes"></a>Chapter 19. Making your package work</h2></div></div></div> 7409<a name="fixes"></a>Chapter 19. Making your package work</h2></div></div></div>
7398<div class="toc"> 7410<div class="toc">
7399<p><b>Table of Contents</b></p> 7411<p><b>Table of Contents</b></p>
7400<dl> 7412<dl>
7401<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt> 7413<dt><span class="sect1"><a href="#general-operation">19.1. General operation</a></span></dt>
7402<dd><dl> 7414<dd><dl>
7403<dt><span class="sect2"><a href="#portability-of-packages">19.1.1. Portability of packages</a></span></dt> 7415<dt><span class="sect2"><a href="#portability-of-packages">19.1.1. Portability of packages</a></span></dt>
7404<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.2. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt> 7416<dt><span class="sect2"><a href="#pulling-vars-from-etc-mk.conf">19.1.2. How to pull in user-settable variables from <code class="filename">mk.conf</code></a></span></dt>
7405<dt><span class="sect2"><a href="#user-interaction">19.1.3. User interaction</a></span></dt> 7417<dt><span class="sect2"><a href="#user-interaction">19.1.3. User interaction</a></span></dt>
7406<dt><span class="sect2"><a href="#handling-licenses">19.1.4. Handling licenses</a></span></dt> 7418<dt><span class="sect2"><a href="#handling-licenses">19.1.4. Handling licenses</a></span></dt>
7407<dt><span class="sect2"><a href="#restricted-packages">19.1.5. Restricted packages</a></span></dt> 7419<dt><span class="sect2"><a href="#restricted-packages">19.1.5. Restricted packages</a></span></dt>
7408<dt><span class="sect2"><a href="#dependencies">19.1.6. Handling dependencies</a></span></dt> 7420<dt><span class="sect2"><a href="#dependencies">19.1.6. Handling dependencies</a></span></dt>
7409<dt><span class="sect2"><a href="#conflicts">19.1.7. Handling conflicts with other packages</a></span></dt> 7421<dt><span class="sect2"><a href="#conflicts">19.1.7. Handling conflicts with other packages</a></span></dt>
7410<dt><span class="sect2"><a href="#not-building-packages">19.1.8. Packages that cannot or should not be built</a></span></dt> 7422<dt><span class="sect2"><a href="#not-building-packages">19.1.8. Packages that cannot or should not be built</a></span></dt>
7411<dt><span class="sect2"><a href="#undeletable-packages">19.1.9. Packages which should not be deleted, once installed</a></span></dt> 7423<dt><span class="sect2"><a href="#undeletable-packages">19.1.9. Packages which should not be deleted, once installed</a></span></dt>
7412<dt><span class="sect2"><a href="#security-handling">19.1.10. Handling packages with security problems</a></span></dt> 7424<dt><span class="sect2"><a href="#security-handling">19.1.10. Handling packages with security problems</a></span></dt>
7413<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.11. How to handle incrementing versions when fixing an existing package</a></span></dt> 7425<dt><span class="sect2"><a href="#bumping-pkgrevision">19.1.11. How to handle incrementing versions when fixing an existing package</a></span></dt>
7414<dt><span class="sect2"><a href="#fixes.subst">19.1.12. Substituting variable text in the package files (the SUBST framework)</a></span></dt> 7426<dt><span class="sect2"><a href="#fixes.subst">19.1.12. Substituting variable text in the package files (the SUBST framework)</a></span></dt>
7415</dl></dd> 7427</dl></dd>
7416<dt><span class="sect1"><a href="#fixes.fetch">19.2. Fixing problems in the <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 7428<dt><span class="sect1"><a href="#fixes.fetch">19.2. Fixing problems in the <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
7417<dd><dl> 7429<dd><dl>
7418<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt> 7430<dt><span class="sect2"><a href="#no-plain-download">19.2.1. Packages whose distfiles aren't available for plain downloading</a></span></dt>
7419<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> 7431<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>
7420</dl></dd> 7432</dl></dd>
7421<dt><span class="sect1"><a href="#fixes.configure">19.3. Fixing problems in the <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 7433<dt><span class="sect1"><a href="#fixes.configure">19.3. Fixing problems in the <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
7422<dd><dl> 7434<dd><dl>
7423<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt> 7435<dt><span class="sect2"><a href="#fixes.libtool">19.3.1. Shared libraries - libtool</a></span></dt>
7424<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt> 7436<dt><span class="sect2"><a href="#using-libtool">19.3.2. Using libtool on GNU packages that already support libtool</a></span></dt>
7425<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt> 7437<dt><span class="sect2"><a href="#autoconf-automake">19.3.3. GNU Autoconf/Automake</a></span></dt>
7426</dl></dd> 7438</dl></dd>
7427<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt> 7439<dt><span class="sect1"><a href="#programming-languages">19.4. Programming languages</a></span></dt>
7428<dd><dl> 7440<dd><dl>
7429<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt> 7441<dt><span class="sect2"><a href="#basic-programming-languages">19.4.1. C, C++, and Fortran</a></span></dt>
7430<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt> 7442<dt><span class="sect2"><a href="#java-programming-language">19.4.2. Java</a></span></dt>
7431<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt> 7443<dt><span class="sect2"><a href="#perl-scripts">19.4.3. Packages containing perl scripts</a></span></dt>
7432<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt> 7444<dt><span class="sect2"><a href="#shell-scripts">19.4.4. Packages containing shell scripts</a></span></dt>
7433<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt> 7445<dt><span class="sect2"><a href="#other-programming-languages">19.4.5. Other programming languages</a></span></dt>
7434</dl></dd> 7446</dl></dd>
7435<dt><span class="sect1"><a href="#fixes.build">19.5. Fixing problems in the <span class="emphasis"><em>build</em></span> phase</a></span></dt> 7447<dt><span class="sect1"><a href="#fixes.build">19.5. Fixing problems in the <span class="emphasis"><em>build</em></span> phase</a></span></dt>
7436<dd><dl> 7448<dd><dl>
7437<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt> 7449<dt><span class="sect2"><a href="#fixes.build.cpp">19.5.1. Compiling C and C++ code conditionally</a></span></dt>
7438<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt> 7450<dt><span class="sect2"><a href="#compiler-bugs">19.5.2. How to handle compiler bugs</a></span></dt>
7439<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> 7451<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>
7440<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt> 7452<dt><span class="sect2"><a href="#out-of-memory">19.5.4. Running out of memory</a></span></dt>
7441</dl></dd> 7453</dl></dd>
7442<dt><span class="sect1"><a href="#fixes.install">19.6. Fixing problems in the <span class="emphasis"><em>install</em></span> phase</a></span></dt> 7454<dt><span class="sect1"><a href="#fixes.install">19.6. Fixing problems in the <span class="emphasis"><em>install</em></span> phase</a></span></dt>
7443<dd><dl> 7455<dd><dl>
7444<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt> 7456<dt><span class="sect2"><a href="#install-scripts">19.6.1. Creating needed directories</a></span></dt>
7445<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt> 7457<dt><span class="sect2"><a href="#where-to-install-documentation">19.6.2. Where to install documentation</a></span></dt>
7446<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt> 7458<dt><span class="sect2"><a href="#installing-score-files">19.6.3. Installing highscore files</a></span></dt>
7447<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt> 7459<dt><span class="sect2"><a href="#destdir-support">19.6.4. Adding DESTDIR support to packages</a></span></dt>
7448<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt> 7460<dt><span class="sect2"><a href="#hardcoded-paths">19.6.5. Packages with hardcoded paths to other interpreters</a></span></dt>
7449<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt> 7461<dt><span class="sect2"><a href="#perl-modules">19.6.6. Packages installing perl modules</a></span></dt>
7450<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt> 7462<dt><span class="sect2"><a href="#faq.info-files">19.6.7. Packages installing info files</a></span></dt>
7451<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt> 7463<dt><span class="sect2"><a href="#manpages">19.6.8. Packages installing man pages</a></span></dt>
7452<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt> 7464<dt><span class="sect2"><a href="#gconf-data-files">19.6.9. Packages installing GConf data files</a></span></dt>
7453<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt> 7465<dt><span class="sect2"><a href="#scrollkeeper-data-files">19.6.10. Packages installing scrollkeeper/rarian data files</a></span></dt>
7454<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt> 7466<dt><span class="sect2"><a href="#x11-fonts">19.6.11. Packages installing X11 fonts</a></span></dt>
7455<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt> 7467<dt><span class="sect2"><a href="#gtk2-modules">19.6.12. Packages installing GTK2 modules</a></span></dt>
7456<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt> 7468<dt><span class="sect2"><a href="#sgml-xml-data">19.6.13. Packages installing SGML or XML data</a></span></dt>
7457<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt> 7469<dt><span class="sect2"><a href="#mime-database">19.6.14. Packages installing extensions to the MIME database</a></span></dt>
7458<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt> 7470<dt><span class="sect2"><a href="#intltool">19.6.15. Packages using intltool</a></span></dt>
7459<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt> 7471<dt><span class="sect2"><a href="#startup-scripts">19.6.16. Packages installing startup scripts</a></span></dt>
7460<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt> 7472<dt><span class="sect2"><a href="#tex-packages">19.6.17. Packages installing TeX modules</a></span></dt>
7461<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in 7473<dt><span class="sect2"><a href="#emulation-packages">19.6.18. Packages supporting running binaries in
7462 emulation</a></span></dt> 7474 emulation</a></span></dt>
7463<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt> 7475<dt><span class="sect2"><a href="#hicolor-theme">19.6.19. Packages installing hicolor theme icons</a></span></dt>
7464<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt> 7476<dt><span class="sect2"><a href="#desktop-files">19.6.20. Packages installing desktop files</a></span></dt>
7465</dl></dd> 7477</dl></dd>
7466<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt> 7478<dt><span class="sect1"><a href="#punting">19.7. Marking packages as having problems</a></span></dt>
7467</dl> 7479</dl>
7468</div> 7480</div>
7469<div class="sect1"> 7481<div class="sect1">
7470<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 7482<div class="titlepage"><div><div><h2 class="title" style="clear: both">
7471<a name="general-operation"></a>19.1. General operation</h2></div></div></div> 7483<a name="general-operation"></a>19.1. General operation</h2></div></div></div>
7472<div class="sect2"> 7484<div class="sect2">
7473<div class="titlepage"><div><div><h3 class="title"> 7485<div class="titlepage"><div><div><h3 class="title">
7474<a name="portability-of-packages"></a>19.1.1. Portability of packages</h3></div></div></div> 7486<a name="portability-of-packages"></a>19.1.1. Portability of packages</h3></div></div></div>
7475<p>One appealing feature of pkgsrc is that it runs on many 7487<p>One appealing feature of pkgsrc is that it runs on many
7476 different platforms. As a result, it is important to ensure, 7488 different platforms. As a result, it is important to ensure,
7477 where possible, that packages in pkgsrc are portable. This 7489 where possible, that packages in pkgsrc are portable. This
7478 chapter mentions some particular details you should pay 7490 chapter mentions some particular details you should pay
7479 attention to while working on pkgsrc.</p> 7491 attention to while working on pkgsrc.</p>
7480</div> 7492</div>
7481<div class="sect2"> 7493<div class="sect2">
7482<div class="titlepage"><div><div><h3 class="title"> 7494<div class="titlepage"><div><div><h3 class="title">
7483<a name="pulling-vars-from-etc-mk.conf"></a>19.1.2. How to pull in user-settable variables from <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> 7495<a name="pulling-vars-from-etc-mk.conf"></a>19.1.2. How to pull in user-settable variables from <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>
7484</h3></div></div></div> 7496</h3></div></div></div>
7485<p>The pkgsrc user can configure pkgsrc by overriding several 7497<p>The pkgsrc user can configure pkgsrc by overriding several
7486 variables in the file pointed to by <code class="varname">MAKECONF</code>, 7498 variables in the file pointed to by <code class="varname">MAKECONF</code>,
7487 which is <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> by default. When you 7499 which is <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> by default. When you
7488 want to use those variables in the preprocessor directives of 7500 want to use those variables in the preprocessor directives of
7489 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> (for example <code class="literal">.if</code> or 7501 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> (for example <code class="literal">.if</code> or
7490 <code class="literal">.for</code>), you need to include the file 7502 <code class="literal">.for</code>), you need to include the file
7491 <code class="filename">../../mk/bsd.prefs.mk</code> before, which in turn 7503 <code class="filename">../../mk/bsd.prefs.mk</code> before, which in turn
7492 loads the user preferences.</p> 7504 loads the user preferences.</p>
7493<p>But note that some variables may not be completely defined 7505<p>But note that some variables may not be completely defined
7494 after <code class="filename">../../mk/bsd.prefs.mk</code> has been 7506 after <code class="filename">../../mk/bsd.prefs.mk</code> has been
7495 included, as they may contain references to variables that are 7507 included, as they may contain references to variables that are
7496 not yet defined. In shell commands this is no problem, since 7508 not yet defined. In shell commands this is no problem, since
7497 variables are actually macros, which are only expanded when they 7509 variables are actually macros, which are only expanded when they
7498 are used. But in the preprocessor directives mentioned above and 7510 are used. But in the preprocessor directives mentioned above and
7499 in dependency lines (of the form <code class="literal">target: 7511 in dependency lines (of the form <code class="literal">target:
7500 dependencies</code>) the variables are expanded at load 7512 dependencies</code>) the variables are expanded at load
7501 time.</p> 7513 time.</p>
7502<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 7514<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
7503<h3 class="title">Note</h3> 7515<h3 class="title">Note</h3>
7504<p>Currently there is no exhaustive list of all 7516<p>Currently there is no exhaustive list of all
7505 variables that tells you whether they can be used at load time 7517 variables that tells you whether they can be used at load time
7506 or only at run time, but it is in preparation.</p> 7518 or only at run time, but it is in preparation.</p>
7507</div> 7519</div>
7508</div> 7520</div>
7509<div class="sect2"> 7521<div class="sect2">
7510<div class="titlepage"><div><div><h3 class="title"> 7522<div class="titlepage"><div><div><h3 class="title">
7511<a name="user-interaction"></a>19.1.3. User interaction</h3></div></div></div> 7523<a name="user-interaction"></a>19.1.3. User interaction</h3></div></div></div>
7512<p>Occasionally, packages require interaction from the user, 7524<p>Occasionally, packages require interaction from the user,
7513 and this can be in a number of ways:</p> 7525 and this can be in a number of ways:</p>
7514<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7526<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7515<li class="listitem"><p>When fetching the distfiles, some packages require user 7527<li class="listitem"><p>When fetching the distfiles, some packages require user
7516 interaction such as entering username/password or accepting a 7528 interaction such as entering username/password or accepting a
7517 license on a web page.</p></li> 7529 license on a web page.</p></li>
7518<li class="listitem"><p>When extracting the distfiles, some packages may ask for 7530<li class="listitem"><p>When extracting the distfiles, some packages may ask for
7519 passwords.</p></li> 7531 passwords.</p></li>
7520<li class="listitem"><p>help to configure the package before it is built</p></li> 7532<li class="listitem"><p>help to configure the package before it is built</p></li>
7521<li class="listitem"><p>help during the build process</p></li> 7533<li class="listitem"><p>help during the build process</p></li>
7522<li class="listitem"><p>help during the installation of a package</p></li> 7534<li class="listitem"><p>help during the installation of a package</p></li>
7523</ul></div> 7535</ul></div>
7524<p>The <code class="varname">INTERACTIVE_STAGE</code> definition is 7536<p>The <code class="varname">INTERACTIVE_STAGE</code> definition is
7525 provided to notify the pkgsrc mechanism of an interactive stage 7537 provided to notify the pkgsrc mechanism of an interactive stage
7526 which will be needed, and this should be set in the package's 7538 which will be needed, and this should be set in the package's
7527 <code class="filename">Makefile</code>, e.g.:</p> 7539 <code class="filename">Makefile</code>, e.g.:</p>
7528<pre class="programlisting"> 7540<pre class="programlisting">
7529INTERACTIVE_STAGE= build 7541INTERACTIVE_STAGE= build
7530 </pre> 7542 </pre>
7531<p>Multiple interactive stages can be specified:</p> 7543<p>Multiple interactive stages can be specified:</p>
7532<pre class="programlisting"> 7544<pre class="programlisting">
7533INTERACTIVE_STAGE= configure install 7545INTERACTIVE_STAGE= configure install
7534 </pre> 7546 </pre>
7535<p>The user can then decide to skip this package by setting the 7547<p>The user can then decide to skip this package by setting the
7536 <code class="varname">BATCH</code> variable.</p> 7548 <code class="varname">BATCH</code> variable.</p>
7537</div> 7549</div>
7538<div class="sect2"> 7550<div class="sect2">
7539<div class="titlepage"><div><div><h3 class="title"> 7551<div class="titlepage"><div><div><h3 class="title">
7540<a name="handling-licenses"></a>19.1.4. Handling licenses</h3></div></div></div> 7552<a name="handling-licenses"></a>19.1.4. Handling licenses</h3></div></div></div>
7541<p>Authors of software can choose the licence under which 7553<p>Authors of software can choose the licence under which
7542 software can be copied. This is due to copyright law, and reasons 7554 software can be copied. This is due to copyright law, and reasons
7543 for license choices are outside the scope of pkgsrc. The pkgsrc 7555 for license choices are outside the scope of pkgsrc. The pkgsrc
7544 system recognizes that there are a number of licenses which some 7556 system recognizes that there are a number of licenses which some
7545 users may find objectionable or difficult or impossible to comply 7557 users may find objectionable or difficult or impossible to comply
7546 with. The Free Software Foundation has declared some licenses 7558 with. The Free Software Foundation has declared some licenses
7547 "Free", and the Open Source Initiative has a definition of "Open 7559 "Free", and the Open Source Initiative has a definition of "Open
7548 Source". The pkgsrc system, as a policy choice, does not label 7560 Source". The pkgsrc system, as a policy choice, does not label
7549 packages which have licenses that are Free or Open Source. 7561 packages which have licenses that are Free or Open Source.
7550 However, packages without a license meeting either of those tests 7562 However, packages without a license meeting either of those tests
7551 are labeled with a license tag denoting the license. Note that a 7563 are labeled with a license tag denoting the license. Note that a
7552 package with no license to copy trivially does not meet either the 7564 package with no license to copy trivially does not meet either the
7553 Free or Open Source test.</p> 7565 Free or Open Source test.</p>
7554<p>For packages which are not Free or Open Source, pkgsrc will 7566<p>For packages which are not Free or Open Source, pkgsrc will
7555 not build the package unless the user has indicated to pkgsrc that 7567 not build the package unless the user has indicated to pkgsrc that
7556 packages with that particular license may be built. Note that 7568 packages with that particular license may be built. Note that
7557 this documentation avoids the term "accepted the license". The 7569 this documentation avoids the term "accepted the license". The
7558 pkgsrc system is merely providing a mechanism to avoid 7570 pkgsrc system is merely providing a mechanism to avoid
7559 accidentally building a package with a non-free license; 7571 accidentally building a package with a non-free license;
7560 judgement and responsibility remain with the user. (Installation 7572 judgement and responsibility remain with the user. (Installation
7561 of binary packages are not currently subject to this mechanism; 7573 of binary packages are not currently subject to this mechanism;
7562 this is a bug.)</p> 7574 this is a bug.)</p>
7563<p>One might want to only install packages with a BSD license, 7575<p>One might want to only install packages with a BSD license,
7564 or the GPL, and not the other. The free licenses are added to the  7576 or the GPL, and not the other. The free licenses are added to the
7565 default <code class="varname">ACCEPTABLE_LICENSES</code> variable. The 7577 default <code class="varname">ACCEPTABLE_LICENSES</code> variable. The
7566 user can override the default by setting the 7578 user can override the default by setting the
7567 <code class="varname">ACCEPTABLE_LICENSES</code> variable with "=" instead 7579 <code class="varname">ACCEPTABLE_LICENSES</code> variable with "=" instead
7568 of "+=". The licenses accepted by default are: 7580 of "+=". The licenses accepted by default are:
7569 </p> 7581 </p>
7570<pre class="programlisting"> 7582<pre class="programlisting">
7571 apache-1.1 apache-2.0 7583 apache-1.1 apache-2.0
7572 arphic-public 7584 arphic-public
7573 artistic artistic-2.0 7585 artistic artistic-2.0
7574 boost-license 7586 boost-license
7575 cc-by-sa-v3.0 7587 cc-by-sa-v3.0
7576 cc0-1.0-universal 7588 cc0-1.0-universal
7577 cddl-1.0 7589 cddl-1.0
7578 cpl-1.0 7590 cpl-1.0
7579 epl-v1.0 7591 epl-v1.0
7580 gnu-fdl-v1.1 gnu-fdl-v1.2 gnu-fdl-v1.3 7592 gnu-fdl-v1.1 gnu-fdl-v1.2 gnu-fdl-v1.3
7581 gnu-gpl-v1 7593 gnu-gpl-v1
7582 gnu-gpl-v2 gnu-lgpl-v2 gnu-lgpl-v2.1 7594 gnu-gpl-v2 gnu-lgpl-v2 gnu-lgpl-v2.1
7583 gnu-gpl-v3 gnu-lgpl-v3 7595 gnu-gpl-v3 gnu-lgpl-v3
7584 ibm-public-license-1.0 7596 ibm-public-license-1.0
7585 ipafont 7597 ipafont
7586 isc 7598 isc
7587 lppl-1.3c 7599 lppl-1.3c
7588 lucent 7600 lucent
7589 miros 7601 miros
7590 mit 7602 mit
7591 mpl-1.0 mpl-1.1 mpl-2.0 7603 mpl-1.0 mpl-1.1 mpl-2.0
7592 mplusfont 7604 mplusfont
7593 ofl-v1.0 ofl-v1.1 7605 ofl-v1.0 ofl-v1.1
7594 original-bsd modified-bsd 2-clause-bsd 7606 original-bsd modified-bsd 2-clause-bsd
7595 php 7607 php
7596 png-license 7608 png-license
7597 postgresql-license 7609 postgresql-license
7598 public-domain 7610 public-domain
7599 python-software-foundation 7611 python-software-foundation
7600 qpl-v1.0 7612 qpl-v1.0
7601 sgi-free-software-b-v2.0 7613 sgi-free-software-b-v2.0
7602 sleepycat-public 7614 sleepycat-public
7603 unlicense 7615 unlicense
7604 x11 7616 x11
7605 zlib 7617 zlib
7606 zpl 7618 zpl
7607 </pre> 7619 </pre>
7608<p> 7620<p>
7609 </p> 7621 </p>
7610<p>The license tag mechanism is intended to address 7622<p>The license tag mechanism is intended to address
7611 copyright-related issues surrounding building, installing and 7623 copyright-related issues surrounding building, installing and
7612 using a package, and not to address redistribution issues (see 7624 using a package, and not to address redistribution issues (see
7613 <code class="varname">RESTRICTED</code> and 7625 <code class="varname">RESTRICTED</code> and
7614 <code class="varname">NO_SRC_ON_FTP</code>, etc.).  7626 <code class="varname">NO_SRC_ON_FTP</code>, etc.).
7615 Packages with redistribution restrictions should set these 7627 Packages with redistribution restrictions should set these
7616 tags.</p> 7628 tags.</p>
7617<p>Denoting that a package may be copied according to a 7629<p>Denoting that a package may be copied according to a
7618 particular license is done by placing the license in 7630 particular license is done by placing the license in
7619 <code class="filename">pkgsrc/licenses</code> and setting the 7631 <code class="filename">pkgsrc/licenses</code> and setting the
7620 <code class="varname">LICENSE</code> variable to a string identifying the 7632 <code class="varname">LICENSE</code> variable to a string identifying the
7621 license, e.g. in <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/graphics/xv/README.html" target="_top"><code class="filename">graphics/xv</code></a>:</p> 7633 license, e.g. in <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/graphics/xv/README.html" target="_top"><code class="filename">graphics/xv</code></a>:</p>
7622<pre class="programlisting"> 7634<pre class="programlisting">
7623LICENSE= xv-license 7635LICENSE= xv-license
7624 </pre> 7636 </pre>
7625<p>When trying to build, the user will get a notice that the 7637<p>When trying to build, the user will get a notice that the
7626 package is covered by a license which has not been placed in the 7638 package is covered by a license which has not been placed in the
7627 <code class="varname">ACCEPTABLE_LICENSES</code> variable:</p> 7639 <code class="varname">ACCEPTABLE_LICENSES</code> variable:</p>
7628<pre class="programlisting"> 7640<pre class="programlisting">
7629<code class="prompt">%</code> <strong class="userinput"><code>make</code></strong> 7641<code class="prompt">%</code> <strong class="userinput"><code>make</code></strong>
7630===&gt; xv-3.10anb9 has an unacceptable license: xv-license. 7642===&gt; xv-3.10anb9 has an unacceptable license: xv-license.
7631===&gt; To view the license, enter "/usr/bin/make show-license". 7643===&gt; To view the license, enter "/usr/bin/make show-license".
7632===&gt; To indicate acceptance, add this line to your /etc/mk.conf: 7644===&gt; To indicate acceptance, add this line to your /etc/mk.conf:
7633===&gt; ACCEPTABLE_LICENSES+=xv-license 7645===&gt; ACCEPTABLE_LICENSES+=xv-license
7634*** Error code 1 7646*** Error code 1
7635 </pre> 7647 </pre>
7636<p>The license can be viewed with <span class="command"><strong>make 7648<p>The license can be viewed with <span class="command"><strong>make
7637 show-license</strong></span>, and if the user so chooses, the line 7649 show-license</strong></span>, and if the user so chooses, the line
7638 printed above can be added to <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to 7650 printed above can be added to <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to
7639 convey to pkgsrc that it should not in the future fail because of 7651 convey to pkgsrc that it should not in the future fail because of
7640 that license:</p> 7652 that license:</p>
7641<pre class="programlisting"> 7653<pre class="programlisting">
7642ACCEPTABLE_LICENSES+=xv-license 7654ACCEPTABLE_LICENSES+=xv-license
7643 </pre> 7655 </pre>
7644<p>When adding a package with a new license, the following steps 7656<p>When adding a package with a new license, the following steps
7645 are required:</p> 7657 are required:</p>
7646<div class="orderedlist"><ol class="orderedlist" type="1"> 7658<div class="orderedlist"><ol class="orderedlist" type="1">
7647<li class="listitem"> 7659<li class="listitem">
7648<p>Check if the file can avoid the -license filename tag as described above by referencing <a class="ulink" href="http://www.gnu.org/licenses/license-list.html" target="_top">Various Licenses and Comments about Them</a> and <a class="ulink" href="http://opensource.org/licenses/alphabetical" target="_top">Licenses by Name | Open Source Initiative</a>. If this is the case, additionally add the license filename to:</p> 7660<p>Check if the file can avoid the -license filename tag as described above by referencing <a class="ulink" href="http://www.gnu.org/licenses/license-list.html" target="_top">Various Licenses and Comments about Them</a> and <a class="ulink" href="http://opensource.org/licenses/alphabetical" target="_top">Licenses by Name | Open Source Initiative</a>. If this is the case, additionally add the license filename to:</p>
7649<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7661<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7650<li class="listitem"><p>DEFAULT_ACCEPTABLE_LICENSES in <code class="filename">pkgsrc/mk/license.mk</code></p></li> 7662<li class="listitem"><p>DEFAULT_ACCEPTABLE_LICENSES in <code class="filename">pkgsrc/mk/license.mk</code></p></li>
7651<li class="listitem"><p>default_acceptable_licenses in <code class="filename">pkgsrc/pkgtools/pkg_install/files/lib/license.c</code></p></li> 7663<li class="listitem"><p>default_acceptable_licenses in <code class="filename">pkgsrc/pkgtools/pkg_install/files/lib/license.c</code></p></li>
7652<li class="listitem"><p>the ACCEPTABLE_LICENSES list in <code class="filename">pkgsrc/doc/guide/files/fixes.xml</code></p></li> 7664<li class="listitem"><p>the ACCEPTABLE_LICENSES list in <code class="filename">pkgsrc/doc/guide/files/fixes.xml</code></p></li>
7653</ul></div> 7665</ul></div>
7654<p>with the proper syntax as demonstrated in those files, respectively.</p> 7666<p>with the proper syntax as demonstrated in those files, respectively.</p>
7655</li> 7667</li>
7656<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> 7668<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>
7657</ol></div> 7669</ol></div>
7658<p>When the license changes (in a way other than formatting), 7670<p>When the license changes (in a way other than formatting),
7659 please make sure that the new license has a different name (e.g., 7671 please make sure that the new license has a different name (e.g.,
7660 append the version number if it exists, or the date). Just 7672 append the version number if it exists, or the date). Just
7661 because a user told pkgsrc to build programs under a previous 7673 because a user told pkgsrc to build programs under a previous
7662 version of a license does not mean that pkgsrc should build 7674 version of a license does not mean that pkgsrc should build
7663 programs under the new licenses. The higher-level point is that 7675 programs under the new licenses. The higher-level point is that
7664 pkgsrc does not evaluate licenses for reasonableness; the only 7676 pkgsrc does not evaluate licenses for reasonableness; the only
7665 test is a mechanistic test of whether a particular text has been 7677 test is a mechanistic test of whether a particular text has been
7666 approved by either of two bodies.</p> 7678 approved by either of two bodies.</p>
7667<p>The use of <code class="varname">LICENSE=shareware</code>, 7679<p>The use of <code class="varname">LICENSE=shareware</code>,
7668 <code class="varname">LICENSE=no-commercial-use</code>, and similar language 7680 <code class="varname">LICENSE=no-commercial-use</code>, and similar language
7669 is deprecated because it does not crisply refer to a particular 7681 is deprecated because it does not crisply refer to a particular
7670 license text. Another problem with such usage is that it does not 7682 license text. Another problem with such usage is that it does not
7671 enable a user to tell pkgsrc to proceed for a single package 7683 enable a user to tell pkgsrc to proceed for a single package
7672 without also telling pkgsrc to proceed for all packages with that 7684 without also telling pkgsrc to proceed for all packages with that
7673 tag.</p> 7685 tag.</p>
7674</div> 7686</div>
7675<div class="sect2"> 7687<div class="sect2">
7676<div class="titlepage"><div><div><h3 class="title"> 7688<div class="titlepage"><div><div><h3 class="title">
7677<a name="restricted-packages"></a>19.1.5. Restricted packages</h3></div></div></div> 7689<a name="restricted-packages"></a>19.1.5. Restricted packages</h3></div></div></div>
7678<p>Some licenses restrict how software may be re-distributed. 7690<p>Some licenses restrict how software may be re-distributed.
7679 Because a license tag is required unless the package is Free or 7691 Because a license tag is required unless the package is Free or
7680 Open Source, all packages with restrictions should have license 7692 Open Source, all packages with restrictions should have license
7681 tags. By declaring the restrictions, package tools can 7693 tags. By declaring the restrictions, package tools can
7682 automatically refrain from e.g. placing binary packages on FTP 7694 automatically refrain from e.g. placing binary packages on FTP
7683 sites.</p> 7695 sites.</p>
7684<p>There are four restrictions that may be encoded, which are 7696<p>There are four restrictions that may be encoded, which are
7685 the cross product of sources (distfiles) and binaries not being 7697 the cross product of sources (distfiles) and binaries not being
7686 placed on FTP sites and CD-ROMs. Because this is rarely the exact 7698 placed on FTP sites and CD-ROMs. Because this is rarely the exact
7687 language in any license, and because non-Free licenses tend to be 7699 language in any license, and because non-Free licenses tend to be
7688 different from each other, pkgsrc adopts a definition of FTP and 7700 different from each other, pkgsrc adopts a definition of FTP and
7689 CD-ROM. Pkgsrc uses "FTP" to mean that the source or binary file 7701 CD-ROM. Pkgsrc uses "FTP" to mean that the source or binary file
7690 should not be made available over the Internet at no charge. 7702 should not be made available over the Internet at no charge.
7691 Pkgsrc uses "CD-ROM" to mean that the source or binary may not be 7703 Pkgsrc uses "CD-ROM" to mean that the source or binary may not be
7692 made available on some kind of media, together with other source 7704 made available on some kind of media, together with other source
7693 and binary packages, and which is sold for a distribution charge. 7705 and binary packages, and which is sold for a distribution charge.
7694 </p> 7706 </p>
7695<p>In order to encode these restrictions, the package system 7707<p>In order to encode these restrictions, the package system
7696 defines five make variables that can be set to note these 7708 defines five make variables that can be set to note these
7697 restrictions:</p> 7709 restrictions:</p>
7698<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7710<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7699<li class="listitem"> 7711<li class="listitem">
7700<p><code class="varname">RESTRICTED</code></p> 7712<p><code class="varname">RESTRICTED</code></p>
7701<p>This variable should be set whenever a restriction 7713<p>This variable should be set whenever a restriction
7702 exists (regardless of its kind). Set this variable to a 7714 exists (regardless of its kind). Set this variable to a
7703 string containing the reason for the restriction. It should 7715 string containing the reason for the restriction. It should
7704 be understood that those wanting to understand the restriction 7716 be understood that those wanting to understand the restriction
7705 will have to read the license, and perhaps seek advice of 7717 will have to read the license, and perhaps seek advice of
7706 counsel.</p> 7718 counsel.</p>
7707</li> 7719</li>
7708<li class="listitem"> 7720<li class="listitem">
7709<p><code class="varname">NO_BIN_ON_CDROM</code></p> 7721<p><code class="varname">NO_BIN_ON_CDROM</code></p>
7710<p>Binaries may not be placed on CD-ROM containing other 7722<p>Binaries may not be placed on CD-ROM containing other
7711 binary packages, for which a distribution charge may be made. 7723 binary packages, for which a distribution charge may be made.
7712 In this case, set this variable to 7724 In this case, set this variable to
7713 <code class="varname">${RESTRICTED}</code>.</p> 7725 <code class="varname">${RESTRICTED}</code>.</p>
7714</li> 7726</li>
7715<li class="listitem"> 7727<li class="listitem">
7716<p><code class="varname">NO_BIN_ON_FTP</code></p> 7728<p><code class="varname">NO_BIN_ON_FTP</code></p>
7717<p>Binaries may not made available on the Internet without 7729<p>Binaries may not made available on the Internet without
7718 charge. In this case, set this variable to 7730 charge. In this case, set this variable to
7719 <code class="varname">${RESTRICTED}</code>. If this variable is set, 7731 <code class="varname">${RESTRICTED}</code>. If this variable is set,
7720 binary packages will not be included on ftp.NetBSD.org.</p> 7732 binary packages will not be included on ftp.NetBSD.org.</p>
7721</li> 7733</li>
7722<li class="listitem"> 7734<li class="listitem">
7723<p><code class="varname">NO_SRC_ON_CDROM</code></p> 7735<p><code class="varname">NO_SRC_ON_CDROM</code></p>
7724<p>Distfiles may not be placed on CD-ROM, together with 7736<p>Distfiles may not be placed on CD-ROM, together with
7725 other distfiles, for which a fee may be charged. In this 7737 other distfiles, for which a fee may be charged. In this
7726 case, set this variable to <code class="varname">${RESTRICTED}</code>. 7738 case, set this variable to <code class="varname">${RESTRICTED}</code>.
7727 </p> 7739 </p>
7728</li> 7740</li>
7729<li class="listitem"> 7741<li class="listitem">
7730<p><code class="varname">NO_SRC_ON_FTP</code></p> 7742<p><code class="varname">NO_SRC_ON_FTP</code></p>
7731<p>Distfiles may not made available via FTP at no charge. 7743<p>Distfiles may not made available via FTP at no charge.
7732 In this case, set this variable to 7744 In this case, set this variable to
7733 <code class="varname">${RESTRICTED}</code>. If this variable is set, 7745 <code class="varname">${RESTRICTED}</code>. If this variable is set,
7734 the distfile(s) will not be mirrored on ftp.NetBSD.org.</p> 7746 the distfile(s) will not be mirrored on ftp.NetBSD.org.</p>
7735</li> 7747</li>
7736</ul></div> 7748</ul></div>
7737<p>Please note that packages will to be removed from pkgsrc 7749<p>Please note that packages will to be removed from pkgsrc
7738 when the distfiles are not distributable and cannot be obtained 7750 when the distfiles are not distributable and cannot be obtained
7739 for a period of one full quarter branch. Packages with manual / 7751 for a period of one full quarter branch. Packages with manual /
7740 interactive fetch must have a maintainer and it is his/her 7752 interactive fetch must have a maintainer and it is his/her
7741 responsibility to ensure this.</p> 7753 responsibility to ensure this.</p>
7742</div> 7754</div>
7743<div class="sect2"> 7755<div class="sect2">
7744<div class="titlepage"><div><div><h3 class="title"> 7756<div class="titlepage"><div><div><h3 class="title">
7745<a name="dependencies"></a>19.1.6. Handling dependencies</h3></div></div></div> 7757<a name="dependencies"></a>19.1.6. Handling dependencies</h3></div></div></div>
7746<p>Your package may depend on some other package being present 7758<p>Your package may depend on some other package being present
7747 - and there are various ways of expressing this dependency. 7759 - and there are various ways of expressing this dependency.
7748 pkgsrc supports the <code class="varname">BUILD_DEPENDS</code> and 7760 pkgsrc supports the <code class="varname">BUILD_DEPENDS</code> and
7749 <code class="varname">DEPENDS</code> definitions, the 7761 <code class="varname">DEPENDS</code> definitions, the
7750 <code class="varname">USE_TOOLS</code> definition, as well as dependencies 7762 <code class="varname">USE_TOOLS</code> definition, as well as dependencies
7751 via <code class="filename">buildlink3.mk</code>, which is the preferred way 7763 via <code class="filename">buildlink3.mk</code>, which is the preferred way
7752 to handle dependencies, and which uses the variables named above. 7764 to handle dependencies, and which uses the variables named above.
7753 See <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a> for more information.</p> 7765 See <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a> for more information.</p>
7754<p>The basic difference between the two variables is as 7766<p>The basic difference between the two variables is as
7755 follows: The <code class="varname">DEPENDS</code> definition registers 7767 follows: The <code class="varname">DEPENDS</code> definition registers
7756 that pre-requisite in the binary package so it will be pulled in 7768 that pre-requisite in the binary package so it will be pulled in
7757 when the binary package is later installed, whilst the 7769 when the binary package is later installed, whilst the
7758 <code class="varname">BUILD_DEPENDS</code> definition does not, marking a 7770 <code class="varname">BUILD_DEPENDS</code> definition does not, marking a
7759 dependency that is only needed for building the package.</p> 7771 dependency that is only needed for building the package.</p>
7760<p>This means that if you only need a package present whilst 7772<p>This means that if you only need a package present whilst
7761 you are building, it should be noted as a 7773 you are building, it should be noted as a
7762 <code class="varname">BUILD_DEPENDS</code>.</p> 7774 <code class="varname">BUILD_DEPENDS</code>.</p>
7763<p>The format for a <code class="varname">BUILD_DEPENDS</code> and a 7775<p>The format for a <code class="varname">BUILD_DEPENDS</code> and a
7764 <code class="varname">DEPENDS</code> definition is:</p> 7776 <code class="varname">DEPENDS</code> definition is:</p>
7765<pre class="programlisting"> 7777<pre class="programlisting">
7766&lt;pre-req-package-name&gt;:../../&lt;category&gt;/&lt;pre-req-package&gt; 7778&lt;pre-req-package-name&gt;:../../&lt;category&gt;/&lt;pre-req-package&gt;
7767 </pre> 7779 </pre>
7768<p>Please note that the <span class="quote">&#8220;<span class="quote">pre-req-package-name</span>&#8221;</span> 7780<p>Please note that the <span class="quote">&#8220;<span class="quote">pre-req-package-name</span>&#8221;</span>
7769 may include any of the wildcard version numbers recognized by 7781 may include any of the wildcard version numbers recognized by
7770 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_info+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_info</span>(1)</span></a>.</p> 7782 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_info+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_info</span>(1)</span></a>.</p>
7771<div class="orderedlist"><ol class="orderedlist" type="1"> 7783<div class="orderedlist"><ol class="orderedlist" type="1">
7772<li class="listitem"> 7784<li class="listitem">
7773<p>If your package needs another package's binaries or 7785<p>If your package needs another package's binaries or
7774 libraries to build and run, and if that package has a 7786 libraries to build and run, and if that package has a
7775 <code class="filename">buildlink3.mk</code> file available, use it:</p> 7787 <code class="filename">buildlink3.mk</code> file available, use it:</p>
7776<pre class="programlisting"> 7788<pre class="programlisting">
7777.include "../../graphics/jpeg/buildlink3.mk" 7789.include "../../graphics/jpeg/buildlink3.mk"
7778 </pre> 7790 </pre>
7779</li> 7791</li>
7780<li class="listitem"> 7792<li class="listitem">
7781<p>If your package needs another package's binaries or 7793<p>If your package needs another package's binaries or
7782 libraries only for building, and if that package has a 7794 libraries only for building, and if that package has a
7783 <code class="filename">buildlink3.mk</code> file available, use it:</p> 7795 <code class="filename">buildlink3.mk</code> file available, use it:</p>
7784<pre class="programlisting"> 7796<pre class="programlisting">
7785.include "../../graphics/jpeg/buildlink3.mk" 7797.include "../../graphics/jpeg/buildlink3.mk"
7786 </pre> 7798 </pre>
7787<p>but set 7799<p>but set
7788 <code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>jpeg</code></em>?=build</code> 7800 <code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>jpeg</code></em>?=build</code>
7789 to make it a build dependency only. This case is rather 7801 to make it a build dependency only. This case is rather
7790 rare.</p> 7802 rare.</p>
7791</li> 7803</li>
7792<li class="listitem"> 7804<li class="listitem">
7793<p>If your package needs binaries from another package to build, 7805<p>If your package needs binaries from another package to build,
7794 use the <code class="varname">BUILD_DEPENDS</code> definition:</p> 7806 use the <code class="varname">BUILD_DEPENDS</code> definition:</p>
7795<pre class="programlisting"> 7807<pre class="programlisting">
7796BUILD_DEPENDS+= scons-[0-9]*:../../devel/scons 7808BUILD_DEPENDS+= scons-[0-9]*:../../devel/scons
7797 </pre> 7809 </pre>
7798</li> 7810</li>
7799<li class="listitem"><p>If your package needs a library with which to link and 7811<li class="listitem"><p>If your package needs a library with which to link and
7800 there is no <code class="filename">buildlink3.mk</code> file 7812 there is no <code class="filename">buildlink3.mk</code> file
7801 available, create one. Using 7813 available, create one. Using
7802 <code class="varname">DEPENDS</code> won't be sufficient because the 7814 <code class="varname">DEPENDS</code> won't be sufficient because the
7803 include files and libraries will be hidden from the compiler.</p></li> 7815 include files and libraries will be hidden from the compiler.</p></li>
7804<li class="listitem"> 7816<li class="listitem">
7805<p>If your package needs some executable to be able to run 7817<p>If your package needs some executable to be able to run
7806 correctly and if there's no 7818 correctly and if there's no
7807 <code class="filename">buildlink3.mk</code> file, this is specified 7819 <code class="filename">buildlink3.mk</code> file, this is specified
7808 using the <code class="varname">DEPENDS</code> variable. The 7820 using the <code class="varname">DEPENDS</code> variable. The
7809 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/lyx/README.html" target="_top"><code class="filename">print/lyx</code></a> package needs to 7821 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/lyx/README.html" target="_top"><code class="filename">print/lyx</code></a> package needs to
7810 be able to execute the latex binary from the teTeX package 7822 be able to execute the latex binary from the teTeX package
7811 when it runs, and that is specified:</p> 7823 when it runs, and that is specified:</p>
7812<pre class="programlisting"> 7824<pre class="programlisting">
7813DEPENDS+= teTeX-[0-9]*:../../print/teTeX 7825DEPENDS+= teTeX-[0-9]*:../../print/teTeX
7814 </pre> 7826 </pre>
7815</li> 7827</li>
7816<li class="listitem"> 7828<li class="listitem">
7817<p>You can use wildcards in package dependencies. Note that 7829<p>You can use wildcards in package dependencies. Note that
7818 such wildcard dependencies are retained when creating binary 7830 such wildcard dependencies are retained when creating binary
7819 packages. The dependency is checked when installing the binary 7831 packages. The dependency is checked when installing the binary
7820 package and any package which matches the pattern will be 7832 package and any package which matches the pattern will be
7821 used. Wildcard dependencies should be used with care.</p> 7833 used. Wildcard dependencies should be used with care.</p>
7822<p>The <span class="quote">&#8220;<span class="quote">-[0-9]*</span>&#8221;</span> should be used instead of 7834<p>The <span class="quote">&#8220;<span class="quote">-[0-9]*</span>&#8221;</span> should be used instead of
7823 <span class="quote">&#8220;<span class="quote">-*</span>&#8221;</span> to avoid potentially ambiguous matches 7835 <span class="quote">&#8220;<span class="quote">-*</span>&#8221;</span> to avoid potentially ambiguous matches
7824 such as <span class="quote">&#8220;<span class="quote">tk-postgresql</span>&#8221;</span> matching a 7836 such as <span class="quote">&#8220;<span class="quote">tk-postgresql</span>&#8221;</span> matching a
7825 <span class="quote">&#8220;<span class="quote">tk-*</span>&#8221;</span> <code class="varname">DEPENDS</code>.</p> 7837 <span class="quote">&#8220;<span class="quote">tk-*</span>&#8221;</span> <code class="varname">DEPENDS</code>.</p>
7826<p>Wildcards can also be used to specify that a package 7838<p>Wildcards can also be used to specify that a package
7827 will only build against a certain minimum version of a 7839 will only build against a certain minimum version of a
7828 pre-requisite:</p> 7840 pre-requisite:</p>
7829<pre class="programlisting"> 7841<pre class="programlisting">
7830DEPENDS+= ImageMagick&gt;=6.0:../../graphics/ImageMagick 7842DEPENDS+= ImageMagick&gt;=6.0:../../graphics/ImageMagick
7831 </pre> 7843 </pre>
7832<p>This means that the package will build using version 6.0 7844<p>This means that the package will build using version 6.0
7833 of ImageMagick or newer. Such a dependency may be warranted 7845 of ImageMagick or newer. Such a dependency may be warranted
7834 if, for example, the command line options of an executable 7846 if, for example, the command line options of an executable
7835 have changed.</p> 7847 have changed.</p>
7836<p>If you need to depend on minimum versions of libraries, 7848<p>If you need to depend on minimum versions of libraries,
7837 see the buildlink section of the pkgsrc guide.</p> 7849 see the buildlink section of the pkgsrc guide.</p>
7838<p>For security fixes, please update the package 7850<p>For security fixes, please update the package
7839 vulnerabilities file. See <a class="xref" href="#security-handling" title="19.1.10. Handling packages with security problems">Section 19.1.10, &#8220;Handling packages with security problems&#8221;</a> for more 7851 vulnerabilities file. See <a class="xref" href="#security-handling" title="19.1.10. Handling packages with security problems">Section 19.1.10, &#8220;Handling packages with security problems&#8221;</a> for more
7840 information.</p> 7852 information.</p>
7841</li> 7853</li>
7842<li class="listitem"> 7854<li class="listitem">
7843<p>If the package depends on either one of two (or more) 7855<p>If the package depends on either one of two (or more)
7844 packages, specify the <span class="quote">&#8220;<span class="quote">pre-req-package-name</span>&#8221;</span> as a 7856 packages, specify the <span class="quote">&#8220;<span class="quote">pre-req-package-name</span>&#8221;</span> as a
7845 comma-separated list between curly braces.</p> 7857 comma-separated list between curly braces.</p>
7846<p>As an example, take a package that depends on the Perl 7858<p>As an example, take a package that depends on the Perl
7847 <span class="quote">&#8220;<span class="quote">version</span>&#8221;</span> module, which has been part of Perl 7859 <span class="quote">&#8220;<span class="quote">version</span>&#8221;</span> module, which has been part of Perl
7848 itself since version 5.10.0. This either/or dependency is 7860 itself since version 5.10.0. This either/or dependency is
7849 expressed as:</p> 7861 expressed as:</p>
7850<pre class="programlisting"> 7862<pre class="programlisting">
7851DEPENDS+= {perl&gt;=5.10.0,p5-version-[0-9]*}:../../devel/p5-version 7863DEPENDS+= {perl&gt;=5.10.0,p5-version-[0-9]*}:../../devel/p5-version
7852 </pre> 7864 </pre>
7853</li> 7865</li>
7854</ol></div> 7866</ol></div>
7855<p>If your package needs files from another package to build, 7867<p>If your package needs files from another package to build,
7856 add the relevant distribution files to 7868 add the relevant distribution files to
7857 <code class="varname">DISTFILES</code>, so they will be extracted 7869 <code class="varname">DISTFILES</code>, so they will be extracted
7858 automatically. See the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/ghostscript/README.html" target="_top"><code class="filename">print/ghostscript</code></a> package for an example. 7870 automatically. See the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/ghostscript/README.html" target="_top"><code class="filename">print/ghostscript</code></a> package for an example.
7859 (It relies on the jpeg sources being present in source form 7871 (It relies on the jpeg sources being present in source form
7860 during the build.)</p> 7872 during the build.)</p>
7861</div> 7873</div>
7862<div class="sect2"> 7874<div class="sect2">
7863<div class="titlepage"><div><div><h3 class="title"> 7875<div class="titlepage"><div><div><h3 class="title">
7864<a name="conflicts"></a>19.1.7. Handling conflicts with other packages</h3></div></div></div> 7876<a name="conflicts"></a>19.1.7. Handling conflicts with other packages</h3></div></div></div>
7865<p>Your package may conflict with other packages a user might 7877<p>Your package may conflict with other packages a user might
7866 already have installed on his system, e.g. if your package 7878 already have installed on his system, e.g. if your package
7867 installs the same set of files as another package in the pkgsrc 7879 installs the same set of files as another package in the pkgsrc
7868 tree or has the same <code class="varname">PKGNAME</code>.</p> 7880 tree or has the same <code class="varname">PKGNAME</code>.</p>
7869<p>These cases are handled automatically by the packaging tools 7881<p>These cases are handled automatically by the packaging tools
7870 at package installation time and do not need to be handled 7882 at package installation time and do not need to be handled
7871 manually.</p> 7883 manually.</p>
7872<p>In case the conflicts can not be recognized automatically 7884<p>In case the conflicts can not be recognized automatically
7873 (e.g., packages using the same config file location but no other 7885 (e.g., packages using the same config file location but no other
7874 shared files), you can set <code class="varname">CONFLICTS</code> to a 7886 shared files), you can set <code class="varname">CONFLICTS</code> to a
7875 space-separated list of packages (including version string) your 7887 space-separated list of packages (including version string) your
7876 package conflicts with.</p> 7888 package conflicts with.</p>
7877<p>For example, if both <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/foo/bar/README.html" target="_top"><code class="filename">foo/bar</code></a> 7889<p>For example, if both <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/foo/bar/README.html" target="_top"><code class="filename">foo/bar</code></a>
7878 and <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/foo/baz/README.html" target="_top"><code class="filename">foo/baz</code></a> 7890 and <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/foo/baz/README.html" target="_top"><code class="filename">foo/baz</code></a>
7879 use the same config file, you would set in 7891 use the same config file, you would set in
7880 <code class="filename">foo/bar/Makefile</code>:</p> 7892 <code class="filename">foo/bar/Makefile</code>:</p>
7881<pre class="programlisting"> 7893<pre class="programlisting">
7882CONFLICTS= baz-[0-9]* 7894CONFLICTS= baz-[0-9]*
7883 </pre> 7895 </pre>
7884<p>and in <code class="filename">pkgsrc/foo/baz/Makefile</code>:</p> 7896<p>and in <code class="filename">pkgsrc/foo/baz/Makefile</code>:</p>
7885<pre class="programlisting"> 7897<pre class="programlisting">
7886CONFLICTS= bar-[0-9]* 7898CONFLICTS= bar-[0-9]*
7887 </pre> 7899 </pre>
7888</div> 7900</div>
7889<div class="sect2"> 7901<div class="sect2">
7890<div class="titlepage"><div><div><h3 class="title"> 7902<div class="titlepage"><div><div><h3 class="title">
7891<a name="not-building-packages"></a>19.1.8. Packages that cannot or should not be built</h3></div></div></div> 7903<a name="not-building-packages"></a>19.1.8. Packages that cannot or should not be built</h3></div></div></div>
7892<p>There are several reasons why a package might be 7904<p>There are several reasons why a package might be
7893 instructed to not build under certain circumstances. If the 7905 instructed to not build under certain circumstances. If the
7894 package builds and runs on most platforms, the exceptions 7906 package builds and runs on most platforms, the exceptions
7895 should be noted with <code class="varname">NOT_FOR_PLATFORM</code>. If 7907 should be noted with <code class="varname">BROKEN_ON_PLATFORM</code>. If
7896 the package builds and runs on a small handful of platforms, 7908 the package builds and runs on a small handful of platforms,
7897 set <code class="varname">ONLY_FOR_PLATFORM</code> instead. 7909 set <code class="varname">BROKEN_EXCEPT_ON_PLATFORM</code> instead.
 7910 Both <code class="varname">BROKEN_ON_PLATFORM</code> and
 7911 <code class="varname">BROKEN_EXCEPT_ON_PLATFORM</code> are OS triples
 7912 (OS-version-platform) that can use glob-style
 7913 wildcards.</p>
 7914<p>If a package is not appropriate for some platforms (as
 7915 oopposed to merely broken), a different set of variables should be
 7916 used as this affects failure reporting and statistics.
 7917 If the package is appropriate for most platforms, the exceptions
 7918 should be noted with <code class="varname">NOT_FOR_PLATFORM</code>. If
 7919 the package is appropriate for only a small handful of platforms
 7920 (often exactly one), set <code class="varname">ONLY_FOR_PLATFORM</code> instead.
7898 Both <code class="varname">ONLY_FOR_PLATFORM</code> and 7921 Both <code class="varname">ONLY_FOR_PLATFORM</code> and
7899 <code class="varname">NOT_FOR_PLATFORM</code> are OS triples 7922 <code class="varname">NOT_FOR_PLATFORM</code> are OS triples
7900 (OS-version-platform) that can use glob-style 7923 (OS-version-platform) that can use glob-style
7901 wildcards.</p> 7924 wildcards.</p>
7902<p>Some packages are tightly bound to a specific version of an 7925<p>Some packages are tightly bound to a specific version of an
7903 operating system, e.g. LKMs or <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/sysutils/lsof/README.html" target="_top"><code class="filename">sysutils/lsof</code></a>. Such binary packages are not 7926 operating system, e.g. LKMs or <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/sysutils/lsof/README.html" target="_top"><code class="filename">sysutils/lsof</code></a>. Such binary packages are not
7904 backwards compatible with other versions of the OS, and should be 7927 backwards compatible with other versions of the OS, and should be
7905 uploaded to a version specific directory on the FTP server. Mark 7928 uploaded to a version specific directory on the FTP server. Mark
7906 these packages by setting <code class="varname">OSVERSION_SPECIFIC</code> to 7929 these packages by setting <code class="varname">OSVERSION_SPECIFIC</code> to
7907 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This variable is not currently used by any of 7930 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This variable is not currently used by any of
7908 the package system internals, but may be used in the 7931 the package system internals, but may be used in the
7909 future.</p> 7932 future.</p>
7910<p>If the package should be skipped (for example, because it 7933<p>If the package should be skipped (for example, because it
7911 provides functionality already provided by the system), set 7934 provides functionality already provided by the system), set
7912 <code class="varname">PKG_SKIP_REASON</code> to a descriptive message. If 7935 <code class="varname">PKG_SKIP_REASON</code> to a descriptive message. If
7913 the package should fail because some preconditions are not met, 7936 the package should fail because some preconditions are not met,
7914 set <code class="varname">PKG_FAIL_REASON</code> to a descriptive 7937 set <code class="varname">PKG_FAIL_REASON</code> to a descriptive
7915 message.</p> 7938 message.</p>
7916</div> 7939</div>
7917<div class="sect2"> 7940<div class="sect2">
7918<div class="titlepage"><div><div><h3 class="title"> 7941<div class="titlepage"><div><div><h3 class="title">
7919<a name="undeletable-packages"></a>19.1.9. Packages which should not be deleted, once installed</h3></div></div></div> 7942<a name="undeletable-packages"></a>19.1.9. Packages which should not be deleted, once installed</h3></div></div></div>
7920<p>To ensure that a package may not be deleted, once it has been 7943<p>To ensure that a package may not be deleted, once it has been
7921 installed, the <code class="varname">PKG_PRESERVE</code> definition should 7944 installed, the <code class="varname">PKG_PRESERVE</code> definition should
7922 be set in the package Makefile. This will be carried into any 7945 be set in the package Makefile. This will be carried into any
7923 binary package that is made from this pkgsrc entry. A 7946 binary package that is made from this pkgsrc entry. A
7924 <span class="quote">&#8220;<span class="quote">preserved</span>&#8221;</span> package will 7947 <span class="quote">&#8220;<span class="quote">preserved</span>&#8221;</span> package will
7925 not be deleted using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> unless the 7948 not be deleted using <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_delete+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> unless the
7926 <span class="quote">&#8220;<span class="quote">-f</span>&#8221;</span> option is used.</p> 7949 <span class="quote">&#8220;<span class="quote">-f</span>&#8221;</span> option is used.</p>
7927</div> 7950</div>
7928<div class="sect2"> 7951<div class="sect2">
7929<div class="titlepage"><div><div><h3 class="title"> 7952<div class="titlepage"><div><div><h3 class="title">
7930<a name="security-handling"></a>19.1.10. Handling packages with security problems</h3></div></div></div> 7953<a name="security-handling"></a>19.1.10. Handling packages with security problems</h3></div></div></div>
7931<p>When a vulnerability is found, this should be noted in 7954<p>When a vulnerability is found, this should be noted in
7932 <code class="filename">localsrc/security/advisories/pkg-vulnerabilities</code>, 7955 <code class="filename">localsrc/security/advisories/pkg-vulnerabilities</code>,
7933 and after committing that file, ask pkgsrc-security@NetBSD.org to 7956 and after committing that file, ask pkgsrc-security@NetBSD.org to
7934 update the file on ftp.NetBSD.org.</p> 7957 update the file on ftp.NetBSD.org.</p>
7935<p>After fixing the vulnerability by a patch, its 7958<p>After fixing the vulnerability by a patch, its
7936 <code class="varname">PKGREVISION</code> should be increased (this is of 7959 <code class="varname">PKGREVISION</code> should be increased (this is of
7937 course not necessary if the problem is fixed by using a newer 7960 course not necessary if the problem is fixed by using a newer
7938 release of the software), and the pattern in the 7961 release of the software), and the pattern in the
7939 pkg-vulnerabilities file must be updated.</p> 7962 pkg-vulnerabilities file must be updated.</p>
7940<p>Also, if the fix should be applied to the stable pkgsrc 7963<p>Also, if the fix should be applied to the stable pkgsrc
7941 branch, be sure to submit a pullup request!</p> 7964 branch, be sure to submit a pullup request!</p>
7942<p>Binary packages already on ftp.NetBSD.org will be handled 7965<p>Binary packages already on ftp.NetBSD.org will be handled
7943 semi-automatically by a weekly cron job.</p> 7966 semi-automatically by a weekly cron job.</p>
7944</div> 7967</div>
7945<div class="sect2"> 7968<div class="sect2">
7946<div class="titlepage"><div><div><h3 class="title"> 7969<div class="titlepage"><div><div><h3 class="title">
7947<a name="bumping-pkgrevision"></a>19.1.11. How to handle incrementing versions when fixing an existing package</h3></div></div></div> 7970<a name="bumping-pkgrevision"></a>19.1.11. How to handle incrementing versions when fixing an existing package</h3></div></div></div>
7948<p>When making fixes to an existing package it can be useful 7971<p>When making fixes to an existing package it can be useful
7949 to change the version number in <code class="varname">PKGNAME</code>. To 7972 to change the version number in <code class="varname">PKGNAME</code>. To
7950 avoid conflicting with future versions by the original author, a 7973 avoid conflicting with future versions by the original author, a
7951 <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 7974 <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
7952 on package versions by setting <code class="varname">PKGREVISION=1</code> 7975 on package versions by setting <code class="varname">PKGREVISION=1</code>
7953 (2, ...). The <span class="quote">&#8220;<span class="quote">nb</span>&#8221;</span> is treated like a 7976 (2, ...). The <span class="quote">&#8220;<span class="quote">nb</span>&#8221;</span> is treated like a
7954 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> by the package tools. e.g.</p> 7977 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> by the package tools. e.g.</p>
7955<pre class="programlisting"> 7978<pre class="programlisting">
7956DISTNAME= foo-17.42 7979DISTNAME= foo-17.42
7957PKGREVISION= 9 7980PKGREVISION= 9
7958 </pre> 7981 </pre>
7959<p>will result in a <code class="varname">PKGNAME</code> of 7982<p>will result in a <code class="varname">PKGNAME</code> of
7960 <span class="quote">&#8220;<span class="quote">foo-17.42nb9</span>&#8221;</span>. If you want to use the original 7983 <span class="quote">&#8220;<span class="quote">foo-17.42nb9</span>&#8221;</span>. If you want to use the original
7961 value of <code class="varname">PKGNAME</code> without the <span class="quote">&#8220;<span class="quote">nbX</span>&#8221;</span> 7984 value of <code class="varname">PKGNAME</code> without the <span class="quote">&#8220;<span class="quote">nbX</span>&#8221;</span>
7962 suffix, e.g. for setting <code class="varname">DIST_SUBDIR</code>, use 7985 suffix, e.g. for setting <code class="varname">DIST_SUBDIR</code>, use
7963 <code class="varname">PKGNAME_NOREV</code>.</p> 7986 <code class="varname">PKGNAME_NOREV</code>.</p>
7964<p>When a new release of the package is released, the 7987<p>When a new release of the package is released, the
7965 <code class="varname">PKGREVISION</code> should be removed, e.g. on a new 7988 <code class="varname">PKGREVISION</code> should be removed, e.g. on a new
7966 minor release of the above package, things should be like:</p> 7989 minor release of the above package, things should be like:</p>
7967<pre class="programlisting"> 7990<pre class="programlisting">
7968DISTNAME= foo-17.43 7991DISTNAME= foo-17.43
7969 </pre> 7992 </pre>
7970<p><code class="varname">PKGREVISION</code> should be incremented for any 7993<p><code class="varname">PKGREVISION</code> should be incremented for any
7971 non-trivial change in the resulting binary package. Without a 7994 non-trivial change in the resulting binary package. Without a
7972 <code class="varname">PKGREVISION</code> bump, someone with the previous 7995 <code class="varname">PKGREVISION</code> bump, someone with the previous
7973 version installed has no way of knowing that their package is out 7996 version installed has no way of knowing that their package is out
7974 of date. Thus, changes without increasing 7997 of date. Thus, changes without increasing
7975 <code class="varname">PKGREVISION</code> are essentially labeled "this is so 7998 <code class="varname">PKGREVISION</code> are essentially labeled "this is so
7976 trivial that no reasonable person would want to upgrade", and this 7999 trivial that no reasonable person would want to upgrade", and this
7977 is the rough test for when increasing 8000 is the rough test for when increasing
7978 <code class="varname">PKGREVISION</code> is appropriate. Examples of 8001 <code class="varname">PKGREVISION</code> is appropriate. Examples of
7979 changes that do not merit increasing 8002 changes that do not merit increasing
7980 <code class="varname">PKGREVISION</code> are:</p> 8003 <code class="varname">PKGREVISION</code> are:</p>
7981<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8004<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7982<li class="listitem"><p>Changing <code class="varname">HOMEPAGE</code>, 8005<li class="listitem"><p>Changing <code class="varname">HOMEPAGE</code>,
7983 <code class="varname">MAINTAINER</code>, <code class="varname">OWNER</code>, 8006 <code class="varname">MAINTAINER</code>, <code class="varname">OWNER</code>,
7984 or comments in Makefile.</p></li> 8007 or comments in Makefile.</p></li>
7985<li class="listitem"><p> 8008<li class="listitem"><p>
7986 Changing build variables if the resulting binary package is the same.</p></li> 8009 Changing build variables if the resulting binary package is the same.</p></li>
7987<li class="listitem"><p> 8010<li class="listitem"><p>
7988 Changing <code class="filename">DESCR</code>.</p></li> 8011 Changing <code class="filename">DESCR</code>.</p></li>
7989<li class="listitem"><p> 8012<li class="listitem"><p>
7990 Adding <code class="varname">PKG_OPTIONS</code> if the default options don't change.</p></li> 8013 Adding <code class="varname">PKG_OPTIONS</code> if the default options don't change.</p></li>
7991</ul></div> 8014</ul></div>
7992<p>Examples of changes that do merit an increase to 8015<p>Examples of changes that do merit an increase to
7993 <code class="varname">PKGREVISION</code> include:</p> 8016 <code class="varname">PKGREVISION</code> include:</p>
7994<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8017<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7995<li class="listitem"><p> 8018<li class="listitem"><p>
7996 Security fixes</p></li> 8019 Security fixes</p></li>
7997<li class="listitem"><p> 8020<li class="listitem"><p>
7998 Changes or additions to a patch file</p></li> 8021 Changes or additions to a patch file</p></li>
7999<li class="listitem"><p> 8022<li class="listitem"><p>
8000 Changes to the <code class="filename">PLIST</code></p></li> 8023 Changes to the <code class="filename">PLIST</code></p></li>
8001<li class="listitem"><p>A dependency is changed or renamed.</p></li> 8024<li class="listitem"><p>A dependency is changed or renamed.</p></li>
8002</ul></div> 8025</ul></div>
8003<p>PKGREVISION must also be incremented when dependencies have ABI 8026<p>PKGREVISION must also be incremented when dependencies have ABI
8004 changes.</p> 8027 changes.</p>
8005</div> 8028</div>
8006<div class="sect2"> 8029<div class="sect2">
8007<div class="titlepage"><div><div><h3 class="title"> 8030<div class="titlepage"><div><div><h3 class="title">
8008<a name="fixes.subst"></a>19.1.12. Substituting variable text in the package files (the SUBST framework)</h3></div></div></div> 8031<a name="fixes.subst"></a>19.1.12. Substituting variable text in the package files (the SUBST framework)</h3></div></div></div>
8009<p>When you want to replace the same text in multiple files 8032<p>When you want to replace the same text in multiple files
8010 or when the replacement text varies, patches alone cannot help. 8033 or when the replacement text varies, patches alone cannot help.
8011 This is where the SUBST framework comes in. It provides an 8034 This is where the SUBST framework comes in. It provides an
8012 easy-to-use interface for replacing text in files. 8035 easy-to-use interface for replacing text in files.
8013 Example:</p> 8036 Example:</p>
8014<pre class="programlisting"> 8037<pre class="programlisting">
8015SUBST_CLASSES+= fix-paths 8038SUBST_CLASSES+= fix-paths
8016SUBST_STAGE.fix-paths= pre-configure 8039SUBST_STAGE.fix-paths= pre-configure
8017SUBST_MESSAGE.fix-paths= Fixing absolute paths. 8040SUBST_MESSAGE.fix-paths= Fixing absolute paths.
8018SUBST_FILES.fix-paths= src/*.c 8041SUBST_FILES.fix-paths= src/*.c
8019SUBST_FILES.fix-paths+= scripts/*.sh 8042SUBST_FILES.fix-paths+= scripts/*.sh
8020SUBST_SED.fix-paths= -e 's,"/usr/local,"${PREFIX},g' 8043SUBST_SED.fix-paths= -e 's,"/usr/local,"${PREFIX},g'
8021SUBST_SED.fix-paths+= -e 's,"/var/log,"${VARBASE}/log,g' 8044SUBST_SED.fix-paths+= -e 's,"/var/log,"${VARBASE}/log,g'
8022 </pre> 8045 </pre>
8023<p><code class="varname">SUBST_CLASSES</code> is a list of identifiers 8046<p><code class="varname">SUBST_CLASSES</code> is a list of identifiers
8024 that are used to identify the different SUBST blocks that are 8047 that are used to identify the different SUBST blocks that are
8025 defined. The SUBST framework is heavily used by pkgsrc, so it is 8048 defined. The SUBST framework is heavily used by pkgsrc, so it is
8026 important to always use the <code class="literal">+=</code> operator with 8049 important to always use the <code class="literal">+=</code> operator with
8027 this variable. Otherwise some substitutions may be 8050 this variable. Otherwise some substitutions may be
8028 skipped.</p> 8051 skipped.</p>
8029<p>The remaining variables of each SUBST block are 8052<p>The remaining variables of each SUBST block are
8030 parameterized with the identifier from the first line 8053 parameterized with the identifier from the first line
8031 (<code class="literal">fix-paths</code> in this case.) They can be seen as 8054 (<code class="literal">fix-paths</code> in this case.) They can be seen as
8032 parameters to a function call.</p> 8055 parameters to a function call.</p>
8033<p><code class="varname">SUBST_STAGE.*</code> specifies the stage at 8056<p><code class="varname">SUBST_STAGE.*</code> specifies the stage at
8034 which the replacement will take place. All combinations of 8057 which the replacement will take place. All combinations of
8035 <code class="literal">pre-</code>, <code class="literal">do-</code> and 8058 <code class="literal">pre-</code>, <code class="literal">do-</code> and
8036 <code class="literal">post-</code> together with a phase name are 8059 <code class="literal">post-</code> together with a phase name are
8037 possible, though only few are actually used. Most commonly used 8060 possible, though only few are actually used. Most commonly used
8038 are <code class="literal">post-patch</code> and 8061 are <code class="literal">post-patch</code> and
8039 <code class="literal">pre-configure</code>. Of these two, 8062 <code class="literal">pre-configure</code>. Of these two,
8040 <code class="literal">pre-configure</code> should be preferred because 8063 <code class="literal">pre-configure</code> should be preferred because
8041 then it is possible to run <span class="command"><strong>bmake patch</strong></span> and 8064 then it is possible to run <span class="command"><strong>bmake patch</strong></span> and
8042 have the state after applying the patches but before making any 8065 have the state after applying the patches but before making any
8043 other changes. This is especially useful when you are debugging 8066 other changes. This is especially useful when you are debugging
8044 a package in order to create new patches for it. Similarly, 8067 a package in order to create new patches for it. Similarly,
8045 <code class="literal">post-build</code> is preferred over 8068 <code class="literal">post-build</code> is preferred over
8046 <code class="literal">pre-install</code>, because the install phase should 8069 <code class="literal">pre-install</code>, because the install phase should
8047 generally be kept as simple as possible. When you use 8070 generally be kept as simple as possible. When you use
8048 <code class="literal">post-build</code>, you have the same files in the 8071 <code class="literal">post-build</code>, you have the same files in the
8049 working directory that will be installed later, so you can check 8072 working directory that will be installed later, so you can check
8050 if the substitution has succeeded.</p> 8073 if the substitution has succeeded.</p>
8051<p><code class="varname">SUBST_MESSAGE.*</code> is an optional text 8074<p><code class="varname">SUBST_MESSAGE.*</code> is an optional text
8052 that is printed just before the substitution is done.</p> 8075 that is printed just before the substitution is done.</p>
8053<p><code class="varname">SUBST_FILES.*</code> is the list of shell 8076<p><code class="varname">SUBST_FILES.*</code> is the list of shell
8054 globbing patterns that specifies the files in which the 8077 globbing patterns that specifies the files in which the
8055 substitution will take place. The patterns are interpreted 8078 substitution will take place. The patterns are interpreted
8056 relatively to the <code class="varname">WRKSRC</code> directory.</p> 8079 relatively to the <code class="varname">WRKSRC</code> directory.</p>
8057<p><code class="varname">SUBST_SED.*</code> is a list of arguments to 8080<p><code class="varname">SUBST_SED.*</code> is a list of arguments to
8058 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?sed+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">sed</span>(1)</span></a> that specify the actual substitution. Every sed 8081 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?sed+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">sed</span>(1)</span></a> that specify the actual substitution. Every sed
8059 command should be prefixed with <code class="literal">-e</code>, so that 8082 command should be prefixed with <code class="literal">-e</code>, so that
8060 all SUBST blocks look uniform.</p> 8083 all SUBST blocks look uniform.</p>
8061<p>There are some more variables, but they are so seldomly 8084<p>There are some more variables, but they are so seldomly
8062 used that they are only documented in the 8085 used that they are only documented in the
8063 <code class="filename">mk/subst.mk</code> file.</p> 8086 <code class="filename">mk/subst.mk</code> file.</p>
8064</div> 8087</div>
8065</div> 8088</div>
8066<div class="sect1"> 8089<div class="sect1">
8067<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8090<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8068<a name="fixes.fetch"></a>19.2. Fixing problems in the <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div> 8091<a name="fixes.fetch"></a>19.2. Fixing problems in the <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div>
8069<div class="sect2"> 8092<div class="sect2">
8070<div class="titlepage"><div><div><h3 class="title"> 8093<div class="titlepage"><div><div><h3 class="title">
8071<a name="no-plain-download"></a>19.2.1. Packages whose distfiles aren't available for plain downloading</h3></div></div></div> 8094<a name="no-plain-download"></a>19.2.1. Packages whose distfiles aren't available for plain downloading</h3></div></div></div>
8072<p>If you need to download from a dynamic URL you can set 8095<p>If you need to download from a dynamic URL you can set
8073 <code class="varname">DYNAMIC_MASTER_SITES</code> and a <span class="command"><strong>make 8096 <code class="varname">DYNAMIC_MASTER_SITES</code> and a <span class="command"><strong>make
8074 fetch</strong></span> will call <code class="filename">files/getsite.sh</code> 8097 fetch</strong></span> will call <code class="filename">files/getsite.sh</code>
8075 with the name of each file to download as an argument, expecting 8098 with the name of each file to download as an argument, expecting
8076 it to output the URL of the directory from which to download 8099 it to output the URL of the directory from which to download
8077 it. <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/graphics/ns-cult3d/README.html" target="_top"><code class="filename">graphics/ns-cult3d</code></a> is an 8100 it. <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/graphics/ns-cult3d/README.html" target="_top"><code class="filename">graphics/ns-cult3d</code></a> is an
8078 example of this usage.</p> 8101 example of this usage.</p>
8079<p>If the download can't be automated, because the user must 8102<p>If the download can't be automated, because the user must
8080 submit personal information to apply for a password, or must pay 8103 submit personal information to apply for a password, or must pay
8081 for the source, or whatever, you can set 8104 for the source, or whatever, you can set
8082 <code class="varname">FETCH_MESSAGE</code> to a list of lines that are 8105 <code class="varname">FETCH_MESSAGE</code> to a list of lines that are
8083 displayed to the user before aborting the build. Example:</p> 8106 displayed to the user before aborting the build. Example:</p>
8084<pre class="programlisting"> 8107<pre class="programlisting">
8085FETCH_MESSAGE= "Please download the files" 8108FETCH_MESSAGE= "Please download the files"
8086FETCH_MESSAGE+= " "${DISTFILES:Q} 8109FETCH_MESSAGE+= " "${DISTFILES:Q}
8087FETCH_MESSAGE+= "manually from "${MASTER_SITES:Q}"." 8110FETCH_MESSAGE+= "manually from "${MASTER_SITES:Q}"."
8088 </pre> 8111 </pre>
8089</div> 8112</div>
8090<div class="sect2"> 8113<div class="sect2">
8091<div class="titlepage"><div><div><h3 class="title"> 8114<div class="titlepage"><div><div><h3 class="title">
8092<a name="modified-distfiles-same-name"></a>19.2.2. How to handle modified distfiles with the 'old' name</h3></div></div></div> 8115<a name="modified-distfiles-same-name"></a>19.2.2. How to handle modified distfiles with the 'old' name</h3></div></div></div>
8093<p>Sometimes authors of a software package make some 8116<p>Sometimes authors of a software package make some
8094 modifications after the software was released, and they put up a 8117 modifications after the software was released, and they put up a
8095 new distfile without changing the package's version number. If a 8118 new distfile without changing the package's version number. If a
8096 package is already in pkgsrc at that time, the checksum will 8119 package is already in pkgsrc at that time, the checksum will
8097 no longer match. The contents of the new distfile should be 8120 no longer match. The contents of the new distfile should be
8098 compared against the old one before changing anything, to make 8121 compared against the old one before changing anything, to make
8099 sure the distfile was really updated on purpose, and that 8122 sure the distfile was really updated on purpose, and that
8100 no trojan horse or so crept in. 8123 no trojan horse or so crept in.
8101 Please mention that the distfiles were compared and what was found 8124 Please mention that the distfiles were compared and what was found
8102 in your commit message.</p> 8125 in your commit message.</p>
8103<p>Then, the correct way to work around this is to 8126<p>Then, the correct way to work around this is to
8104 set <code class="varname">DIST_SUBDIR</code> to a unique directory name, 8127 set <code class="varname">DIST_SUBDIR</code> to a unique directory name,
8105 usually based on <code class="varname">PKGNAME_NOREV</code>. All 8128 usually based on <code class="varname">PKGNAME_NOREV</code>. All
8106 <code class="varname">DISTFILES</code> and 8129 <code class="varname">DISTFILES</code> and
8107 <code class="varname">PATCHFILES</code> for this package will be put in that 8130 <code class="varname">PATCHFILES</code> for this package will be put in that
8108 subdirectory of the local distfiles directory. 8131 subdirectory of the local distfiles directory.
8109 (See <a class="xref" href="#bumping-pkgrevision" title="19.1.11. How to handle incrementing versions when fixing an existing package">Section 19.1.11, &#8220;How to handle incrementing versions when fixing an existing package&#8221;</a> for more details.) 8132 (See <a class="xref" href="#bumping-pkgrevision" title="19.1.11. How to handle incrementing versions when fixing an existing package">Section 19.1.11, &#8220;How to handle incrementing versions when fixing an existing package&#8221;</a> for more details.)
8110 In case this 8133 In case this
8111 happens more often, <code class="varname">PKGNAME</code> can be used (thus 8134 happens more often, <code class="varname">PKGNAME</code> can be used (thus
8112 including the <code class="filename">nbX</code> suffix) or a date stamp 8135 including the <code class="filename">nbX</code> suffix) or a date stamp
8113 can be appended, like <code class="varname">${PKGNAME_NOREV}-YYYYMMDD</code>.</p> 8136 can be appended, like <code class="varname">${PKGNAME_NOREV}-YYYYMMDD</code>.</p>
8114<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> 8137<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>
8115<p>Do not forget regenerating the <code class="filename">distinfo</code> file 8138<p>Do not forget regenerating the <code class="filename">distinfo</code> file
8116 after that, since it contains the <code class="varname">DIST_SUBDIR</code> 8139 after that, since it contains the <code class="varname">DIST_SUBDIR</code>
8117 path in the filenames. 8140 path in the filenames.
8118 Also, increase the PKGREVISION if the installed package is different. 8141 Also, increase the PKGREVISION if the installed package is different.
8119 Furthermore, a mail to the package's authors seems appropriate 8142 Furthermore, a mail to the package's authors seems appropriate
8120 telling them that changing distfiles after releases without 8143 telling them that changing distfiles after releases without
8121 changing the file names is not good practice.</p> 8144 changing the file names is not good practice.</p>
8122</div> 8145</div>
8123</div> 8146</div>
8124<div class="sect1"> 8147<div class="sect1">
8125<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8148<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8126<a name="fixes.configure"></a>19.3. Fixing problems in the <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div> 8149<a name="fixes.configure"></a>19.3. Fixing problems in the <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div>
8127<div class="sect2"> 8150<div class="sect2">
8128<div class="titlepage"><div><div><h3 class="title"> 8151<div class="titlepage"><div><div><h3 class="title">
8129<a name="fixes.libtool"></a>19.3.1. Shared libraries - libtool</h3></div></div></div> 8152<a name="fixes.libtool"></a>19.3.1. Shared libraries - libtool</h3></div></div></div>
8130<p>pkgsrc supports many different machines, with different 8153<p>pkgsrc supports many different machines, with different
8131 object formats like a.out and ELF, and varying abilities to do 8154 object formats like a.out and ELF, and varying abilities to do
8132 shared library and dynamic loading at all. To accompany this, 8155 shared library and dynamic loading at all. To accompany this,
8133 varying commands and options have to be passed to the 8156 varying commands and options have to be passed to the
8134 compiler, linker, etc. to get the Right Thing, which can be 8157 compiler, linker, etc. to get the Right Thing, which can be
8135 pretty annoying especially if you don't have all the machines 8158 pretty annoying especially if you don't have all the machines
8136 at your hand to test things. The 8159 at your hand to test things. The
8137 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/libtool/README.html" target="_top"><code class="filename">devel/libtool</code></a> pkg 8160 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/libtool/README.html" target="_top"><code class="filename">devel/libtool</code></a> pkg
8138 can help here, as it just <span class="quote">&#8220;<span class="quote">knows</span>&#8221;</span> how to build 8161 can help here, as it just <span class="quote">&#8220;<span class="quote">knows</span>&#8221;</span> how to build
8139 both static and dynamic libraries from a set of source files, 8162 both static and dynamic libraries from a set of source files,
8140 thus being platform-independent.</p> 8163 thus being platform-independent.</p>
8141<p>Here's how to use libtool in a package in seven simple 8164<p>Here's how to use libtool in a package in seven simple
8142 steps:</p> 8165 steps:</p>
8143<div class="orderedlist"><ol class="orderedlist" type="1"> 8166<div class="orderedlist"><ol class="orderedlist" type="1">
8144<li class="listitem"><p>Add <code class="varname">USE_LIBTOOL=yes</code> to the package 8167<li class="listitem"><p>Add <code class="varname">USE_LIBTOOL=yes</code> to the package
8145 Makefile.</p></li> 8168 Makefile.</p></li>
8146<li class="listitem"><p>For library objects, use <span class="quote">&#8220;<span class="quote">${LIBTOOL} --mode=compile 8169<li class="listitem"><p>For library objects, use <span class="quote">&#8220;<span class="quote">${LIBTOOL} --mode=compile
8147 ${CC}</span>&#8221;</span> in place of <span class="quote">&#8220;<span class="quote">${CC}</span>&#8221;</span>. You could even 8170 ${CC}</span>&#8221;</span> in place of <span class="quote">&#8220;<span class="quote">${CC}</span>&#8221;</span>. You could even
8148 add it to the definition of <code class="varname">CC</code>, if only 8171 add it to the definition of <code class="varname">CC</code>, if only
8149 libraries are being built in a given Makefile. This one command 8172 libraries are being built in a given Makefile. This one command
8150 will build both PIC and non-PIC library objects, so you need not 8173 will build both PIC and non-PIC library objects, so you need not
8151 have separate shared and non-shared library rules.</p></li> 8174 have separate shared and non-shared library rules.</p></li>
8152<li class="listitem"> 8175<li class="listitem">
8153<p>For the linking of the library, remove any 8176<p>For the linking of the library, remove any
8154 <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 8177 <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
8155 -Bshareable</span>&#8221;</span> commands, and instead use:</p> 8178 -Bshareable</span>&#8221;</span> commands, and instead use:</p>
8156<pre class="programlisting"> 8179<pre class="programlisting">
8157${LIBTOOL} --mode=link \ 8180${LIBTOOL} --mode=link \
8158 ${CC} -o ${.TARGET:.a=.la} \ 8181 ${CC} -o ${.TARGET:.a=.la} \
8159 ${OBJS:.o=.lo} \ 8182 ${OBJS:.o=.lo} \
8160 -rpath ${PREFIX}/lib \ 8183 -rpath ${PREFIX}/lib \
8161 -version-info major:minor 8184 -version-info major:minor
8162 </pre> 8185 </pre>
8163<p>Note that the library is changed to have a 8186<p>Note that the library is changed to have a
8164 <code class="filename">.la</code> extension, and the objects are 8187 <code class="filename">.la</code> extension, and the objects are
8165 changed to have a <code class="filename">.lo</code> 8188 changed to have a <code class="filename">.lo</code>
8166 extension. Change <code class="varname">OBJS</code> as 8189 extension. Change <code class="varname">OBJS</code> as
8167 necessary. This automatically creates all of the 8190 necessary. This automatically creates all of the
8168 <code class="filename">.a</code>, 8191 <code class="filename">.a</code>,
8169 <code class="filename">.so.major.minor</code>, and ELF symlinks (if 8192 <code class="filename">.so.major.minor</code>, and ELF symlinks (if
8170 necessary) in the build directory. Be sure to include 8193 necessary) in the build directory. Be sure to include
8171 <span class="quote">&#8220;<span class="quote">-version-info</span>&#8221;</span>, especially when major and 8194 <span class="quote">&#8220;<span class="quote">-version-info</span>&#8221;</span>, especially when major and
8172 minor are zero, as libtool will otherwise strip off the 8195 minor are zero, as libtool will otherwise strip off the
8173 shared library version.</p> 8196 shared library version.</p>
8174<p>From the libtool manual:</p> 8197<p>From the libtool manual:</p>
8175<pre class="programlisting"> 8198<pre class="programlisting">
8176So, libtool library versions are described by three integers: 8199So, libtool library versions are described by three integers:
8177 8200
8178CURRENT 8201CURRENT
8179The most recent interface number that this library implements. 8202The most recent interface number that this library implements.
8180 8203
8181REVISION 8204REVISION
8182The implementation number of the CURRENT interface. 8205The implementation number of the CURRENT interface.
8183 8206
8184AGE 8207AGE
8185The difference between the newest and oldest interfaces that 8208The difference between the newest and oldest interfaces that
8186this library implements. In other words, the library implements 8209this library implements. In other words, the library implements
8187all the interface numbers in the range from number `CURRENT - 8210all the interface numbers in the range from number `CURRENT -
8188AGE' to `CURRENT'. 8211AGE' to `CURRENT'.
8189 8212
8190If two libraries have identical CURRENT and AGE numbers, then the 8213If two libraries have identical CURRENT and AGE numbers, then the
8191dynamic linker chooses the library with the greater REVISION number. 8214dynamic linker chooses the library with the greater REVISION number.
8192 </pre> 8215 </pre>
8193<p>The <span class="quote">&#8220;<span class="quote">-release</span>&#8221;</span> option will produce 8216<p>The <span class="quote">&#8220;<span class="quote">-release</span>&#8221;</span> option will produce
8194 different results for a.out and ELF (excluding symlinks) 8217 different results for a.out and ELF (excluding symlinks)
8195 in only one case. An ELF library of the form 8218 in only one case. An ELF library of the form
8196 <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> 8219 <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>
8197 will have a symlink of 8220 will have a symlink of
8198 <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> 8221 <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>
8199 on an a.out platform. This is handled 8222 on an a.out platform. This is handled
8200 automatically.</p> 8223 automatically.</p>
8201<p>The <span class="quote">&#8220;<span class="quote">-rpath argument</span>&#8221;</span> is the install 8224<p>The <span class="quote">&#8220;<span class="quote">-rpath argument</span>&#8221;</span> is the install
8202 directory of the library being built.</p> 8225 directory of the library being built.</p>
8203<p>In the <code class="filename">PLIST</code>, include only the 8226<p>In the <code class="filename">PLIST</code>, include only the
8204 <code class="filename">.la</code> file, the other files will be 8227 <code class="filename">.la</code> file, the other files will be
8205 added automatically.</p> 8228 added automatically.</p>
8206</li> 8229</li>
8207<li class="listitem"> 8230<li class="listitem">
8208<p>When linking shared object (<code class="filename">.so</code>) 8231<p>When linking shared object (<code class="filename">.so</code>)
8209 files, i.e. files that are loaded via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?dlopen+3+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">dlopen</span>(3)</span></a>, NOT 8232 files, i.e. files that are loaded via <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?dlopen+3+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">dlopen</span>(3)</span></a>, NOT
8210 shared libraries, use <span class="quote">&#8220;<span class="quote">-module 8233 shared libraries, use <span class="quote">&#8220;<span class="quote">-module
8211 -avoid-version</span>&#8221;</span> to prevent them getting version 8234 -avoid-version</span>&#8221;</span> to prevent them getting version
8212 tacked on.</p> 8235 tacked on.</p>
8213<p>The <code class="filename">PLIST</code> file gets the 8236<p>The <code class="filename">PLIST</code> file gets the
8214 <code class="filename">foo.so</code> entry.</p> 8237 <code class="filename">foo.so</code> entry.</p>
8215</li> 8238</li>
8216<li class="listitem"> 8239<li class="listitem">
8217<p>When linking programs that depend on these libraries 8240<p>When linking programs that depend on these libraries
8218 <span class="emphasis"><em>before</em></span> they are installed, preface 8241 <span class="emphasis"><em>before</em></span> they are installed, preface
8219 the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cc+1+NetBSD-5.0.1+i386"><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+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">ld</span>(1)</span></a> line with <span class="quote">&#8220;<span class="quote">${LIBTOOL} 8242 the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cc+1+NetBSD-5.0.1+i386"><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+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">ld</span>(1)</span></a> line with <span class="quote">&#8220;<span class="quote">${LIBTOOL}
8220 --mode=link</span>&#8221;</span>, and it will find the correct 8243 --mode=link</span>&#8221;</span>, and it will find the correct
8221 libraries (static or shared), but please be aware that 8244 libraries (static or shared), but please be aware that
8222 libtool will not allow you to specify a relative path in 8245 libtool will not allow you to specify a relative path in
8223 -L (such as <span class="quote">&#8220;<span class="quote">-L../somelib</span>&#8221;</span>), because it 8246 -L (such as <span class="quote">&#8220;<span class="quote">-L../somelib</span>&#8221;</span>), because it
8224 expects you to change that argument to be the 8247 expects you to change that argument to be the
8225 <code class="filename">.la</code> file. e.g.</p> 8248 <code class="filename">.la</code> file. e.g.</p>
8226<pre class="programlisting"> 8249<pre class="programlisting">
8227${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib 8250${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib
8228 </pre> 8251 </pre>
8229<p>should be changed to:</p> 8252<p>should be changed to:</p>
8230<pre class="programlisting"> 8253<pre class="programlisting">
8231${LIBTOOL} --mode=link ${CC} -o <em class="replaceable"><code>someprog</code></em> <em class="replaceable"><code>../somelib/somelib.la</code></em> 8254${LIBTOOL} --mode=link ${CC} -o <em class="replaceable"><code>someprog</code></em> <em class="replaceable"><code>../somelib/somelib.la</code></em>
8232 </pre> 8255 </pre>
8233<p>and it will do the right thing with the libraries.</p> 8256<p>and it will do the right thing with the libraries.</p>
8234</li> 8257</li>
8235<li class="listitem"> 8258<li class="listitem">
8236<p>When installing libraries, preface the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?install+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a> 8259<p>When installing libraries, preface the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?install+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a>
8237 or <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cp+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">cp</span>(1)</span></a> command with <span class="quote">&#8220;<span class="quote">${LIBTOOL} 8260 or <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?cp+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">cp</span>(1)</span></a> command with <span class="quote">&#8220;<span class="quote">${LIBTOOL}
8238 --mode=install</span>&#8221;</span>, and change the library name to 8261 --mode=install</span>&#8221;</span>, and change the library name to
8239 <code class="filename">.la</code>. e.g.</p> 8262 <code class="filename">.la</code>. e.g.</p>
8240<pre class="programlisting"> 8263<pre class="programlisting">
8241${LIBTOOL} --mode=install ${BSD_INSTALL_LIB} ${SOMELIB:.a=.la} ${PREFIX}/lib 8264${LIBTOOL} --mode=install ${BSD_INSTALL_LIB} ${SOMELIB:.a=.la} ${PREFIX}/lib
8242 </pre> 8265 </pre>
8243<p>This will install the static <code class="filename">.a</code>, 8266<p>This will install the static <code class="filename">.a</code>,
8244 shared library, any needed symlinks, and run 8267 shared library, any needed symlinks, and run
8245 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ldconfig+8+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">ldconfig</span>(8)</span></a>.</p> 8268 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?ldconfig+8+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">ldconfig</span>(8)</span></a>.</p>
8246</li> 8269</li>
8247<li class="listitem"><p>In your <code class="filename">PLIST</code>, include only 8270<li class="listitem"><p>In your <code class="filename">PLIST</code>, include only
8248 the <code class="filename">.la</code> 8271 the <code class="filename">.la</code>
8249 file (this is a change from previous behaviour).</p></li> 8272 file (this is a change from previous behaviour).</p></li>
8250</ol></div> 8273</ol></div>
8251</div> 8274</div>
8252<div class="sect2"> 8275<div class="sect2">
8253<div class="titlepage"><div><div><h3 class="title"> 8276<div class="titlepage"><div><div><h3 class="title">
8254<a name="using-libtool"></a>19.3.2. Using libtool on GNU packages that already support libtool</h3></div></div></div> 8277<a name="using-libtool"></a>19.3.2. Using libtool on GNU packages that already support libtool</h3></div></div></div>
8255<p>Add <code class="varname">USE_LIBTOOL=yes</code> to the 8278<p>Add <code class="varname">USE_LIBTOOL=yes</code> to the
8256 package Makefile. This will override the package's own libtool 8279 package Makefile. This will override the package's own libtool
8257 in most cases. For older libtool using packages, libtool is 8280 in most cases. For older libtool using packages, libtool is
8258 made by ltconfig script during the do-configure step; you can 8281 made by ltconfig script during the do-configure step; you can
8259 check the libtool script location by doing <span class="command"><strong>make 8282 check the libtool script location by doing <span class="command"><strong>make
8260 configure; find work*/ -name libtool</strong></span>.</p> 8283 configure; find work*/ -name libtool</strong></span>.</p>
8261<p><code class="varname">LIBTOOL_OVERRIDE</code> specifies which libtool 8284<p><code class="varname">LIBTOOL_OVERRIDE</code> specifies which libtool
8262 scripts, relative to <code class="varname">WRKSRC</code>, to override. By 8285 scripts, relative to <code class="varname">WRKSRC</code>, to override. By
8263 default, it is set to <span class="quote">&#8220;<span class="quote">libtool */libtool 8286 default, it is set to <span class="quote">&#8220;<span class="quote">libtool */libtool
8264 */*/libtool</span>&#8221;</span>. If this does not match the location of the 8287 */*/libtool</span>&#8221;</span>. If this does not match the location of the
8265 package's libtool script(s), set it as appropriate.</p> 8288 package's libtool script(s), set it as appropriate.</p>
8266<p>If you do not need <code class="filename">*.a</code> static 8289<p>If you do not need <code class="filename">*.a</code> static
8267 libraries built and installed, then use 8290 libraries built and installed, then use
8268 <code class="varname">SHLIBTOOL_OVERRIDE</code> instead.</p> 8291 <code class="varname">SHLIBTOOL_OVERRIDE</code> instead.</p>
8269<p>If your package makes use of the platform-independent library 8292<p>If your package makes use of the platform-independent library
8270 for loading dynamic shared objects, that comes with libtool 8293 for loading dynamic shared objects, that comes with libtool
8271 (libltdl), you should include devel/libltdl/buildlink3.mk.</p> 8294 (libltdl), you should include devel/libltdl/buildlink3.mk.</p>
8272<p>Some packages use libtool incorrectly so that the package 8295<p>Some packages use libtool incorrectly so that the package
8273 may not work or build in some circumstances. Some of the more 8296 may not work or build in some circumstances. Some of the more
8274 common errors are:</p> 8297 common errors are:</p>
8275<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8298<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8276<li class="listitem"> 8299<li class="listitem">
8277<p>The inclusion of a shared object (-module) as a dependent library in an 8300<p>The inclusion of a shared object (-module) as a dependent library in an
8278 executable or library. This in itself isn't a problem if one of two things 8301 executable or library. This in itself isn't a problem if one of two things
8279 has been done:</p> 8302 has been done:</p>
8280<div class="orderedlist"><ol class="orderedlist" type="1"> 8303<div class="orderedlist"><ol class="orderedlist" type="1">
8281<li class="listitem"><p>The shared object is named correctly, i.e. 8304<li class="listitem"><p>The shared object is named correctly, i.e.
8282 <code class="filename">libfoo.la</code>, not 8305 <code class="filename">libfoo.la</code>, not
8283 <code class="filename">foo.la</code></p></li> 8306 <code class="filename">foo.la</code></p></li>
8284<li class="listitem"><p>The -dlopen option is used when linking an executable.</p></li> 8307<li class="listitem"><p>The -dlopen option is used when linking an executable.</p></li>
8285</ol></div> 8308</ol></div>
8286</li> 8309</li>
8287<li class="listitem"><p>The use of libltdl without the correct calls to initialisation routines. 8310<li class="listitem"><p>The use of libltdl without the correct calls to initialisation routines.
8288 The function lt_dlinit() should be called and the macro 8311 The function lt_dlinit() should be called and the macro
8289 <code class="varname">LTDL_SET_PRELOADED_SYMBOLS</code> included in 8312 <code class="varname">LTDL_SET_PRELOADED_SYMBOLS</code> included in
8290 executables.</p></li> 8313 executables.</p></li>
8291</ul></div> 8314</ul></div>
8292</div> 8315</div>
8293<div class="sect2"> 8316<div class="sect2">
8294<div class="titlepage"><div><div><h3 class="title"> 8317<div class="titlepage"><div><div><h3 class="title">
8295<a name="autoconf-automake"></a>19.3.3. GNU Autoconf/Automake</h3></div></div></div> 8318<a name="autoconf-automake"></a>19.3.3. GNU Autoconf/Automake</h3></div></div></div>
8296<p>If a package needs GNU autoconf or automake to be executed 8319<p>If a package needs GNU autoconf or automake to be executed
8297 to regenerate the configure script and Makefile.in makefile 8320 to regenerate the configure script and Makefile.in makefile
8298 templates, then they should be executed in a pre-configure 8321 templates, then they should be executed in a pre-configure
8299 target.</p> 8322 target.</p>
8300<p>For packages that need only autoconf:</p> 8323<p>For packages that need only autoconf:</p>
8301<pre class="programlisting"> 8324<pre class="programlisting">
8302AUTOCONF_REQD= 2.50 # if default version is not good enough 8325AUTOCONF_REQD= 2.50 # if default version is not good enough
8303USE_TOOLS+= autoconf # use "autoconf213" for autoconf-2.13 8326USE_TOOLS+= autoconf # use "autoconf213" for autoconf-2.13
8304... 8327...
8305 8328
8306pre-configure: 8329pre-configure:
8307 cd ${WRKSRC} &amp;&amp; autoconf 8330 cd ${WRKSRC} &amp;&amp; autoconf
8308 8331
8309... 8332...
8310 </pre> 8333 </pre>
8311<p>and for packages that need automake and autoconf:</p> 8334<p>and for packages that need automake and autoconf:</p>
8312<pre class="programlisting"> 8335<pre class="programlisting">
8313AUTOMAKE_REQD= 1.7.1 # if default version is not good enough 8336AUTOMAKE_REQD= 1.7.1 # if default version is not good enough
8314USE_TOOLS+= automake # use "automake14" for automake-1.4 8337USE_TOOLS+= automake # use "automake14" for automake-1.4
8315... 8338...
8316 8339
8317pre-configure: 8340pre-configure:
8318 set -e; cd ${WRKSRC}; \ 8341 set -e; cd ${WRKSRC}; \
8319 aclocal; autoheader; automake -a --foreign -i; autoconf 8342 aclocal; autoheader; automake -a --foreign -i; autoconf
8320 8343
8321... 8344...
8322 </pre> 8345 </pre>
8323<p>Packages which use GNU Automake will almost certainly 8346<p>Packages which use GNU Automake will almost certainly
8324 require GNU Make.</p> 8347 require GNU Make.</p>
8325<p>There are times when the configure process makes 8348<p>There are times when the configure process makes
8326 additional changes to the generated files, which then causes 8349 additional changes to the generated files, which then causes
8327 the build process to try to re-execute the automake sequence. 8350 the build process to try to re-execute the automake sequence.
8328 This is prevented by touching various files in the configure 8351 This is prevented by touching various files in the configure
8329 stage. If this causes problems with your package you can set 8352 stage. If this causes problems with your package you can set
8330 <code class="varname">AUTOMAKE_OVERRIDE=NO</code> in the package 8353 <code class="varname">AUTOMAKE_OVERRIDE=NO</code> in the package
8331 Makefile.</p> 8354 Makefile.</p>
8332</div> 8355</div>
8333</div> 8356</div>
8334<div class="sect1"> 8357<div class="sect1">
8335<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8358<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8336<a name="programming-languages"></a>19.4. Programming languages</h2></div></div></div> 8359<a name="programming-languages"></a>19.4. Programming languages</h2></div></div></div>
8337<div class="sect2"> 8360<div class="sect2">
8338<div class="titlepage"><div><div><h3 class="title"> 8361<div class="titlepage"><div><div><h3 class="title">
8339<a name="basic-programming-languages"></a>19.4.1. C, C++, and Fortran</h3></div></div></div> 8362<a name="basic-programming-languages"></a>19.4.1. C, C++, and Fortran</h3></div></div></div>
8340<p>Compilers for the C, C++, and Fortran languages comes with 8363<p>Compilers for the C, C++, and Fortran languages comes with
8341 the NetBSD base system. By default, pkgsrc assumes that a package 8364 the NetBSD base system. By default, pkgsrc assumes that a package
8342 is written in C and will hide all other compilers (via the wrapper 8365 is written in C and will hide all other compilers (via the wrapper
8343 framework, see <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a>).</p> 8366 framework, see <a class="xref" href="#buildlink" title="Chapter 14. Buildlink methodology">Chapter 14, <i>Buildlink methodology</i></a>).</p>
8344<p>To declare which language's compiler a package needs, set 8367<p>To declare which language's compiler a package needs, set
8345 the <code class="varname">USE_LANGUAGES</code> variable. Allowed values 8368 the <code class="varname">USE_LANGUAGES</code> variable. Allowed values
8346 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 8369 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
8347 <span class="quote">&#8220;<span class="quote">fortran</span>&#8221;</span> (and any combination). The default is 8370 <span class="quote">&#8220;<span class="quote">fortran</span>&#8221;</span> (and any combination). The default is
8348 <span class="quote">&#8220;<span class="quote">c</span>&#8221;</span>. Packages using GNU configure scripts, even if 8371 <span class="quote">&#8220;<span class="quote">c</span>&#8221;</span>. Packages using GNU configure scripts, even if
8349 written in C++, usually need a C compiler for the configure 8372 written in C++, usually need a C compiler for the configure
8350 phase.</p> 8373 phase.</p>
8351</div> 8374</div>
8352<div class="sect2"> 8375<div class="sect2">
8353<div class="titlepage"><div><div><h3 class="title"> 8376<div class="titlepage"><div><div><h3 class="title">
8354<a name="java-programming-language"></a>19.4.2. Java</h3></div></div></div> 8377<a name="java-programming-language"></a>19.4.2. Java</h3></div></div></div>
8355<p>If a program is written in Java, use the Java framework in 8378<p>If a program is written in Java, use the Java framework in
8356 pkgsrc. The package must include 8379 pkgsrc. The package must include
8357 <code class="filename">../../mk/java-vm.mk</code>. This Makefile fragment 8380 <code class="filename">../../mk/java-vm.mk</code>. This Makefile fragment
8358 provides the following variables:</p> 8381 provides the following variables:</p>
8359<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8382<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8360<li class="listitem"><p><code class="varname">USE_JAVA</code> defines if a build 8383<li class="listitem"><p><code class="varname">USE_JAVA</code> defines if a build
8361 dependency on the JDK is added. If 8384 dependency on the JDK is added. If
8362 <code class="varname">USE_JAVA</code> is set to <span class="quote">&#8220;<span class="quote">run</span>&#8221;</span>, then 8385 <code class="varname">USE_JAVA</code> is set to <span class="quote">&#8220;<span class="quote">run</span>&#8221;</span>, then
8363 there is only a runtime dependency on the JDK. The default is 8386 there is only a runtime dependency on the JDK. The default is
8364 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, which also adds a build dependency on the 8387 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, which also adds a build dependency on the
8365 JDK.</p></li> 8388 JDK.</p></li>
8366<li class="listitem"><p>Set <code class="varname">USE_JAVA2</code> to declare that 8389<li class="listitem"><p>Set <code class="varname">USE_JAVA2</code> to declare that
8367 a package needs a Java2 implementation. The supported values 8390 a package needs a Java2 implementation. The supported values
8368 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 8391 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
8369 <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 8392 <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
8370 implementation, <span class="quote">&#8220;<span class="quote">1.4</span>&#8221;</span> insists on versions 1.4 or 8393 implementation, <span class="quote">&#8220;<span class="quote">1.4</span>&#8221;</span> insists on versions 1.4 or
8371 above, and <span class="quote">&#8220;<span class="quote">1.5</span>&#8221;</span> only accepts versions 1.5 or 8394 above, and <span class="quote">&#8220;<span class="quote">1.5</span>&#8221;</span> only accepts versions 1.5 or
8372 above. This variable is not set by default.</p></li> 8395 above. This variable is not set by default.</p></li>
8373<li class="listitem"><p><code class="varname">PKG_JAVA_HOME</code> is 8396<li class="listitem"><p><code class="varname">PKG_JAVA_HOME</code> is
8374 automatically set to the runtime location of the used Java 8397 automatically set to the runtime location of the used Java
8375 implementation dependency. It may be used to set 8398 implementation dependency. It may be used to set
8376 <code class="varname">JAVA_HOME</code> to a good value if the program 8399 <code class="varname">JAVA_HOME</code> to a good value if the program
8377 needs this variable to be defined. 8400 needs this variable to be defined.
8378 </p></li> 8401 </p></li>
8379</ul></div> 8402</ul></div>
8380</div> 8403</div>
8381<div class="sect2"> 8404<div class="sect2">
8382<div class="titlepage"><div><div><h3 class="title"> 8405<div class="titlepage"><div><div><h3 class="title">
8383<a name="perl-scripts"></a>19.4.3. Packages containing perl scripts</h3></div></div></div> 8406<a name="perl-scripts"></a>19.4.3. Packages containing perl scripts</h3></div></div></div>
8384<p>If your package contains interpreted perl scripts, add 8407<p>If your package contains interpreted perl scripts, add
8385 <span class="quote">&#8220;<span class="quote">perl</span>&#8221;</span> to the <code class="varname">USE_TOOLS</code> variable 8408 <span class="quote">&#8220;<span class="quote">perl</span>&#8221;</span> to the <code class="varname">USE_TOOLS</code> variable
8386 and set <code class="varname">REPLACE_PERL</code> to ensure that the proper 8409 and set <code class="varname">REPLACE_PERL</code> to ensure that the proper
8387 interpreter path is set. <code class="varname">REPLACE_PERL</code> should 8410 interpreter path is set. <code class="varname">REPLACE_PERL</code> should
8388 contain a list of scripts, relative to <code class="varname">WRKSRC</code>, 8411 contain a list of scripts, relative to <code class="varname">WRKSRC</code>,
8389 that you want adjusted. Every occurrence of 8412 that you want adjusted. Every occurrence of
8390 <code class="filename">*/bin/perl</code> in a she-bang line will be 8413 <code class="filename">*/bin/perl</code> in a she-bang line will be
8391 replaced with the full path to the perl executable.</p> 8414 replaced with the full path to the perl executable.</p>
8392<p>If a particular version of perl is needed, set the 8415<p>If a particular version of perl is needed, set the
8393 <code class="varname">PERL5_REQD</code> variable to the version number. The 8416 <code class="varname">PERL5_REQD</code> variable to the version number. The
8394 default is <span class="quote">&#8220;<span class="quote">5.0</span>&#8221;</span>.</p> 8417 default is <span class="quote">&#8220;<span class="quote">5.0</span>&#8221;</span>.</p>
8395<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 8418<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
8396 about handling perl modules.</p> 8419 about handling perl modules.</p>
8397</div> 8420</div>
8398<div class="sect2"> 8421<div class="sect2">
8399<div class="titlepage"><div><div><h3 class="title"> 8422<div class="titlepage"><div><div><h3 class="title">
8400<a name="shell-scripts"></a>19.4.4. Packages containing shell scripts</h3></div></div></div> 8423<a name="shell-scripts"></a>19.4.4. Packages containing shell scripts</h3></div></div></div>
8401<p><code class="varname">REPLACE_SH</code>, 8424<p><code class="varname">REPLACE_SH</code>,
8402 <code class="varname">REPLACE_BASH</code>, <code class="varname">REPLACE_CSH</code>, 8425 <code class="varname">REPLACE_BASH</code>, <code class="varname">REPLACE_CSH</code>,
8403 and <code class="varname">REPLACE_KSH</code> can be used to replace shell 8426 and <code class="varname">REPLACE_KSH</code> can be used to replace shell
8404 hash bangs in files. Please use the appropriate one, prefering 8427 hash bangs in files. Please use the appropriate one, prefering
8405 <code class="varname">REPLACE_SH</code> in case this shell is sufficient. 8428 <code class="varname">REPLACE_SH</code> in case this shell is sufficient.
8406 Each should contain a list of scripts, relative to 8429 Each should contain a list of scripts, relative to
8407 <code class="varname">WRKSRC</code>, that you want adjusted. Every 8430 <code class="varname">WRKSRC</code>, that you want adjusted. Every
8408 occurrence of the matching shell in a she-bang line will be 8431 occurrence of the matching shell in a she-bang line will be
8409 replaced with the full path to the shell executable. 8432 replaced with the full path to the shell executable.
8410 When using <code class="varname">REPLACE_BASH</code>, don't forget to add 8433 When using <code class="varname">REPLACE_BASH</code>, don't forget to add
8411 <code class="filename">bash</code> to <code class="varname">USE_TOOLS</code>.</p> 8434 <code class="filename">bash</code> to <code class="varname">USE_TOOLS</code>.</p>
8412</div> 8435</div>
8413<div class="sect2"> 8436<div class="sect2">
8414<div class="titlepage"><div><div><h3 class="title"> 8437<div class="titlepage"><div><div><h3 class="title">
8415<a name="other-programming-languages"></a>19.4.5. Other programming languages</h3></div></div></div> 8438<a name="other-programming-languages"></a>19.4.5. Other programming languages</h3></div></div></div>
8416<p>Currently, there is no special handling for other languages 8439<p>Currently, there is no special handling for other languages
8417 in pkgsrc. If a compiler package provides a 8440 in pkgsrc. If a compiler package provides a
8418 <code class="filename">buildlink3.mk</code> file, include that, otherwise 8441 <code class="filename">buildlink3.mk</code> file, include that, otherwise
8419 just add a (build) dependency on the appropriate compiler 8442 just add a (build) dependency on the appropriate compiler
8420 package.</p> 8443 package.</p>
8421</div> 8444</div>
8422</div> 8445</div>
8423<div class="sect1"> 8446<div class="sect1">
8424<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8447<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8425<a name="fixes.build"></a>19.5. Fixing problems in the <span class="emphasis"><em>build</em></span> phase</h2></div></div></div> 8448<a name="fixes.build"></a>19.5. Fixing problems in the <span class="emphasis"><em>build</em></span> phase</h2></div></div></div>
8426<p>The most common failures when building a package are that 8449<p>The most common failures when building a package are that
8427 some platforms do not provide certain header files, functions or 8450 some platforms do not provide certain header files, functions or
8428 libraries, or they provide the functions in a library that the 8451 libraries, or they provide the functions in a library that the
8429 original package author didn't know. To work around this, you 8452 original package author didn't know. To work around this, you
8430 can rewrite the source code in most cases so that it does not 8453 can rewrite the source code in most cases so that it does not
8431 use the missing functions or provides a replacement function.</p> 8454 use the missing functions or provides a replacement function.</p>
8432<div class="sect2"> 8455<div class="sect2">
8433<div class="titlepage"><div><div><h3 class="title"> 8456<div class="titlepage"><div><div><h3 class="title">
8434<a name="fixes.build.cpp"></a>19.5.1. Compiling C and C++ code conditionally</h3></div></div></div> 8457<a name="fixes.build.cpp"></a>19.5.1. Compiling C and C++ code conditionally</h3></div></div></div>
8435<p>If a package already comes with a GNU configure script, the 8458<p>If a package already comes with a GNU configure script, the
8436 preferred way to fix the build failure is to change the 8459 preferred way to fix the build failure is to change the
8437 configure script, not the code. In the other cases, you can 8460 configure script, not the code. In the other cases, you can
8438 utilize the C preprocessor, which defines certain macros 8461 utilize the C preprocessor, which defines certain macros
8439 depending on the operating system and hardware architecture it 8462 depending on the operating system and hardware architecture it
8440 compiles for. These macros can be queried using for example 8463 compiles for. These macros can be queried using for example
8441 <code class="varname">#if defined(__i386)</code>. Almost every operating 8464 <code class="varname">#if defined(__i386)</code>. Almost every operating
8442 system, hardware architecture and compiler has its own macro. 8465 system, hardware architecture and compiler has its own macro.
8443 For example, if the macros <code class="varname">__GNUC__</code>, 8466 For example, if the macros <code class="varname">__GNUC__</code>,
8444 <code class="varname">__i386__</code> and <code class="varname">__NetBSD__</code> 8467 <code class="varname">__i386__</code> and <code class="varname">__NetBSD__</code>
8445 are all defined, you know that you are using NetBSD on an i386 8468 are all defined, you know that you are using NetBSD on an i386
8446 compatible CPU, and your compiler is GCC.</p> 8469 compatible CPU, and your compiler is GCC.</p>
8447<p>The list of the following macros for hardware and 8470<p>The list of the following macros for hardware and
8448 operating system depends on the compiler that is used. For 8471 operating system depends on the compiler that is used. For
8449 example, if you want to conditionally compile code on Solaris, 8472 example, if you want to conditionally compile code on Solaris,
8450 don't use <code class="varname">__sun__</code>, as the SunPro compiler 8473 don't use <code class="varname">__sun__</code>, as the SunPro compiler
8451 does not define it. Use <code class="varname">__sun</code> instead.</p> 8474 does not define it. Use <code class="varname">__sun</code> instead.</p>
8452<div class="sect3"> 8475<div class="sect3">
8453<div class="titlepage"><div><div><h4 class="title"> 8476<div class="titlepage"><div><div><h4 class="title">
8454<a name="fixes.build.cpp.os"></a>19.5.1.1. C preprocessor macros to identify the operating system</h4></div></div></div> 8477<a name="fixes.build.cpp.os"></a>19.5.1.1. C preprocessor macros to identify the operating system</h4></div></div></div>
8455<p>To distinguish between 4.4 BSD-derived systems and the 8478<p>To distinguish between 4.4 BSD-derived systems and the
8456 rest of the world, you should use the following code.</p> 8479 rest of the world, you should use the following code.</p>
8457<pre class="programlisting"> 8480<pre class="programlisting">
8458#include &lt;sys/param.h&gt; 8481#include &lt;sys/param.h&gt;
8459#if (defined(BSD) &amp;&amp; BSD &gt;= 199306) 8482#if (defined(BSD) &amp;&amp; BSD &gt;= 199306)
8460/* BSD-specific code goes here */ 8483/* BSD-specific code goes here */
8461#else 8484#else
8462/* non-BSD-specific code goes here */ 8485/* non-BSD-specific code goes here */
8463#endif 8486#endif
8464</pre> 8487</pre>
8465<p>If this distinction is not fine enough, you can also test 8488<p>If this distinction is not fine enough, you can also test
8466 for the following macros.</p> 8489 for the following macros.</p>
8467<pre class="programlisting"> 8490<pre class="programlisting">
8468Cygwin __CYGWIN__ 8491Cygwin __CYGWIN__
8469DragonFly __DragonFly__ 8492DragonFly __DragonFly__
8470FreeBSD __FreeBSD__ 8493FreeBSD __FreeBSD__
8471Haiku __HAIKU__ 8494Haiku __HAIKU__
8472Interix __INTERIX 8495Interix __INTERIX
8473IRIX __sgi (TODO: get a definite source for this) 8496IRIX __sgi (TODO: get a definite source for this)
8474Linux linux, __linux, __linux__ 8497Linux linux, __linux, __linux__
 8498Mac OS X __APPLE__
8475MirBSD __MirBSD__ (__OpenBSD__ is also defined) 8499MirBSD __MirBSD__ (__OpenBSD__ is also defined)
8476Minix3 __minix 8500Minix3 __minix
8477NetBSD __NetBSD__ 8501NetBSD __NetBSD__
8478OpenBSD __OpenBSD__ 8502OpenBSD __OpenBSD__
8479Solaris sun, __sun 8503Solaris sun, __sun
8480</pre> 8504</pre>
8481</div> 8505</div>
8482<div class="sect3"> 8506<div class="sect3">
8483<div class="titlepage"><div><div><h4 class="title"> 8507<div class="titlepage"><div><div><h4 class="title">
8484<a name="fixes.build.cpp.arch"></a>19.5.1.2. C preprocessor macros to identify the hardware architecture</h4></div></div></div> 8508<a name="fixes.build.cpp.arch"></a>19.5.1.2. C preprocessor macros to identify the hardware architecture</h4></div></div></div>
8485<pre class="programlisting"> 8509<pre class="programlisting">
8486i386 i386, __i386, __i386__ 8510i386 i386, __i386, __i386__
8487MIPS __mips 8511MIPS __mips
8488SPARC sparc, __sparc 8512SPARC sparc, __sparc
8489</pre> 8513</pre>
8490</div> 8514</div>
8491<div class="sect3"> 8515<div class="sect3">
8492<div class="titlepage"><div><div><h4 class="title"> 8516<div class="titlepage"><div><div><h4 class="title">
8493<a name="fixes.build.cpp.compiler"></a>19.5.1.3. C preprocessor macros to identify the compiler</h4></div></div></div> 8517<a name="fixes.build.cpp.compiler"></a>19.5.1.3. C preprocessor macros to identify the compiler</h4></div></div></div>
8494<pre class="programlisting"> 8518<pre class="programlisting">
8495GCC __GNUC__ (major version), __GNUC_MINOR__ 8519GCC __GNUC__ (major version), __GNUC_MINOR__
8496MIPSpro _COMPILER_VERSION (0x741 for MIPSpro 7.41) 8520MIPSpro _COMPILER_VERSION (0x741 for MIPSpro 7.41)
8497SunPro __SUNPRO_C (0x570 for Sun C 5.7) 8521SunPro __SUNPRO_C (0x570 for Sun C 5.7)
8498SunPro C++ __SUNPRO_CC (0x580 for Sun C++ 5.8) 8522SunPro C++ __SUNPRO_CC (0x580 for Sun C++ 5.8)
8499</pre> 8523</pre>
8500</div> 8524</div>
8501</div> 8525</div>
8502<div class="sect2"> 8526<div class="sect2">
8503<div class="titlepage"><div><div><h3 class="title"> 8527<div class="titlepage"><div><div><h3 class="title">
8504<a name="compiler-bugs"></a>19.5.2. How to handle compiler bugs</h3></div></div></div> 8528<a name="compiler-bugs"></a>19.5.2. How to handle compiler bugs</h3></div></div></div>
8505<p>Some source files trigger bugs in the compiler, based on 8529<p>Some source files trigger bugs in the compiler, based on
8506 combinations of compiler version and architecture and almost 8530 combinations of compiler version and architecture and almost
8507 always relation to optimisation being enabled. Common symptoms 8531 always relation to optimisation being enabled. Common symptoms
8508 are gcc internal errors or never finishing compiling a 8532 are gcc internal errors or never finishing compiling a
8509 file.</p> 8533 file.</p>
8510<p>Typically, a workaround involves testing the 8534<p>Typically, a workaround involves testing the
8511 <code class="varname">MACHINE_ARCH</code> and compiler version, disabling 8535 <code class="varname">MACHINE_ARCH</code> and compiler version, disabling
8512 optimisation for that combination of file, 8536 optimisation for that combination of file,
8513 <code class="varname">MACHINE_ARCH</code> and compiler, and documenting it 8537 <code class="varname">MACHINE_ARCH</code> and compiler, and documenting it
8514 in <code class="filename">pkgsrc/doc/HACKS</code>. See that file for a 8538 in <code class="filename">pkgsrc/doc/HACKS</code>. See that file for a
8515 number of examples.</p> 8539 number of examples.</p>
8516</div> 8540</div>
8517<div class="sect2"> 8541<div class="sect2">
8518<div class="titlepage"><div><div><h3 class="title"> 8542<div class="titlepage"><div><div><h3 class="title">
8519<a name="undefined-reference"></a>19.5.3. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span> 8543<a name="undefined-reference"></a>19.5.3. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span>
8520</h3></div></div></div> 8544</h3></div></div></div>
8521<p>This error message often means that a package did not 8545<p>This error message often means that a package did not
8522 link to a shared library it needs. The following functions are 8546 link to a shared library it needs. The following functions are
8523 known to cause this error message over and over.</p> 8547 known to cause this error message over and over.</p>
8524<div class="informaltable"> 8548<div class="informaltable">
8525<a name="undefined-reference-functions"></a><table border="1"> 8549<a name="undefined-reference-functions"></a><table border="1">
8526<colgroup> 8550<colgroup>
8527<col> 8551<col>
8528<col> 8552<col>
8529<col> 8553<col>
8530</colgroup> 8554</colgroup>
8531<thead><tr> 8555<thead><tr>
8532<th>Function</th> 8556<th>Function</th>
8533<th>Library</th> 8557<th>Library</th>
8534<th>Affected platforms</th> 8558<th>Affected platforms</th>
8535</tr></thead> 8559</tr></thead>
8536<tbody> 8560<tbody>
8537<tr> 8561<tr>
8538<td>accept, bind, connect</td> 8562<td>accept, bind, connect</td>
8539<td>-lsocket</td> 8563<td>-lsocket</td>
8540<td>Solaris</td> 8564<td>Solaris</td>
8541</tr> 8565</tr>
8542<tr> 8566<tr>
8543<td>crypt</td> 8567<td>crypt</td>
8544<td>-lcrypt</td> 8568<td>-lcrypt</td>
8545<td>DragonFly, NetBSD</td> 8569<td>DragonFly, NetBSD</td>
8546</tr> 8570</tr>
8547<tr> 8571<tr>
8548<td>dlopen, dlsym</td> 8572<td>dlopen, dlsym</td>
8549<td>-ldl</td> 8573<td>-ldl</td>
8550<td>Linux</td> 8574<td>Linux</td>
8551</tr> 8575</tr>
8552<tr> 8576<tr>
8553<td>gethost*</td> 8577<td>gethost*</td>
8554<td>-lnsl</td> 8578<td>-lnsl</td>
8555<td>Solaris</td> 8579<td>Solaris</td>
8556</tr> 8580</tr>
8557<tr> 8581<tr>
8558<td>inet_aton</td> 8582<td>inet_aton</td>
8559<td>-lresolv</td> 8583<td>-lresolv</td>
8560<td>Solaris</td> 8584<td>Solaris</td>
8561</tr> 8585</tr>
8562<tr> 8586<tr>
8563<td>nanosleep, sem_*, timer_*</td> 8587<td>nanosleep, sem_*, timer_*</td>
8564<td>-lrt</td> 8588<td>-lrt</td>
8565<td>Solaris</td> 8589<td>Solaris</td>
8566</tr> 8590</tr>
8567<tr> 8591<tr>
8568<td>openpty</td> 8592<td>openpty</td>
8569<td>-lutil</td> 8593<td>-lutil</td>
8570<td>Linux</td> 8594<td>Linux</td>
8571</tr> 8595</tr>
8572</tbody> 8596</tbody>
8573</table> 8597</table>
8574</div> 8598</div>
8575<p>To fix these linker errors, it is often sufficient to say 8599<p>To fix these linker errors, it is often sufficient to say
8576 <code class="literal">LIBS.<em class="replaceable"><code>OperatingSystem</code></em>+= 8600 <code class="literal">LIBS.<em class="replaceable"><code>OperatingSystem</code></em>+=
8577 -l<em class="replaceable"><code>foo</code></em></code> to the package 8601 -l<em class="replaceable"><code>foo</code></em></code> to the package
8578 <code class="filename">Makefile</code> and then say <span class="command"><strong>bmake clean; 8602 <code class="filename">Makefile</code> and then say <span class="command"><strong>bmake clean;
8579 bmake</strong></span>.</p> 8603 bmake</strong></span>.</p>
8580<div class="sect3"> 8604<div class="sect3">
8581<div class="titlepage"><div><div><h4 class="title"> 8605<div class="titlepage"><div><div><h4 class="title">
8582<a name="undefined-reference-sunpro"></a>19.5.3.1. Special issue: The SunPro compiler</h4></div></div></div> 8606<a name="undefined-reference-sunpro"></a>19.5.3.1. Special issue: The SunPro compiler</h4></div></div></div>
8583<p>When you are using the SunPro compiler, there is another 8607<p>When you are using the SunPro compiler, there is another
8584possibility. That compiler cannot handle the following code:</p> 8608possibility. That compiler cannot handle the following code:</p>
8585<pre class="programlisting"> 8609<pre class="programlisting">
8586extern int extern_func(int); 8610extern int extern_func(int);
8587 8611
8588static inline int 8612static inline int
8589inline_func(int x) 8613inline_func(int x)
8590{ 8614{
8591 return extern_func(x); 8615 return extern_func(x);
8592} 8616}
8593 8617
8594int main(void) 8618int main(void)
8595{ 8619{
8596 return 0; 8620 return 0;
8597} 8621}
8598</pre> 8622</pre>
8599<p>It generates the code for <code class="function">inline_func</code> even if 8623<p>It generates the code for <code class="function">inline_func</code> even if
8600that function is never used. This code then refers to 8624that function is never used. This code then refers to
8601<code class="function">extern_func</code>, which can usually not be resolved. To 8625<code class="function">extern_func</code>, which can usually not be resolved. To
8602solve this problem you can try to tell the package to disable inlining 8626solve this problem you can try to tell the package to disable inlining
8603of functions.</p> 8627of functions.</p>
8604</div> 8628</div>
8605</div> 8629</div>
8606<div class="sect2"> 8630<div class="sect2">
8607<div class="titlepage"><div><div><h3 class="title"> 8631<div class="titlepage"><div><div><h3 class="title">
8608<a name="out-of-memory"></a>19.5.4. Running out of memory</h3></div></div></div> 8632<a name="out-of-memory"></a>19.5.4. Running out of memory</h3></div></div></div>
8609<p>Sometimes packages fail to build because the compiler runs 8633<p>Sometimes packages fail to build because the compiler runs
8610 into an operating system specific soft limit. With the 8634 into an operating system specific soft limit. With the
8611 <code class="varname">UNLIMIT_RESOURCES</code> variable pkgsrc can be told 8635 <code class="varname">UNLIMIT_RESOURCES</code> variable pkgsrc can be told
8612 to unlimit the resources. Currently, the allowed values are 8636 to unlimit the resources. Currently, the allowed values are
8613 <span class="quote">&#8220;<span class="quote">datasize</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">stacksize</span>&#8221;</span> (or both). 8637 <span class="quote">&#8220;<span class="quote">datasize</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">stacksize</span>&#8221;</span> (or both).
8614 Setting this variable is similar to running the shell builtin 8638 Setting this variable is similar to running the shell builtin
8615 <span class="command"><strong>ulimit</strong></span> command to raise the maximum data 8639 <span class="command"><strong>ulimit</strong></span> command to raise the maximum data
8616 segment size or maximum stack size of a process, respectively, to 8640 segment size or maximum stack size of a process, respectively, to
8617 their hard limits.</p> 8641 their hard limits.</p>
8618</div> 8642</div>
8619</div> 8643</div>
8620<div class="sect1"> 8644<div class="sect1">
8621<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8645<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8622<a name="fixes.install"></a>19.6. Fixing problems in the <span class="emphasis"><em>install</em></span> phase</h2></div></div></div> 8646<a name="fixes.install"></a>19.6. Fixing problems in the <span class="emphasis"><em>install</em></span> phase</h2></div></div></div>
8623<div class="sect2"> 8647<div class="sect2">
8624<div class="titlepage"><div><div><h3 class="title"> 8648<div class="titlepage"><div><div><h3 class="title">
8625<a name="install-scripts"></a>19.6.1. Creating needed directories</h3></div></div></div> 8649<a name="install-scripts"></a>19.6.1. Creating needed directories</h3></div></div></div>
8626<p>The BSD-compatible <span class="command"><strong>install</strong></span> supplied 8650<p>The BSD-compatible <span class="command"><strong>install</strong></span> supplied
8627 with some operating systems cannot create more than one 8651 with some operating systems cannot create more than one
8628 directory at a time. As such, you should call 8652 directory at a time. As such, you should call
8629 <code class="literal">${INSTALL_*_DIR}</code> like this:</p> 8653 <code class="literal">${INSTALL_*_DIR}</code> like this:</p>
8630<pre class="programlisting"> 8654<pre class="programlisting">
8631${INSTALL_DATA_DIR} ${PREFIX}/dir1 8655${INSTALL_DATA_DIR} ${PREFIX}/dir1
8632${INSTALL_DATA_DIR} ${PREFIX}/dir2 8656${INSTALL_DATA_DIR} ${PREFIX}/dir2
8633 </pre> 8657 </pre>
8634<p>You can also just append <span class="quote">&#8220;<span class="quote"><code class="literal">dir1 8658<p>You can also just append <span class="quote">&#8220;<span class="quote"><code class="literal">dir1
8635 dir2</code></span>&#8221;</span> to the 8659 dir2</code></span>&#8221;</span> to the
8636 <code class="varname">INSTALLATION_DIRS</code> variable, which will 8660 <code class="varname">INSTALLATION_DIRS</code> variable, which will
8637 automatically do the right thing.</p> 8661 automatically do the right thing.</p>
8638</div> 8662</div>
8639<div class="sect2"> 8663<div class="sect2">
8640<div class="titlepage"><div><div><h3 class="title"> 8664<div class="titlepage"><div><div><h3 class="title">
8641<a name="where-to-install-documentation"></a>19.6.2. Where to install documentation</h3></div></div></div> 8665<a name="where-to-install-documentation"></a>19.6.2. Where to install documentation</h3></div></div></div>
8642<p>In general, documentation should be installed into 8666<p>In general, documentation should be installed into
8643 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or 8667 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or
8644 <code class="filename">${PREFIX}/share/doc/${PKGNAME}</code> (the latter 8668 <code class="filename">${PREFIX}/share/doc/${PKGNAME}</code> (the latter
8645 includes the version number of the package).</p> 8669 includes the version number of the package).</p>
8646<p>Many modern packages using GNU autoconf allow to set the 8670<p>Many modern packages using GNU autoconf allow to set the
8647 directory where HTML documentation is installed with the 8671 directory where HTML documentation is installed with the
8648 <span class="quote">&#8220;<span class="quote">--with-html-dir</span>&#8221;</span> option. Sometimes using this flag 8672 <span class="quote">&#8220;<span class="quote">--with-html-dir</span>&#8221;</span> option. Sometimes using this flag
8649 is needed because otherwise the documentation ends up in 8673 is needed because otherwise the documentation ends up in
8650 <code class="filename">${PREFIX}/share/doc/html</code> or other 8674 <code class="filename">${PREFIX}/share/doc/html</code> or other
8651 places.</p> 8675 places.</p>
8652<p>An exception to the above is that library API documentation 8676<p>An exception to the above is that library API documentation
8653 generated with the <a href="ftp://ftp.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 8677 generated with the <a href="ftp://ftp.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
8654 browsers (devhelp) should be left at their default location, which 8678 browsers (devhelp) should be left at their default location, which
8655 is <code class="filename">${PREFIX}/share/gtk-doc</code>. Such 8679 is <code class="filename">${PREFIX}/share/gtk-doc</code>. Such
8656 documentation can be recognized from files ending in 8680 documentation can be recognized from files ending in
8657 <code class="filename">.devhelp</code> or <code class="filename">.devhelp2</code>. 8681 <code class="filename">.devhelp</code> or <code class="filename">.devhelp2</code>.
8658 (It is also acceptable to install such files in 8682 (It is also acceptable to install such files in
8659 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or 8683 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or
8660 <code class="filename">${PREFIX}/share/doc/${PKGNAME}</code>; the 8684 <code class="filename">${PREFIX}/share/doc/${PKGNAME}</code>; the
8661 <code class="filename">.devhelp*</code> file must be directly in that 8685 <code class="filename">.devhelp*</code> file must be directly in that
8662 directory then, no additional subdirectory level is allowed in 8686 directory then, no additional subdirectory level is allowed in
8663 this case. This is usually achieved by using 8687 this case. This is usually achieved by using
8664 <span class="quote">&#8220;<span class="quote">--with-html-dir=${PREFIX}/share/doc</span>&#8221;</span>. 8688 <span class="quote">&#8220;<span class="quote">--with-html-dir=${PREFIX}/share/doc</span>&#8221;</span>.
8665 <code class="filename">${PREFIX}/share/gtk-doc</code> is preferred 8689 <code class="filename">${PREFIX}/share/gtk-doc</code> is preferred
8666 though.)</p> 8690 though.)</p>
8667</div> 8691</div>
8668<div class="sect2"> 8692<div class="sect2">
8669<div class="titlepage"><div><div><h3 class="title"> 8693<div class="titlepage"><div><div><h3 class="title">
8670<a name="installing-score-files"></a>19.6.3. Installing highscore files</h3></div></div></div> 8694<a name="installing-score-files"></a>19.6.3. Installing highscore files</h3></div></div></div>
8671<p>Certain packages, most of them in the games category, install 8695<p>Certain packages, most of them in the games category, install
8672 a score file that allows all users on the system to record their 8696 a score file that allows all users on the system to record their
8673 highscores. In order for this to work, the binaries need to be 8697 highscores. In order for this to work, the binaries need to be
8674 installed setgid and the score files owned by the appropriate 8698 installed setgid and the score files owned by the appropriate
8675 group and/or owner (traditionally the "games" user/group). Set 8699 group and/or owner (traditionally the "games" user/group). Set
8676 <code class="varname">USE_GAMESGROUP</code> to yes to support this. The 8700 <code class="varname">USE_GAMESGROUP</code> to yes to support this. The
8677 following variables, documented in more detail in 8701 following variables, documented in more detail in
8678 <code class="filename">mk/defaults/mk.conf</code>, control this 8702 <code class="filename">mk/defaults/mk.conf</code>, control this
8679 behaviour: <code class="varname">GAMEDATAMODE</code>, 8703 behaviour: <code class="varname">GAMEDATAMODE</code>,
8680 <code class="varname">GAMEDIRMODE</code>, <code class="varname">GAMES_GROUP</code>, 8704 <code class="varname">GAMEDIRMODE</code>, <code class="varname">GAMES_GROUP</code>,
8681 <code class="varname">GAMEMODE</code>, <code class="varname">GAME_USER</code>.</p> 8705 <code class="varname">GAMEMODE</code>, <code class="varname">GAME_USER</code>.</p>
8682<p>A package should therefore never hard code file ownership or 8706<p>A package should therefore never hard code file ownership or
8683 access permissions but rely on <code class="varname">INSTALL_GAME</code> and 8707 access permissions but rely on <code class="varname">INSTALL_GAME</code> and
8684 <code class="varname">INSTALL_GAME_DATA</code> to set these 8708 <code class="varname">INSTALL_GAME_DATA</code> to set these
8685 correctly.</p> 8709 correctly.</p>
8686</div> 8710</div>
8687<div class="sect2"> 8711<div class="sect2">
8688<div class="titlepage"><div><div><h3 class="title"> 8712<div class="titlepage"><div><div><h3 class="title">
8689<a name="destdir-support"></a>19.6.4. Adding DESTDIR support to packages</h3></div></div></div> 8713<a name="destdir-support"></a>19.6.4. Adding DESTDIR support to packages</h3></div></div></div>
8690<p><code class="varname">DESTDIR</code> support means that a package 8714<p><code class="varname">DESTDIR</code> support means that a package
8691 installs into a staging directory, not the final location of the 8715 installs into a staging directory, not the final location of the
8692 files. Then a binary package is created which can be used for 8716 files. Then a binary package is created which can be used for
8693 installation as usual. There are two ways: Either the package must 8717 installation as usual. There are two ways: Either the package must
8694 install as root (<span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span>) or the package can 8718 install as root (<span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span>) or the package can
8695 install as non-root user (<span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>).</p> 8719 install as non-root user (<span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>).</p>
8696<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8720<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8697<li class="listitem"><p><code class="varname">PKG_DESTDIR_SUPPORT</code> has to be 8721<li class="listitem"><p><code class="varname">PKG_DESTDIR_SUPPORT</code> has to be
8698 set to <span class="quote">&#8220;<span class="quote">none</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span>, or 8722 set to <span class="quote">&#8220;<span class="quote">none</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span>, or
8699 <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>. By default <code class="varname">PKG_DESTDIR_SUPPORT</code> 8723 <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>. By default <code class="varname">PKG_DESTDIR_SUPPORT</code>
8700 is set to <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span> to help catching more 8724 is set to <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span> to help catching more
8701 potential packaging problems. If bsd.prefs.mk is included in the Makefile, 8725 potential packaging problems. If bsd.prefs.mk is included in the Makefile,
8702 <code class="varname">PKG_DESTDIR_SUPPORT</code> needs to be set before 8726 <code class="varname">PKG_DESTDIR_SUPPORT</code> needs to be set before
8703 the inclusion.</p></li> 8727 the inclusion.</p></li>
8704<li class="listitem"><p>All installation operations have to be prefixed with 8728<li class="listitem"><p>All installation operations have to be prefixed with
8705 <code class="filename">${DESTDIR}</code>.</p></li> 8729 <code class="filename">${DESTDIR}</code>.</p></li>
8706<li class="listitem"><p>automake gets this DESTDIR mostly right 8730<li class="listitem"><p>automake gets this DESTDIR mostly right
8707 automatically. Many manual rules and pre/post-install often are 8731 automatically. Many manual rules and pre/post-install often are
8708 incorrect; fix them.</p></li> 8732 incorrect; fix them.</p></li>
8709<li class="listitem"><p>If files are installed with special owner/group 8733<li class="listitem"><p>If files are installed with special owner/group
8710 use <code class="varname">SPECIAL_PERMS</code>.</p></li> 8734 use <code class="varname">SPECIAL_PERMS</code>.</p></li>
8711<li class="listitem"><p>In general, packages should support 8735<li class="listitem"><p>In general, packages should support
8712 <code class="varname">UNPRIVILEGED</code> to be able to use 8736 <code class="varname">UNPRIVILEGED</code> to be able to use
8713 DESTDIR.</p></li> 8737 DESTDIR.</p></li>
8714</ul></div> 8738</ul></div>
8715</div> 8739</div>
8716<div class="sect2"> 8740<div class="sect2">
8717<div class="titlepage"><div><div><h3 class="title"> 8741<div class="titlepage"><div><div><h3 class="title">
8718<a name="hardcoded-paths"></a>19.6.5. Packages with hardcoded paths to other interpreters</h3></div></div></div> 8742<a name="hardcoded-paths"></a>19.6.5. Packages with hardcoded paths to other interpreters</h3></div></div></div>
8719<p>Your package may also contain scripts with hardcoded paths to 8743<p>Your package may also contain scripts with hardcoded paths to
8720 other interpreters besides (or as well as) perl. To correct the 8744 other interpreters besides (or as well as) perl. To correct the
8721 full pathname to the script interpreter, you need to set the 8745 full pathname to the script interpreter, you need to set the
8722 following definitions in your <code class="filename">Makefile</code> (we 8746 following definitions in your <code class="filename">Makefile</code> (we
8723 shall use <span class="command"><strong>tclsh</strong></span> in this example):</p> 8747 shall use <span class="command"><strong>tclsh</strong></span> in this example):</p>
8724<pre class="programlisting"> 8748<pre class="programlisting">
8725REPLACE_INTERPRETER+= tcl 8749REPLACE_INTERPRETER+= tcl
8726REPLACE.tcl.old= .*/bin/tclsh 8750REPLACE.tcl.old= .*/bin/tclsh
8727REPLACE.tcl.new= ${PREFIX}/bin/tclsh 8751REPLACE.tcl.new= ${PREFIX}/bin/tclsh
8728REPLACE_FILES.tcl= # list of tcl scripts which need to be fixed, 8752REPLACE_FILES.tcl= # list of tcl scripts which need to be fixed,
8729# relative to ${WRKSRC}, just as in REPLACE_PERL 8753# relative to ${WRKSRC}, just as in REPLACE_PERL
8730 </pre> 8754 </pre>
8731<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 8755<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
8732<h3 class="title">Note</h3> 8756<h3 class="title">Note</h3>
8733<p>Before March 2006, these variables were called 8757<p>Before March 2006, these variables were called
8734 <code class="varname">_REPLACE.*</code> and 8758 <code class="varname">_REPLACE.*</code> and
8735 <code class="varname">_REPLACE_FILES.*</code>.</p> 8759 <code class="varname">_REPLACE_FILES.*</code>.</p>
8736</div> 8760</div>
8737</div> 8761</div>
8738<div class="sect2"> 8762<div class="sect2">
8739<div class="titlepage"><div><div><h3 class="title"> 8763<div class="titlepage"><div><div><h3 class="title">
8740<a name="perl-modules"></a>19.6.6. Packages installing perl modules</h3></div></div></div> 8764<a name="perl-modules"></a>19.6.6. Packages installing perl modules</h3></div></div></div>
8741<p>Makefiles of packages providing perl5 modules should include 8765<p>Makefiles of packages providing perl5 modules should include
8742 the Makefile fragment 8766 the Makefile fragment
8743 <code class="filename">../../lang/perl5/module.mk</code>. It provides a 8767 <code class="filename">../../lang/perl5/module.mk</code>. It provides a
8744 <span class="command"><strong>do-configure</strong></span> target for the standard perl 8768 <span class="command"><strong>do-configure</strong></span> target for the standard perl
8745 configuration for such modules as well as various hooks to tune 8769 configuration for such modules as well as various hooks to tune
8746 this configuration. See comments in this file for 8770 this configuration. See comments in this file for
8747 details.</p> 8771 details.</p>
8748<p>Perl5 modules will install into different places depending 8772<p>Perl5 modules will install into different places depending
8749 on the version of perl used during the build process. To 8773 on the version of perl used during the build process. To
8750 address this, pkgsrc will append lines to the 8774 address this, pkgsrc will append lines to the
8751 <code class="filename">PLIST</code> corresponding to the files listed in 8775 <code class="filename">PLIST</code> corresponding to the files listed in
8752 the installed <code class="filename">.packlist</code> file generated by 8776 the installed <code class="filename">.packlist</code> file generated by
8753 most perl5 modules. This is invoked by defining 8777 most perl5 modules. This is invoked by defining
8754 <code class="varname">PERL5_PACKLIST</code> to a space-separated list of 8778 <code class="varname">PERL5_PACKLIST</code> to a space-separated list of
8755 packlist files relative to <code class="varname">PERL5_PACKLIST_DIR</code> 8779 packlist files relative to <code class="varname">PERL5_PACKLIST_DIR</code>
8756 (<code class="varname">PERL5_INSTALLVENDORARCH</code> by default), 8780 (<code class="varname">PERL5_INSTALLVENDORARCH</code> by default),
8757 e.g.:</p> 8781 e.g.:</p>
8758<pre class="programlisting"> 8782<pre class="programlisting">
8759PERL5_PACKLIST= auto/Pg/.packlist 8783PERL5_PACKLIST= auto/Pg/.packlist
8760 </pre> 8784 </pre>
8761<p>The perl5 config variables 8785<p>The perl5 config variables
8762 <code class="varname">installarchlib</code>, 8786 <code class="varname">installarchlib</code>,
8763 <code class="varname">installscript</code>, 8787 <code class="varname">installscript</code>,
8764 <code class="varname">installvendorbin</code>, 8788 <code class="varname">installvendorbin</code>,
8765 <code class="varname">installvendorscript</code>, 8789 <code class="varname">installvendorscript</code>,
8766 <code class="varname">installvendorarch</code>, 8790 <code class="varname">installvendorarch</code>,
8767 <code class="varname">installvendorlib</code>, 8791 <code class="varname">installvendorlib</code>,
8768 <code class="varname">installvendorman1dir</code>, and 8792 <code class="varname">installvendorman1dir</code>, and
8769 <code class="varname">installvendorman3dir</code> represent those 8793 <code class="varname">installvendorman3dir</code> represent those
8770 locations in which components of perl5 modules may be installed, 8794 locations in which components of perl5 modules may be installed,
8771 provided as variable with uppercase and prefixed with 8795 provided as variable with uppercase and prefixed with
8772 <code class="varname">PERL5_</code>, e.g. <code class="varname">PERL5_INSTALLARCHLIB</code> 8796 <code class="varname">PERL5_</code>, e.g. <code class="varname">PERL5_INSTALLARCHLIB</code>
8773 and may be used by perl5 packages that don't have a packlist. 8797 and may be used by perl5 packages that don't have a packlist.
8774 These variables are also substituted for in the 8798 These variables are also substituted for in the
8775 <code class="filename">PLIST</code> as uppercase prefixed with 8799 <code class="filename">PLIST</code> as uppercase prefixed with
8776 <code class="varname">PERL5_SUB_</code>.</p> 8800 <code class="varname">PERL5_SUB_</code>.</p>
8777</div> 8801</div>
8778<div class="sect2"> 8802<div class="sect2">
8779<div class="titlepage"><div><div><h3 class="title"> 8803<div class="titlepage"><div><div><h3 class="title">
8780<a name="faq.info-files"></a>19.6.7. Packages installing info files</h3></div></div></div> 8804<a name="faq.info-files"></a>19.6.7. Packages installing info files</h3></div></div></div>
8781<p>Some packages install info files or use the 8805<p>Some packages install info files or use the
8782 <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span> 8806 <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span>
8783 commands. <code class="varname">INFO_FILES</code> should be defined in 8807 commands. <code class="varname">INFO_FILES</code> should be defined in
8784 the package Makefile so that <code class="filename">INSTALL</code> and 8808 the package Makefile so that <code class="filename">INSTALL</code> and
8785 <code class="filename">DEINSTALL</code> scripts will be generated to 8809 <code class="filename">DEINSTALL</code> scripts will be generated to
8786 handle registration of the info files in the Info directory 8810 handle registration of the info files in the Info directory
8787 file. The <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span> command used for the info 8811 file. The <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span> command used for the info
8788 files registration is either provided by the system, or by a 8812 files registration is either provided by the system, or by a
8789 special purpose package automatically added as dependency if 8813 special purpose package automatically added as dependency if
8790 needed.</p> 8814 needed.</p>
8791<p><code class="varname">PKGINFODIR</code> is the directory under 8815<p><code class="varname">PKGINFODIR</code> is the directory under
8792 <code class="filename">${PREFIX}</code> where info files are primarily 8816 <code class="filename">${PREFIX}</code> where info files are primarily
8793 located. <code class="varname">PKGINFODIR</code> defaults to 8817 located. <code class="varname">PKGINFODIR</code> defaults to
8794 <span class="quote">&#8220;<span class="quote">info</span>&#8221;</span> and can be overridden by the user.</p> 8818 <span class="quote">&#8220;<span class="quote">info</span>&#8221;</span> and can be overridden by the user.</p>
8795<p>The info files for the package should be listed in the 8819<p>The info files for the package should be listed in the
8796 package <code class="filename">PLIST</code>; however any split info files 8820 package <code class="filename">PLIST</code>; however any split info files
8797 need not be listed.</p> 8821 need not be listed.</p>
8798<p>A package which needs the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command 8822<p>A package which needs the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command
8799 at build time must add <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> to 8823 at build time must add <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> to
8800 <code class="varname">USE_TOOLS</code> in its Makefile. If a minimum 8824 <code class="varname">USE_TOOLS</code> in its Makefile. If a minimum
8801 version of the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command is needed it 8825 version of the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command is needed it
8802 should be noted with the <code class="varname">TEXINFO_REQD</code> 8826 should be noted with the <code class="varname">TEXINFO_REQD</code>
8803 variable in the package <code class="filename">Makefile</code>. By 8827 variable in the package <code class="filename">Makefile</code>. By
8804 default, a minimum version of 3.12 is required. If the system 8828 default, a minimum version of 3.12 is required. If the system
8805 does not provide a <span class="command"><strong>makeinfo</strong></span> command or if it 8829 does not provide a <span class="command"><strong>makeinfo</strong></span> command or if it
8806 does not match the required minimum, a build dependency on the 8830 does not match the required minimum, a build dependency on the
8807 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/gtexinfo/README.html" target="_top"><code class="filename">devel/gtexinfo</code></a> package will 8831 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/gtexinfo/README.html" target="_top"><code class="filename">devel/gtexinfo</code></a> package will
8808 be added automatically.</p> 8832 be added automatically.</p>
8809<p>The build and installation process of the software provided 8833<p>The build and installation process of the software provided
8810 by the package should not use the 8834 by the package should not use the
8811 <span class="command"><strong>install-info</strong></span> command as the registration of 8835 <span class="command"><strong>install-info</strong></span> command as the registration of
8812 info files is the task of the package 8836 info files is the task of the package
8813 <code class="filename">INSTALL</code> script, and it must use the 8837 <code class="filename">INSTALL</code> script, and it must use the
8814 appropriate <span class="command"><strong>makeinfo</strong></span> command.</p> 8838 appropriate <span class="command"><strong>makeinfo</strong></span> command.</p>
8815<p>To achieve this goal, the pkgsrc infrastructure creates 8839<p>To achieve this goal, the pkgsrc infrastructure creates
8816 overriding scripts for the <span class="command"><strong>install-info</strong></span> and 8840 overriding scripts for the <span class="command"><strong>install-info</strong></span> and
8817 <span class="command"><strong>makeinfo</strong></span> commands in a directory listed early 8841 <span class="command"><strong>makeinfo</strong></span> commands in a directory listed early
8818 in <code class="varname">PATH</code>.</p> 8842 in <code class="varname">PATH</code>.</p>
8819<p>The script overriding <span class="command"><strong>install-info</strong></span> has 8843<p>The script overriding <span class="command"><strong>install-info</strong></span> has
8820 no effect except the logging of a message. The script overriding 8844 no effect except the logging of a message. The script overriding
8821 <span class="command"><strong>makeinfo</strong></span> logs a message and according to the 8845 <span class="command"><strong>makeinfo</strong></span> logs a message and according to the
8822 value of <code class="varname">TEXINFO_REQD</code> either runs the appropriate 8846 value of <code class="varname">TEXINFO_REQD</code> either runs the appropriate
8823 <span class="command"><strong>makeinfo</strong></span> command or exit on error.</p> 8847 <span class="command"><strong>makeinfo</strong></span> command or exit on error.</p>
8824</div> 8848</div>
8825<div class="sect2"> 8849<div class="sect2">
8826<div class="titlepage"><div><div><h3 class="title"> 8850<div class="titlepage"><div><div><h3 class="title">
8827<a name="manpages"></a>19.6.8. Packages installing man pages</h3></div></div></div> 8851<a name="manpages"></a>19.6.8. Packages installing man pages</h3></div></div></div>
8828<p>All packages that install manual pages should install them 8852<p>All packages that install manual pages should install them
8829 into the same directory, so that there is one common place to look 8853 into the same directory, so that there is one common place to look
8830 for them. In pkgsrc, this place is 8854 for them. In pkgsrc, this place is
8831 <code class="literal">${PREFIX}/${PKGMANDIR}</code>, and this expression 8855 <code class="literal">${PREFIX}/${PKGMANDIR}</code>, and this expression
8832 should be used in packages. The default for 8856 should be used in packages. The default for
8833 <code class="varname">PKGMANDIR</code> is 8857 <code class="varname">PKGMANDIR</code> is
8834 <span class="quote">&#8220;<span class="quote"><code class="filename">man</code></span>&#8221;</span>. Another often-used value 8858 <span class="quote">&#8220;<span class="quote"><code class="filename">man</code></span>&#8221;</span>. Another often-used value
8835 is <span class="quote">&#8220;<span class="quote"><code class="filename">share/man</code></span>&#8221;</span>.</p> 8859 is <span class="quote">&#8220;<span class="quote"><code class="filename">share/man</code></span>&#8221;</span>.</p>
8836<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 8860<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
8837<h3 class="title">Note</h3> 8861<h3 class="title">Note</h3>
8838<p>The support for a custom <code class="varname">PKGMANDIR</code> 8862<p>The support for a custom <code class="varname">PKGMANDIR</code>
8839 is far from complete.</p> 8863 is far from complete.</p>
8840</div> 8864</div>
8841<p>The <code class="filename">PLIST</code> files can just use 8865<p>The <code class="filename">PLIST</code> files can just use
8842 <code class="filename">man/</code> as the top level directory for the man 8866 <code class="filename">man/</code> as the top level directory for the man
8843 page file entries, and the pkgsrc framework will convert as 8867 page file entries, and the pkgsrc framework will convert as
8844 needed. In all other places, the correct 8868 needed. In all other places, the correct
8845 <code class="varname">PKGMANDIR</code> must be used.</p> 8869 <code class="varname">PKGMANDIR</code> must be used.</p>
8846<p>Packages that are 8870<p>Packages that are
8847 configured with <code class="varname">GNU_CONFIGURE</code> set as 8871 configured with <code class="varname">GNU_CONFIGURE</code> set as
8848 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, by default will use the 8872 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, by default will use the
8849 <code class="filename">./configure</code> 8873 <code class="filename">./configure</code>
8850 --mandir switch to set where the man pages should be installed. 8874 --mandir switch to set where the man pages should be installed.
8851 The path is <code class="varname">GNU_CONFIGURE_MANDIR</code> which defaults 8875 The path is <code class="varname">GNU_CONFIGURE_MANDIR</code> which defaults
8852 to <code class="varname">${PREFIX}/${PKGMANDIR}</code>.</p> 8876 to <code class="varname">${PREFIX}/${PKGMANDIR}</code>.</p>
8853<p>Packages that use <code class="varname">GNU_CONFIGURE</code> but do not 8877<p>Packages that use <code class="varname">GNU_CONFIGURE</code> but do not
8854 use --mandir, can set <code class="varname">CONFIGURE_HAS_MANDIR</code> 8878 use --mandir, can set <code class="varname">CONFIGURE_HAS_MANDIR</code>
8855 to <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span>. 8879 to <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span>.
8856 Or if the <code class="filename">./configure</code> script uses 8880 Or if the <code class="filename">./configure</code> script uses
8857 a non-standard use of --mandir, you can set 8881 a non-standard use of --mandir, you can set
8858 <code class="varname">GNU_CONFIGURE_MANDIR</code> as needed.</p> 8882 <code class="varname">GNU_CONFIGURE_MANDIR</code> as needed.</p>
8859<p>See <a class="xref" href="#manpage-compression" title="13.5. Man page compression">Section 13.5, &#8220;Man page compression&#8221;</a> for 8883<p>See <a class="xref" href="#manpage-compression" title="13.5. Man page compression">Section 13.5, &#8220;Man page compression&#8221;</a> for
8860 information on installation of compressed manual pages.</p> 8884 information on installation of compressed manual pages.</p>
8861</div> 8885</div>
8862<div class="sect2"> 8886<div class="sect2">
8863<div class="titlepage"><div><div><h3 class="title"> 8887<div class="titlepage"><div><div><h3 class="title">
8864<a name="gconf-data-files"></a>19.6.9. Packages installing GConf data files</h3></div></div></div> 8888<a name="gconf-data-files"></a>19.6.9. Packages installing GConf data files</h3></div></div></div>
8865<p>If a package installs <code class="filename">.schemas</code> or 8889<p>If a package installs <code class="filename">.schemas</code> or
8866 <code class="filename">.entries</code> files, used by GConf, 8890 <code class="filename">.entries</code> files, used by GConf,
8867 you need to take some extra steps to make sure they get registered 8891 you need to take some extra steps to make sure they get registered
8868 in the database:</p> 8892 in the database:</p>
8869<div class="orderedlist"><ol class="orderedlist" type="1"> 8893<div class="orderedlist"><ol class="orderedlist" type="1">
8870<li class="listitem"><p>Include <code class="filename">../../devel/GConf/schemas.mk</code> 8894<li class="listitem"><p>Include <code class="filename">../../devel/GConf/schemas.mk</code>
8871 instead of its <code class="filename">buildlink3.mk</code> file. This 8895 instead of its <code class="filename">buildlink3.mk</code> file. This
8872 takes care of rebuilding the GConf database at installation and 8896 takes care of rebuilding the GConf database at installation and
8873 deinstallation time, and tells the package where to install 8897 deinstallation time, and tells the package where to install
8874 GConf data files using some standard configure arguments. It 8898 GConf data files using some standard configure arguments. It
8875 also disallows any access to the database directly from the 8899 also disallows any access to the database directly from the
8876 package.</p></li> 8900 package.</p></li>
8877<li class="listitem"><p>Ensure that the package installs its 8901<li class="listitem"><p>Ensure that the package installs its
8878 <code class="filename">.schemas</code> files under 8902 <code class="filename">.schemas</code> files under
8879 <code class="filename">${PREFIX}/share/gconf/schemas</code>. If they get 8903 <code class="filename">${PREFIX}/share/gconf/schemas</code>. If they get
8880 installed under <code class="filename">${PREFIX}/etc</code>, you will 8904 installed under <code class="filename">${PREFIX}/etc</code>, you will
8881 need to manually patch the package.</p></li> 8905 need to manually patch the package.</p></li>
8882<li class="listitem"><p>Check the PLIST and remove any entries under the etc/gconf 8906<li class="listitem"><p>Check the PLIST and remove any entries under the etc/gconf
8883 directory, as they will be handled automatically. See 8907 directory, as they will be handled automatically. See
8884 <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> 8908 <a class="xref" href="#faq.conf" title="9.14. How do I change the location of configuration files?">Section 9.14, &#8220;How do I change the location of configuration files?&#8221;</a> for more information.</p></li>
8885<li class="listitem"><p>Define the <code class="varname">GCONF_SCHEMAS</code> variable in 8909<li class="listitem"><p>Define the <code class="varname">GCONF_SCHEMAS</code> variable in
8886 your <code class="filename">Makefile</code> with a list of all 8910 your <code class="filename">Makefile</code> with a list of all
8887 <code class="filename">.schemas</code> files installed by the package, if 8911 <code class="filename">.schemas</code> files installed by the package, if
8888 any. Names must not contain any directories in them.</p></li> 8912 any. Names must not contain any directories in them.</p></li>
8889<li class="listitem"><p>Define the <code class="varname">GCONF_ENTRIES</code> variable in 8913<li class="listitem"><p>Define the <code class="varname">GCONF_ENTRIES</code> variable in
8890 your <code class="filename">Makefile</code> with a 8914 your <code class="filename">Makefile</code> with a
8891 list of all <code class="filename">.entries</code> files installed by the 8915 list of all <code class="filename">.entries</code> files installed by the
8892 package, if any. Names must not contain any directories in 8916 package, if any. Names must not contain any directories in
8893 them.</p></li> 8917 them.</p></li>
8894</ol></div> 8918</ol></div>
8895</div> 8919</div>
8896<div class="sect2"> 8920<div class="sect2">
8897<div class="titlepage"><div><div><h3 class="title"> 8921<div class="titlepage"><div><div><h3 class="title">
8898<a name="scrollkeeper-data-files"></a>19.6.10. Packages installing scrollkeeper/rarian data files</h3></div></div></div> 8922<a name="scrollkeeper-data-files"></a>19.6.10. Packages installing scrollkeeper/rarian data files</h3></div></div></div>
8899<p>If a package installs <code class="filename">.omf</code> files, used by 8923<p>If a package installs <code class="filename">.omf</code> files, used by
8900 scrollkeeper/rarian, you need to take some extra steps to make sure they 8924 scrollkeeper/rarian, you need to take some extra steps to make sure they
8901 get registered in the database:</p> 8925 get registered in the database:</p>
8902<div class="orderedlist"><ol class="orderedlist" type="1"> 8926<div class="orderedlist"><ol class="orderedlist" type="1">
8903<li class="listitem"><p>Include 8927<li class="listitem"><p>Include
8904 <code class="filename">../../mk/omf-scrollkeeper.mk</code> 8928 <code class="filename">../../mk/omf-scrollkeeper.mk</code>
8905 instead of rarian's <code class="filename">buildlink3.mk</code> file. This 8929 instead of rarian's <code class="filename">buildlink3.mk</code> file. This
8906 takes care of rebuilding the scrollkeeper database at 8930 takes care of rebuilding the scrollkeeper database at
8907 installation and deinstallation time, and disallows any access 8931 installation and deinstallation time, and disallows any access
8908 to it directly from the package.</p></li> 8932 to it directly from the package.</p></li>
8909<li class="listitem"><p>Check the PLIST and remove any entries under the 8933<li class="listitem"><p>Check the PLIST and remove any entries under the
8910 <code class="filename">libdata/scrollkeeper</code> directory, as they 8934 <code class="filename">libdata/scrollkeeper</code> directory, as they
8911 will be handled automatically.</p></li> 8935 will be handled automatically.</p></li>
8912<li class="listitem"><p>Remove the <code class="filename">share/omf</code> directory from 8936<li class="listitem"><p>Remove the <code class="filename">share/omf</code> directory from
8913 the PLIST. It will be handled by rarian. (<span class="command"><strong>make 8937 the PLIST. It will be handled by rarian. (<span class="command"><strong>make
8914 print-PLIST</strong></span> does this automatically.)</p></li> 8938 print-PLIST</strong></span> does this automatically.)</p></li>
8915</ol></div> 8939</ol></div>
8916</div> 8940</div>
8917<div class="sect2"> 8941<div class="sect2">
8918<div class="titlepage"><div><div><h3 class="title"> 8942<div class="titlepage"><div><div><h3 class="title">
8919<a name="x11-fonts"></a>19.6.11. Packages installing X11 fonts</h3></div></div></div> 8943<a name="x11-fonts"></a>19.6.11. Packages installing X11 fonts</h3></div></div></div>
8920<p>If a package installs font files, you will need to rebuild 8944<p>If a package installs font files, you will need to rebuild
8921 the fonts database in the directory where they get installed at 8945 the fonts database in the directory where they get installed at
8922 installation and deinstallation time. This can be automatically 8946 installation and deinstallation time. This can be automatically
8923 done by using the pkginstall framework.</p> 8947 done by using the pkginstall framework.</p>
8924<p>You can list the directories where fonts are installed in the 8948<p>You can list the directories where fonts are installed in the
8925 <code class="varname">FONTS_DIRS.<em class="replaceable"><code>type</code></em></code> 8949 <code class="varname">FONTS_DIRS.<em class="replaceable"><code>type</code></em></code>
8926 variables, where <em class="replaceable"><code>type</code></em> can be one of 8950 variables, where <em class="replaceable"><code>type</code></em> can be one of
8927 <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>. 8951 <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>.
8928 Also make sure that the database file 8952 Also make sure that the database file
8929 <code class="filename">fonts.dir</code> is not listed in the PLIST.</p> 8953 <code class="filename">fonts.dir</code> is not listed in the PLIST.</p>
8930<p>Note that you should not create new directories for fonts; 8954<p>Note that you should not create new directories for fonts;
8931 instead use the standard ones to avoid that the user needs to 8955 instead use the standard ones to avoid that the user needs to
8932 manually configure his X server to find them.</p> 8956 manually configure his X server to find them.</p>
8933</div> 8957</div>
8934<div class="sect2"> 8958<div class="sect2">
8935<div class="titlepage"><div><div><h3 class="title"> 8959<div class="titlepage"><div><div><h3 class="title">
8936<a name="gtk2-modules"></a>19.6.12. Packages installing GTK2 modules</h3></div></div></div> 8960<a name="gtk2-modules"></a>19.6.12. Packages installing GTK2 modules</h3></div></div></div>
8937<p>If a package installs GTK2 immodules or loaders, you need to 8961<p>If a package installs GTK2 immodules or loaders, you need to
8938 take some extra steps to get them registered in the GTK2 database 8962 take some extra steps to get them registered in the GTK2 database
8939 properly:</p> 8963 properly:</p>
8940<div class="orderedlist"><ol class="orderedlist" type="1"> 8964<div class="orderedlist"><ol class="orderedlist" type="1">
8941<li class="listitem"><p>Include 8965<li class="listitem"><p>Include
8942 <code class="filename">../../x11/gtk2/modules.mk</code> instead of its 8966 <code class="filename">../../x11/gtk2/modules.mk</code> instead of its
8943 <code class="filename">buildlink3.mk</code> file. This takes care of 8967 <code class="filename">buildlink3.mk</code> file. This takes care of
8944 rebuilding the database at installation and deinstallation time.</p></li> 8968 rebuilding the database at installation and deinstallation time.</p></li>
8945<li class="listitem"><p>Set <code class="varname">GTK2_IMMODULES=YES</code> if 8969<li class="listitem"><p>Set <code class="varname">GTK2_IMMODULES=YES</code> if
8946 your package installs GTK2 immodules.</p></li> 8970 your package installs GTK2 immodules.</p></li>
8947<li class="listitem"><p>Set <code class="varname">GTK2_LOADERS=YES</code> if your package installs 8971<li class="listitem"><p>Set <code class="varname">GTK2_LOADERS=YES</code> if your package installs
8948 GTK2 loaders.</p></li> 8972 GTK2 loaders.</p></li>
8949<li class="listitem"> 8973<li class="listitem">
8950<p>Patch the package to not touch any of the GTK2 8974<p>Patch the package to not touch any of the GTK2
8951 databases directly. These are:</p> 8975 databases directly. These are:</p>
8952<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8976<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8953<li class="listitem"><p><code class="filename">libdata/gtk-2.0/gdk-pixbuf.loaders</code></p></li> 8977<li class="listitem"><p><code class="filename">libdata/gtk-2.0/gdk-pixbuf.loaders</code></p></li>
8954<li class="listitem"><p><code class="filename">libdata/gtk-2.0/gtk.immodules</code></p></li> 8978<li class="listitem"><p><code class="filename">libdata/gtk-2.0/gtk.immodules</code></p></li>
8955</ul></div> 8979</ul></div>
8956</li> 8980</li>
8957<li class="listitem"><p>Check the <code class="filename">PLIST</code> and remove 8981<li class="listitem"><p>Check the <code class="filename">PLIST</code> and remove
8958 any entries under the <code class="filename">libdata/gtk-2.0</code> 8982 any entries under the <code class="filename">libdata/gtk-2.0</code>
8959 directory, as they will be handled automatically.</p></li> 8983 directory, as they will be handled automatically.</p></li>
8960</ol></div> 8984</ol></div>
8961</div> 8985</div>
8962<div class="sect2"> 8986<div class="sect2">
8963<div class="titlepage"><div><div><h3 class="title"> 8987<div class="titlepage"><div><div><h3 class="title">
8964<a name="sgml-xml-data"></a>19.6.13. Packages installing SGML or XML data</h3></div></div></div> 8988<a name="sgml-xml-data"></a>19.6.13. Packages installing SGML or XML data</h3></div></div></div>
8965<p>If a package installs SGML or XML data files that need to be 8989<p>If a package installs SGML or XML data files that need to be
8966 registered in system-wide catalogs (like DTDs, sub-catalogs, 8990 registered in system-wide catalogs (like DTDs, sub-catalogs,
8967 etc.), you need to take some extra steps:</p> 8991 etc.), you need to take some extra steps:</p>
8968<div class="orderedlist"><ol class="orderedlist" type="1"> 8992<div class="orderedlist"><ol class="orderedlist" type="1">
8969<li class="listitem"><p>Include 8993<li class="listitem"><p>Include
8970 <code class="filename">../../textproc/xmlcatmgr/catalogs.mk</code> in 8994 <code class="filename">../../textproc/xmlcatmgr/catalogs.mk</code> in
8971 your <code class="filename">Makefile</code>, which takes care of 8995 your <code class="filename">Makefile</code>, which takes care of
8972 registering those files in system-wide catalogs at 8996 registering those files in system-wide catalogs at
8973 installation and deinstallation time.</p></li> 8997 installation and deinstallation time.</p></li>
8974<li class="listitem"><p>Set <code class="varname">SGML_CATALOGS</code> to the full path of 8998<li class="listitem"><p>Set <code class="varname">SGML_CATALOGS</code> to the full path of
8975 any SGML catalogs installed by the package.</p></li> 8999 any SGML catalogs installed by the package.</p></li>
8976<li class="listitem"><p>Set <code class="varname">XML_CATALOGS</code> to the full path of 9000<li class="listitem"><p>Set <code class="varname">XML_CATALOGS</code> to the full path of
8977 any XML catalogs installed by the package.</p></li> 9001 any XML catalogs installed by the package.</p></li>
8978<li class="listitem"><p>Set <code class="varname">SGML_ENTRIES</code> to individual entries 9002<li class="listitem"><p>Set <code class="varname">SGML_ENTRIES</code> to individual entries
8979 to be added to the SGML catalog. These come in groups of 9003 to be added to the SGML catalog. These come in groups of
8980 three strings; see xmlcatmgr(1) for more information 9004 three strings; see xmlcatmgr(1) for more information
8981 (specifically, arguments recognized by the 'add' action). 9005 (specifically, arguments recognized by the 'add' action).
8982 Note that you will normally not use this variable.</p></li> 9006 Note that you will normally not use this variable.</p></li>
8983<li class="listitem"><p>Set <code class="varname">XML_ENTRIES</code> to individual entries 9007<li class="listitem"><p>Set <code class="varname">XML_ENTRIES</code> to individual entries
8984 to be added to the XML catalog. These come in groups of three 9008 to be added to the XML catalog. These come in groups of three
8985 strings; see xmlcatmgr(1) for more information (specifically, 9009 strings; see xmlcatmgr(1) for more information (specifically,
8986 arguments recognized by the 'add' action). Note that you will 9010 arguments recognized by the 'add' action). Note that you will
8987 normally not use this variable.</p></li> 9011 normally not use this variable.</p></li>
8988</ol></div> 9012</ol></div>
8989</div> 9013</div>
8990<div class="sect2"> 9014<div class="sect2">
8991<div class="titlepage"><div><div><h3 class="title"> 9015<div class="titlepage"><div><div><h3 class="title">
8992<a name="mime-database"></a>19.6.14. Packages installing extensions to the MIME database</h3></div></div></div> 9016<a name="mime-database"></a>19.6.14. Packages installing extensions to the MIME database</h3></div></div></div>
8993<p>If a package provides extensions to the MIME database by 9017<p>If a package provides extensions to the MIME database by
8994 installing <code class="filename">.xml</code> files inside 9018 installing <code class="filename">.xml</code> files inside
8995 <code class="filename">${PREFIX}/share/mime/packages</code>, you 9019 <code class="filename">${PREFIX}/share/mime/packages</code>, you
8996 need to take some extra steps to ensure that the database is kept 9020 need to take some extra steps to ensure that the database is kept
8997 consistent with respect to these new files:</p> 9021 consistent with respect to these new files:</p>
8998<div class="orderedlist"><ol class="orderedlist" type="1"> 9022<div class="orderedlist"><ol class="orderedlist" type="1">
8999<li class="listitem"><p>Include 9023<li class="listitem"><p>Include
9000 <code class="filename">../../databases/shared-mime-info/mimedb.mk</code> 9024 <code class="filename">../../databases/shared-mime-info/mimedb.mk</code>
9001 (avoid using the <code class="filename">buildlink3.mk</code> file from 9025 (avoid using the <code class="filename">buildlink3.mk</code> file from
9002 this same directory, which is reserved for inclusion from 9026 this same directory, which is reserved for inclusion from
9003 other <code class="filename">buildlink3.mk</code> files). It takes 9027 other <code class="filename">buildlink3.mk</code> files). It takes
9004 care of rebuilding the MIME database at installation and 9028 care of rebuilding the MIME database at installation and
9005 deinstallation time, and disallows any access to it directly 9029 deinstallation time, and disallows any access to it directly
9006 from the package.</p></li> 9030 from the package.</p></li>
9007<li class="listitem"><p>Check the PLIST and remove any entries under the 9031<li class="listitem"><p>Check the PLIST and remove any entries under the
9008 <code class="filename">share/mime</code> directory, 9032 <code class="filename">share/mime</code> directory,
9009 <span class="emphasis"><em>except</em></span> for files saved under 9033 <span class="emphasis"><em>except</em></span> for files saved under
9010 <code class="filename">share/mime/packages</code>. The former are 9034 <code class="filename">share/mime/packages</code>. The former are
9011 handled automatically by 9035 handled automatically by
9012 the update-mime-database program, but the latter are 9036 the update-mime-database program, but the latter are
9013 package-dependent and must be removed by the package that 9037 package-dependent and must be removed by the package that
9014 installed them in the first place.</p></li> 9038 installed them in the first place.</p></li>
9015<li class="listitem"><p>Remove any <code class="filename">share/mime/*</code> directories 9039<li class="listitem"><p>Remove any <code class="filename">share/mime/*</code> directories
9016 from the PLIST. They will be handled by the shared-mime-info 9040 from the PLIST. They will be handled by the shared-mime-info
9017 package.</p></li> 9041 package.</p></li>
9018</ol></div> 9042</ol></div>
9019</div> 9043</div>
9020<div class="sect2"> 9044<div class="sect2">
9021<div class="titlepage"><div><div><h3 class="title"> 9045<div class="titlepage"><div><div><h3 class="title">
9022<a name="intltool"></a>19.6.15. Packages using intltool</h3></div></div></div> 9046<a name="intltool"></a>19.6.15. Packages using intltool</h3></div></div></div>
9023<p>If a package uses intltool during its build, add 9047<p>If a package uses intltool during its build, add
9024 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code>, 9048 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code>,
9025 which forces it to use the intltool package provided by pkgsrc, 9049 which forces it to use the intltool package provided by pkgsrc,
9026 instead of the one bundled with the distribution file.</p> 9050 instead of the one bundled with the distribution file.</p>
9027<p>This tracks intltool's build-time dependencies and uses the 9051<p>This tracks intltool's build-time dependencies and uses the
9028 latest available version; this way, the package benefits of any 9052 latest available version; this way, the package benefits of any
9029 bug fixes that may have appeared since it was released.</p> 9053 bug fixes that may have appeared since it was released.</p>
9030</div> 9054</div>
9031<div class="sect2"> 9055<div class="sect2">
9032<div class="titlepage"><div><div><h3 class="title"> 9056<div class="titlepage"><div><div><h3 class="title">
9033<a name="startup-scripts"></a>19.6.16. Packages installing startup scripts</h3></div></div></div> 9057<a name="startup-scripts"></a>19.6.16. Packages installing startup scripts</h3></div></div></div>
9034<p>If a package contains a rc.d script, it won't be copied into 9058<p>If a package contains a rc.d script, it won't be copied into
9035 the startup directory by default, but you can enable it, by adding 9059 the startup directory by default, but you can enable it, by adding
9036 the option <code class="varname">PKG_RCD_SCRIPTS=YES</code> in 9060 the option <code class="varname">PKG_RCD_SCRIPTS=YES</code> in
9037 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. This option will copy the scripts 9061 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. This option will copy the scripts
9038 into <code class="filename">/etc/rc.d</code> when a package is installed, and 9062 into <code class="filename">/etc/rc.d</code> when a package is installed, and
9039 it will automatically remove the scripts when the package is 9063 it will automatically remove the scripts when the package is
9040 deinstalled.</p> 9064 deinstalled.</p>
9041</div> 9065</div>
9042<div class="sect2"> 9066<div class="sect2">
9043<div class="titlepage"><div><div><h3 class="title"> 9067<div class="titlepage"><div><div><h3 class="title">
9044<a name="tex-packages"></a>19.6.17. Packages installing TeX modules</h3></div></div></div> 9068<a name="tex-packages"></a>19.6.17. Packages installing TeX modules</h3></div></div></div>
9045<p>If a package installs TeX packages into the texmf tree, 9069<p>If a package installs TeX packages into the texmf tree,
9046 the <code class="filename">ls-R</code> database of the tree needs to be 9070 the <code class="filename">ls-R</code> database of the tree needs to be
9047 updated.</p> 9071 updated.</p>
9048<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 9072<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
9049<h3 class="title">Note</h3> 9073<h3 class="title">Note</h3>
9050<p>Except the main TeX packages such as kpathsea, 9074<p>Except the main TeX packages such as kpathsea,
9051 packages should install files 9075 packages should install files
9052 into <code class="filename">${PREFIX}/share/texmf-dist</code>, 9076 into <code class="filename">${PREFIX}/share/texmf-dist</code>,
9053 not <code class="filename">${PREFIX}/share/texmf</code>.</p> 9077 not <code class="filename">${PREFIX}/share/texmf</code>.</p>
9054</div> 9078</div>
9055<div class="orderedlist"><ol class="orderedlist" type="1"> 9079<div class="orderedlist"><ol class="orderedlist" type="1">
9056<li class="listitem"><p>Include 9080<li class="listitem"><p>Include
9057 <code class="filename">../../print/kpathsea/texmf.mk</code>. This 9081 <code class="filename">../../print/kpathsea/texmf.mk</code>. This
9058 takes care of rebuilding the <code class="filename">ls-R</code> 9082 takes care of rebuilding the <code class="filename">ls-R</code>
9059 database at installation and deinstallation time.</p></li> 9083 database at installation and deinstallation time.</p></li>
9060<li class="listitem"> 9084<li class="listitem">
9061<p>If your package installs files into a texmf 9085<p>If your package installs files into a texmf
9062 tree other than the one 9086 tree other than the one
9063 at <code class="filename">${PREFIX}/share/texmf-dist</code>, 9087 at <code class="filename">${PREFIX}/share/texmf-dist</code>,
9064 set <code class="varname">TEX_TEXMF_DIRS</code> to the list of all texmf 9088 set <code class="varname">TEX_TEXMF_DIRS</code> to the list of all texmf
9065 trees that need database update.</p> 9089 trees that need database update.</p>
9066<p>If your package also installs font map files that need 9090<p>If your package also installs font map files that need
9067 to be registered using <span class="command"><strong>updmap</strong></span>, 9091 to be registered using <span class="command"><strong>updmap</strong></span>,
9068 include <code class="filename">../../print/tex-tetex/map.mk</code> and 9092 include <code class="filename">../../print/tex-tetex/map.mk</code> and
9069 set <code class="varname">TEX_MAP_FILES</code> and/or 9093 set <code class="varname">TEX_MAP_FILES</code> and/or
9070 <code class="varname">TEX_MIXEDMAP_FILES</code> to the list of all 9094 <code class="varname">TEX_MIXEDMAP_FILES</code> to the list of all
9071 such font map files. Then <span class="command"><strong>updmap</strong></span> will 9095 such font map files. Then <span class="command"><strong>updmap</strong></span> will
9072 be run automatically at installation/deinstallation to 9096 be run automatically at installation/deinstallation to
9073 enable/disable font map files for TeX output 9097 enable/disable font map files for TeX output
9074 drivers.</p> 9098 drivers.</p>
9075</li> 9099</li>
9076<li class="listitem"><p>Make sure that none of <code class="filename">ls-R</code> 9100<li class="listitem"><p>Make sure that none of <code class="filename">ls-R</code>
9077 databases are included in <code class="filename">PLIST</code>, as 9101 databases are included in <code class="filename">PLIST</code>, as
9078 they will be removed only by the kpathsea package.</p></li> 9102 they will be removed only by the kpathsea package.</p></li>
9079</ol></div> 9103</ol></div>
9080</div> 9104</div>
9081<div class="sect2"> 9105<div class="sect2">
9082<div class="titlepage"><div><div><h3 class="title"> 9106<div class="titlepage"><div><div><h3 class="title">
9083<a name="emulation-packages"></a>19.6.18. Packages supporting running binaries in 9107<a name="emulation-packages"></a>19.6.18. Packages supporting running binaries in
9084 emulation</h3></div></div></div> 9108 emulation</h3></div></div></div>
9085<p>There are some packages that provide libraries and 9109<p>There are some packages that provide libraries and
9086 executables for running binaries from a one operating system 9110 executables for running binaries from a one operating system
9087 on a different one (if the latter supports it). One example 9111 on a different one (if the latter supports it). One example
9088 is running Linux binaries on NetBSD.</p> 9112 is running Linux binaries on NetBSD.</p>
9089<p>The <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/rpm2pkg/README.html" target="_top"><code class="filename">pkgtools/rpm2pkg</code></a> 9113<p>The <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/rpm2pkg/README.html" target="_top"><code class="filename">pkgtools/rpm2pkg</code></a>
9090 helps in extracting and packaging Linux rpm packages.</p> 9114 helps in extracting and packaging Linux rpm packages.</p>
9091<p>The <code class="varname">CHECK_SHLIBS</code> can be set to no to 9115<p>The <code class="varname">CHECK_SHLIBS</code> can be set to no to
9092 avoid the <span class="command"><strong>check-shlibs</strong></span> target, which tests 9116 avoid the <span class="command"><strong>check-shlibs</strong></span> target, which tests
9093 if all libraries for each installed executable can be found by 9117 if all libraries for each installed executable can be found by
9094 the dynamic linker. Since the standard dynamic linker is run, 9118 the dynamic linker. Since the standard dynamic linker is run,
9095 this fails for emulation packages, because the libraries used 9119 this fails for emulation packages, because the libraries used
9096 by the emulation are not in the standard directories.</p> 9120 by the emulation are not in the standard directories.</p>
9097</div> 9121</div>
9098<div class="sect2"> 9122<div class="sect2">
9099<div class="titlepage"><div><div><h3 class="title"> 9123<div class="titlepage"><div><div><h3 class="title">
9100<a name="hicolor-theme"></a>19.6.19. Packages installing hicolor theme icons</h3></div></div></div> 9124<a name="hicolor-theme"></a>19.6.19. Packages installing hicolor theme icons</h3></div></div></div>
9101<p>If a package installs images under the 9125<p>If a package installs images under the
9102 <code class="filename">share/icons/hicolor</code> and/or updates the 9126 <code class="filename">share/icons/hicolor</code> and/or updates the
9103 <code class="filename">share/icons/hicolor/icon-theme.cache</code> 9127 <code class="filename">share/icons/hicolor/icon-theme.cache</code>
9104 database, you need to take some extra steps to make sure that the 9128 database, you need to take some extra steps to make sure that the
9105 shared theme directory is handled appropriately and that the cache 9129 shared theme directory is handled appropriately and that the cache
9106 database is rebuilt:</p> 9130 database is rebuilt:</p>
9107<div class="orderedlist"><ol class="orderedlist" type="1"> 9131<div class="orderedlist"><ol class="orderedlist" type="1">
9108<li class="listitem"><p>Include 9132<li class="listitem"><p>Include
9109 <code class="filename">../../graphics/hicolor-icon-theme/buildlink3.mk</code>.</p></li> 9133 <code class="filename">../../graphics/hicolor-icon-theme/buildlink3.mk</code>.</p></li>
9110<li class="listitem"><p>Check the <code class="filename">PLIST</code> and remove the 9134<li class="listitem"><p>Check the <code class="filename">PLIST</code> and remove the
9111 entry that refers to the theme cache.</p></li> 9135 entry that refers to the theme cache.</p></li>
9112<li class="listitem"><p>Ensure that the PLIST does not remove the shared icon 9136<li class="listitem"><p>Ensure that the PLIST does not remove the shared icon
9113 directories from the <code class="filename">share/icons/hicolor</code> 9137 directories from the <code class="filename">share/icons/hicolor</code>
9114 hierarchy because they will be handled automatically.</p></li> 9138 hierarchy because they will be handled automatically.</p></li>
9115</ol></div> 9139</ol></div>
9116<p>The best way to verify that the PLIST is correct with 9140<p>The best way to verify that the PLIST is correct with
9117 respect to the last two points is to regenerate it using 9141 respect to the last two points is to regenerate it using
9118 <span class="command"><strong>make print-PLIST</strong></span>.</p> 9142 <span class="command"><strong>make print-PLIST</strong></span>.</p>
9119</div> 9143</div>
9120<div class="sect2"> 9144<div class="sect2">
9121<div class="titlepage"><div><div><h3 class="title"> 9145<div class="titlepage"><div><div><h3 class="title">
9122<a name="desktop-files"></a>19.6.20. Packages installing desktop files</h3></div></div></div> 9146<a name="desktop-files"></a>19.6.20. Packages installing desktop files</h3></div></div></div>
9123<p>If a package installs <code class="filename">.desktop</code> files 9147<p>If a package installs <code class="filename">.desktop</code> files
9124 under <code class="filename">share/applications</code> and these include 9148 under <code class="filename">share/applications</code> and these include
9125 MIME information (MimeType key), you need to take extra steps to 9149 MIME information (MimeType key), you need to take extra steps to
9126 ensure that they are registered into the MIME database:</p> 9150 ensure that they are registered into the MIME database:</p>
9127<div class="orderedlist"><ol class="orderedlist" type="1"> 9151<div class="orderedlist"><ol class="orderedlist" type="1">
9128<li class="listitem"><p>Include 9152<li class="listitem"><p>Include
9129 <code class="filename">../../sysutils/desktop-file-utils/desktopdb.mk</code>.</p></li> 9153 <code class="filename">../../sysutils/desktop-file-utils/desktopdb.mk</code>.</p></li>
9130<li class="listitem"><p>Check the PLIST and remove the entry that refers to the 9154<li class="listitem"><p>Check the PLIST and remove the entry that refers to the
9131 <code class="filename">share/applications/mimeinfo.cache</code> file. 9155 <code class="filename">share/applications/mimeinfo.cache</code> file.
9132 It will be handled automatically.</p></li> 9156 It will be handled automatically.</p></li>
9133</ol></div> 9157</ol></div>
9134<p>The best way to verify that the PLIST is correct with 9158<p>The best way to verify that the PLIST is correct with
9135 respect to the last point is to regenerate it using <span class="command"><strong>make 9159 respect to the last point is to regenerate it using <span class="command"><strong>make
9136 print-PLIST</strong></span>.</p> 9160 print-PLIST</strong></span>.</p>
9137</div> 9161</div>
9138</div> 9162</div>
9139<div class="sect1"> 9163<div class="sect1">
9140<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9164<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9141<a name="punting"></a>19.7. Marking packages as having problems</h2></div></div></div> 9165<a name="punting"></a>19.7. Marking packages as having problems</h2></div></div></div>
9142<p>In some cases one does not have the time to solve a problem 9166<p>In some cases one does not have the time to solve a problem
9143 immediately. In this case, one can plainly mark a package as broken. For 9167 immediately. In this case, one can plainly mark a package as broken. For
9144 this, one just sets the variable <code class="varname">BROKEN</code> to the 9168 this, one just sets the variable <code class="varname">BROKEN</code> to the
9145 reason why the package is broken (similar to the 9169 reason why the package is broken (similar to the
9146 <code class="varname">RESTRICTED</code> variable). A user trying to build 9170 <code class="varname">RESTRICTED</code> variable). A user trying to build
9147 the package will immediately be shown this message, and the build 9171 the package will immediately be shown this message, and the build
9148 will not be even tried.</p> 9172 will not be even tried.</p>
9149<p><code class="varname">BROKEN</code> packages are removed from pkgsrc in irregular 9173<p><code class="varname">BROKEN</code> packages are removed from pkgsrc in irregular
9150 intervals.</p> 9174 intervals.</p>
9151</div> 9175</div>
9152</div> 9176</div>
9153<div class="chapter"> 9177<div class="chapter">
9154<div class="titlepage"><div><div><h2 class="title"> 9178<div class="titlepage"><div><div><h2 class="title">
9155<a name="debug"></a>Chapter 20. Debugging</h2></div></div></div> 9179<a name="debug"></a>Chapter 20. Debugging</h2></div></div></div>
9156<p>To check out all the gotchas when building a package, here are 9180<p>To check out all the gotchas when building a package, here are
9157 the steps that I do in order to get a package working. Please note 9181 the steps that I do in order to get a package working. Please note
9158 this is basically the same as what was explained in the previous 9182 this is basically the same as what was explained in the previous
9159 sections, only with some debugging aids.</p> 9183 sections, only with some debugging aids.</p>
9160<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9184<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9161<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> 9185<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>
9162<li class="listitem"> 9186<li class="listitem">
9163<p>Install <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a>, 9187<p>Install <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/url2pkg/README.html" target="_top"><code class="filename">pkgtools/url2pkg</code></a>,
9164 create a directory for a new package, change into it, then run 9188 create a directory for a new package, change into it, then run
9165 <span class="command"><strong>url2pkg</strong></span>:</p> 9189 <span class="command"><strong>url2pkg</strong></span>:</p>
9166<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> 9190<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>
9167<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> 9191<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>
9168<code class="prompt">%</code> <strong class="userinput"><code>url2pkg http://www.example.com/path/to/distfile.tar.gz</code></strong></pre> 9192<code class="prompt">%</code> <strong class="userinput"><code>url2pkg http://www.example.com/path/to/distfile.tar.gz</code></strong></pre>
9169</li> 9193</li>
9170<li class="listitem"><p>Edit the <code class="filename">Makefile</code> as requested.</p></li> 9194<li class="listitem"><p>Edit the <code class="filename">Makefile</code> as requested.</p></li>
9171<li class="listitem"><p>Fill in the <code class="filename">DESCR</code> file</p></li> 9195<li class="listitem"><p>Fill in the <code class="filename">DESCR</code> file</p></li>
9172<li class="listitem"><p>Run <span class="command"><strong>make configure</strong></span></p></li> 9196<li class="listitem"><p>Run <span class="command"><strong>make configure</strong></span></p></li>
9173<li class="listitem"><p>Add any dependencies glimpsed from documentation and the 9197<li class="listitem"><p>Add any dependencies glimpsed from documentation and the
9174 configure step to the package's 9198 configure step to the package's
9175 <code class="filename">Makefile</code>.</p></li> 9199 <code class="filename">Makefile</code>.</p></li>
9176<li class="listitem"> 9200<li class="listitem">
9177<p>Make the package compile, doing multiple rounds of</p> 9201<p>Make the package compile, doing multiple rounds of</p>
9178<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make</code></strong> 9202<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>make</code></strong>
9179<code class="prompt">%</code> <strong class="userinput"><code>pkgvi ${WRKSRC}/some/file/that/does/not/compile</code></strong> 9203<code class="prompt">%</code> <strong class="userinput"><code>pkgvi ${WRKSRC}/some/file/that/does/not/compile</code></strong>
9180<code class="prompt">%</code> <strong class="userinput"><code>mkpatches</code></strong> 9204<code class="prompt">%</code> <strong class="userinput"><code>mkpatches</code></strong>
9181<code class="prompt">%</code> <strong class="userinput"><code>patchdiff</code></strong> 9205<code class="prompt">%</code> <strong class="userinput"><code>patchdiff</code></strong>
9182<code class="prompt">%</code> <strong class="userinput"><code>mv ${WRKDIR}/.newpatches/* patches</code></strong> 9206<code class="prompt">%</code> <strong class="userinput"><code>mv ${WRKDIR}/.newpatches/* patches</code></strong>
9183<code class="prompt">%</code> <strong class="userinput"><code>make mps</code></strong> 9207<code class="prompt">%</code> <strong class="userinput"><code>make mps</code></strong>
9184<code class="prompt">%</code> <strong class="userinput"><code>make clean</code></strong></pre> 9208<code class="prompt">%</code> <strong class="userinput"><code>make clean</code></strong></pre>
9185<p>Doing this step as non-root user will ensure that no files 9209<p>Doing this step as non-root user will ensure that no files
9186 are modified that shouldn't be, especially during the build 9210 are modified that shouldn't be, especially during the build
9187 phase. <span class="command"><strong>mkpatches</strong></span>, 9211 phase. <span class="command"><strong>mkpatches</strong></span>,
9188 <span class="command"><strong>patchdiff</strong></span> and <span class="command"><strong>pkgvi</strong></span> are 9212 <span class="command"><strong>patchdiff</strong></span> and <span class="command"><strong>pkgvi</strong></span> are
9189 from the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> 9213 from the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/README.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a>
9190 package.</p> 9214 package.</p>
9191</li> 9215</li>
9192<li class="listitem"><p>Look at the <code class="filename">Makefile</code>, fix if 9216<li class="listitem"><p>Look at the <code class="filename">Makefile</code>, fix if
9193 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> 9217 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>
9194<li class="listitem"> 9218<li class="listitem">
9195<p>Generate a <code class="filename">PLIST</code>:</p> 9219<p>Generate a <code class="filename">PLIST</code>:</p>
9196<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong> 9220<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong>
9197<code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST &gt;PLIST</code></strong> 9221<code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST &gt;PLIST</code></strong>
9198<code class="prompt">#</code> <strong class="userinput"><code>make deinstall</code></strong> 9222<code class="prompt">#</code> <strong class="userinput"><code>make deinstall</code></strong>
9199<code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong> 9223<code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong>
9200<code class="prompt">#</code> <strong class="userinput"><code>make deinstall</code></strong></pre> 9224<code class="prompt">#</code> <strong class="userinput"><code>make deinstall</code></strong></pre>
9201<p>You usually need to be <code class="username">root</code> to do 9225<p>You usually need to be <code class="username">root</code> to do
9202 this. Look if there are any files left:</p> 9226 this. Look if there are any files left:</p>
9203<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST</code></strong></pre> 9227<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST</code></strong></pre>
9204<p>If this reveals any files that are missing in 9228<p>If this reveals any files that are missing in
9205 <code class="filename">PLIST</code>, add them.</p> 9229 <code class="filename">PLIST</code>, add them.</p>
9206</li> 9230</li>
9207<li class="listitem"> 9231<li class="listitem">
9208<p>Now that the <code class="filename">PLIST</code> is OK, install the 9232<p>Now that the <code class="filename">PLIST</code> is OK, install the
9209 package again and make a binary package:</p> 9233 package again and make a binary package:</p>
9210<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make reinstall</code></strong> 9234<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make reinstall</code></strong>
9211<code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong></pre> 9235<code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong></pre>
9212</li> 9236</li>
9213<li class="listitem"> 9237<li class="listitem">
9214<p>Delete the installed package:</p> 9238<p>Delete the installed package:</p>
9215<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkg_delete <em class="replaceable"><code>examplepkg</code></em></code></strong></pre> 9239<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkg_delete <em class="replaceable"><code>examplepkg</code></em></code></strong></pre>
9216</li> 9240</li>
9217<li class="listitem"> 9241<li class="listitem">
9218<p>Repeat the above <span class="command"><strong>make print-PLIST</strong></span> 9242<p>Repeat the above <span class="command"><strong>make print-PLIST</strong></span>
9219 command, which shouldn't find anything now:</p> 9243 command, which shouldn't find anything now:</p>
9220<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST</code></strong></pre> 9244<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make print-PLIST</code></strong></pre>
9221</li> 9245</li>
9222<li class="listitem"> 9246<li class="listitem">
9223<p>Reinstall the binary package:</p> 9247<p>Reinstall the binary package:</p>
9224<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkg_add .../<em class="replaceable"><code>examplepkg</code></em>.tgz</code></strong></pre> 9248<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkg_add .../<em class="replaceable"><code>examplepkg</code></em>.tgz</code></strong></pre>
9225</li> 9249</li>
9226<li class="listitem"><p>Play with it. Make sure everything works.</p></li> 9250<li class="listitem"><p>Play with it. Make sure everything works.</p></li>
9227<li class="listitem"> 9251<li class="listitem">
9228<p>Run <span class="command"><strong>pkglint</strong></span> from <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>, and fix the problems it 9252<p>Run <span class="command"><strong>pkglint</strong></span> from <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>, and fix the problems it
9229 reports:</p> 9253 reports:</p>
9230<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkglint</code></strong></pre> 9254<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>pkglint</code></strong></pre>
9231</li> 9255</li>
9232<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> 9256<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>
9233</ul></div> 9257</ul></div>
9234</div> 9258</div>
9235<div class="chapter"> 9259<div class="chapter">
9236<div class="titlepage"><div><div><h2 class="title"> 9260<div class="titlepage"><div><div><h2 class="title">
9237<a name="submit"></a>Chapter 21. Submitting and Committing</h2></div></div></div> 9261<a name="submit"></a>Chapter 21. Submitting and Committing</h2></div></div></div>
9238<div class="toc"> 9262<div class="toc">
9239<p><b>Table of Contents</b></p> 9263<p><b>Table of Contents</b></p>
9240<dl> 9264<dl>
9241<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt> 9265<dt><span class="sect1"><a href="#submitting-binary-packages">21.1. Submitting binary packages</a></span></dt>
9242<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt> 9266<dt><span class="sect1"><a href="#submitting-your-package">21.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt>
9243<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt> 9267<dt><span class="sect1"><a href="#general-notes-for-changes">21.3. General notes when adding, updating, or removing packages</a></span></dt>
9244<dt><span class="sect1"><a href="#committing-importing">21.4. Committing: Adding a package to CVS</a></span></dt> 9268<dt><span class="sect1"><a href="#committing-importing">21.4. Committing: Adding a package to CVS</a></span></dt>
9245<dt><span class="sect1"><a href="#updating-package">21.5. Updating a package to a newer version</a></span></dt> 9269<dt><span class="sect1"><a href="#updating-package">21.5. Updating a package to a newer version</a></span></dt>
9246<dt><span class="sect1"><a href="#renaming-package">21.6. Renaming a package in pkgsrc</a></span></dt> 9270<dt><span class="sect1"><a href="#renaming-package">21.6. Renaming a package in pkgsrc</a></span></dt>
9247<dt><span class="sect1"><a href="#moving-package">21.7. Moving a package in pkgsrc</a></span></dt> 9271<dt><span class="sect1"><a href="#moving-package">21.7. Moving a package in pkgsrc</a></span></dt>
9248</dl> 9272</dl>
9249</div> 9273</div>
9250<div class="sect1"> 9274<div class="sect1">
9251<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9275<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9252<a name="submitting-binary-packages"></a>21.1. Submitting binary packages</h2></div></div></div> 9276<a name="submitting-binary-packages"></a>21.1. Submitting binary packages</h2></div></div></div>
9253<p>Our policy is that we accept binaries only from pkgsrc 9277<p>Our policy is that we accept binaries only from pkgsrc
9254 developers to guarantee that the packages don't contain any 9278 developers to guarantee that the packages don't contain any
9255 trojan horses etc. This is not to annoy anyone but rather to 9279 trojan horses etc. This is not to annoy anyone but rather to
9256 protect our users! You're still free to put up your home-made 9280 protect our users! You're still free to put up your home-made
9257 binary packages and tell the world where to get them. NetBSD 9281 binary packages and tell the world where to get them. NetBSD
9258 developers doing bulk builds and wanting to upload them please 9282 developers doing bulk builds and wanting to upload them please
9259 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 9283 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
9260builds)</i></a>.</p> 9284builds)</i></a>.</p>
9261</div> 9285</div>
9262<div class="sect1"> 9286<div class="sect1">
9263<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9287<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9264<a name="submitting-your-package"></a>21.2. Submitting source packages (for non-NetBSD-developers)</h2></div></div></div> 9288<a name="submitting-your-package"></a>21.2. Submitting source packages (for non-NetBSD-developers)</h2></div></div></div>
9265<p>First, check that your package is complete, compiles and 9289<p>First, check that your package is complete, compiles and
9266 runs well; see <a class="xref" href="#debug" title="Chapter 20. Debugging">Chapter 20, <i>Debugging</i></a> and the rest of this 9290 runs well; see <a class="xref" href="#debug" title="Chapter 20. Debugging">Chapter 20, <i>Debugging</i></a> and the rest of this
9267 document. Next, generate an uuencoded gzipped <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?tar+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a> 9291 document. Next, generate an uuencoded gzipped <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?tar+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a>
9268 archive that contains all files that make up the package. 9292 archive that contains all files that make up the package.
9269 Finally, send this package to the pkgsrc bug tracking system, 9293 Finally, send this package to the pkgsrc bug tracking system,
9270 either with the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a> command, or if you don't have 9294 either with the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a> command, or if you don't have
9271 that, go to the web page 9295 that, go to the web page
9272 <a class="ulink" href="http://www.NetBSD.org/support/send-pr.html" target="_top">http://www.NetBSD.org/support/send-pr.html</a>, 9296 <a class="ulink" href="http://www.NetBSD.org/support/send-pr.html" target="_top">http://www.NetBSD.org/support/send-pr.html</a>,
9273 which contains some instructions and a link to a form where you 9297 which contains some instructions and a link to a form where you
9274 can submit packages. The 9298 can submit packages. The
9275 <a href="ftp://ftp.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 9299 <a href="ftp://ftp.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
9276 also available as a substitute for either of the above two tools. 9300 also available as a substitute for either of the above two tools.
9277 </p> 9301 </p>
9278<p>In the form of the problem report, the category should be 9302<p>In the form of the problem report, the category should be
9279 <span class="quote">&#8220;<span class="quote">pkg</span>&#8221;</span>, the synopsis should include the package name 9303 <span class="quote">&#8220;<span class="quote">pkg</span>&#8221;</span>, the synopsis should include the package name
9280 and version number, and the description field should contain a 9304 and version number, and the description field should contain a
9281 short description of your package (contents of the COMMENT 9305 short description of your package (contents of the COMMENT
9282 variable or DESCR file are OK). The uuencoded package data should 9306 variable or DESCR file are OK). The uuencoded package data should
9283 go into the <span class="quote">&#8220;<span class="quote">fix</span>&#8221;</span> field.</p> 9307 go into the <span class="quote">&#8220;<span class="quote">fix</span>&#8221;</span> field.</p>
9284<p>If you want to submit several packages, please send a 9308<p>If you want to submit several packages, please send a
9285 separate PR for each one, it's easier for us to track things 9309 separate PR for each one, it's easier for us to track things
9286 that way.</p> 9310 that way.</p>
9287<p>Alternatively, you can also import new packages into 9311<p>Alternatively, you can also import new packages into
9288 pkgsrc-wip (<span class="quote">&#8220;<span class="quote">pkgsrc work-in-progress</span>&#8221;</span>); see the 9312 pkgsrc-wip (<span class="quote">&#8220;<span class="quote">pkgsrc work-in-progress</span>&#8221;</span>); see the
9289 homepage at <a class="ulink" href="http://pkgsrc-wip.sourceforge.net/" target="_top">http://pkgsrc-wip.sourceforge.net/</a> 9313 homepage at <a class="ulink" href="http://pkgsrc-wip.sourceforge.net/" target="_top">http://pkgsrc-wip.sourceforge.net/</a>
9290 for details.</p> 9314 for details.</p>
9291</div> 9315</div>
9292<div class="sect1"> 9316<div class="sect1">
9293<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9317<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9294<a name="general-notes-for-changes"></a>21.3. General notes when adding, updating, or removing packages</h2></div></div></div> 9318<a name="general-notes-for-changes"></a>21.3. General notes when adding, updating, or removing packages</h2></div></div></div>
9295<p>Please note all package additions, updates, moves, and 9319<p>Please note all package additions, updates, moves, and
9296 removals in <code class="filename">pkgsrc/doc/CHANGES-<em class="replaceable"><code>YYYY</code></em></code>. It's very 9320 removals in <code class="filename">pkgsrc/doc/CHANGES-<em class="replaceable"><code>YYYY</code></em></code>. It's very
9297 important to keep this file up to date and conforming to the 9321 important to keep this file up to date and conforming to the
9298 existing format, because it will be used by scripts to 9322 existing format, because it will be used by scripts to
9299 automatically update pages on <a class="ulink" href="http://www.NetBSD.org/" target="_top">www.NetBSD.org</a> and other 9323 automatically update pages on <a class="ulink" href="http://www.NetBSD.org/" target="_top">www.NetBSD.org</a> and other
9300 sites. Additionally, check the 9324 sites. Additionally, check the
9301 <code class="filename">pkgsrc/doc/TODO</code> file and remove the entry 9325 <code class="filename">pkgsrc/doc/TODO</code> file and remove the entry
9302 for the package you updated or removed, in case it was mentioned 9326 for the package you updated or removed, in case it was mentioned
9303 there.</p> 9327 there.</p>
9304<p>When the <code class="varname">PKGREVISION</code> of a package is 9328<p>When the <code class="varname">PKGREVISION</code> of a package is
9305 bumped, the change should appear in 9329 bumped, the change should appear in
9306 <code class="filename">pkgsrc/doc/CHANGES-<em class="replaceable"><code>YYYY</code></em></code> if it is security 9330 <code class="filename">pkgsrc/doc/CHANGES-<em class="replaceable"><code>YYYY</code></em></code> if it is security
9307 related or otherwise relevant. Mass bumps that result from a 9331 related or otherwise relevant. Mass bumps that result from a
9308 dependency being updated should not be mentioned. In all other 9332 dependency being updated should not be mentioned. In all other
9309 cases it's the developer's decision.</p> 9333 cases it's the developer's decision.</p>
9310<p>There is a make target that helps in creating proper 9334<p>There is a make target that helps in creating proper
9311 <code class="filename">CHANGES-<em class="replaceable"><code>YYYY</code></em></code> entries: <span class="command"><strong>make 9335 <code class="filename">CHANGES-<em class="replaceable"><code>YYYY</code></em></code> entries: <span class="command"><strong>make
9312 changes-entry</strong></span>. It uses the optional <code class="varname">CTYPE</code> 9336 changes-entry</strong></span>. It uses the optional <code class="varname">CTYPE</code>
9313 and <code class="varname">NETBSD_LOGIN_NAME</code> variables. The general 9337 and <code class="varname">NETBSD_LOGIN_NAME</code> variables. The general
9314 usage is to first make sure that your <code class="filename">CHANGES-<em class="replaceable"><code>YYYY</code></em></code> 9338 usage is to first make sure that your <code class="filename">CHANGES-<em class="replaceable"><code>YYYY</code></em></code>
9315 file is up-to-date (to avoid having to resolve conflicts later-on) 9339 file is up-to-date (to avoid having to resolve conflicts later-on)
9316 and then to <span class="command"><strong>cd</strong></span> to the package directory. For 9340 and then to <span class="command"><strong>cd</strong></span> to the package directory. For
9317 package updates, <span class="command"><strong>make changes-entry</strong></span> is enough. 9341 package updates, <span class="command"><strong>make changes-entry</strong></span> is enough.
9318 For new packages, or package moves or removals, set the 9342 For new packages, or package moves or removals, set the
9319 <code class="varname">CTYPE</code> variable on the command line to "Added", 9343 <code class="varname">CTYPE</code> variable on the command line to "Added",
9320 "Moved", or "Removed". You can set <code class="varname">NETBSD_LOGIN_NAME</code> 9344 "Moved", or "Removed". You can set <code class="varname">NETBSD_LOGIN_NAME</code>
9321 in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> if your local login name is 9345 in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> if your local login name is
9322 not the same as your NetBSD login name. The target also automatically 9346 not the same as your NetBSD login name. The target also automatically
9323 removes possibly existing entries for the package in the 9347 removes possibly existing entries for the package in the
9324 <code class="filename">TODO</code> file. Don't forget to commit 9348 <code class="filename">TODO</code> file. Don't forget to commit
9325 the changes, e.g. by using <span class="command"><strong>make commit-changes-entry</strong></span>! 9349 the changes, e.g. by using <span class="command"><strong>make commit-changes-entry</strong></span>!
9326 If you are not using a checkout directly from cvs.NetBSD.org, but e.g. 9350 If you are not using a checkout directly from cvs.NetBSD.org, but e.g.
9327 a local copy of the repository, you can set USE_NETBSD_REPO=yes. This 9351 a local copy of the repository, you can set USE_NETBSD_REPO=yes. This
9328 makes the cvs commands use the main repository. 9352 makes the cvs commands use the main repository.
9329 </p> 9353 </p>
9330</div> 9354</div>
9331<div class="sect1"> 9355<div class="sect1">
9332<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9356<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9333<a name="committing-importing"></a>21.4. Committing: Adding a package to CVS</h2></div></div></div> 9357<a name="committing-importing"></a>21.4. Committing: Adding a package to CVS</h2></div></div></div>
9334<p>This section is only of interest for pkgsrc developers with write 9358<p>This section is only of interest for pkgsrc developers with write
9335 access to the pkgsrc repository.</p> 9359 access to the pkgsrc repository.</p>
9336<p>When the package is finished, <span class="quote">&#8220;<span class="quote">cvs add</span>&#8221;</span> the files. 9360<p>When the package is finished, <span class="quote">&#8220;<span class="quote">cvs add</span>&#8221;</span> the files.
9337Start by adding the directory and then files in the directory. Don't 9361Start by adding the directory and then files in the directory. Don't
9338forget to add the new package to the category's 9362forget to add the new package to the category's
9339<code class="filename">Makefile</code>. Make sure you don't forget any files; 9363<code class="filename">Makefile</code>. Make sure you don't forget any files;
9340you can check by running <span class="quote">&#8220;<span class="quote">cvs status</span>&#8221;</span>. An example:</p> 9364you can check by running <span class="quote">&#8220;<span class="quote">cvs status</span>&#8221;</span>. An example:</p>
9341<pre class="programlisting"> 9365<pre class="programlisting">
9342<code class="prompt">$</code> cd .../pkgsrc/category 9366<code class="prompt">$</code> cd .../pkgsrc/category
9343<code class="prompt">$</code> cvs add pkgname 9367<code class="prompt">$</code> cvs add pkgname
9344<code class="prompt">$</code> cd pkgname 9368<code class="prompt">$</code> cd pkgname
9345<code class="prompt">$</code> cvs add DESCR Makefile PLIST distinfo buildlink3.mk patches 9369<code class="prompt">$</code> cvs add DESCR Makefile PLIST distinfo buildlink3.mk patches
9346<code class="prompt">$</code> cvs add patches/p* 9370<code class="prompt">$</code> cvs add patches/p*
9347<code class="prompt">$</code> cvs status | less 9371<code class="prompt">$</code> cvs status | less
9348<code class="prompt">$</code> cvs commit 9372<code class="prompt">$</code> cvs commit
9349<code class="prompt">$</code> cd .. 9373<code class="prompt">$</code> cd ..
9350<code class="prompt">$</code> vi Makefile # add SUBDIRS+=pkgname line 9374<code class="prompt">$</code> vi Makefile # add SUBDIRS+=pkgname line
9351<code class="prompt">$</code> cvs commit Makefile 9375<code class="prompt">$</code> cvs commit Makefile
9352<code class="prompt">$</code> cd pkgname 9376<code class="prompt">$</code> cd pkgname
9353<code class="prompt">$</code> make CTYPE=Added commit-changes-entry 9377<code class="prompt">$</code> make CTYPE=Added commit-changes-entry
9354</pre> 9378</pre>
9355<p>The commit message of the initial import should include part of the 9379<p>The commit message of the initial import should include part of the
9356 <code class="filename">DESCR</code> file, so people reading the mailing lists know 9380 <code class="filename">DESCR</code> file, so people reading the mailing lists know
9357 what the package is/does.</p> 9381 what the package is/does.</p>
9358<p>Also mention the new package in 9382<p>Also mention the new package in
9359<code class="filename">pkgsrc/doc/CHANGES-20xx</code>.</p> 9383<code class="filename">pkgsrc/doc/CHANGES-20xx</code>.</p>
9360<p>Previously, <span class="quote">&#8220;<span class="quote">cvs import</span>&#8221;</span> was suggested, but it was 9384<p>Previously, <span class="quote">&#8220;<span class="quote">cvs import</span>&#8221;</span> was suggested, but it was
9361much easier to get wrong than <span class="quote">&#8220;<span class="quote">cvs add</span>&#8221;</span>.</p> 9385much easier to get wrong than <span class="quote">&#8220;<span class="quote">cvs add</span>&#8221;</span>.</p>
9362</div> 9386</div>
9363<div class="sect1"> 9387<div class="sect1">
9364<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9388<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9365<a name="updating-package"></a>21.5. Updating a package to a newer version</h2></div></div></div> 9389<a name="updating-package"></a>21.5. Updating a package to a newer version</h2></div></div></div>
9366<p>Please always put a concise, appropriate and relevant summary of the 9390<p>Please always put a concise, appropriate and relevant summary of the
9367 changes between old and new versions into the commit log when updating 9391 changes between old and new versions into the commit log when updating
9368 a package. There are various reasons for this:</p> 9392 a package. There are various reasons for this:</p>
9369<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9393<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9370<li class="listitem"><p>A URL is volatile, and can change over time. It may go away completely 9394<li class="listitem"><p>A URL is volatile, and can change over time. It may go away completely
9371 or its information may be overwritten by newer information.</p></li> 9395 or its information may be overwritten by newer information.</p></li>
9372<li class="listitem"><p>Having the change information between old and new versions in our CVS 9396<li class="listitem"><p>Having the change information between old and new versions in our CVS
9373 repository is very useful for people who use either cvs or anoncvs.</p></li> 9397 repository is very useful for people who use either cvs or anoncvs.</p></li>
9374<li class="listitem"><p>Having the change information between old and new versions in our CVS 9398<li class="listitem"><p>Having the change information between old and new versions in our CVS
9375 repository is very useful for people who read the pkgsrc-changes mailing 9399 repository is very useful for people who read the pkgsrc-changes mailing
9376 list, so that they can make tactical decisions about when to upgrade 9400 list, so that they can make tactical decisions about when to upgrade
9377 the package.</p></li> 9401 the package.</p></li>
9378</ul></div> 9402</ul></div>
9379<p>Please also recognize that, just because a new version of a package 9403<p>Please also recognize that, just because a new version of a package
9380 has been released, it should not automatically be upgraded in the CVS 9404 has been released, it should not automatically be upgraded in the CVS
9381 repository. We prefer to be conservative in the packages that are 9405 repository. We prefer to be conservative in the packages that are
9382 included in pkgsrc - development or beta packages are not really the 9406 included in pkgsrc - development or beta packages are not really the
9383 best thing for most places in which pkgsrc is used. Please use your 9407 best thing for most places in which pkgsrc is used. Please use your
9384 judgement about what should go into pkgsrc, and bear in mind that 9408 judgement about what should go into pkgsrc, and bear in mind that
9385 stability is to be preferred above new and possibly untested features.</p> 9409 stability is to be preferred above new and possibly untested features.</p>
9386</div> 9410</div>
9387<div class="sect1"> 9411<div class="sect1">
9388<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9412<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9389<a name="renaming-package"></a>21.6. Renaming a package in pkgsrc</h2></div></div></div> 9413<a name="renaming-package"></a>21.6. Renaming a package in pkgsrc</h2></div></div></div>
9390<p>Renaming packages is not recommended.</p> 9414<p>Renaming packages is not recommended.</p>
9391<p>When renaming packages, be sure to fix any references to old name 9415<p>When renaming packages, be sure to fix any references to old name
9392 in other Makefiles, options, buildlink files, etc.</p> 9416 in other Makefiles, options, buildlink files, etc.</p>
9393<p>Also When renaming a package, please define 9417<p>Also When renaming a package, please define
9394 <code class="varname">SUPERSEDES</code> to the package name and dewey version 9418 <code class="varname">SUPERSEDES</code> to the package name and dewey version
9395 pattern(s) of the previous package name. 9419 pattern(s) of the previous package name.
9396 This may be repeated for multiple renames. 9420 This may be repeated for multiple renames.
9397 The new package would be an exact replacement. 9421 The new package would be an exact replacement.
9398</p> 9422</p>
9399<p>Note that <span class="quote">&#8220;<span class="quote">successor</span>&#8221;</span> in the 9423<p>Note that <span class="quote">&#8220;<span class="quote">successor</span>&#8221;</span> in the
9400 CHANGES-<em class="replaceable"><code>YYYY</code></em> file doesn't necessarily 9424 CHANGES-<em class="replaceable"><code>YYYY</code></em> file doesn't necessarily
9401 mean that it <span class="emphasis"><em>supersedes</em></span>, as that successor may 9425 mean that it <span class="emphasis"><em>supersedes</em></span>, as that successor may
9402 not be an exact replacement but is a suggestion for the replaced 9426 not be an exact replacement but is a suggestion for the replaced
9403 functionality.</p> 9427 functionality.</p>
9404</div> 9428</div>
9405<div class="sect1"> 9429<div class="sect1">
9406<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9430<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9407<a name="moving-package"></a>21.7. Moving a package in pkgsrc</h2></div></div></div> 9431<a name="moving-package"></a>21.7. Moving a package in pkgsrc</h2></div></div></div>
9408<p>It is preferred that packages are not renamed or moved, but if needed 9432<p>It is preferred that packages are not renamed or moved, but if needed
9409 please follow these steps. 9433 please follow these steps.
9410</p> 9434</p>
9411<div class="orderedlist"><ol class="orderedlist" type="1"> 9435<div class="orderedlist"><ol class="orderedlist" type="1">
9412<li class="listitem"><p>Make a copy of the directory somewhere else.</p></li> 9436<li class="listitem"><p>Make a copy of the directory somewhere else.</p></li>
9413<li class="listitem"> 9437<li class="listitem">
9414<p>Remove all CVS dirs.</p> 9438<p>Remove all CVS dirs.</p>
9415<p>Alternatively to the first two steps you can also do:</p> 9439<p>Alternatively to the first two steps you can also do:</p>
9416<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> 9440<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>
9417<p>and use that for further work.</p> 9441<p>and use that for further work.</p>
9418</li> 9442</li>
9419<li class="listitem"><p>Fix <code class="varname">CATEGORIES</code> and any 9443<li class="listitem"><p>Fix <code class="varname">CATEGORIES</code> and any
9420<code class="varname">DEPENDS</code> paths that just did <span class="quote">&#8220;<span class="quote">../package</span>&#8221;</span> 9444<code class="varname">DEPENDS</code> paths that just did <span class="quote">&#8220;<span class="quote">../package</span>&#8221;</span>
9421instead of <span class="quote">&#8220;<span class="quote">../../category/package</span>&#8221;</span>.</p></li> 9445instead of <span class="quote">&#8220;<span class="quote">../../category/package</span>&#8221;</span>.</p></li>
9422<li class="listitem"><p>In the modified package's Makefile, consider setting 9446<li class="listitem"><p>In the modified package's Makefile, consider setting
9423<code class="varname">PREV_PKGPATH</code> to the previous category/package 9447<code class="varname">PREV_PKGPATH</code> to the previous category/package
9424pathname. The <code class="varname">PREV_PKGPATH</code> can be used by tools 9448pathname. The <code class="varname">PREV_PKGPATH</code> can be used by tools
9425for doing an update using pkgsrc building; for example, it can 9449for doing an update using pkgsrc building; for example, it can
9426search the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_summary+5+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_summary</span>(5)</span></a> database for <code class="varname">PREV_PKGPATH</code> 9450search the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?pkg_summary+5+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">pkg_summary</span>(5)</span></a> database for <code class="varname">PREV_PKGPATH</code>
9427(if no <code class="varname">SUPERSEDES</code>) and then use the corresponding 9451(if no <code class="varname">SUPERSEDES</code>) and then use the corresponding
9428new <code class="varname">PKGPATH</code> for that moved package. Note that 9452new <code class="varname">PKGPATH</code> for that moved package. Note that
9429it may have multiple matches, so the tool should also check on the 9453it may have multiple matches, so the tool should also check on the
9430<code class="varname">PKGBASE</code> too. The <code class="varname">PREV_PKGPATH</code> 9454<code class="varname">PKGBASE</code> too. The <code class="varname">PREV_PKGPATH</code>
9431probably has no value unless <code class="varname">SUPERSEDES</code> is not 9455probably has no value unless <code class="varname">SUPERSEDES</code> is not
9432set, i.e. <code class="varname">PKGBASE</code> stays the same. </p></li> 9456set, i.e. <code class="varname">PKGBASE</code> stays the same. </p></li>
9433<li class="listitem"><p><span class="command"><strong>cvs import</strong></span> the modified package in the new 9457<li class="listitem"><p><span class="command"><strong>cvs import</strong></span> the modified package in the new
9434place.</p></li> 9458place.</p></li>
9435<li class="listitem"> 9459<li class="listitem">
9436<p>Check if any package depends on it: 9460<p>Check if any package depends on it:
9437</p> 9461</p>
9438<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cd /usr/pkgsrc</code></strong> 9462<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cd /usr/pkgsrc</code></strong>
9439<code class="prompt">%</code> <strong class="userinput"><code>grep /package */*/Makefile* */*/buildlink*</code></strong></pre> 9463<code class="prompt">%</code> <strong class="userinput"><code>grep /package */*/Makefile* */*/buildlink*</code></strong></pre>
9440</li> 9464</li>
9441<li class="listitem"><p>Fix paths in packages from step 5 to point to new location.</p></li> 9465<li class="listitem"><p>Fix paths in packages from step 5 to point to new location.</p></li>
9442<li class="listitem"><p><span class="command"><strong>cvs rm (-f)</strong></span> the package at the old location.</p></li> 9466<li class="listitem"><p><span class="command"><strong>cvs rm (-f)</strong></span> the package at the old location.</p></li>
9443<li class="listitem"><p>Remove from <code class="filename">oldcategory/Makefile</code>.</p></li> 9467<li class="listitem"><p>Remove from <code class="filename">oldcategory/Makefile</code>.</p></li>
9444<li class="listitem"><p>Add to <code class="filename">newcategory/Makefile</code>.</p></li> 9468<li class="listitem"><p>Add to <code class="filename">newcategory/Makefile</code>.</p></li>
9445<li class="listitem"> 9469<li class="listitem">
9446<p>Commit the changed and removed files:</p> 9470<p>Commit the changed and removed files:</p>
9447<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cvs commit oldcategory/package oldcategory/Makefile newcategory/Makefile</code></strong></pre> 9471<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>cvs commit oldcategory/package oldcategory/Makefile newcategory/Makefile</code></strong></pre>
9448<p>(and any packages from step 5, of course).</p> 9472<p>(and any packages from step 5, of course).</p>
9449</li> 9473</li>
9450</ol></div> 9474</ol></div>
9451</div> 9475</div>
9452</div> 9476</div>
9453<div class="chapter"> 9477<div class="chapter">
9454<div class="titlepage"><div><div><h2 class="title"> 9478<div class="titlepage"><div><div><h2 class="title">
9455<a name="devfaq"></a>Chapter 22. Frequently Asked Questions</h2></div></div></div> 9479<a name="devfaq"></a>Chapter 22. Frequently Asked Questions</h2></div></div></div>
9456<p>This section contains the answers to questions that may 9480<p>This section contains the answers to questions that may
9457 arise when you are writing a package. If you don't find your 9481 arise when you are writing a package. If you don't find your
9458 question answered here, first have a look in the other chapters, 9482 question answered here, first have a look in the other chapters,
9459 and if you still don't have the answer, ask on the 9483 and if you still don't have the answer, ask on the
9460 <code class="literal">pkgsrc-users</code> mailing list.</p> 9484 <code class="literal">pkgsrc-users</code> mailing list.</p>
9461<div class="qandaset"> 9485<div class="qandaset">
9462<a name="idm77169424"></a><dl> 9486<a name="idm77235344"></a><dl>
9463<dt>22.1. <a href="#devfaq.makeflags">What is the difference between 9487<dt>22.1. <a href="#devfaq.makeflags">What is the difference between
9464 MAKEFLAGS, .MAKEFLAGS and 9488 MAKEFLAGS, .MAKEFLAGS and
9465 MAKE_FLAGS?</a> 9489 MAKE_FLAGS?</a>
9466</dt> 9490</dt>
9467<dt>22.2. <a href="#devfaq.make">What is the difference between 9491<dt>22.2. <a href="#devfaq.make">What is the difference between
9468 MAKE, GMAKE and 9492 MAKE, GMAKE and
9469 MAKE_PROGRAM?</a> 9493 MAKE_PROGRAM?</a>
9470</dt> 9494</dt>
9471<dt>22.3. <a href="#devfaq.cc">What is the difference between 9495<dt>22.3. <a href="#devfaq.cc">What is the difference between
9472 CC, PKG_CC and 9496 CC, PKG_CC and
9473 PKGSRC_COMPILER?</a> 9497 PKGSRC_COMPILER?</a>
9474</dt> 9498</dt>
9475<dt>22.4. <a href="#devfaq.bl3flags">What is the difference between 9499<dt>22.4. <a href="#devfaq.bl3flags">What is the difference between
9476 BUILDLINK_LDFLAGS, 9500 BUILDLINK_LDFLAGS,
9477 BUILDLINK_LDADD and 9501 BUILDLINK_LDADD and
9478 BUILDLINK_LIBS?</a> 9502 BUILDLINK_LIBS?</a>
9479</dt> 9503</dt>
9480<dt>22.5. <a href="#devfaq.bl3prefix">Why does make show-var 9504<dt>22.5. <a href="#devfaq.bl3prefix">Why does make show-var
9481 VARNAME=BUILDLINK_PREFIX.foo 9505 VARNAME=BUILDLINK_PREFIX.foo
9482 say it's empty?</a> 9506 say it's empty?</a>
9483</dt> 9507</dt>
9484<dt>22.6. <a href="#devfaq.master_sites">What does 9508<dt>22.6. <a href="#devfaq.master_sites">What does
9485 ${MASTER_SITE_SOURCEFORGE:=package/} mean? I 9509 ${MASTER_SITE_SOURCEFORGE:=package/} mean? I
9486 don't understand the := inside 9510 don't understand the := inside
9487 it.</a> 9511 it.</a>
9488</dt> 9512</dt>
9489<dt>22.7. <a href="#devfaq.mailinglists">Which mailing lists are there for package 9513<dt>22.7. <a href="#devfaq.mailinglists">Which mailing lists are there for package
9490 developers?</a> 9514 developers?</a>
9491</dt> 9515</dt>
9492<dt>22.8. <a href="#devfaq.documentation">Where is the pkgsrc 9516<dt>22.8. <a href="#devfaq.documentation">Where is the pkgsrc
9493 documentation?</a> 9517 documentation?</a>
9494</dt> 9518</dt>
9495<dt>22.9. <a href="#devfaq.too-much-time">I have a little time to kill. What shall I 9519<dt>22.9. <a href="#devfaq.too-much-time">I have a little time to kill. What shall I
9496do?</a> 9520do?</a>
9497</dt> 9521</dt>
9498</dl> 9522</dl>
9499<table border="0" style="width: 100%;"> 9523<table border="0" style="width: 100%;">
9500<colgroup> 9524<colgroup>
9501<col align="left" width="1%"> 9525<col align="left" width="1%">
9502<col> 9526<col>
9503</colgroup> 9527</colgroup>
9504<tbody> 9528<tbody>
9505<tr class="question"> 9529<tr class="question">
9506<td align="left" valign="top"> 9530<td align="left" valign="top">
9507<a name="devfaq.makeflags"></a><a name="idm77169040"></a><p><b>22.1.</b></p> 9531<a name="devfaq.makeflags"></a><a name="idm77234960"></a><p><b>22.1.</b></p>
9508</td> 9532</td>
9509<td align="left" valign="top"><p>What is the difference between 9533<td align="left" valign="top"><p>What is the difference between
9510 <code class="varname">MAKEFLAGS</code>, <code class="varname">.MAKEFLAGS</code> and 9534 <code class="varname">MAKEFLAGS</code>, <code class="varname">.MAKEFLAGS</code> and
9511 <code class="varname">MAKE_FLAGS</code>?</p></td> 9535 <code class="varname">MAKE_FLAGS</code>?</p></td>
9512</tr> 9536</tr>
9513<tr class="answer"> 9537<tr class="answer">
9514<td align="left" valign="top"></td> 9538<td align="left" valign="top"></td>
9515<td align="left" valign="top"><p><code class="varname">MAKEFLAGS</code> are the flags passed 9539<td align="left" valign="top"><p><code class="varname">MAKEFLAGS</code> are the flags passed
9516 to the pkgsrc-internal invocations of <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>, while 9540 to the pkgsrc-internal invocations of <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a>, while
9517 <code class="varname">MAKE_FLAGS</code> are the flags that are passed to 9541 <code class="varname">MAKE_FLAGS</code> are the flags that are passed to
9518 the <code class="varname">MAKE_PROGRAM</code> when building the 9542 the <code class="varname">MAKE_PROGRAM</code> when building the
9519 package. [FIXME: What is .MAKEFLAGS for?]</p></td> 9543 package. [FIXME: What is .MAKEFLAGS for?]</p></td>
9520</tr> 9544</tr>
9521<tr class="question"> 9545<tr class="question">
9522<td align="left" valign="top"> 9546<td align="left" valign="top">
9523<a name="devfaq.make"></a><a name="idm77160848"></a><p><b>22.2.</b></p> 9547<a name="devfaq.make"></a><a name="idm77230992"></a><p><b>22.2.</b></p>
9524</td> 9548</td>
9525<td align="left" valign="top"><p>What is the difference between 9549<td align="left" valign="top"><p>What is the difference between
9526 <code class="varname">MAKE</code>, <code class="varname">GMAKE</code> and 9550 <code class="varname">MAKE</code>, <code class="varname">GMAKE</code> and
9527 <code class="varname">MAKE_PROGRAM</code>?</p></td> 9551 <code class="varname">MAKE_PROGRAM</code>?</p></td>
9528</tr> 9552</tr>
9529<tr class="answer"> 9553<tr class="answer">
9530<td align="left" valign="top"></td> 9554<td align="left" valign="top"></td>
9531<td align="left" valign="top"><p><code class="varname">MAKE</code> is the path to the 9555<td align="left" valign="top"><p><code class="varname">MAKE</code> is the path to the
9532 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> program that is used in the pkgsrc 9556 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> program that is used in the pkgsrc
9533 infrastructure. <code class="varname">GMAKE</code> is the path to GNU 9557 infrastructure. <code class="varname">GMAKE</code> is the path to GNU
9534 Make, but you need to say <code class="varname">USE_TOOLS+=gmake</code> to 9558 Make, but you need to say <code class="varname">USE_TOOLS+=gmake</code> to
9535 use that. <code class="varname">MAKE_PROGRAM</code> is the path to the 9559 use that. <code class="varname">MAKE_PROGRAM</code> is the path to the
9536 Make program that is used for building the 9560 Make program that is used for building the
9537 package.</p></td> 9561 package.</p></td>
9538</tr> 9562</tr>
9539<tr class="question"> 9563<tr class="question">
9540<td align="left" valign="top"> 9564<td align="left" valign="top">
9541<a name="devfaq.cc"></a><a name="idm77156496"></a><p><b>22.3.</b></p> 9565<a name="devfaq.cc"></a><a name="idm77226512"></a><p><b>22.3.</b></p>
9542</td> 9566</td>
9543<td align="left" valign="top"><p>What is the difference between 9567<td align="left" valign="top"><p>What is the difference between
9544 <code class="varname">CC</code>, <code class="varname">PKG_CC</code> and 9568 <code class="varname">CC</code>, <code class="varname">PKG_CC</code> and
9545 <code class="varname">PKGSRC_COMPILER</code>?</p></td> 9569 <code class="varname">PKGSRC_COMPILER</code>?</p></td>
9546</tr> 9570</tr>
9547<tr class="answer"> 9571<tr class="answer">
9548<td align="left" valign="top"></td> 9572<td align="left" valign="top"></td>
9549<td align="left" valign="top"><p><code class="varname">CC</code> is the path to the real C 9573<td align="left" valign="top"><p><code class="varname">CC</code> is the path to the real C
9550 compiler, which can be configured by the pkgsrc user. 9574 compiler, which can be configured by the pkgsrc user.
9551 <code class="varname">PKG_CC</code> is the path to the compiler wrapper. 9575 <code class="varname">PKG_CC</code> is the path to the compiler wrapper.
9552 <code class="varname">PKGSRC_COMPILER</code> is <span class="emphasis"><em>not</em></span> a 9576 <code class="varname">PKGSRC_COMPILER</code> is <span class="emphasis"><em>not</em></span> a
9553 path to a compiler, but the type of compiler that should be 9577 path to a compiler, but the type of compiler that should be
9554 used. See <code class="filename">mk/compiler.mk</code> for more 9578 used. See <code class="filename">mk/compiler.mk</code> for more
9555 information about the latter variable.</p></td> 9579 information about the latter variable.</p></td>
9556</tr> 9580</tr>
9557<tr class="question"> 9581<tr class="question">
9558<td align="left" valign="top"> 9582<td align="left" valign="top">
9559<a name="devfaq.bl3flags"></a><a name="idm77152272"></a><p><b>22.4.</b></p> 9583<a name="devfaq.bl3flags"></a><a name="idm77222416"></a><p><b>22.4.</b></p>
9560</td> 9584</td>
9561<td align="left" valign="top"><p>What is the difference between 9585<td align="left" valign="top"><p>What is the difference between
9562 <code class="varname">BUILDLINK_LDFLAGS</code>, 9586 <code class="varname">BUILDLINK_LDFLAGS</code>,
9563 <code class="varname">BUILDLINK_LDADD</code> and 9587 <code class="varname">BUILDLINK_LDADD</code> and
9564 <code class="varname">BUILDLINK_LIBS</code>?</p></td> 9588 <code class="varname">BUILDLINK_LIBS</code>?</p></td>
9565</tr> 9589</tr>
9566<tr class="answer"> 9590<tr class="answer">
9567<td align="left" valign="top"></td> 9591<td align="left" valign="top"></td>
9568<td align="left" valign="top"><p>[FIXME]</p></td> 9592<td align="left" valign="top"><p>[FIXME]</p></td>
9569</tr> 9593</tr>
9570<tr class="question"> 9594<tr class="question">
9571<td align="left" valign="top"> 9595<td align="left" valign="top">
9572<a name="devfaq.bl3prefix"></a><a name="idm77150096"></a><p><b>22.5.</b></p> 9596<a name="devfaq.bl3prefix"></a><a name="idm77220240"></a><p><b>22.5.</b></p>
9573</td> 9597</td>
9574<td align="left" valign="top"><p>Why does <span class="command"><strong>make show-var 9598<td align="left" valign="top"><p>Why does <span class="command"><strong>make show-var
9575 VARNAME=BUILDLINK_PREFIX.<em class="replaceable"><code>foo</code></em></strong></span> 9599 VARNAME=BUILDLINK_PREFIX.<em class="replaceable"><code>foo</code></em></strong></span>
9576 say it's empty?</p></td> 9600 say it's empty?</p></td>
9577</tr> 9601</tr>
9578<tr class="answer"> 9602<tr class="answer">
9579<td align="left" valign="top"></td> 9603<td align="left" valign="top"></td>
9580<td align="left" valign="top"><p>For optimization reasons, some variables are only 9604<td align="left" valign="top"><p>For optimization reasons, some variables are only
9581 available in the <span class="quote">&#8220;<span class="quote">wrapper</span>&#8221;</span> phase and later. To 9605 available in the <span class="quote">&#8220;<span class="quote">wrapper</span>&#8221;</span> phase and later. To
9582 <span class="quote">&#8220;<span class="quote">simulate</span>&#8221;</span> the wrapper phase, append 9606 <span class="quote">&#8220;<span class="quote">simulate</span>&#8221;</span> the wrapper phase, append
9583 <span class="command"><strong>PKG_PHASE=wrapper</strong></span> to the above 9607 <span class="command"><strong>PKG_PHASE=wrapper</strong></span> to the above
9584 command.</p></td> 9608 command.</p></td>
9585</tr> 9609</tr>
9586<tr class="question"> 9610<tr class="question">
9587<td align="left" valign="top"> 9611<td align="left" valign="top">
9588<a name="devfaq.master_sites"></a><a name="idm77147024"></a><p><b>22.6.</b></p> 9612<a name="devfaq.master_sites"></a><a name="idm77208848"></a><p><b>22.6.</b></p>
9589</td> 9613</td>
9590<td align="left" valign="top"><p>What does 9614<td align="left" valign="top"><p>What does
9591 <code class="literal">${MASTER_SITE_SOURCEFORGE:=package/}</code> mean? I 9615 <code class="literal">${MASTER_SITE_SOURCEFORGE:=package/}</code> mean? I
9592 don't understand the <code class="literal">:=</code> inside 9616 don't understand the <code class="literal">:=</code> inside
9593 it.</p></td> 9617 it.</p></td>
9594</tr> 9618</tr>
9595<tr class="answer"> 9619<tr class="answer">
9596<td align="left" valign="top"></td> 9620<td align="left" valign="top"></td>
9597<td align="left" valign="top"><p>The <code class="literal">:=</code> is not really an 9621<td align="left" valign="top"><p>The <code class="literal">:=</code> is not really an
9598 assignment operator, like you might expect at first sight. 9622 assignment operator, like you might expect at first sight.
9599 Instead, it is a degenerate form of 9623 Instead, it is a degenerate form of
9600 <code class="literal">${LIST:<em class="replaceable"><code>old_string</code></em>=<em class="replaceable"><code>new_string</code></em>}</code>, 9624 <code class="literal">${LIST:<em class="replaceable"><code>old_string</code></em>=<em class="replaceable"><code>new_string</code></em>}</code>,
9601 which is documented in the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> man page and which you 9625 which is documented in the <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?make+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">make</span>(1)</span></a> man page and which you
9602 may have seen as in <code class="literal">${SRCS:.c=.o}</code>. In the 9626 may have seen as in <code class="literal">${SRCS:.c=.o}</code>. In the
9603 case of <code class="varname">MASTER_SITE_*</code>, 9627 case of <code class="varname">MASTER_SITE_*</code>,
9604 <em class="replaceable"><code>old_string</code></em> is the empty string and 9628 <em class="replaceable"><code>old_string</code></em> is the empty string and
9605 <em class="replaceable"><code>new_string</code></em> is 9629 <em class="replaceable"><code>new_string</code></em> is
9606 <code class="literal">package/</code>. That's where the 9630 <code class="literal">package/</code>. That's where the
9607 <code class="literal">:</code> and the <code class="literal">=</code> fall 9631 <code class="literal">:</code> and the <code class="literal">=</code> fall
9608 together.</p></td> 9632 together.</p></td>
9609</tr> 9633</tr>
9610<tr class="question"> 9634<tr class="question">
9611<td align="left" valign="top"> 9635<td align="left" valign="top">
9612<a name="devfaq.mailinglists"></a><a name="idm77130768"></a><p><b>22.7.</b></p> 9636<a name="devfaq.mailinglists"></a><a name="idm77200784"></a><p><b>22.7.</b></p>
9613</td> 9637</td>
9614<td align="left" valign="top"><p>Which mailing lists are there for package 9638<td align="left" valign="top"><p>Which mailing lists are there for package
9615 developers?</p></td> 9639 developers?</p></td>
9616</tr> 9640</tr>
9617<tr class="answer"> 9641<tr class="answer">
9618<td align="left" valign="top"></td> 9642<td align="left" valign="top"></td>
9619<td align="left" valign="top"><div class="variablelist"><dl class="variablelist"> 9643<td align="left" valign="top"><div class="variablelist"><dl class="variablelist">
9620<dt><span class="term"><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#tech-pkg" target="_top">tech-pkg</a></span></dt> 9644<dt><span class="term"><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#tech-pkg" target="_top">tech-pkg</a></span></dt>
9621<dd><p>This is a list for technical discussions related 9645<dd><p>This is a list for technical discussions related
9622 to pkgsrc development, e.g. soliciting feedback for changes to 9646 to pkgsrc development, e.g. soliciting feedback for changes to
9623 pkgsrc infrastructure, proposed new features, questions related 9647 pkgsrc infrastructure, proposed new features, questions related
9624 to porting pkgsrc to a new platform, advice for maintaining a 9648 to porting pkgsrc to a new platform, advice for maintaining a
9625 package, patches that affect many packages, help requests moved 9649 package, patches that affect many packages, help requests moved
9626 from pkgsrc-users when an infrastructure bug is found, 9650 from pkgsrc-users when an infrastructure bug is found,
9627 etc.</p></dd> 9651 etc.</p></dd>
9628<dt><span class="term"><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-bugs" target="_top">pkgsrc-bugs</a></span></dt> 9652<dt><span class="term"><a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#pkgsrc-bugs" target="_top">pkgsrc-bugs</a></span></dt>
9629<dd><p>All bug reports in category "pkg" sent with 9653<dd><p>All bug reports in category "pkg" sent with
9630 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a> appear here. Please do not report your bugs here 9654 <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?send-pr+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a> appear here. Please do not report your bugs here
9631 directly; use one of the other mailing 9655 directly; use one of the other mailing
9632 lists.</p></dd> 9656 lists.</p></dd>
9633</dl></div></td> 9657</dl></div></td>
9634</tr> 9658</tr>
9635<tr class="question"> 9659<tr class="question">
9636<td align="left" valign="top"> 9660<td align="left" valign="top">
9637<a name="devfaq.documentation"></a><a name="idm77126928"></a><p><b>22.8.</b></p> 9661<a name="devfaq.documentation"></a><a name="idm77197072"></a><p><b>22.8.</b></p>
9638</td> 9662</td>
9639<td align="left" valign="top"><p>Where is the pkgsrc 9663<td align="left" valign="top"><p>Where is the pkgsrc
9640 documentation?</p></td> 9664 documentation?</p></td>
9641</tr> 9665</tr>
9642<tr class="answer"> 9666<tr class="answer">
9643<td align="left" valign="top"></td> 9667<td align="left" valign="top"></td>
9644<td align="left" valign="top"> 9668<td align="left" valign="top">
9645<p>There are many places where you can find 9669<p>There are many places where you can find
9646 documentation about pkgsrc:</p> 9670 documentation about pkgsrc:</p>
9647<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9671<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9648<li class="listitem"><p>The pkgsrc guide (this document) is a collection 9672<li class="listitem"><p>The pkgsrc guide (this document) is a collection
9649 of chapters that explain large parts of pkgsrc, but some 9673 of chapters that explain large parts of pkgsrc, but some
9650 chapters tend to be outdated. Which ones they are is hard to 9674 chapters tend to be outdated. Which ones they are is hard to
9651 say.</p></li> 9675 say.</p></li>
9652<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 9676<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
9653 about certain features, announcements of new parts of the pkgsrc 9677 about certain features, announcements of new parts of the pkgsrc
9654 infrastructure and sometimes even announcements that a certain 9678 infrastructure and sometimes even announcements that a certain
9655 feature has been marked as obsolete. The benefit here is that 9679 feature has been marked as obsolete. The benefit here is that
9656 each message has a date appended to it.</p></li> 9680 each message has a date appended to it.</p></li>
9657<li class="listitem"><p>Many of the files in the 9681<li class="listitem"><p>Many of the files in the
9658 <code class="filename">mk/</code> directory start with a comment that 9682 <code class="filename">mk/</code> directory start with a comment that
9659 describes the purpose of the file and how it can be used by the 9683 describes the purpose of the file and how it can be used by the
9660 pkgsrc user and package authors. An easy way to find this 9684 pkgsrc user and package authors. An easy way to find this
9661 documentation is to run <span class="command"><strong>bmake 9685 documentation is to run <span class="command"><strong>bmake
9662 help</strong></span>.</p></li> 9686 help</strong></span>.</p></li>
9663<li class="listitem"><p>The CVS log messages are a rich source of 9687<li class="listitem"><p>The CVS log messages are a rich source of
9664 information, but they tend to be highly abbreviated, especially 9688 information, but they tend to be highly abbreviated, especially
9665 for actions that occur often. Some contain a detailed 9689 for actions that occur often. Some contain a detailed
9666 description of what has changed, but they are geared towards the 9690 description of what has changed, but they are geared towards the
9667 other pkgsrc developers, not towards an average pkgsrc user. 9691 other pkgsrc developers, not towards an average pkgsrc user.
9668 They also only document <span class="emphasis"><em>changes</em></span>, so if you 9692 They also only document <span class="emphasis"><em>changes</em></span>, so if you
9669 don't know what has been before, these messages may not be worth 9693 don't know what has been before, these messages may not be worth
9670 too much to you.</p></li> 9694 too much to you.</p></li>
9671<li class="listitem"><p>Some parts of pkgsrc are only <span class="quote">&#8220;<span class="quote">implicitly 9695<li class="listitem"><p>Some parts of pkgsrc are only <span class="quote">&#8220;<span class="quote">implicitly
9672 documented</span>&#8221;</span>, that is the documentation exists only in the 9696 documented</span>&#8221;</span>, that is the documentation exists only in the
9673 mind of the developer who wrote the code. To get this 9697 mind of the developer who wrote the code. To get this
9674 information, use the <span class="command"><strong>cvs annotate</strong></span> command 9698 information, use the <span class="command"><strong>cvs annotate</strong></span> command
9675 to see who has written it and ask on the 9699 to see who has written it and ask on the
9676 <code class="literal">tech-pkg</code> mailing list, so that others can 9700 <code class="literal">tech-pkg</code> mailing list, so that others can
9677 find your questions later (see above). To be sure that the 9701 find your questions later (see above). To be sure that the
9678 developer in charge reads the mail, you may CC him or 9702 developer in charge reads the mail, you may CC him or
9679 her.</p></li> 9703 her.</p></li>
9680</ul></div> 9704</ul></div>
9681</td> 9705</td>
9682</tr> 9706</tr>
9683<tr class="question"> 9707<tr class="question">
9684<td align="left" valign="top"> 9708<td align="left" valign="top">
9685<a name="devfaq.too-much-time"></a><a name="idm77120400"></a><p><b>22.9.</b></p> 9709<a name="devfaq.too-much-time"></a><a name="idm77190544"></a><p><b>22.9.</b></p>
9686</td> 9710</td>
9687<td align="left" valign="top"><p>I have a little time to kill. What shall I 9711<td align="left" valign="top"><p>I have a little time to kill. What shall I
9688do?</p></td> 9712do?</p></td>
9689</tr> 9713</tr>
9690<tr class="answer"> 9714<tr class="answer">
9691<td align="left" valign="top"></td> 9715<td align="left" valign="top"></td>
9692<td align="left" valign="top"> 9716<td align="left" valign="top">
9693<p>This is not really an FAQ yet, but here's the answer 9717<p>This is not really an FAQ yet, but here's the answer
9694anyway.</p> 9718anyway.</p>
9695<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9719<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9696<li class="listitem"><p>Run <span class="command"><strong>pkg_chk -N</strong></span> (from the 9720<li class="listitem"><p>Run <span class="command"><strong>pkg_chk -N</strong></span> (from the
9697 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_chk/README.html" target="_top"><code class="filename">pkgtools/pkg_chk</code></a> package). It 9721 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_chk/README.html" target="_top"><code class="filename">pkgtools/pkg_chk</code></a> package). It
9698 will tell you about newer versions of installed packages that are 9722 will tell you about newer versions of installed packages that are
9699 available, but not yet updated in pkgsrc.</p></li> 9723 available, but not yet updated in pkgsrc.</p></li>
9700<li class="listitem"><p>Browse <code class="filename">pkgsrc/doc/TODO</code> 9724<li class="listitem"><p>Browse <code class="filename">pkgsrc/doc/TODO</code>
9701 &mdash; it contains a list of suggested new packages and a list of 9725 &mdash; it contains a list of suggested new packages and a list of
9702 cleanups and enhancements for pkgsrc that would be nice to 9726 cleanups and enhancements for pkgsrc that would be nice to
9703 have.</p></li> 9727 have.</p></li>
9704<li class="listitem"><p>Review packages for which review was requested on 9728<li class="listitem"><p>Review packages for which review was requested on
9705 the <a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#tech-pkg" target="_top">tech-pkg</a> 9729 the <a class="ulink" href="http://www.NetBSD.org/mailinglists/index.html#tech-pkg" target="_top">tech-pkg</a>
9706 mailing list.</p></li> 9730 mailing list.</p></li>
9707</ul></div> 9731</ul></div>
9708</td> 9732</td>
9709</tr> 9733</tr>
9710</tbody> 9734</tbody>
9711</table> 9735</table>
9712</div> 9736</div>
9713</div> 9737</div>
9714<div class="chapter"> 9738<div class="chapter">
9715<div class="titlepage"><div><div><h2 class="title"> 9739<div class="titlepage"><div><div><h2 class="title">
9716<a name="gnome"></a>Chapter 23. GNOME packaging and porting</h2></div></div></div> 9740<a name="gnome"></a>Chapter 23. GNOME packaging and porting</h2></div></div></div>
9717<div class="toc"> 9741<div class="toc">
9718<p><b>Table of Contents</b></p> 9742<p><b>Table of Contents</b></p>
9719<dl> 9743<dl>
9720<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt> 9744<dt><span class="sect1"><a href="#meta-packages">23.1. Meta packages</a></span></dt>
9721<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt> 9745<dt><span class="sect1"><a href="#new-package">23.2. Packaging a GNOME application</a></span></dt>
9722<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt> 9746<dt><span class="sect1"><a href="#full-update">23.3. Updating GNOME to a newer version</a></span></dt>
9723<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt> 9747<dt><span class="sect1"><a href="#patching">23.4. Patching guidelines</a></span></dt>
9724</dl> 9748</dl>
9725</div> 9749</div>
9726<p>Quoting <a class="ulink" href="http://www.gnome.org/" target="_top">GNOME's web 9750<p>Quoting <a class="ulink" href="http://www.gnome.org/" target="_top">GNOME's web
9727site</a>:</p> 9751site</a>:</p>
9728<div class="blockquote"><blockquote class="blockquote"><p>The GNOME project provides two things: The GNOME desktop 9752<div class="blockquote"><blockquote class="blockquote"><p>The GNOME project provides two things: The GNOME desktop
9729 environment, an intuitive and attractive desktop for users, and the 9753 environment, an intuitive and attractive desktop for users, and the
9730 GNOME development platform, an extensive framework for building 9754 GNOME development platform, an extensive framework for building
9731 applications that integrate into the rest of the desktop.</p></blockquote></div> 9755 applications that integrate into the rest of the desktop.</p></blockquote></div>
9732<p>pkgsrc provides a seamless way to automatically build and install 9756<p>pkgsrc provides a seamless way to automatically build and install
9733a complete GNOME environment <span class="emphasis"><em>under many different 9757a complete GNOME environment <span class="emphasis"><em>under many different
9734platforms</em></span>. We can say with confidence that pkgsrc is one of 9758platforms</em></span>. We can say with confidence that pkgsrc is one of
9735the most advanced build and packaging systems for GNOME due to its 9759the most advanced build and packaging systems for GNOME due to its
9736included technologies buildlink3, the wrappers and tools framework and 9760included technologies buildlink3, the wrappers and tools framework and
9737automatic configuration file management. Lots of efforts are put into 9761automatic configuration file management. Lots of efforts are put into
9738achieving a completely clean deinstallation of installed software 9762achieving a completely clean deinstallation of installed software
9739components.</p> 9763components.</p>
9740<p>Given that pkgsrc is <a class="ulink" href="http://www.NetBSD.org/" target="_top">NetBSD</a>'s official packaging system, 9764<p>Given that pkgsrc is <a class="ulink" href="http://www.NetBSD.org/" target="_top">NetBSD</a>'s official packaging system,
9741the above also means that great efforts are put into making GNOME work 9765the above also means that great efforts are put into making GNOME work
9742under this operating system. Recently, <a class="ulink" href="http://www.dragonflybsd.org/" target="_top">DragonFly BSD</a> also adopted 9766under this operating system. Recently, <a class="ulink" href="http://www.dragonflybsd.org/" target="_top">DragonFly BSD</a> also adopted
9743pkgsrc as its preferred packaging system, contributing lots of 9767pkgsrc as its preferred packaging system, contributing lots of
9744portability fixes to make GNOME build and install under it.</p> 9768portability fixes to make GNOME build and install under it.</p>
9745<p>This chapter is aimed at pkgsrc developers and other people 9769<p>This chapter is aimed at pkgsrc developers and other people
9746interested in helping our GNOME porting and packaging efforts. It 9770interested in helping our GNOME porting and packaging efforts. It
9747provides instructions on how to manage the existing packages and some 9771provides instructions on how to manage the existing packages and some
9748important information regarding their internals.</p> 9772important information regarding their internals.</p>
9749<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 9773<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
9750<h3 class="title">We need your help!</h3> 9774<h3 class="title">We need your help!</h3>
9751<p>Should you have some spare cycles to devote to NetBSD, pkgsrc 9775<p>Should you have some spare cycles to devote to NetBSD, pkgsrc
9752 and GNOME and are willing to learn new exciting stuff, please jump 9776 and GNOME and are willing to learn new exciting stuff, please jump
9753 straight to the <a class="ulink" href="http://www.NetBSD.org/contrib/projects.html#gnome" target="_top">pending 9777 straight to the <a class="ulink" href="http://www.NetBSD.org/contrib/projects.html#gnome" target="_top">pending
9754 work</a> list! There is still a long way to go to get a 9778 work</a> list! There is still a long way to go to get a
9755 fully-functional GNOME desktop under NetBSD and we need your help to 9779 fully-functional GNOME desktop under NetBSD and we need your help to
9756 achieve it!</p> 9780 achieve it!</p>
9757</div> 9781</div>
9758<div class="sect1"> 9782<div class="sect1">
9759<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9783<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9760<a name="meta-packages"></a>23.1. Meta packages</h2></div></div></div> 9784<a name="meta-packages"></a>23.1. Meta packages</h2></div></div></div>
9761<p>pkgsrc includes three GNOME-related meta packages:</p> 9785<p>pkgsrc includes three GNOME-related meta packages:</p>
9762<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9786<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9763<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-base/README.html" target="_top"><code class="filename">meta-pkgs/gnome-base</code></a>: Provides 9787<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-base/README.html" target="_top"><code class="filename">meta-pkgs/gnome-base</code></a>: Provides
9764 the core GNOME desktop environment. It only includes the necessary 9788 the core GNOME desktop environment. It only includes the necessary
9765 bits to get it to boot correctly, although it may lack important 9789 bits to get it to boot correctly, although it may lack important
9766 functionality for daily operation. The idea behind this package is 9790 functionality for daily operation. The idea behind this package is
9767 to let end users build their own configurations on top of this one, 9791 to let end users build their own configurations on top of this one,
9768 first installing this meta package to achieve a functional setup and 9792 first installing this meta package to achieve a functional setup and
9769 then adding individual applications.</p></li> 9793 then adding individual applications.</p></li>
9770<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome/README.html" target="_top"><code class="filename">meta-pkgs/gnome</code></a>: Provides a 9794<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome/README.html" target="_top"><code class="filename">meta-pkgs/gnome</code></a>: Provides a
9771 complete installation of the GNOME platform and desktop as defined 9795 complete installation of the GNOME platform and desktop as defined
9772 by the GNOME project; this is based on the components distributed in 9796 by the GNOME project; this is based on the components distributed in
9773 the <code class="filename">platform/x.y/x.y.z/sources</code> and 9797 the <code class="filename">platform/x.y/x.y.z/sources</code> and
9774 <code class="filename">desktop/x.y/x.y.z/sources</code> directories of the 9798 <code class="filename">desktop/x.y/x.y.z/sources</code> directories of the
9775 official FTP server. Developer-only tools found in those 9799 official FTP server. Developer-only tools found in those
9776 directories are not installed unless required by some other 9800 directories are not installed unless required by some other
9777 component to work properly. Similarly, packages from the bindings 9801 component to work properly. Similarly, packages from the bindings
9778 set (<code class="filename">bindings/x.y/x.y.z/sources</code>) are not pulled 9802 set (<code class="filename">bindings/x.y/x.y.z/sources</code>) are not pulled
9779 in unless required as a dependency for an end-user component. This 9803 in unless required as a dependency for an end-user component. This
9780 package "extends" <a href="ftp://ftp.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> 9804 package "extends" <a href="ftp://ftp.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>
9781<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-devel/README.html" target="_top"><code class="filename">meta-pkgs/gnome-devel</code></a>: 9805<li class="listitem"><p><a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-devel/README.html" target="_top"><code class="filename">meta-pkgs/gnome-devel</code></a>:
9782 Installs all the tools required to build a GNOME component when 9806 Installs all the tools required to build a GNOME component when
9783 fetched from the CVS repository. These are required to let the 9807 fetched from the CVS repository. These are required to let the
9784 <span class="command"><strong>autogen.sh</strong></span> scripts work appropriately.</p></li> 9808 <span class="command"><strong>autogen.sh</strong></span> scripts work appropriately.</p></li>
9785</ul></div> 9809</ul></div>
9786<p>In all these packages, the <code class="varname">DEPENDS</code> lines are 9810<p>In all these packages, the <code class="varname">DEPENDS</code> lines are
9787sorted in a way that eases updates: a package may depend on other 9811sorted in a way that eases updates: a package may depend on other
9788packages listed before it but not on any listed after it. It is very 9812packages listed before it but not on any listed after it. It is very
9789important to keep this order to ease updates so... <span class="emphasis"><em>do not 9813important to keep this order to ease updates so... <span class="emphasis"><em>do not
9790change it to alphabetical sorting!</em></span></p> 9814change it to alphabetical sorting!</em></span></p>
9791</div> 9815</div>
9792<div class="sect1"> 9816<div class="sect1">
9793<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9817<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9794<a name="new-package"></a>23.2. Packaging a GNOME application</h2></div></div></div> 9818<a name="new-package"></a>23.2. Packaging a GNOME application</h2></div></div></div>
9795<p>Almost all GNOME applications are written in C and use a common 9819<p>Almost all GNOME applications are written in C and use a common
9796set of tools as their build system. Things get different with the new 9820set of tools as their build system. Things get different with the new
9797bindings to other languages (such as Python), but the following will 9821bindings to other languages (such as Python), but the following will
9798give you a general idea on the minimum required tools:</p> 9822give you a general idea on the minimum required tools:</p>
9799<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9823<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9800<li class="listitem"> 9824<li class="listitem">
9801<p>Almost all GNOME applications use the GNU Autotools as their 9825<p>Almost all GNOME applications use the GNU Autotools as their
9802 build system. As a general rule you will need to tell this to your 9826 build system. As a general rule you will need to tell this to your
9803 package:</p> 9827 package:</p>
9804<pre class="programlisting"> 9828<pre class="programlisting">
9805GNU_CONFIGURE=yes 9829GNU_CONFIGURE=yes
9806USE_LIBTOOL=yes 9830USE_LIBTOOL=yes
9807USE_TOOLS+=gmake 9831USE_TOOLS+=gmake
9808</pre> 9832</pre>
9809</li> 9833</li>
9810<li class="listitem"> 9834<li class="listitem">
9811<p>If the package uses pkg-config to detect dependencies, add this 9835<p>If the package uses pkg-config to detect dependencies, add this
9812 tool to the list of required utilities:</p> 9836 tool to the list of required utilities:</p>
9813<pre class="programlisting">USE_TOOLS+=pkg-config</pre> 9837<pre class="programlisting">USE_TOOLS+=pkg-config</pre>
9814<p>Also use <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/verifypc/README.html" target="_top"><code class="filename">pkgtools/verifypc</code></a> at 9838<p>Also use <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/verifypc/README.html" target="_top"><code class="filename">pkgtools/verifypc</code></a> at
9815 the end of the build process to ensure that you did not miss to 9839 the end of the build process to ensure that you did not miss to
9816 specify any dependency in your package and that the version 9840 specify any dependency in your package and that the version
9817 requirements are all correct.</p> 9841 requirements are all correct.</p>
9818</li> 9842</li>
9819<li class="listitem"><p>If the package uses intltool, be sure to add 9843<li class="listitem"><p>If the package uses intltool, be sure to add
9820 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code> 9844 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code>
9821 to handle dependencies and to force the package to use the latest 9845 to handle dependencies and to force the package to use the latest
9822 available version.</p></li> 9846 available version.</p></li>
9823<li class="listitem"> 9847<li class="listitem">
9824<p>If the package uses gtk-doc (a documentation generation 9848<p>If the package uses gtk-doc (a documentation generation
9825 utility), do <span class="emphasis"><em>not</em></span> add a dependency on it. The 9849 utility), do <span class="emphasis"><em>not</em></span> add a dependency on it. The
9826 tool is rather big and the distfile should come with pregenerated 9850 tool is rather big and the distfile should come with pregenerated
9827 documentation anyway; if it does not, it is a bug that you ought to 9851 documentation anyway; if it does not, it is a bug that you ought to
9828 report. For such packages you should disable gtk-doc (unless it is 9852 report. For such packages you should disable gtk-doc (unless it is
9829 the default):</p> 9853 the default):</p>
9830<pre class="programlisting">CONFIGURE_ARGS+=--disable-gtk-doc</pre> 9854<pre class="programlisting">CONFIGURE_ARGS+=--disable-gtk-doc</pre>
9831<p>The default location of installed HTML files 9855<p>The default location of installed HTML files
9832 (<code class="filename">share/gtk-doc/&lt;package-name&gt;</code>) is correct 9856 (<code class="filename">share/gtk-doc/&lt;package-name&gt;</code>) is correct
9833 and should not be changed unless the package insists on installing 9857 and should not be changed unless the package insists on installing
9834 them somewhere else. Otherwise programs as 9858 them somewhere else. Otherwise programs as
9835 <span class="command"><strong>devhelp</strong></span> will not be able to open them. You can 9859 <span class="command"><strong>devhelp</strong></span> will not be able to open them. You can
9836 do that with an entry similar to:</p> 9860 do that with an entry similar to:</p>
9837<pre class="programlisting">CONFIGURE_ARGS+=--with-html-dir=${PREFIX}/share/gtk-doc/...</pre> 9861<pre class="programlisting">CONFIGURE_ARGS+=--with-html-dir=${PREFIX}/share/gtk-doc/...</pre>
9838</li> 9862</li>
9839</ul></div> 9863</ul></div>
9840<p>GNOME uses multiple <span class="emphasis"><em>shared</em></span> directories and 9864<p>GNOME uses multiple <span class="emphasis"><em>shared</em></span> directories and
9841files under the installation prefix to maintain databases. In this 9865files under the installation prefix to maintain databases. In this
9842context, shared means that those exact same directories and files are 9866context, shared means that those exact same directories and files are
9843used among several different packages, leading to conflicts in the 9867used among several different packages, leading to conflicts in the
9844<code class="filename">PLIST</code>. pkgsrc currently includes functionality to 9868<code class="filename">PLIST</code>. pkgsrc currently includes functionality to
9845handle the most common cases, so you have to forget about using 9869handle the most common cases, so you have to forget about using
9846<code class="literal">@unexec ${RMDIR}</code> lines in your file lists and 9870<code class="literal">@unexec ${RMDIR}</code> lines in your file lists and
9847omitting shared files from them. If you find yourself doing those, 9871omitting shared files from them. If you find yourself doing those,
9848<span class="emphasis"><em>your package is most likely incorrect</em></span>.</p> 9872<span class="emphasis"><em>your package is most likely incorrect</em></span>.</p>
9849<p>The following table lists the common situations that result in 9873<p>The following table lists the common situations that result in
9850using shared directories or files. For each of them, the appropriate 9874using shared directories or files. For each of them, the appropriate
9851solution is given. After applying the solution be sure to 9875solution is given. After applying the solution be sure to
9852<span class="emphasis"><em>regenerate the package's file list</em></span> with 9876<span class="emphasis"><em>regenerate the package's file list</em></span> with
9853<span class="command"><strong>make print-PLIST</strong></span> and ensure it is correct.</p> 9877<span class="command"><strong>make print-PLIST</strong></span> and ensure it is correct.</p>
9854<div class="table"> 9878<div class="table">
9855<a name="plist-handling"></a><p class="title"><b>Table 23.1. PLIST handling for GNOME packages</b></p> 9879<a name="plist-handling"></a><p class="title"><b>Table 23.1. PLIST handling for GNOME packages</b></p>
9856<div class="table-contents"><table summary="PLIST handling for GNOME packages" border="1"> 9880<div class="table-contents"><table summary="PLIST handling for GNOME packages" border="1">
9857<colgroup> 9881<colgroup>
9858<col> 9882<col>
9859<col> 9883<col>
9860</colgroup> 9884</colgroup>
9861<thead><tr> 9885<thead><tr>
9862<th>If the package...</th> 9886<th>If the package...</th>
9863<th>Then...</th> 9887<th>Then...</th>
9864</tr></thead> 9888</tr></thead>
9865<tbody> 9889<tbody>
9866<tr> 9890<tr>
9867<td>Installs OMF files under <code class="filename">share/omf</code>.</td> 9891<td>Installs OMF files under <code class="filename">share/omf</code>.</td>
9868<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> 9892<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>
9869</tr> 9893</tr>
9870<tr> 9894<tr>
9871<td>Installs icons under the 9895<td>Installs icons under the
9872 <code class="filename">share/icons/hicolor</code> hierarchy or updates 9896 <code class="filename">share/icons/hicolor</code> hierarchy or updates
9873 <code class="filename">share/icons/hicolor/icon-theme.cache</code>.</td> 9897 <code class="filename">share/icons/hicolor/icon-theme.cache</code>.</td>
9874<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> 9898<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>
9875</tr> 9899</tr>
9876<tr> 9900<tr>
9877<td>Installs files under 9901<td>Installs files under
9878 <code class="filename">share/mime/packages</code>.</td> 9902 <code class="filename">share/mime/packages</code>.</td>
9879<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> 9903<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>
9880</tr> 9904</tr>
9881<tr> 9905<tr>
9882<td>Installs <code class="filename">.desktop</code> files under 9906<td>Installs <code class="filename">.desktop</code> files under
9883 <code class="filename">share/applications</code> and these include MIME 9907 <code class="filename">share/applications</code> and these include MIME
9884 information.</td> 9908 information.</td>
9885<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> 9909<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>
9886</tr> 9910</tr>
9887</tbody> 9911</tbody>
9888</table></div> 9912</table></div>
9889</div> 9913</div>
9890<br class="table-break"> 9914<br class="table-break">
9891</div> 9915</div>
9892<div class="sect1"> 9916<div class="sect1">
9893<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9917<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9894<a name="full-update"></a>23.3. Updating GNOME to a newer version</h2></div></div></div> 9918<a name="full-update"></a>23.3. Updating GNOME to a newer version</h2></div></div></div>
9895<p>When seeing GNOME as a whole, there are two kinds of 9919<p>When seeing GNOME as a whole, there are two kinds of
9896updates:</p> 9920updates:</p>
9897<div class="variablelist"><dl class="variablelist"> 9921<div class="variablelist"><dl class="variablelist">
9898<dt><span class="term">Major update</span></dt> 9922<dt><span class="term">Major update</span></dt>
9899<dd> 9923<dd>
9900<p>Given that there is still a very long way for GNOME 3 (if it 9924<p>Given that there is still a very long way for GNOME 3 (if it
9901 ever appears), we consider a major update one that goes from a 9925 ever appears), we consider a major update one that goes from a
9902 <code class="literal">2.X</code> version to a <code class="literal">2.Y</code> one, 9926 <code class="literal">2.X</code> version to a <code class="literal">2.Y</code> one,
9903 where <code class="literal">Y</code> is even and greater than 9927 where <code class="literal">Y</code> is even and greater than
9904 <code class="literal">X</code>. These are hard to achieve because they 9928 <code class="literal">X</code>. These are hard to achieve because they
9905 introduce lots of changes in the components' code and almost all 9929 introduce lots of changes in the components' code and almost all
9906 GNOME distfiles are updated to newer versions. Some of them can 9930 GNOME distfiles are updated to newer versions. Some of them can
9907 even break API and ABI compatibility with the previous major 9931 even break API and ABI compatibility with the previous major
9908 version series. As a result, the update needs to be done all at 9932 version series. As a result, the update needs to be done all at
9909 once to minimize breakage.</p> 9933 once to minimize breakage.</p>
9910<p>A major update typically consists of around 80 package 9934<p>A major update typically consists of around 80 package
9911 updates and the addition of some new ones.</p> 9935 updates and the addition of some new ones.</p>
9912</dd> 9936</dd>
9913<dt><span class="term">Minor update</span></dt> 9937<dt><span class="term">Minor update</span></dt>
9914<dd> 9938<dd>
9915<p>We consider a minor update one that goes from a 9939<p>We consider a minor update one that goes from a
9916 <code class="literal">2.A.X</code> version to a <code class="literal">2.A.Y</code> 9940 <code class="literal">2.A.X</code> version to a <code class="literal">2.A.Y</code>
9917 one where <code class="literal">Y</code> is greater than 9941 one where <code class="literal">Y</code> is greater than
9918 <code class="literal">X</code>. These are easy to achieve because they do 9942 <code class="literal">X</code>. These are easy to achieve because they do
9919 not update all GNOME components, can be done in an incremental way 9943 not update all GNOME components, can be done in an incremental way
9920 and do not break API nor ABI compatibility.</p> 9944 and do not break API nor ABI compatibility.</p>
9921<p>A minor update typically consists of around 50 package 9945<p>A minor update typically consists of around 50 package
9922 updates, although the numbers here may vary a lot.</p> 9946 updates, although the numbers here may vary a lot.</p>
9923</dd> 9947</dd>
9924</dl></div> 9948</dl></div>
9925<p>In order to update the GNOME components in pkgsrc to a new stable 9949<p>In order to update the GNOME components in pkgsrc to a new stable
9926release (either major or minor), the following steps should be 9950release (either major or minor), the following steps should be
9927followed:</p> 9951followed:</p>
9928<div class="orderedlist"><ol class="orderedlist" type="1"> 9952<div class="orderedlist"><ol class="orderedlist" type="1">
9929<li class="listitem"> 9953<li class="listitem">
9930<p>Get a list of all the tarballs that form the new release by 9954<p>Get a list of all the tarballs that form the new release by
9931 using the following commands. These will leave the full list of the 9955 using the following commands. These will leave the full list of the
9932 components' distfiles into the <code class="filename">list.txt</code> 9956 components' distfiles into the <code class="filename">list.txt</code>
9933 file:</p> 9957 file:</p>
9934<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>echo ls "*.tar.bz2" | \ 9958<pre class="screen"><code class="prompt">%</code> <strong class="userinput"><code>echo ls "*.tar.bz2" | \
9935 ftp -V ftp://ftp.gnome.org/pub/gnome/platform/x.y/x.y.z/sources/ | \ 9959 ftp -V ftp://ftp.gnome.org/pub/gnome/platform/x.y/x.y.z/sources/ | \
9936 awk '{ print $9 }' &gt;list.txt</code></strong> 9960 awk '{ print $9 }' &gt;list.txt</code></strong>
9937<code class="prompt">%</code> <strong class="userinput"><code>echo ls "*.tar.bz2" | \ 9961<code class="prompt">%</code> <strong class="userinput"><code>echo ls "*.tar.bz2" | \
9938 ftp -V ftp://ftp.gnome.org/pub/gnome/desktop/x.y/x.y.z/sources/ | \ 9962 ftp -V ftp://ftp.gnome.org/pub/gnome/desktop/x.y/x.y.z/sources/ | \
9939 awk '{ print $9 }' &gt;&gt;list.txt</code></strong></pre> 9963 awk '{ print $9 }' &gt;&gt;list.txt</code></strong></pre>
9940</li> 9964</li>
9941<li class="listitem"><p>Open each meta package's <code class="filename">Makefile</code> and 9965<li class="listitem"><p>Open each meta package's <code class="filename">Makefile</code> and
9942 bump their version to the release you are updating them to. The 9966 bump their version to the release you are updating them to. The
9943 three meta packages should be always consistent with versioning. 9967 three meta packages should be always consistent with versioning.
9944 Obviously remove any <code class="varname">PKGREVISION</code>s that might be 9968 Obviously remove any <code class="varname">PKGREVISION</code>s that might be
9945 in them.</p></li> 9969 in them.</p></li>
9946<li class="listitem"> 9970<li class="listitem">
9947<p>For each meta package, update all its 9971<p>For each meta package, update all its
9948 <code class="varname">DEPENDS</code> lines to match the latest versions as 9972 <code class="varname">DEPENDS</code> lines to match the latest versions as
9949 shown by the above commands. Do <span class="emphasis"><em>not</em></span> list any 9973 shown by the above commands. Do <span class="emphasis"><em>not</em></span> list any
9950 newer version (even if found in the FTP) because the meta packages 9974 newer version (even if found in the FTP) because the meta packages
9951 are supposed to list the exact versions that form a specific GNOME 9975 are supposed to list the exact versions that form a specific GNOME
9952 release. Exceptions are permitted here if a newer version solves a 9976 release. Exceptions are permitted here if a newer version solves a
9953 serious issue in the overall desktop experience; these typically 9977 serious issue in the overall desktop experience; these typically
9954 come in the form of a revision bump in pkgsrc, not in newer versions 9978 come in the form of a revision bump in pkgsrc, not in newer versions
9955 from the developers.</p> 9979 from the developers.</p>
9956<p>Packages not listed in the <code class="filename">list.txt</code> file 9980<p>Packages not listed in the <code class="filename">list.txt</code> file
9957 should be updated to the latest version available (if found in 9981 should be updated to the latest version available (if found in
9958 pkgsrc). This is the case, for example, of the dependencies on the 9982 pkgsrc). This is the case, for example, of the dependencies on the
9959 GNU Autotools in the <a href="ftp://ftp.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> 9983 GNU Autotools in the <a href="ftp://ftp.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>
9960</li> 9984</li>
9961<li class="listitem"> 9985<li class="listitem">
9962<p>Generate a patch from the modified meta packages and extract the 9986<p>Generate a patch from the modified meta packages and extract the
9963 list of "new" lines. This will provide you an outline on what 9987 list of "new" lines. This will provide you an outline on what
9964 packages need to be updated in pkgsrc and in what order:</p> 9988 packages need to be updated in pkgsrc and in what order:</p>
9965<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> 9989<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>
9966</li> 9990</li>
9967<li class="listitem"><p>For major desktop updates it is recommended to zap all your 9991<li class="listitem"><p>For major desktop updates it is recommended to zap all your
9968 installed packages and start over from scratch at this point.</p></li> 9992 installed packages and start over from scratch at this point.</p></li>
9969<li class="listitem"><p>Now comes the longest step by far: iterate over the contents 9993<li class="listitem"><p>Now comes the longest step by far: iterate over the contents
9970 of <code class="filename">todo.txt</code> and update the packages listed in 9994 of <code class="filename">todo.txt</code> and update the packages listed in
9971 it in order. For major desktop updates none of these should be 9995 it in order. For major desktop updates none of these should be
9972 committed until the entire set is completed because there are chances 9996 committed until the entire set is completed because there are chances
9973 of breaking not-yet-updated packages.</p></li> 9997 of breaking not-yet-updated packages.</p></li>
9974<li class="listitem"><p>Once the packages are up to date and working, commit them to 9998<li class="listitem"><p>Once the packages are up to date and working, commit them to
9975 the tree one by one with appropriate log messages. At the end, 9999 the tree one by one with appropriate log messages. At the end,
9976 commit the three meta package updates and all the corresponding 10000 commit the three meta package updates and all the corresponding
9977 changes to the <code class="filename">doc/CHANGES-&lt;YEAR&gt;</code> and 10001 changes to the <code class="filename">doc/CHANGES-&lt;YEAR&gt;</code> and
9978 <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> 10002 <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>
9979</ol></div> 10003</ol></div>
9980</div> 10004</div>
9981<div class="sect1"> 10005<div class="sect1">
9982<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10006<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9983<a name="patching"></a>23.4. Patching guidelines</h2></div></div></div> 10007<a name="patching"></a>23.4. Patching guidelines</h2></div></div></div>
9984<p>GNOME is a very big component in pkgsrc which approaches 100 10008<p>GNOME is a very big component in pkgsrc which approaches 100
9985packages. Please, it is very important that you always, always, 10009packages. Please, it is very important that you always, always,
9986<span class="strong"><strong>always</strong></span> feed back any portability 10010<span class="strong"><strong>always</strong></span> feed back any portability
9987fixes 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 10011fixes 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
9988their attention on portability issues and to ensure that future versions 10012their attention on portability issues and to ensure that future versions
9989can be built out-of-the box on NetBSD. The less custom patches in 10013can be built out-of-the box on NetBSD. The less custom patches in
9990pkgsrc, the easier further updates are. Those developers in charge of 10014pkgsrc, the easier further updates are. Those developers in charge of
9991issuing major GNOME updates will be grateful if you do that.</p> 10015issuing major GNOME updates will be grateful if you do that.</p>
9992<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 10016<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
9993Bugzilla</a>. Not all components use these to track bugs, but most 10017Bugzilla</a>. Not all components use these to track bugs, but most
9994of them do. Do not be short on your reports: always provide detailed 10018of them do. Do not be short on your reports: always provide detailed
9995explanations of the current failure, how it can be improved to achieve 10019explanations of the current failure, how it can be improved to achieve
9996maximum portability and, if at all possible, provide a patch against CVS 10020maximum portability and, if at all possible, provide a patch against CVS
9997head. The more verbose you are, the higher chances of your patch being 10021head. The more verbose you are, the higher chances of your patch being
9998accepted.</p> 10022accepted.</p>
9999<p>Also, please avoid using preprocessor magic to fix portability 10023<p>Also, please avoid using preprocessor magic to fix portability
10000issues. While the FreeBSD GNOME people are doing a great job in porting 10024issues. While the FreeBSD GNOME people are doing a great job in porting
10001GNOME to their operating system, the official GNOME sources are now 10025GNOME to their operating system, the official GNOME sources are now
10002plagued by conditionals that check for <code class="varname">__FreeBSD__</code> 10026plagued by conditionals that check for <code class="varname">__FreeBSD__</code>
10003and similar macros. This hurts portability. Please see our patching 10027and similar macros. This hurts portability. Please see our patching
10004guidelines (<a class="xref" href="#components.patches.guidelines" title="11.3.4. Patching guidelines">Section 11.3.4, &#8220;Patching guidelines&#8221;</a>) for more 10028guidelines (<a class="xref" href="#components.patches.guidelines" title="11.3.4. Patching guidelines">Section 11.3.4, &#8220;Patching guidelines&#8221;</a>) for more
10005details.</p> 10029details.</p>
10006</div> 10030</div>
10007</div> 10031</div>
10008</div> 10032</div>
10009<div class="part"> 10033<div class="part">
10010<div class="titlepage"><div><div><h1 class="title"> 10034<div class="titlepage"><div><div><h1 class="title">
10011<a name="infrastructure"></a>Part III. The pkgsrc infrastructure internals</h1></div></div></div> 10035<a name="infrastructure"></a>Part III. The pkgsrc infrastructure internals</h1></div></div></div>
10012<div class="partintro"> 10036<div class="partintro">
10013<div></div> 10037<div></div>
10014<p>This part of the guide deals with everything 10038<p>This part of the guide deals with everything
10015 from the infrastructure that is behind the interfaces described 10039 from the infrastructure that is behind the interfaces described
10016 in the developer's guide. A casual package maintainer should not 10040 in the developer's guide. A casual package maintainer should not
10017 need anything from this part.</p> 10041 need anything from this part.</p>
10018<div class="toc"> 10042<div class="toc">
10019<p><b>Table of Contents</b></p> 10043<p><b>Table of Contents</b></p>
10020<dl> 10044<dl>
10021<dt><span class="chapter"><a href="#infr.design">24. Design of the pkgsrc infrastructure</a></span></dt> 10045<dt><span class="chapter"><a href="#infr.design">24. Design of the pkgsrc infrastructure</a></span></dt>
10022<dd><dl> 10046<dd><dl>
10023<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt> 10047<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt>
10024<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt> 10048<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt>
10025<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt> 10049<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt>
10026<dd><dl> 10050<dd><dl>
10027<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt> 10051<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt>
10028<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt> 10052<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt>
10029</dl></dd> 10053</dl></dd>
10030<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt> 10054<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt>
10031<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt> 10055<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt>
10032<dd><dl> 10056<dd><dl>
10033<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt> 10057<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt>
10034<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt> 10058<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt>
10035</dl></dd> 10059</dl></dd>
10036<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt> 10060<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt>
10037<dd><dl> 10061<dd><dl>
10038<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> 10062<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>
10039<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> 10063<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>
10040</dl></dd> 10064</dl></dd>
10041</dl></dd> 10065</dl></dd>
10042<dt><span class="chapter"><a href="#regression">25. Regression tests</a></span></dt> 10066<dt><span class="chapter"><a href="#regression">25. Regression tests</a></span></dt>
10043<dd><dl> 10067<dd><dl>
10044<dt><span class="sect1"><a href="#regression.descr">25.1. The regression tests framework</a></span></dt> 10068<dt><span class="sect1"><a href="#regression.descr">25.1. The regression tests framework</a></span></dt>
10045<dt><span class="sect1"><a href="#regression.run">25.2. Running the regression tests</a></span></dt> 10069<dt><span class="sect1"><a href="#regression.run">25.2. Running the regression tests</a></span></dt>
10046<dt><span class="sect1"><a href="#regression.new">25.3. Adding a new regression test</a></span></dt> 10070<dt><span class="sect1"><a href="#regression.new">25.3. Adding a new regression test</a></span></dt>
10047<dd><dl> 10071<dd><dl>
10048<dt><span class="sect2"><a href="#regression.fun.override">25.3.1. Overridable functions</a></span></dt> 10072<dt><span class="sect2"><a href="#regression.fun.override">25.3.1. Overridable functions</a></span></dt>
10049<dt><span class="sect2"><a href="#regression.fun.helper">25.3.2. Helper functions</a></span></dt> 10073<dt><span class="sect2"><a href="#regression.fun.helper">25.3.2. Helper functions</a></span></dt>
10050</dl></dd> 10074</dl></dd>
10051</dl></dd> 10075</dl></dd>
10052<dt><span class="chapter"><a href="#porting">26. Porting pkgsrc</a></span></dt> 10076<dt><span class="chapter"><a href="#porting">26. Porting pkgsrc</a></span></dt>
10053<dd><dl> 10077<dd><dl>
10054<dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt> 10078<dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt>
10055<dt><span class="sect1"><a href="#porting.compiler">26.2. Adding support for a new compiler</a></span></dt> 10079<dt><span class="sect1"><a href="#porting.compiler">26.2. Adding support for a new compiler</a></span></dt>
10056</dl></dd> 10080</dl></dd>
10057</dl> 10081</dl>
10058</div> 10082</div>
10059</div> 10083</div>
10060<div class="chapter"> 10084<div class="chapter">
10061<div class="titlepage"><div><div><h2 class="title"> 10085<div class="titlepage"><div><div><h2 class="title">
10062<a name="infr.design"></a>Chapter 24. Design of the pkgsrc infrastructure</h2></div></div></div> 10086<a name="infr.design"></a>Chapter 24. Design of the pkgsrc infrastructure</h2></div></div></div>
10063<div class="toc"> 10087<div class="toc">
10064<p><b>Table of Contents</b></p> 10088<p><b>Table of Contents</b></p>
10065<dl> 10089<dl>
10066<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt> 10090<dt><span class="sect1"><a href="#infr.vardef">24.1. The meaning of variable definitions</a></span></dt>
10067<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt> 10091<dt><span class="sect1"><a href="#infr.vardef.problems">24.2. Avoiding problems before they arise</a></span></dt>
10068<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt> 10092<dt><span class="sect1"><a href="#infr.var">24.3. Variable evaluation</a></span></dt>
10069<dd><dl> 10093<dd><dl>
10070<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt> 10094<dt><span class="sect2"><a href="#infr.var.load">24.3.1. At load time</a></span></dt>
10071<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt> 10095<dt><span class="sect2"><a href="#infr.var.run">24.3.2. At runtime</a></span></dt>
10072</dl></dd> 10096</dl></dd>
10073<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt> 10097<dt><span class="sect1"><a href="#infr.varspec">24.4. How can variables be specified?</a></span></dt>
10074<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt> 10098<dt><span class="sect1"><a href="#infr.design.intf">24.5. Designing interfaces for Makefile fragments</a></span></dt>
10075<dd><dl> 10099<dd><dl>
10076<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt> 10100<dt><span class="sect2"><a href="#infr.design.intf.proc">24.5.1. Procedures with parameters</a></span></dt>
10077<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt> 10101<dt><span class="sect2"><a href="#infr.design.intf.action">24.5.2. Actions taken on behalf of parameters</a></span></dt>
10078</dl></dd> 10102</dl></dd>
10079<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt> 10103<dt><span class="sect1"><a href="#infr.order">24.6. The order in which files are loaded</a></span></dt>
10080<dd><dl> 10104<dd><dl>
10081<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> 10105<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>
10082<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> 10106<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>
10083</dl></dd> 10107</dl></dd>
10084</dl> 10108</dl>
10085</div> 10109</div>
10086<p>The pkgsrc infrastructure consists of many small Makefile 10110<p>The pkgsrc infrastructure consists of many small Makefile
10087 fragments. Each such fragment needs a properly specified 10111 fragments. Each such fragment needs a properly specified
10088 interface. This chapter explains how such an interface looks 10112 interface. This chapter explains how such an interface looks
10089 like.</p> 10113 like.</p>
10090<div class="sect1"> 10114<div class="sect1">
10091<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10115<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10092<a name="infr.vardef"></a>24.1. The meaning of variable definitions</h2></div></div></div> 10116<a name="infr.vardef"></a>24.1. The meaning of variable definitions</h2></div></div></div>
10093<p>Whenever a variable is defined in the pkgsrc 10117<p>Whenever a variable is defined in the pkgsrc
10094 infrastructure, the location and the way of definition provide 10118 infrastructure, the location and the way of definition provide
10095 much information about the intended use of that variable. 10119 much information about the intended use of that variable.
10096 Additionally, more documentation may be found in a header 10120 Additionally, more documentation may be found in a header
10097 comment or in this pkgsrc guide.</p> 10121 comment or in this pkgsrc guide.</p>
10098<p>A special file is 10122<p>A special file is
10099 <code class="filename">mk/defaults/mk.conf</code>, which lists all 10123 <code class="filename">mk/defaults/mk.conf</code>, which lists all
10100 variables that are intended to be user-defined. They are either 10124 variables that are intended to be user-defined. They are either
10101 defined using the <code class="literal">?=</code> operator or they are 10125 defined using the <code class="literal">?=</code> operator or they are
10102 left undefined because defining them to anything would 10126 left undefined because defining them to anything would
10103 effectively mean <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. All these variables may be 10127 effectively mean <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. All these variables may be
10104 overridden by the pkgsrc user in the <code class="varname">MAKECONF</code> 10128 overridden by the pkgsrc user in the <code class="varname">MAKECONF</code>
10105 file.</p> 10129 file.</p>
10106<p>Outside this file, the following conventions apply: 10130<p>Outside this file, the following conventions apply:
10107 Variables that are defined using the <code class="literal">?=</code> 10131 Variables that are defined using the <code class="literal">?=</code>
10108 operator may be overridden by a package.</p> 10132 operator may be overridden by a package.</p>
10109<p>Variables that are defined using the <code class="literal">=</code> 10133<p>Variables that are defined using the <code class="literal">=</code>
10110 operator may be used read-only at run-time.</p> 10134 operator may be used read-only at run-time.</p>
10111<p>Variables whose name starts with an underscore must not be 10135<p>Variables whose name starts with an underscore must not be
10112 accessed outside the pkgsrc infrastructure at all. They may 10136 accessed outside the pkgsrc infrastructure at all. They may
10113 change without further notice.</p> 10137 change without further notice.</p>
10114<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 10138<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
10115<h3 class="title">Note</h3> 10139<h3 class="title">Note</h3>
10116<p>These conventions are currently not applied 10140<p>These conventions are currently not applied
10117 consistently to the complete pkgsrc 10141 consistently to the complete pkgsrc
10118 infrastructure.</p> 10142 infrastructure.</p>
10119</div> 10143</div>
10120</div> 10144</div>
10121<div class="sect1"> 10145<div class="sect1">
10122<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10146<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10123<a name="infr.vardef.problems"></a>24.2. Avoiding problems before they arise</h2></div></div></div> 10147<a name="infr.vardef.problems"></a>24.2. Avoiding problems before they arise</h2></div></div></div>
10124<p>All variables that contain lists of things should default 10148<p>All variables that contain lists of things should default
10125 to being empty. Two examples that do not follow this rule are 10149 to being empty. Two examples that do not follow this rule are
10126 <code class="varname">USE_LANGUAGES</code> and 10150 <code class="varname">USE_LANGUAGES</code> and
10127 <code class="varname">DISTFILES</code>. These variables cannot simply be 10151 <code class="varname">DISTFILES</code>. These variables cannot simply be
10128 modified using the <code class="literal">+=</code> operator in package 10152 modified using the <code class="literal">+=</code> operator in package
10129 <code class="filename">Makefile</code>s (or other files included by 10153 <code class="filename">Makefile</code>s (or other files included by
10130 them), since there is no guarantee whether the variable is 10154 them), since there is no guarantee whether the variable is
10131 already set or not, and what its value is. In the case of 10155 already set or not, and what its value is. In the case of
10132 <code class="varname">DISTFILES</code>, the packages <span class="quote">&#8220;<span class="quote">know</span>&#8221;</span> 10156 <code class="varname">DISTFILES</code>, the packages <span class="quote">&#8220;<span class="quote">know</span>&#8221;</span>
10133 the default value and just define it as in the following 10157 the default value and just define it as in the following
10134 example.</p> 10158 example.</p>
10135<pre class="programlisting"> 10159<pre class="programlisting">
10136DISTFILES= ${DISTNAME}${EXTRACT_SUFX} additional-files.tar.gz 10160DISTFILES= ${DISTNAME}${EXTRACT_SUFX} additional-files.tar.gz
10137</pre> 10161</pre>
10138<p>Because of the selection of this default value, the same 10162<p>Because of the selection of this default value, the same
10139 value appears in many package Makefiles. Similarly for 10163 value appears in many package Makefiles. Similarly for
10140 <code class="varname">USE_LANGUAGES</code>, but in this case the default 10164 <code class="varname">USE_LANGUAGES</code>, but in this case the default
10141 value (<span class="quote">&#8220;<span class="quote"><code class="literal">c</code></span>&#8221;</span>) is so short that it 10165 value (<span class="quote">&#8220;<span class="quote"><code class="literal">c</code></span>&#8221;</span>) is so short that it
10142 doesn't stand out. Nevertheless it is mentioned in many 10166 doesn't stand out. Nevertheless it is mentioned in many
10143 files.</p> 10167 files.</p>
10144</div> 10168</div>
10145<div class="sect1"> 10169<div class="sect1">
10146<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10170<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10147<a name="infr.var"></a>24.3. Variable evaluation</h2></div></div></div> 10171<a name="infr.var"></a>24.3. Variable evaluation</h2></div></div></div>
10148<div class="sect2"> 10172<div class="sect2">
10149<div class="titlepage"><div><div><h3 class="title"> 10173<div class="titlepage"><div><div><h3 class="title">
10150<a name="infr.var.load"></a>24.3.1. At load time</h3></div></div></div> 10174<a name="infr.var.load"></a>24.3.1. At load time</h3></div></div></div>
10151<p>Variable evaluation takes place either at load time or at 10175<p>Variable evaluation takes place either at load time or at
10152 runtime, depending on the context in which they occur. The 10176 runtime, depending on the context in which they occur. The
10153 contexts where variables are evaluated at load time are:</p> 10177 contexts where variables are evaluated at load time are:</p>
10154<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 10178<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
10155<li class="listitem"><p>The right hand side of the <code class="literal">:=</code> 10179<li class="listitem"><p>The right hand side of the <code class="literal">:=</code>
10156 and <code class="literal">!=</code> operators,</p></li> 10180 and <code class="literal">!=</code> operators,</p></li>
10157<li class="listitem"><p>Make directives like <code class="literal">.if</code> or 10181<li class="listitem"><p>Make directives like <code class="literal">.if</code> or
10158 <code class="literal">.for</code>,</p></li> 10182 <code class="literal">.for</code>,</p></li>
10159<li class="listitem"><p>Dependency lines.</p></li> 10183<li class="listitem"><p>Dependency lines.</p></li>
10160</ul></div> 10184</ul></div>
10161<p>A special exception are references to the iteration 10185<p>A special exception are references to the iteration
10162 variables of <code class="literal">.for</code> loops, which are expanded 10186 variables of <code class="literal">.for</code> loops, which are expanded
10163 inline, no matter in which context they appear.</p> 10187 inline, no matter in which context they appear.</p>
10164<p>As the values of variables may change during load time, 10188<p>As the values of variables may change during load time,
10165 care must be taken not to evaluate them by accident. Typical 10189 care must be taken not to evaluate them by accident. Typical
10166 examples for variables that should not be evaluated at load time 10190 examples for variables that should not be evaluated at load time
10167 are <code class="varname">DEPENDS</code> and 10191 are <code class="varname">DEPENDS</code> and
10168 <code class="varname">CONFIGURE_ARGS</code>. To make the effect more 10192 <code class="varname">CONFIGURE_ARGS</code>. To make the effect more
10169 clear, here is an example:</p> 10193 clear, here is an example:</p>
10170<pre class="programlisting"> 10194<pre class="programlisting">
10171CONFIGURE_ARGS= # none 10195CONFIGURE_ARGS= # none
10172CFLAGS= -O 10196CFLAGS= -O
10173CONFIGURE_ARGS+= CFLAGS=${CFLAGS:Q} 10197CONFIGURE_ARGS+= CFLAGS=${CFLAGS:Q}
10174 10198
10175CONFIGURE_ARGS:= ${CONFIGURE_ARGS} 10199CONFIGURE_ARGS:= ${CONFIGURE_ARGS}
10176 10200
10177CFLAGS+= -Wall 10201CFLAGS+= -Wall
10178 </pre> 10202 </pre>
10179<p>This code shows how the use of the <code class="literal">:=</code> 10203<p>This code shows how the use of the <code class="literal">:=</code>
10180 operator can quickly lead to unexpected results. The first 10204 operator can quickly lead to unexpected results. The first
10181 paragraph is fairly common code. The second paragraph evaluates 10205 paragraph is fairly common code. The second paragraph evaluates
10182 the <code class="varname">CONFIGURE_ARGS</code> variable, which results in 10206 the <code class="varname">CONFIGURE_ARGS</code> variable, which results in
10183 <code class="literal">CFLAGS=-O</code>. In the third paragraph, the 10207 <code class="literal">CFLAGS=-O</code>. In the third paragraph, the
10184 <code class="literal">-Wall</code> is appended to the 10208 <code class="literal">-Wall</code> is appended to the
10185 <code class="varname">CFLAGS</code>, but this addition will not appear in 10209 <code class="varname">CFLAGS</code>, but this addition will not appear in
10186 <code class="varname">CONFIGURE_ARGS</code>. In actual code, the three 10210 <code class="varname">CONFIGURE_ARGS</code>. In actual code, the three
10187 paragraphs from above typically occur in completely unrelated 10211 paragraphs from above typically occur in completely unrelated
10188 files.</p> 10212 files.</p>
10189</div> 10213</div>
10190<div class="sect2"> 10214<div class="sect2">
10191<div class="titlepage"><div><div><h3 class="title"> 10215<div class="titlepage"><div><div><h3 class="title">
10192<a name="infr.var.run"></a>24.3.2. At runtime</h3></div></div></div> 10216<a name="infr.var.run"></a>24.3.2. At runtime</h3></div></div></div>
10193<p>After all the files have been loaded, the values of the 10217<p>After all the files have been loaded, the values of the
10194 variables cannot be changed anymore. Variables that are used in 10218 variables cannot be changed anymore. Variables that are used in
10195 the shell commands are expanded at this point.</p> 10219 the shell commands are expanded at this point.</p>
10196</div> 10220</div>
10197</div> 10221</div>
10198<div class="sect1"> 10222<div class="sect1">
10199<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10223<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10200<a name="infr.varspec"></a>24.4. How can variables be specified?</h2></div></div></div> 10224<a name="infr.varspec"></a>24.4. How can variables be specified?</h2></div></div></div>
10201<p>There are many ways in which the definition and use of a 10225<p>There are many ways in which the definition and use of a
10202 variable can be restricted in order to detect bugs and 10226 variable can be restricted in order to detect bugs and
10203 violations of the (mostly unwritten) policies. See the 10227 violations of the (mostly unwritten) policies. See the
10204 <code class="literal">pkglint</code> developer's documentation for further 10228 <code class="literal">pkglint</code> developer's documentation for further
10205 details.</p> 10229 details.</p>
10206</div> 10230</div>
10207<div class="sect1"> 10231<div class="sect1">
10208<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10232<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10209<a name="infr.design.intf"></a>24.5. Designing interfaces for Makefile fragments</h2></div></div></div> 10233<a name="infr.design.intf"></a>24.5. Designing interfaces for Makefile fragments</h2></div></div></div>
10210<p>Most of the <code class="filename">.mk</code> files fall into one 10234<p>Most of the <code class="filename">.mk</code> files fall into one
10211 of the following classes. Cases where a file falls into more 10235 of the following classes. Cases where a file falls into more
10212 than one class should be avoided as it often leads to subtle 10236 than one class should be avoided as it often leads to subtle
10213 bugs.</p> 10237 bugs.</p>
10214<div class="sect2"> 10238<div class="sect2">
10215<div class="titlepage"><div><div><h3 class="title"> 10239<div class="titlepage"><div><div><h3 class="title">
10216<a name="infr.design.intf.proc"></a>24.5.1. Procedures with parameters</h3></div></div></div> 10240<a name="infr.design.intf.proc"></a>24.5.1. Procedures with parameters</h3></div></div></div>
10217<p>In a traditional imperative programming language some of 10241<p>In a traditional imperative programming language some of
10218 the <code class="filename">.mk</code> files could be described as 10242 the <code class="filename">.mk</code> files could be described as
10219 procedures. They take some input parameters and&mdash;after 10243 procedures. They take some input parameters and&mdash;after
10220 inclusion&mdash;provide a result in output parameters. Since all 10244 inclusion&mdash;provide a result in output parameters. Since all
10221 variables in <code class="filename">Makefile</code>s have global scope 10245 variables in <code class="filename">Makefile</code>s have global scope
10222 care must be taken not to use parameter names that have already 10246 care must be taken not to use parameter names that have already
10223 another meaning. For example, <code class="varname">PKGNAME</code> is a 10247 another meaning. For example, <code class="varname">PKGNAME</code> is a
10224 bad choice for a parameter name.</p> 10248 bad choice for a parameter name.</p>
10225<p>Procedures are completely evaluated at preprocessing time. 10249<p>Procedures are completely evaluated at preprocessing time.
10226 That is, when calling a procedure all input parameters must be 10250 That is, when calling a procedure all input parameters must be
10227 completely resolvable. For example, 10251 completely resolvable. For example,
10228 <code class="varname">CONFIGURE_ARGS</code> should never be an input 10252 <code class="varname">CONFIGURE_ARGS</code> should never be an input
10229 parameter since it is very likely that further text will be 10253 parameter since it is very likely that further text will be
10230 added after calling the procedure, which would effectively apply 10254 added after calling the procedure, which would effectively apply
10231 the procedure to only a part of the variable. Also, references 10255 the procedure to only a part of the variable. Also, references
10232 to other variables wit will be modified after calling the 10256 to other variables wit will be modified after calling the
10233 procedure.</p> 10257 procedure.</p>
10234<p>A procedure can declare its output parameters either as 10258<p>A procedure can declare its output parameters either as
10235 suitable for use in preprocessing directives or as only 10259 suitable for use in preprocessing directives or as only
10236 available at runtime. The latter alternative is for variables 10260 available at runtime. The latter alternative is for variables
10237 that contain references to other runtime variables.</p> 10261 that contain references to other runtime variables.</p>
10238<p>Procedures shall be written such that it is possible to 10262<p>Procedures shall be written such that it is possible to
10239 call the procedure more than once. That is, the file must not 10263 call the procedure more than once. That is, the file must not
10240 contain multiple-inclusion guards.</p> 10264 contain multiple-inclusion guards.</p>
10241<p>Examples for procedures are 10265<p>Examples for procedures are
10242 <code class="filename">mk/bsd.options.mk</code> and 10266 <code class="filename">mk/bsd.options.mk</code> and
10243 <code class="filename">mk/buildlink3/bsd.builtin.mk</code>. To express 10267 <code class="filename">mk/buildlink3/bsd.builtin.mk</code>. To express
10244 that the parameters are evaluated at load time, they should be 10268 that the parameters are evaluated at load time, they should be
10245 assigned using the <code class="literal">:=</code> operator, which should 10269 assigned using the <code class="literal">:=</code> operator, which should
10246 be used only for this purpose.</p> 10270 be used only for this purpose.</p>
10247</div> 10271</div>
10248<div class="sect2"> 10272<div class="sect2">
10249<div class="titlepage"><div><div><h3 class="title"> 10273<div class="titlepage"><div><div><h3 class="title">
10250<a name="infr.design.intf.action"></a>24.5.2. Actions taken on behalf of parameters</h3></div></div></div> 10274<a name="infr.design.intf.action"></a>24.5.2. Actions taken on behalf of parameters</h3></div></div></div>
10251<p>Action files take some input parameters and may define 10275<p>Action files take some input parameters and may define
10252 runtime variables. They shall not define loadtime variables. 10276 runtime variables. They shall not define loadtime variables.
10253 There are action files that are included implicitly by the 10277 There are action files that are included implicitly by the
10254 pkgsrc infrastructure, while other must be included 10278 pkgsrc infrastructure, while other must be included
10255 explicitly.</p> 10279 explicitly.</p>
10256<p>An example for action files is 10280<p>An example for action files is
10257 <code class="filename">mk/subst.mk</code>.</p> 10281 <code class="filename">mk/subst.mk</code>.</p>
10258</div> 10282</div>
10259</div> 10283</div>
10260<div class="sect1"> 10284<div class="sect1">
10261<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10285<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10262<a name="infr.order"></a>24.6. The order in which files are loaded</h2></div></div></div> 10286<a name="infr.order"></a>24.6. The order in which files are loaded</h2></div></div></div>
10263<p>Package <code class="filename">Makefile</code>s usually consist of 10287<p>Package <code class="filename">Makefile</code>s usually consist of
10264 a set of variable definitions, and include the file 10288 a set of variable definitions, and include the file
10265 <code class="filename">../../mk/bsd.pkg.mk</code> in the very last line. 10289 <code class="filename">../../mk/bsd.pkg.mk</code> in the very last line.
10266 Before that, they may also include various other 10290 Before that, they may also include various other
10267 <code class="filename">*.mk</code> files if they need to query the 10291 <code class="filename">*.mk</code> files if they need to query the
10268 availability of certain features like the type of compiler or 10292 availability of certain features like the type of compiler or
10269 the X11 implementation. Due to the heavy use of preprocessor 10293 the X11 implementation. Due to the heavy use of preprocessor
10270 directives like <code class="literal">.if</code> and 10294 directives like <code class="literal">.if</code> and
10271 <code class="literal">.for</code>, the order in which the files are loaded 10295 <code class="literal">.for</code>, the order in which the files are loaded
10272 matters.</p> 10296 matters.</p>
10273<p>This section describes at which point the various files 10297<p>This section describes at which point the various files
10274 are loaded and gives reasons for that order.</p> 10298 are loaded and gives reasons for that order.</p>
10275<div class="sect2"> 10299<div class="sect2">
10276<div class="titlepage"><div><div><h3 class="title"> 10300<div class="titlepage"><div><div><h3 class="title">
10277<a name="infr.order.prefs"></a>24.6.1. The order in <code class="filename">bsd.prefs.mk</code> 10301<a name="infr.order.prefs"></a>24.6.1. The order in <code class="filename">bsd.prefs.mk</code>
10278</h3></div></div></div> 10302</h3></div></div></div>
10279<p>The very first action in <code class="filename">bsd.prefs.mk</code> 10303<p>The very first action in <code class="filename">bsd.prefs.mk</code>
10280 is to define some essential variables like 10304 is to define some essential variables like
10281 <code class="varname">OPSYS</code>, <code class="varname">OS_VERSION</code> and 10305 <code class="varname">OPSYS</code>, <code class="varname">OS_VERSION</code> and
10282 <code class="varname">MACHINE_ARCH</code>.</p> 10306 <code class="varname">MACHINE_ARCH</code>.</p>
10283<p>Then, the user settings are loaded from the file specified 10307<p>Then, the user settings are loaded from the file specified
10284 in <code class="varname">MAKECONF</code>, which is usually <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. 10308 in <code class="varname">MAKECONF</code>, which is usually <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>.
10285 After that, those variables 10309 After that, those variables
10286 that have not been overridden by the user are loaded from 10310 that have not been overridden by the user are loaded from
10287 <code class="filename">mk/defaults/mk.conf</code>.</p> 10311 <code class="filename">mk/defaults/mk.conf</code>.</p>
10288<p>After the user settings, the system settings and platform 10312<p>After the user settings, the system settings and platform
10289 settings are loaded, which may override the user 10313 settings are loaded, which may override the user
10290 settings.</p> 10314 settings.</p>
10291<p>Then, the tool definitions are loaded. The tool wrappers 10315<p>Then, the tool definitions are loaded. The tool wrappers
10292 are not yet in effect. This only happens when building a 10316 are not yet in effect. This only happens when building a
10293 package, so the proper variables must be used instead of the 10317 package, so the proper variables must be used instead of the
10294 direct tool names.</p> 10318 direct tool names.</p>
10295<p>As the last steps, some essential variables from the 10319<p>As the last steps, some essential variables from the
10296 wrapper and the package system flavor are loaded, as well as the 10320 wrapper and the package system flavor are loaded, as well as the
10297 variables that have been cached in earlier phases of a package 10321 variables that have been cached in earlier phases of a package
10298 build.</p> 10322 build.</p>
10299</div> 10323</div>
10300<div class="sect2"> 10324<div class="sect2">
10301<div class="titlepage"><div><div><h3 class="title"> 10325<div class="titlepage"><div><div><h3 class="title">
10302<a name="infr.order.pkg"></a>24.6.2. The order in <code class="filename">bsd.pkg.mk</code> 10326<a name="infr.order.pkg"></a>24.6.2. The order in <code class="filename">bsd.pkg.mk</code>
10303</h3></div></div></div> 10327</h3></div></div></div>
10304<p>First, <code class="filename">bsd.prefs.mk</code> is loaded.</p> 10328<p>First, <code class="filename">bsd.prefs.mk</code> is loaded.</p>
10305<p>Then, the various <code class="filename">*-vars.mk</code> files are 10329<p>Then, the various <code class="filename">*-vars.mk</code> files are
10306 loaded, which fill default values for those variables that have 10330 loaded, which fill default values for those variables that have
10307 not been defined by the package. These variables may later 10331 not been defined by the package. These variables may later
10308 be used even in unrelated files.</p> 10332 be used even in unrelated files.</p>
10309<p>Then, the file <code class="filename">bsd.pkg.error.mk</code> 10333<p>Then, the file <code class="filename">bsd.pkg.error.mk</code>
10310 provides the target <code class="literal">error-check</code> that is added 10334 provides the target <code class="literal">error-check</code> that is added
10311 as a special dependency to all other targets that use 10335 as a special dependency to all other targets that use
10312 <code class="varname">DELAYED_ERROR_MSG</code> or 10336 <code class="varname">DELAYED_ERROR_MSG</code> or
10313 <code class="varname">DELAYED_WARNING_MSG</code>.</p> 10337 <code class="varname">DELAYED_WARNING_MSG</code>.</p>
10314<p>Then, the package-specific hacks from 10338<p>Then, the package-specific hacks from
10315 <code class="filename">hacks.mk</code> are included.</p> 10339 <code class="filename">hacks.mk</code> are included.</p>
10316<p>Then, various other files follow. Most of them don't have 10340<p>Then, various other files follow. Most of them don't have
10317 any dependencies on what they need to have included before or 10341 any dependencies on what they need to have included before or
10318 after them, though some do.</p> 10342 after them, though some do.</p>
10319<p>The code to check <code class="varname">PKG_FAIL_REASON</code> and 10343<p>The code to check <code class="varname">PKG_FAIL_REASON</code> and
10320 <code class="varname">PKG_SKIP_REASON</code> is then executed, which 10344 <code class="varname">PKG_SKIP_REASON</code> is then executed, which
10321 restricts the use of these variables to all the files that have 10345 restricts the use of these variables to all the files that have
10322 been included before. Appearances in later files will be 10346 been included before. Appearances in later files will be
10323 silently ignored.</p> 10347 silently ignored.</p>
10324<p>Then, the files for the main targets are included, in the 10348<p>Then, the files for the main targets are included, in the
10325 order of later execution, though the actual order should not 10349 order of later execution, though the actual order should not
10326 matter.</p> 10350 matter.</p>
10327<p>At last, some more files are included that don't set any 10351<p>At last, some more files are included that don't set any
10328 interesting variables but rather just define make targets to be 10352 interesting variables but rather just define make targets to be
10329 executed.</p> 10353 executed.</p>
10330</div> 10354</div>
10331</div> 10355</div>
10332</div> 10356</div>
10333<div class="chapter"> 10357<div class="chapter">
10334<div class="titlepage"><div><div><h2 class="title"> 10358<div class="titlepage"><div><div><h2 class="title">
10335<a name="regression"></a>Chapter 25. Regression tests</h2></div></div></div> 10359<a name="regression"></a>Chapter 25. Regression tests</h2></div></div></div>
10336<div class="toc"> 10360<div class="toc">
10337<p><b>Table of Contents</b></p> 10361<p><b>Table of Contents</b></p>
10338<dl> 10362<dl>
10339<dt><span class="sect1"><a href="#regression.descr">25.1. The regression tests framework</a></span></dt> 10363<dt><span class="sect1"><a href="#regression.descr">25.1. The regression tests framework</a></span></dt>
10340<dt><span class="sect1"><a href="#regression.run">25.2. Running the regression tests</a></span></dt> 10364<dt><span class="sect1"><a href="#regression.run">25.2. Running the regression tests</a></span></dt>
10341<dt><span class="sect1"><a href="#regression.new">25.3. Adding a new regression test</a></span></dt> 10365<dt><span class="sect1"><a href="#regression.new">25.3. Adding a new regression test</a></span></dt>
10342<dd><dl> 10366<dd><dl>
10343<dt><span class="sect2"><a href="#regression.fun.override">25.3.1. Overridable functions</a></span></dt> 10367<dt><span class="sect2"><a href="#regression.fun.override">25.3.1. Overridable functions</a></span></dt>
10344<dt><span class="sect2"><a href="#regression.fun.helper">25.3.2. Helper functions</a></span></dt> 10368<dt><span class="sect2"><a href="#regression.fun.helper">25.3.2. Helper functions</a></span></dt>
10345</dl></dd> 10369</dl></dd>
10346</dl> 10370</dl>
10347</div> 10371</div>
10348<p>The pkgsrc infrastructure consists of a large codebase, 10372<p>The pkgsrc infrastructure consists of a large codebase,
10349 and there are many corners where every little bit of a file is 10373 and there are many corners where every little bit of a file is
10350 well thought out, making pkgsrc likely to fail as soon as 10374 well thought out, making pkgsrc likely to fail as soon as
10351 anything is changed near those parts. To prevent most changes 10375 anything is changed near those parts. To prevent most changes
10352 from breaking anything, a suite of regression tests should go 10376 from breaking anything, a suite of regression tests should go
10353 along with every important part of the pkgsrc infrastructure. 10377 along with every important part of the pkgsrc infrastructure.
10354 This chapter describes how regression tests work in pkgsrc and 10378 This chapter describes how regression tests work in pkgsrc and
10355 how you can add new tests.</p> 10379 how you can add new tests.</p>
10356<div class="sect1"> 10380<div class="sect1">
10357<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10381<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10358<a name="regression.descr"></a>25.1. The regression tests framework</h2></div></div></div> 10382<a name="regression.descr"></a>25.1. The regression tests framework</h2></div></div></div>
10359<p></p> 10383<p></p>
10360</div> 10384</div>
10361<div class="sect1"> 10385<div class="sect1">
10362<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10386<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10363<a name="regression.run"></a>25.2. Running the regression tests</h2></div></div></div> 10387<a name="regression.run"></a>25.2. Running the regression tests</h2></div></div></div>
10364<p>You first need to install the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_regress/README.html" target="_top"><code class="filename">pkgtools/pkg_regress</code></a> package, which 10388<p>You first need to install the <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_regress/README.html" target="_top"><code class="filename">pkgtools/pkg_regress</code></a> package, which
10365 provides the <span class="command"><strong>pkg_regress</strong></span> command. Then you 10389 provides the <span class="command"><strong>pkg_regress</strong></span> command. Then you
10366 can simply run that command, which will run all tests in the 10390 can simply run that command, which will run all tests in the
10367 <code class="filename">regress</code> category.</p> 10391 <code class="filename">regress</code> category.</p>
10368</div> 10392</div>
10369<div class="sect1"> 10393<div class="sect1">
10370<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10394<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10371<a name="regression.new"></a>25.3. Adding a new regression test</h2></div></div></div> 10395<a name="regression.new"></a>25.3. Adding a new regression test</h2></div></div></div>
10372<p>Every directory in the <code class="filename">regress</code> 10396<p>Every directory in the <code class="filename">regress</code>
10373 category that contains a file called <code class="filename">spec</code> 10397 category that contains a file called <code class="filename">spec</code>
10374 is considered a regression test. This file is a shell program 10398 is considered a regression test. This file is a shell program
10375 that is included by the <span class="command"><strong>pkg_regress</strong></span> command. 10399 that is included by the <span class="command"><strong>pkg_regress</strong></span> command.
10376 The following functions can be overridden to suit your 10400 The following functions can be overridden to suit your
10377 needs.</p> 10401 needs.</p>
10378<div class="sect2"> 10402<div class="sect2">
10379<div class="titlepage"><div><div><h3 class="title"> 10403<div class="titlepage"><div><div><h3 class="title">
10380<a name="regression.fun.override"></a>25.3.1. Overridable functions</h3></div></div></div> 10404<a name="regression.fun.override"></a>25.3.1. Overridable functions</h3></div></div></div>
10381<p>These functions do not take any parameters. They are all 10405<p>These functions do not take any parameters. They are all
10382 called in <span class="quote">&#8220;<span class="quote">set -e</span>&#8221;</span> mode, so you should be careful 10406 called in <span class="quote">&#8220;<span class="quote">set -e</span>&#8221;</span> mode, so you should be careful
10383 to check the exitcodes of any commands you run in the 10407 to check the exitcodes of any commands you run in the
10384 test.</p> 10408 test.</p>
10385<div class="variablelist"><dl class="variablelist"> 10409<div class="variablelist"><dl class="variablelist">
10386<dt><span class="term"><code class="varname">do_setup()</code></span></dt> 10410<dt><span class="term"><code class="varname">do_setup()</code></span></dt>
10387<dd><p>This function prepares the environment for the 10411<dd><p>This function prepares the environment for the
10388 test. By default it does nothing.</p></dd> 10412 test. By default it does nothing.</p></dd>
10389<dt><span class="term"><code class="varname">do_test()</code></span></dt> 10413<dt><span class="term"><code class="varname">do_test()</code></span></dt>
10390<dd><p>This function runs the actual test. By default, 10414<dd><p>This function runs the actual test. By default,
10391 it calls <code class="varname">TEST_MAKE</code> with the arguments 10415 it calls <code class="varname">TEST_MAKE</code> with the arguments
10392 <code class="varname">MAKEARGS_TEST</code> and writes its output including 10416 <code class="varname">MAKEARGS_TEST</code> and writes its output including
10393 error messages into the file 10417 error messages into the file
10394 <code class="varname">TEST_OUTFILE</code>.</p></dd> 10418 <code class="varname">TEST_OUTFILE</code>.</p></dd>
10395<dt><span class="term"><code class="varname">check_result()</code></span></dt> 10419<dt><span class="term"><code class="varname">check_result()</code></span></dt>
10396<dd><p>This function is run after the test and is 10420<dd><p>This function is run after the test and is
10397 typically used to compare the actual output from the one that is 10421 typically used to compare the actual output from the one that is
10398 expected. It can make use of the various helper functions from 10422 expected. It can make use of the various helper functions from
10399 the next section.</p></dd> 10423 the next section.</p></dd>
10400<dt><span class="term"><code class="varname">do_cleanup()</code></span></dt> 10424<dt><span class="term"><code class="varname">do_cleanup()</code></span></dt>
10401<dd><p>This function cleans everything up after the 10425<dd><p>This function cleans everything up after the
10402 test has been run. By default it does nothing.</p></dd> 10426 test has been run. By default it does nothing.</p></dd>
10403</dl></div> 10427</dl></div>
10404</div> 10428</div>
10405<div class="sect2"> 10429<div class="sect2">
10406<div class="titlepage"><div><div><h3 class="title"> 10430<div class="titlepage"><div><div><h3 class="title">
10407<a name="regression.fun.helper"></a>25.3.2. Helper functions</h3></div></div></div> 10431<a name="regression.fun.helper"></a>25.3.2. Helper functions</h3></div></div></div>
10408<div class="variablelist"><dl class="variablelist"> 10432<div class="variablelist"><dl class="variablelist">
10409<dt><span class="term"><code class="varname">exit_status(expected)</code></span></dt> 10433<dt><span class="term"><code class="varname">exit_status(expected)</code></span></dt>
10410<dd><p>This function compares the exitcode of the 10434<dd><p>This function compares the exitcode of the
10411 <span class="command"><strong>do_test()</strong></span> function with its first parameter. 10435 <span class="command"><strong>do_test()</strong></span> function with its first parameter.
10412 If they differ, the test will fail.</p></dd> 10436 If they differ, the test will fail.</p></dd>
10413<dt><span class="term"><code class="varname">output_require(regex...)</code></span></dt> 10437<dt><span class="term"><code class="varname">output_require(regex...)</code></span></dt>
10414<dd><p>This function checks for each of its parameters 10438<dd><p>This function checks for each of its parameters
10415 if the output from <span class="command"><strong>do_test()</strong></span> matches the 10439 if the output from <span class="command"><strong>do_test()</strong></span> matches the
10416 extended regular expression. If it does not, the test will 10440 extended regular expression. If it does not, the test will
10417 fail.</p></dd> 10441 fail.</p></dd>
10418<dt><span class="term"><code class="varname">output_prohibit(regex...)</code></span></dt> 10442<dt><span class="term"><code class="varname">output_prohibit(regex...)</code></span></dt>
10419<dd><p>This function checks for each of its parameters 10443<dd><p>This function checks for each of its parameters
10420 if the output from <span class="command"><strong>do_test()</strong></span> does 10444 if the output from <span class="command"><strong>do_test()</strong></span> does
10421 <span class="emphasis"><em>not</em></span> match the extended regular expression. 10445 <span class="emphasis"><em>not</em></span> match the extended regular expression.
10422 If any of the regular expressions matches, the test will 10446 If any of the regular expressions matches, the test will
10423 fail.</p></dd> 10447 fail.</p></dd>
10424</dl></div> 10448</dl></div>
10425</div> 10449</div>
10426</div> 10450</div>
10427</div> 10451</div>
10428<div class="chapter"> 10452<div class="chapter">
10429<div class="titlepage"><div><div><h2 class="title"> 10453<div class="titlepage"><div><div><h2 class="title">
10430<a name="porting"></a>Chapter 26. Porting pkgsrc</h2></div></div></div> 10454<a name="porting"></a>Chapter 26. Porting pkgsrc</h2></div></div></div>
10431<div class="toc"> 10455<div class="toc">
10432<p><b>Table of Contents</b></p> 10456<p><b>Table of Contents</b></p>
10433<dl> 10457<dl>
10434<dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt> 10458<dt><span class="sect1"><a href="#porting.opsys">26.1. Porting pkgsrc to a new operating system</a></span></dt>
10435<dt><span class="sect1"><a href="#porting.compiler">26.2. Adding support for a new compiler</a></span></dt> 10459<dt><span class="sect1"><a href="#porting.compiler">26.2. Adding support for a new compiler</a></span></dt>
10436</dl> 10460</dl>
10437</div> 10461</div>
10438<p>The pkgsrc system has already been ported to many 10462<p>The pkgsrc system has already been ported to many
10439 operating systems, hardware architectures and compilers. This 10463 operating systems, hardware architectures and compilers. This
10440 chapter explains the necessary steps to make pkgsrc even more 10464 chapter explains the necessary steps to make pkgsrc even more
10441 portable.</p> 10465 portable.</p>
10442<div class="sect1"> 10466<div class="sect1">
10443<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10467<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10444<a name="porting.opsys"></a>26.1. Porting pkgsrc to a new operating system</h2></div></div></div> 10468<a name="porting.opsys"></a>26.1. Porting pkgsrc to a new operating system</h2></div></div></div>
10445<p>To port pkgsrc to a new operating system (called 10469<p>To port pkgsrc to a new operating system (called
10446 <code class="literal">MyOS</code> in this example), you need to touch the 10470 <code class="literal">MyOS</code> in this example), you need to touch the
10447 following files:</p> 10471 following files:</p>
10448<div class="variablelist"><dl class="variablelist"> 10472<div class="variablelist"><dl class="variablelist">
10449<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> 10473<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>
10450<dd><p>This file contains some basic definitions, for 10474<dd><p>This file contains some basic definitions, for
10451 example the name of the C 10475 example the name of the C
10452 compiler.</p></dd> 10476 compiler.</p></dd>
10453<dt><span class="term"><code class="filename">mk/bsd.prefs.mk</code></span></dt> 10477<dt><span class="term"><code class="filename">mk/bsd.prefs.mk</code></span></dt>
10454<dd><p>Insert code that defines the variables 10478<dd><p>Insert code that defines the variables
10455 <code class="varname">OPSYS</code>, <code class="varname">OS_VERSION</code>, 10479 <code class="varname">OPSYS</code>, <code class="varname">OS_VERSION</code>,
10456 <code class="varname">LOWER_OS_VERSION</code>, 10480 <code class="varname">LOWER_OS_VERSION</code>,
10457 <code class="varname">LOWER_VENDOR</code>, 10481 <code class="varname">LOWER_VENDOR</code>,
10458 <code class="varname">MACHINE_ARCH</code>, <code class="varname">OBJECT_FMT</code>, 10482 <code class="varname">MACHINE_ARCH</code>, <code class="varname">OBJECT_FMT</code>,
10459 <code class="varname">APPEND_ELF</code>, and the other variables that 10483 <code class="varname">APPEND_ELF</code>, and the other variables that
10460 appear in this file.</p></dd> 10484 appear in this file.</p></dd>
10461<dt><span class="term"><code class="filename">mk/platform/<em class="replaceable"><code>MyOS</code></em>.mk</code></span></dt> 10485<dt><span class="term"><code class="filename">mk/platform/<em class="replaceable"><code>MyOS</code></em>.mk</code></span></dt>
10462<dd><p>This file contains the platform-specific 10486<dd><p>This file contains the platform-specific
10463 definitions that are used by pkgsrc. Start by copying one of the 10487 definitions that are used by pkgsrc. Start by copying one of the
10464 other files and edit it to your 10488 other files and edit it to your
10465 needs.</p></dd> 10489 needs.</p></dd>
10466<dt><span class="term"><code class="filename">mk/tools/tools.<em class="replaceable"><code>MyOS</code></em>.mk</code></span></dt> 10490<dt><span class="term"><code class="filename">mk/tools/tools.<em class="replaceable"><code>MyOS</code></em>.mk</code></span></dt>
10467<dd><p>This file defines the paths to all the tools 10491<dd><p>This file defines the paths to all the tools
10468 that are needed by one or the other package in pkgsrc, as well 10492 that are needed by one or the other package in pkgsrc, as well
10469 as by pkgsrc itself. Find out where these tools are on your 10493 as by pkgsrc itself. Find out where these tools are on your
10470 platform and add them.</p></dd> 10494 platform and add them.</p></dd>
10471</dl></div> 10495</dl></div>
10472<p>Now, you should be able to build some basic packages, like 10496<p>Now, you should be able to build some basic packages, like
10473 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/perl5/README.html" target="_top"><code class="filename">lang/perl5</code></a>, <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/shells/bash/README.html" target="_top"><code class="filename">shells/bash</code></a>.</p> 10497 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/perl5/README.html" target="_top"><code class="filename">lang/perl5</code></a>, <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/shells/bash/README.html" target="_top"><code class="filename">shells/bash</code></a>.</p>
10474</div> 10498</div>
10475<div class="sect1"> 10499<div class="sect1">
10476<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10500<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10477<a name="porting.compiler"></a>26.2. Adding support for a new compiler</h2></div></div></div> 10501<a name="porting.compiler"></a>26.2. Adding support for a new compiler</h2></div></div></div>
10478<p>TODO</p> 10502<p>TODO</p>
10479</div> 10503</div>
10480</div> 10504</div>
10481</div> 10505</div>
10482<div class="appendix"> 10506<div class="appendix">
10483<div class="titlepage"><div><div><h1 class="title"> 10507<div class="titlepage"><div><div><h1 class="title">
10484<a name="examples"></a>Appendix A. A simple example package: bison</h1></div></div></div> 10508<a name="examples"></a>Appendix A. A simple example package: bison</h1></div></div></div>
10485<div class="toc"> 10509<div class="toc">
10486<p><b>Table of Contents</b></p> 10510<p><b>Table of Contents</b></p>
10487<dl> 10511<dl>
10488<dt><span class="sect1"><a href="#example-files">A.1. files</a></span></dt> 10512<dt><span class="sect1"><a href="#example-files">A.1. files</a></span></dt>
10489<dd><dl> 10513<dd><dl>
10490<dt><span class="sect2"><a href="#example-Makefile">A.1.1. Makefile</a></span></dt> 10514<dt><span class="sect2"><a href="#example-Makefile">A.1.1. Makefile</a></span></dt>
10491<dt><span class="sect2"><a href="#example-descr">A.1.2. DESCR</a></span></dt> 10515<dt><span class="sect2"><a href="#example-descr">A.1.2. DESCR</a></span></dt>
10492<dt><span class="sect2"><a href="#example-plist">A.1.3. PLIST</a></span></dt> 10516<dt><span class="sect2"><a href="#example-plist">A.1.3. PLIST</a></span></dt>
10493<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> 10517<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>
10494</dl></dd> 10518</dl></dd>
10495<dt><span class="sect1"><a href="#steps-for-b-i-p">A.2. Steps for building, installing, packaging</a></span></dt> 10519<dt><span class="sect1"><a href="#steps-for-b-i-p">A.2. Steps for building, installing, packaging</a></span></dt>
10496</dl> 10520</dl>
10497</div> 10521</div>
10498<p>We checked to find a piece of software that wasn't in the packages 10522<p>We checked to find a piece of software that wasn't in the packages
10499 collection, and picked GNU bison. Quite why someone would want to have 10523 collection, and picked GNU bison. Quite why someone would want to have
10500 <span class="command"><strong>bison</strong></span> when Berkeley <span class="command"><strong>yacc</strong></span> is already 10524 <span class="command"><strong>bison</strong></span> when Berkeley <span class="command"><strong>yacc</strong></span> is already
10501 present in the tree is beyond us, but it's useful for the purposes of 10525 present in the tree is beyond us, but it's useful for the purposes of
10502 this exercise.</p> 10526 this exercise.</p>
10503<div class="sect1"> 10527<div class="sect1">
10504<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10528<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10505<a name="example-files"></a>A.1. files</h2></div></div></div> 10529<a name="example-files"></a>A.1. files</h2></div></div></div>
10506<div class="sect2"> 10530<div class="sect2">
10507<div class="titlepage"><div><div><h3 class="title"> 10531<div class="titlepage"><div><div><h3 class="title">
10508<a name="example-Makefile"></a>A.1.1. Makefile</h3></div></div></div> 10532<a name="example-Makefile"></a>A.1.1. Makefile</h3></div></div></div>
10509<pre class="programlisting"> 10533<pre class="programlisting">
10510# $NetBSD$ 10534# $NetBSD$
10511# 10535#
10512 10536
10513DISTNAME= bison-1.25 10537DISTNAME= bison-1.25
10514CATEGORIES= devel 10538CATEGORIES= devel
10515MASTER_SITES= ${MASTER_SITE_GNU} 10539MASTER_SITES= ${MASTER_SITE_GNU}
10516 10540
10517MAINTAINER= pkgsrc-users@NetBSD.org 10541MAINTAINER= pkgsrc-users@NetBSD.org
10518HOMEPAGE= http://www.gnu.org/software/bison/bison.html 10542HOMEPAGE= http://www.gnu.org/software/bison/bison.html
10519COMMENT= GNU yacc clone 10543COMMENT= GNU yacc clone
10520 10544
10521GNU_CONFIGURE= yes 10545GNU_CONFIGURE= yes
10522INFO_FILES= yes 10546INFO_FILES= yes
10523 10547
10524.include "../../mk/bsd.pkg.mk" 10548.include "../../mk/bsd.pkg.mk"
10525</pre> 10549</pre>
10526</div> 10550</div>
10527<div class="sect2"> 10551<div class="sect2">
10528<div class="titlepage"><div><div><h3 class="title"> 10552<div class="titlepage"><div><div><h3 class="title">
10529<a name="example-descr"></a>A.1.2. DESCR</h3></div></div></div> 10553<a name="example-descr"></a>A.1.2. DESCR</h3></div></div></div>
10530<pre class="programlisting"> 10554<pre class="programlisting">
10531GNU version of yacc. Can make re-entrant parsers, and numerous other 10555GNU version of yacc. Can make re-entrant parsers, and numerous other
10532improvements. Why you would want this when Berkeley <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?yacc+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">yacc</span>(1)</span></a> is part 10556improvements. Why you would want this when Berkeley <a class="citerefentry" href="http://netbsd.gw.com/cgi-bin/man-cgi?yacc+1+NetBSD-5.0.1+i386"><span class="citerefentry"><span class="refentrytitle">yacc</span>(1)</span></a> is part
10533of the NetBSD source tree is beyond me. 10557of the NetBSD source tree is beyond me.
10534</pre> 10558</pre>
10535</div> 10559</div>
10536<div class="sect2"> 10560<div class="sect2">
10537<div class="titlepage"><div><div><h3 class="title"> 10561<div class="titlepage"><div><div><h3 class="title">
10538<a name="example-plist"></a>A.1.3. PLIST</h3></div></div></div> 10562<a name="example-plist"></a>A.1.3. PLIST</h3></div></div></div>
10539<pre class="programlisting"> 10563<pre class="programlisting">
10540@comment $NetBSD$ 10564@comment $NetBSD$
10541bin/bison 10565bin/bison
10542man/man1/bison.1.gz 10566man/man1/bison.1.gz
10543share/bison.simple 10567share/bison.simple
10544share/bison.hairy 10568share/bison.hairy
10545</pre> 10569</pre>
10546</div> 10570</div>
10547<div class="sect2"> 10571<div class="sect2">
10548<div class="titlepage"><div><div><h3 class="title"> 10572<div class="titlepage"><div><div><h3 class="title">
10549<a name="checking-package-with-pkglint"></a>A.1.4. Checking a package with <span class="command"><strong>pkglint</strong></span> 10573<a name="checking-package-with-pkglint"></a>A.1.4. Checking a package with <span class="command"><strong>pkglint</strong></span>
10550</h3></div></div></div> 10574</h3></div></div></div>
10551<p>The NetBSD package system comes with 10575<p>The NetBSD package system comes with
10552 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a> 10576 <a href="ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/README.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>
10553 which helps to check the contents of these 10577 which helps to check the contents of these
10554 files. After installation it is quite easy to use, just change to the 10578 files. After installation it is quite easy to use, just change to the
10555 directory of the package you wish to examine and execute 10579 directory of the package you wish to examine and execute
10556 <span class="command"><strong>pkglint</strong></span>:</p> 10580 <span class="command"><strong>pkglint</strong></span>:</p>
10557<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>pkglint</code></strong> 10581<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>pkglint</code></strong>
10558looks fine.</pre> 10582looks fine.</pre>
10559<p>Depending on the supplied command line arguments (see pkglint(1)), 10583<p>Depending on the supplied command line arguments (see pkglint(1)),
10560 more checks will be performed. Use e.g. <span class="command"><strong>pkglint -Call 10584 more checks will be performed. Use e.g. <span class="command"><strong>pkglint -Call
10561 -Wall</strong></span> for a very thorough check.</p> 10585 -Wall</strong></span> for a very thorough check.</p>
10562</div> 10586</div>
10563</div> 10587</div>
10564<div class="sect1"> 10588<div class="sect1">
10565<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10589<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10566<a name="steps-for-b-i-p"></a>A.2. Steps for building, installing, packaging</h2></div></div></div> 10590<a name="steps-for-b-i-p"></a>A.2. Steps for building, installing, packaging</h2></div></div></div>
10567<p>Create the directory where the package lives, 10591<p>Create the directory where the package lives,
10568 plus any auxiliary directories:</p> 10592 plus any auxiliary directories:</p>
10569<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cd /usr/pkgsrc/lang</code></strong> 10593<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cd /usr/pkgsrc/lang</code></strong>
10570<code class="prompt">#</code> <strong class="userinput"><code>mkdir bison</code></strong> 10594<code class="prompt">#</code> <strong class="userinput"><code>mkdir bison</code></strong>
10571<code class="prompt">#</code> <strong class="userinput"><code>cd bison</code></strong> 10595<code class="prompt">#</code> <strong class="userinput"><code>cd bison</code></strong>
10572<code class="prompt">#</code> <strong class="userinput"><code>mkdir patches</code></strong></pre> 10596<code class="prompt">#</code> <strong class="userinput"><code>mkdir patches</code></strong></pre>
10573<p>Create <code class="filename">Makefile</code>, <code class="filename">DESCR</code> and 10597<p>Create <code class="filename">Makefile</code>, <code class="filename">DESCR</code> and
10574 <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>) 10598 <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>)
10575 then continue with fetching the distfile:</p> 10599 then continue with fetching the distfile:</p>
10576<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make fetch</code></strong> 10600<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make fetch</code></strong>
10577&gt;&gt; bison-1.25.tar.gz doesn't seem to exist on this system. 10601&gt;&gt; bison-1.25.tar.gz doesn't seem to exist on this system.
10578&gt;&gt; Attempting to fetch from ftp://prep.ai.mit.edu/pub/gnu//. 10602&gt;&gt; Attempting to fetch from ftp://prep.ai.mit.edu/pub/gnu//.
10579Requesting ftp://prep.ai.mit.edu/pub/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 10603Requesting ftp://prep.ai.mit.edu/pub/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
10580ftp: Error retrieving file: 500 Internal error 10604ftp: Error retrieving file: 500 Internal error
10581 10605
10582&gt;&gt; Attempting to fetch from ftp://wuarchive.wustl.edu/systems/gnu//. 10606&gt;&gt; Attempting to fetch from ftp://wuarchive.wustl.edu/systems/gnu//.
10583Requesting ftp://wuarchive.wustl.edu/systems/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 10607Requesting ftp://wuarchive.wustl.edu/systems/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
10584ftp: Error retrieving file: 500 Internal error 10608ftp: Error retrieving file: 500 Internal error
10585 10609
10586&gt;&gt; Attempting to fetch from ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//. 10610&gt;&gt; Attempting to fetch from ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//.
10587Requesting ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 10611Requesting ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
10588Successfully retrieved file.</pre> 10612Successfully retrieved file.</pre>
10589<p>Generate the checksum of the distfile into 10613<p>Generate the checksum of the distfile into
10590 <code class="filename">distinfo</code>:</p> 10614 <code class="filename">distinfo</code>:</p>
10591<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make makedistinfo</code></strong></pre> 10615<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make makedistinfo</code></strong></pre>
10592<p>Now compile:</p> 10616<p>Now compile:</p>
10593<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make</code></strong> 10617<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make</code></strong>
10594&gt;&gt; Checksum OK for bison-1.25.tar.gz. 10618&gt;&gt; Checksum OK for bison-1.25.tar.gz.
10595===&gt; Extracting for bison-1.25 10619===&gt; Extracting for bison-1.25
10596===&gt; Patching for bison-1.25 10620===&gt; Patching for bison-1.25
10597===&gt; Ignoring empty patch directory 10621===&gt; Ignoring empty patch directory
10598===&gt; Configuring for bison-1.25 10622===&gt; Configuring for bison-1.25
10599creating cache ./config.cache 10623creating cache ./config.cache
10600checking for gcc... cc 10624checking for gcc... cc
10601checking whether we are using GNU C... yes 10625checking whether we are using GNU C... yes
10602checking for a BSD compatible install... /usr/bin/install -c -o bin -g bin 10626checking for a BSD compatible install... /usr/bin/install -c -o bin -g bin
10603checking how to run the C preprocessor... cc -E 10627checking how to run the C preprocessor... cc -E
10604checking for minix/config.h... no 10628checking for minix/config.h... no
10605checking for POSIXized ISC... no 10629checking for POSIXized ISC... no
10606checking whether cross-compiling... no 10630checking whether cross-compiling... no
10607checking for ANSI C header files... yes 10631checking for ANSI C header files... yes
10608checking for string.h... yes 10632checking for string.h... yes
10609checking for stdlib.h... yes 10633checking for stdlib.h... yes
10610checking for memory.h... yes 10634checking for memory.h... yes
10611checking for working const... yes 10635checking for working const... yes
10612checking for working alloca.h... no 10636checking for working alloca.h... no
10613checking for alloca... yes 10637checking for alloca... yes
10614checking for strerror... yes 10638checking for strerror... yes
10615updating cache ./config.cache 10639updating cache ./config.cache
10616creating ./config.status 10640creating ./config.status
10617creating Makefile 10641creating Makefile
10618===&gt; Building for bison-1.25 10642===&gt; Building for bison-1.25
10619cc -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 10643cc -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
10620cc -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 10644cc -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
10621cc -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 10645cc -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
10622cc -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 10646cc -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
10623cc -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 10647cc -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
10624cc -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 10648cc -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
10625cc -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 10649cc -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
10626cc -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 10650cc -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
10627cc -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 10651cc -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
10628cc -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 10652cc -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
10629cc -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 10653cc -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
10630cc -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 10654cc -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
10631cc -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 10655cc -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
10632cc -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 10656cc -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
10633cc -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 10657cc -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
10634cc -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 10658cc -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
10635cc -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 10659cc -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
10636cc -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 10660cc -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
10637cc -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 10661cc -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
10638cc -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 10662cc -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
10639cc -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 10663cc -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
10640cc -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 10664cc -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
10641./files.c:240: warning: mktemp() possibly used unsafely, consider using mkstemp() 10665./files.c:240: warning: mktemp() possibly used unsafely, consider using mkstemp()
10642rm -f bison.s1 10666rm -f bison.s1
10643sed -e "/^#line/ s|bison|/usr/pkg/share/bison|" &lt; ./bison.simple &gt; bison.s1</pre> 10667sed -e "/^#line/ s|bison|/usr/pkg/share/bison|" &lt; ./bison.simple &gt; bison.s1</pre>
10644<p>Everything seems OK, so install the files:</p> 10668<p>Everything seems OK, so install the files:</p>
10645<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong> 10669<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong>
10646&gt;&gt; Checksum OK for bison-1.25.tar.gz. 10670&gt;&gt; Checksum OK for bison-1.25.tar.gz.
10647===&gt; Installing for bison-1.25 10671===&gt; Installing for bison-1.25
10648sh ./mkinstalldirs /usr/pkg/bin /usr/pkg/share /usr/pkg/info /usr/pkg/man/man1 10672sh ./mkinstalldirs /usr/pkg/bin /usr/pkg/share /usr/pkg/info /usr/pkg/man/man1
10649rm -f /usr/pkg/bin/bison 10673rm -f /usr/pkg/bin/bison
10650cd /usr/pkg/share; rm -f bison.simple bison.hairy 10674cd /usr/pkg/share; rm -f bison.simple bison.hairy
10651rm -f /usr/pkg/man/man1/bison.1 /usr/pkg/info/bison.info* 10675rm -f /usr/pkg/man/man1/bison.1 /usr/pkg/info/bison.info*
10652install -c -o bin -g bin -m 555 bison /usr/pkg/bin/bison 10676install -c -o bin -g bin -m 555 bison /usr/pkg/bin/bison
10653/usr/bin/install -c -o bin -g bin -m 644 bison.s1 /usr/pkg/share/bison.simple 10677/usr/bin/install -c -o bin -g bin -m 644 bison.s1 /usr/pkg/share/bison.simple
10654/usr/bin/install -c -o bin -g bin -m 644 ./bison.hairy /usr/pkg/share/bison.hairy 10678/usr/bin/install -c -o bin -g bin -m 644 ./bison.hairy /usr/pkg/share/bison.hairy
10655cd .; for f in bison.info*; do /usr/bin/install -c -o bin -g bin -m 644 $f /usr/pkg/info/$f; done 10679cd .; for f in bison.info*; do /usr/bin/install -c -o bin -g bin -m 644 $f /usr/pkg/info/$f; done
10656/usr/bin/install -c -o bin -g bin -m 644 ./bison.1 /usr/pkg/man/man1/bison.1 10680/usr/bin/install -c -o bin -g bin -m 644 ./bison.1 /usr/pkg/man/man1/bison.1
10657===&gt; Registering installation for bison-1.25</pre> 10681===&gt; Registering installation for bison-1.25</pre>
10658<p>You can now use bison, and also - if you decide so - remove it with 10682<p>You can now use bison, and also - if you decide so - remove it with
10659 <span class="command"><strong>pkg_delete bison</strong></span>. Should you decide that you want a 10683 <span class="command"><strong>pkg_delete bison</strong></span>. Should you decide that you want a
10660 binary package, do this now:</p> 10684 binary package, do this now:</p>
10661<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong> 10685<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong>
10662&gt;&gt; Checksum OK for bison-1.25.tar.gz. 10686&gt;&gt; Checksum OK for bison-1.25.tar.gz.
10663===&gt; Building package for bison-1.25 10687===&gt; Building package for bison-1.25
10664Creating package bison-1.25.tgz 10688Creating package bison-1.25.tgz
10665Registering depends:. 10689Registering depends:.
10666Creating gzip'd tar ball in '/u/pkgsrc/lang/bison/bison-1.25.tgz'</pre> 10690Creating gzip'd tar ball in '/u/pkgsrc/lang/bison/bison-1.25.tgz'</pre>
10667<p>Now that you don't need the source and object files 10691<p>Now that you don't need the source and object files
10668 any more, clean up:</p> 10692 any more, clean up:</p>
10669<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make clean</code></strong> 10693<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make clean</code></strong>
10670===&gt; Cleaning for bison-1.25</pre> 10694===&gt; Cleaning for bison-1.25</pre>
10671</div> 10695</div>
10672</div> 10696</div>
10673<div class="appendix"> 10697<div class="appendix">
10674<div class="titlepage"><div><div><h1 class="title"> 10698<div class="titlepage"><div><div><h1 class="title">
10675<a name="logs"></a>Appendix B. Build logs</h1></div></div></div> 10699<a name="logs"></a>Appendix B. Build logs</h1></div></div></div>
10676<div class="toc"> 10700<div class="toc">
10677<p><b>Table of Contents</b></p> 10701<p><b>Table of Contents</b></p>
10678<dl> 10702<dl>
10679<dt><span class="sect1"><a href="#logs.building">B.1. Building figlet</a></span></dt> 10703<dt><span class="sect1"><a href="#logs.building">B.1. Building figlet</a></span></dt>
10680<dt><span class="sect1"><a href="#logs.package">B.2. Packaging figlet</a></span></dt> 10704<dt><span class="sect1"><a href="#logs.package">B.2. Packaging figlet</a></span></dt>
10681</dl> 10705</dl>
10682</div> 10706</div>
10683<div class="sect1"> 10707<div class="sect1">
10684<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10708<div class="titlepage"><div><div><h2 class="title" style="clear: both">

cvs diff -r1.194 -r1.195 pkgsrc/doc/pkgsrc.txt (switch to unified diff)

--- pkgsrc/doc/pkgsrc.txt 2015/01/01 05:20:29 1.194
+++ pkgsrc/doc/pkgsrc.txt 2015/01/01 06:32:33 1.195
@@ -1,5514 +1,5523 @@ @@ -1,5514 +1,5523 @@
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-2015 The NetBSD Foundation, Inc 15Copyright 1994-2014 The NetBSD Foundation, Inc
16 16
17$NetBSD: pkgsrc.xml,v 1.28 2015/01/01 05:19:02 jnemeth Exp $ 17$NetBSD: pkgsrc.xml,v 1.27 2014/09/19 04:53:09 jnemeth 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 3.3. Platform-specific notes 62 3.3. Platform-specific notes
63 63
64 3.3.1. Cygwin 64 3.3.1. Cygwin
65 3.3.2. Darwin (Mac OS X) 65 3.3.2. Darwin (Mac OS X)
66 3.3.3. FreeBSD 66 3.3.3. FreeBSD
67 3.3.4. GNU/kFreeBSD 67 3.3.4. GNU/kFreeBSD
68 3.3.5. Interix 68 3.3.5. Interix
69 3.3.6. IRIX 69 3.3.6. IRIX
70 3.3.7. Linux 70 3.3.7. Linux
71 3.3.8. MirBSD 71 3.3.8. MirBSD
72 3.3.9. OpenBSD 72 3.3.9. OpenBSD
73 3.3.10. Solaris 73 3.3.10. Solaris
74 74
75 4. Using pkgsrc 75 4. Using pkgsrc
76 76
77 4.1. Using binary packages 77 4.1. Using binary packages
78 78
79 4.1.1. Finding binary packages 79 4.1.1. Finding binary packages
80 4.1.2. Installing binary packages 80 4.1.2. Installing binary packages
81 4.1.3. Deinstalling packages 81 4.1.3. Deinstalling packages
82 4.1.4. Getting information about installed packages 82 4.1.4. Getting information about installed packages
83 4.1.5. Checking for security vulnerabilities in installed packages 83 4.1.5. Checking for security vulnerabilities in installed packages
84 4.1.6. Finding if newer versions of your installed packages are in 84 4.1.6. Finding if newer versions of your installed packages are in
85 pkgsrc 85 pkgsrc
86 4.1.7. Other administrative functions 86 4.1.7. Other administrative functions
87 4.1.8. A word of warning 87 4.1.8. A word of warning
88 88
89 4.2. Building packages from source 89 4.2. Building packages from source
90 90
91 4.2.1. Requirements 91 4.2.1. Requirements
92 4.2.2. Fetching distfiles 92 4.2.2. Fetching distfiles
93 4.2.3. How to build and install 93 4.2.3. How to build and install
94 94
95 5. Configuring pkgsrc 95 5. Configuring pkgsrc
96 96
97 5.1. General configuration 97 5.1. General configuration
98 5.2. Variables affecting the build process 98 5.2. Variables affecting the build process
99 5.3. Variables affecting the installation process 99 5.3. Variables affecting the installation process
100 5.4. Selecting and configuring the compiler 100 5.4. Selecting and configuring the compiler
101 101
102 5.4.1. Selecting the compiler 102 5.4.1. Selecting the compiler
103 5.4.2. Additional flags to the compiler (CFLAGS) 103 5.4.2. Additional flags to the compiler (CFLAGS)
104 5.4.3. Additional flags to the linker (LDFLAGS) 104 5.4.3. Additional flags to the linker (LDFLAGS)
105 105
106 5.5. Developer/advanced settings 106 5.5. Developer/advanced settings
107 5.6. Selecting Build Options 107 5.6. Selecting Build Options
108 108
109 6. Creating binary packages 109 6. Creating binary packages
110 110
111 6.1. Building a single binary package 111 6.1. Building a single binary package
112 6.2. Settings for creation of binary packages 112 6.2. Settings for creation of binary packages
113 113
114 7. Creating binary packages for everything in pkgsrc (bulk builds) 114 7. Creating binary packages for everything in pkgsrc (bulk builds)
115 115
116 7.1. Preparations 116 7.1. Preparations
117 7.2. Running a pbulk-style bulk build 117 7.2. Running a pbulk-style bulk build
118 118
119 7.2.1. Configuration 119 7.2.1. Configuration
120 120
121 7.3. Requirements of a full bulk build 121 7.3. Requirements of a full bulk build
122 7.4. Creating a multiple CD-ROM packages collection 122 7.4. Creating a multiple CD-ROM packages collection
123 123
124 7.4.1. Example of cdpack 124 7.4.1. Example of cdpack
125 125
126 8. Directory layout of the installed files 126 8. Directory layout of the installed files
127 127
128 8.1. File system layout in ${LOCALBASE} 128 8.1. File system layout in ${LOCALBASE}
129 8.2. File system layout in ${VARBASE} 129 8.2. File system layout in ${VARBASE}
130 130
131 9. Frequently Asked Questions 131 9. Frequently Asked Questions
132 132
133 9.1. Are there any mailing lists for pkg-related discussion? 133 9.1. Are there any mailing lists for pkg-related discussion?
134 9.2. Utilities for package management (pkgtools) 134 9.2. Where's the pkgviews documentation?
135 9.3. How to use pkgsrc as non-root 135 9.3. Utilities for package management (pkgtools)
136 9.4. How to resume transfers when fetching distfiles? 136 9.4. How to use pkgsrc as non-root
137 9.5. How can I install/use modular X.org from pkgsrc? 137 9.5. How to resume transfers when fetching distfiles?
138 9.6. How to fetch files from behind a firewall 138 9.6. How can I install/use modular X.org from pkgsrc?
139 9.7. How to fetch files from HTTPS sites 139 9.7. How to fetch files from behind a firewall
140 9.8. How do I tell make fetch to do passive FTP? 140 9.8. How to fetch files from HTTPS sites
141 9.9. How to fetch all distfiles at once 141 9.9. How do I tell make fetch to do passive FTP?
142 9.10. What does "Don't know how to make /usr/share/tmac/tmac.andoc" 142 9.10. How to fetch all distfiles at once
 143 9.11. What does "Don't know how to make /usr/share/tmac/tmac.andoc"
143 mean? 144 mean?
144 9.11. What does "Could not find bsd.own.mk" mean? 145 9.12. What does "Could not find bsd.own.mk" mean?
145 9.12. Using 'sudo' with pkgsrc 146 9.13. Using 'sudo' with pkgsrc
146 9.13. How do I change the location of configuration files? 147 9.14. How do I change the location of configuration files?
147 9.14. Automated security checks 148 9.15. Automated security checks
148 9.15. Why do some packages ignore my CFLAGS? 149 9.16. Why do some packages ignore my CFLAGS?
149 9.16. A package does not build. What shall I do? 150 9.17. A package does not build. What shall I do?
150 9.17. What does "Makefile appears to contain unresolved cvs/rcs/??? 151 9.18. What does "Makefile appears to contain unresolved cvs/rcs/???
151 merge conflicts" mean? 152 merge conflicts" mean?
152 153
153II. The pkgsrc developer's guide 154II. The pkgsrc developer's guide
154 155
155 10. Creating a new pkgsrc package from scratch 156 10. Creating a new pkgsrc package from scratch
156 157
157 10.1. Common types of packages 158 10.1. Common types of packages
158 159
159 10.1.1. Perl modules 160 10.1.1. Perl modules
160 10.1.2. KDE3 applications 161 10.1.2. KDE3 applications
161 10.1.3. Python modules and programs 162 10.1.3. Python modules and programs
162 163
163 10.2. Examples 164 10.2. Examples
164 165
165 10.2.1. How the www/nvu package came into pkgsrc 166 10.2.1. How the www/nvu package came into pkgsrc
166 167
167 11. Package components - files, directories and contents 168 11. Package components - files, directories and contents
168 169
169 11.1. Makefile 170 11.1. Makefile
170 11.2. distinfo 171 11.2. distinfo
171 11.3. patches/* 172 11.3. patches/*
172 173
173 11.3.1. Structure of a single patch file 174 11.3.1. Structure of a single patch file
174 11.3.2. Creating patch files 175 11.3.2. Creating patch files
175 11.3.3. Sources where the patch files come from 176 11.3.3. Sources where the patch files come from
176 11.3.4. Patching guidelines 177 11.3.4. Patching guidelines
177 11.3.5. Feedback to the author 178 11.3.5. Feedback to the author
178 179
179 11.4. Other mandatory files 180 11.4. Other mandatory files
180 11.5. Optional files 181 11.5. Optional files
181 182
182 11.5.1. Files affecting the binary package 183 11.5.1. Files affecting the binary package
183 11.5.2. Files affecting the build process 184 11.5.2. Files affecting the build process
184 11.5.3. Files affecting nothing at all 185 11.5.3. Files affecting nothing at all
185 186
186 11.6. work* 187 11.6. work*
187 11.7. files/* 188 11.7. files/*
188 189
189 12. Programming in Makefiles 190 12. Programming in Makefiles
190 191
191 12.1. Caveats 192 12.1. Caveats
192 12.2. Makefile variables 193 12.2. Makefile variables
193 194
194 12.2.1. Naming conventions 195 12.2.1. Naming conventions
195 196
196 12.3. Code snippets 197 12.3. Code snippets
197 198
198 12.3.1. Adding things to a list 199 12.3.1. Adding things to a list
199 12.3.2. Converting an internal list into an external list 200 12.3.2. Converting an internal list into an external list
200 12.3.3. Passing variables to a shell command 201 12.3.3. Passing variables to a shell command
201 12.3.4. Quoting guideline 202 12.3.4. Quoting guideline
202 12.3.5. Workaround for a bug in BSD Make 203 12.3.5. Workaround for a bug in BSD Make
203 204
204 13. PLIST issues 205 13. PLIST issues
205 206
206 13.1. RCS ID 207 13.1. RCS ID
207 13.2. Semi-automatic PLIST generation 208 13.2. Semi-automatic PLIST generation
208 13.3. Tweaking output of make print-PLIST 209 13.3. Tweaking output of make print-PLIST
209 13.4. Variable substitution in PLIST 210 13.4. Variable substitution in PLIST
210 13.5. Man page compression 211 13.5. Man page compression
211 13.6. Changing PLIST source with PLIST_SRC 212 13.6. Changing PLIST source with PLIST_SRC
212 13.7. Platform-specific and differing PLISTs 213 13.7. Platform-specific and differing PLISTs
213 13.8. Sharing directories between packages 214 13.8. Sharing directories between packages
214 215
215 14. Buildlink methodology 216 14. Buildlink methodology
216 217
217 14.1. Converting packages to use buildlink3 218 14.1. Converting packages to use buildlink3
218 14.2. Writing buildlink3.mk files 219 14.2. Writing buildlink3.mk files
219 220
220 14.2.1. Anatomy of a buildlink3.mk file 221 14.2.1. Anatomy of a buildlink3.mk file
221 14.2.2. Updating BUILDLINK_API_DEPENDS.pkg and 222 14.2.2. Updating BUILDLINK_API_DEPENDS.pkg and
222 BUILDLINK_ABI_DEPENDS.pkg in buildlink3.mk files 223 BUILDLINK_ABI_DEPENDS.pkg in buildlink3.mk files
223 224
224 14.3. Writing builtin.mk files 225 14.3. Writing builtin.mk files
225 226
226 14.3.1. Anatomy of a builtin.mk file 227 14.3.1. Anatomy of a builtin.mk file
227 14.3.2. Global preferences for native or pkgsrc software 228 14.3.2. Global preferences for native or pkgsrc software
228 229
229 15. The pkginstall framework 230 15. The pkginstall framework
230 231
231 15.1. Files and directories outside the installation prefix 232 15.1. Files and directories outside the installation prefix
232 233
233 15.1.1. Directory manipulation 234 15.1.1. Directory manipulation
234 15.1.2. File manipulation 235 15.1.2. File manipulation
235 236
236 15.2. Configuration files 237 15.2. Configuration files
237 238
238 15.2.1. How PKG_SYSCONFDIR is set 239 15.2.1. How PKG_SYSCONFDIR is set
239 15.2.2. Telling the software where configuration files are 240 15.2.2. Telling the software where configuration files are
240 15.2.3. Patching installations 241 15.2.3. Patching installations
241 15.2.4. Disabling handling of configuration files 242 15.2.4. Disabling handling of configuration files
242 243
243 15.3. System startup scripts 244 15.3. System startup scripts
244 245
245 15.3.1. Disabling handling of system startup scripts 246 15.3.1. Disabling handling of system startup scripts
246 247
247 15.4. System users and groups 248 15.4. System users and groups
248 15.5. System shells 249 15.5. System shells
249 250
250 15.5.1. Disabling shell registration 251 15.5.1. Disabling shell registration
251 252
252 15.6. Fonts 253 15.6. Fonts
253 254
254 15.6.1. Disabling automatic update of the fonts databases 255 15.6.1. Disabling automatic update of the fonts databases
255 256
256 16. Options handling 257 16. Options handling
257 258
258 16.1. Global default options 259 16.1. Global default options
259 16.2. Converting packages to use bsd.options.mk 260 16.2. Converting packages to use bsd.options.mk
260 16.3. Option Names 261 16.3. Option Names
261 16.4. Determining the options of dependencies 262 16.4. Determining the options of dependencies
262 263
263 17. The build process 264 17. The build process
264 265
265 17.1. Introduction 266 17.1. Introduction
266 17.2. Program location 267 17.2. Program location
267 17.3. Directories used during the build process 268 17.3. Directories used during the build process
268 17.4. Running a phase 269 17.4. Running a phase
269 17.5. The fetch phase 270 17.5. The fetch phase
270 271
271 17.5.1. What to fetch and where to get it from 272 17.5.1. What to fetch and where to get it from
272 17.5.2. How are the files fetched? 273 17.5.2. How are the files fetched?
273 274
274 17.6. The checksum phase 275 17.6. The checksum phase
275 17.7. The extract phase 276 17.7. The extract phase
276 17.8. The patch phase 277 17.8. The patch phase
277 17.9. The tools phase 278 17.9. The tools phase
278 17.10. The wrapper phase 279 17.10. The wrapper phase
279 17.11. The configure phase 280 17.11. The configure phase
280 17.12. The build phase 281 17.12. The build phase
281 17.13. The test phase 282 17.13. The test phase
282 17.14. The install phase 283 17.14. The install phase
283 17.15. The package phase 284 17.15. The package phase
284 17.16. Cleaning up 285 17.16. Cleaning up
285 17.17. Other helpful targets 286 17.17. Other helpful targets
286 287
287 18. Tools needed for building or running 288 18. Tools needed for building or running
288 289
289 18.1. Tools for pkgsrc builds 290 18.1. Tools for pkgsrc builds
290 18.2. Tools needed by packages 291 18.2. Tools needed by packages
291 18.3. Tools provided by platforms 292 18.3. Tools provided by platforms
292 18.4. Questions regarding the tools 293 18.4. Questions regarding the tools
293 294
294 19. Making your package work 295 19. Making your package work
295 296
296 19.1. General operation 297 19.1. General operation
297 298
298 19.1.1. Portability of packages 299 19.1.1. Portability of packages
299 19.1.2. How to pull in user-settable variables from mk.conf 300 19.1.2. How to pull in user-settable variables from mk.conf
300 19.1.3. User interaction 301 19.1.3. User interaction
301 19.1.4. Handling licenses 302 19.1.4. Handling licenses
302 19.1.5. Restricted packages 303 19.1.5. Restricted packages
303 19.1.6. Handling dependencies 304 19.1.6. Handling dependencies
304 19.1.7. Handling conflicts with other packages 305 19.1.7. Handling conflicts with other packages
305 19.1.8. Packages that cannot or should not be built 306 19.1.8. Packages that cannot or should not be built
306 19.1.9. Packages which should not be deleted, once installed 307 19.1.9. Packages which should not be deleted, once installed
307 19.1.10. Handling packages with security problems 308 19.1.10. Handling packages with security problems
308 19.1.11. How to handle incrementing versions when fixing an 309 19.1.11. How to handle incrementing versions when fixing an
309 existing package 310 existing package
310 19.1.12. Substituting variable text in the package files (the SUBST 311 19.1.12. Substituting variable text in the package files (the SUBST
311 framework) 312 framework)
312 313
313 19.2. Fixing problems in the fetch phase 314 19.2. Fixing problems in the fetch phase
314 315
315 19.2.1. Packages whose distfiles aren't available for plain 316 19.2.1. Packages whose distfiles aren't available for plain
316 downloading 317 downloading
317 19.2.2. How to handle modified distfiles with the 'old' name 318 19.2.2. How to handle modified distfiles with the 'old' name
318 319
319 19.3. Fixing problems in the configure phase 320 19.3. Fixing problems in the configure phase
320 321
321 19.3.1. Shared libraries - libtool 322 19.3.1. Shared libraries - libtool
322 19.3.2. Using libtool on GNU packages that already support libtool 323 19.3.2. Using libtool on GNU packages that already support libtool
323 19.3.3. GNU Autoconf/Automake 324 19.3.3. GNU Autoconf/Automake
324 325
325 19.4. Programming languages 326 19.4. Programming languages
326 327
327 19.4.1. C, C++, and Fortran 328 19.4.1. C, C++, and Fortran
328 19.4.2. Java 329 19.4.2. Java
329 19.4.3. Packages containing perl scripts 330 19.4.3. Packages containing perl scripts
330 19.4.4. Packages containing shell scripts 331 19.4.4. Packages containing shell scripts
331 19.4.5. Other programming languages 332 19.4.5. Other programming languages
332 333
333 19.5. Fixing problems in the build phase 334 19.5. Fixing problems in the build phase
334 335
335 19.5.1. Compiling C and C++ code conditionally 336 19.5.1. Compiling C and C++ code conditionally
336 19.5.2. How to handle compiler bugs 337 19.5.2. How to handle compiler bugs
337 19.5.3. Undefined reference to "..." 338 19.5.3. Undefined reference to "..."
338 19.5.4. Running out of memory 339 19.5.4. Running out of memory
339 340
340 19.6. Fixing problems in the install phase 341 19.6. Fixing problems in the install phase
341 342
342 19.6.1. Creating needed directories 343 19.6.1. Creating needed directories
343 19.6.2. Where to install documentation 344 19.6.2. Where to install documentation
344 19.6.3. Installing highscore files 345 19.6.3. Installing highscore files
345 19.6.4. Adding DESTDIR support to packages 346 19.6.4. Adding DESTDIR support to packages
346 19.6.5. Packages with hardcoded paths to other interpreters 347 19.6.5. Packages with hardcoded paths to other interpreters
347 19.6.6. Packages installing perl modules 348 19.6.6. Packages installing perl modules
348 19.6.7. Packages installing info files 349 19.6.7. Packages installing info files
349 19.6.8. Packages installing man pages 350 19.6.8. Packages installing man pages
350 19.6.9. Packages installing GConf data files 351 19.6.9. Packages installing GConf data files
351 19.6.10. Packages installing scrollkeeper/rarian data files 352 19.6.10. Packages installing scrollkeeper/rarian data files
352 19.6.11. Packages installing X11 fonts 353 19.6.11. Packages installing X11 fonts
353 19.6.12. Packages installing GTK2 modules 354 19.6.12. Packages installing GTK2 modules
354 19.6.13. Packages installing SGML or XML data 355 19.6.13. Packages installing SGML or XML data
355 19.6.14. Packages installing extensions to the MIME database 356 19.6.14. Packages installing extensions to the MIME database
356 19.6.15. Packages using intltool 357 19.6.15. Packages using intltool
357 19.6.16. Packages installing startup scripts 358 19.6.16. Packages installing startup scripts
358 19.6.17. Packages installing TeX modules 359 19.6.17. Packages installing TeX modules
359 19.6.18. Packages supporting running binaries in emulation 360 19.6.18. Packages supporting running binaries in emulation
360 19.6.19. Packages installing hicolor theme icons 361 19.6.19. Packages installing hicolor theme icons
361 19.6.20. Packages installing desktop files 362 19.6.20. Packages installing desktop files
362 363
363 19.7. Marking packages as having problems 364 19.7. Marking packages as having problems
364 365
365 20. Debugging 366 20. Debugging
366 21. Submitting and Committing 367 21. Submitting and Committing
367 368
368 21.1. Submitting binary packages 369 21.1. Submitting binary packages
369 21.2. Submitting source packages (for non-NetBSD-developers) 370 21.2. Submitting source packages (for non-NetBSD-developers)
370 21.3. General notes when adding, updating, or removing packages 371 21.3. General notes when adding, updating, or removing packages
371 21.4. Committing: Adding a package to CVS 372 21.4. Committing: Adding a package to CVS
372 21.5. Updating a package to a newer version 373 21.5. Updating a package to a newer version
373 21.6. Renaming a package in pkgsrc 374 21.6. Renaming a package in pkgsrc
374 21.7. Moving a package in pkgsrc 375 21.7. Moving a package in pkgsrc
375 376
376 22. Frequently Asked Questions 377 22. Frequently Asked Questions
377 23. GNOME packaging and porting 378 23. GNOME packaging and porting
378 379
379 23.1. Meta packages 380 23.1. Meta packages
380 23.2. Packaging a GNOME application 381 23.2. Packaging a GNOME application
381 23.3. Updating GNOME to a newer version 382 23.3. Updating GNOME to a newer version
382 23.4. Patching guidelines 383 23.4. Patching guidelines
383 384
384III. The pkgsrc infrastructure internals 385III. The pkgsrc infrastructure internals
385 386
386 24. Design of the pkgsrc infrastructure 387 24. Design of the pkgsrc infrastructure
387 388
388 24.1. The meaning of variable definitions 389 24.1. The meaning of variable definitions
389 24.2. Avoiding problems before they arise 390 24.2. Avoiding problems before they arise
390 24.3. Variable evaluation 391 24.3. Variable evaluation
391 392
392 24.3.1. At load time 393 24.3.1. At load time
393 24.3.2. At runtime 394 24.3.2. At runtime
394 395
395 24.4. How can variables be specified? 396 24.4. How can variables be specified?
396 24.5. Designing interfaces for Makefile fragments 397 24.5. Designing interfaces for Makefile fragments
397 398
398 24.5.1. Procedures with parameters 399 24.5.1. Procedures with parameters
399 24.5.2. Actions taken on behalf of parameters 400 24.5.2. Actions taken on behalf of parameters
400 401
401 24.6. The order in which files are loaded 402 24.6. The order in which files are loaded
402 403
403 24.6.1. The order in bsd.prefs.mk 404 24.6.1. The order in bsd.prefs.mk
404 24.6.2. The order in bsd.pkg.mk 405 24.6.2. The order in bsd.pkg.mk
405 406
406 25. Regression tests 407 25. Regression tests
407 408
408 25.1. The regression tests framework 409 25.1. The regression tests framework
409 25.2. Running the regression tests 410 25.2. Running the regression tests
410 25.3. Adding a new regression test 411 25.3. Adding a new regression test
411 412
412 25.3.1. Overridable functions 413 25.3.1. Overridable functions
413 25.3.2. Helper functions 414 25.3.2. Helper functions
414 415
415 26. Porting pkgsrc 416 26. Porting pkgsrc
416 417
417 26.1. Porting pkgsrc to a new operating system 418 26.1. Porting pkgsrc to a new operating system
418 26.2. Adding support for a new compiler 419 26.2. Adding support for a new compiler
419 420
420A. A simple example package: bison 421A. A simple example package: bison
421 422
422 A.1. files 423 A.1. files
423 424
424 A.1.1. Makefile 425 A.1.1. Makefile
425 A.1.2. DESCR 426 A.1.2. DESCR
426 A.1.3. PLIST 427 A.1.3. PLIST
427 A.1.4. Checking a package with pkglint 428 A.1.4. Checking a package with pkglint
428 429
429 A.2. Steps for building, installing, packaging 430 A.2. Steps for building, installing, packaging
430 431
431B. Build logs 432B. Build logs
432 433
433 B.1. Building figlet 434 B.1. Building figlet
434 B.2. Packaging figlet 435 B.2. Packaging figlet
435 436
436C. Directory layout of the pkgsrc FTP server 437C. Directory layout of the pkgsrc FTP server
437 438
438 C.1. distfiles: The distributed source files 439 C.1. distfiles: The distributed source files
439 C.2. misc: Miscellaneous things 440 C.2. misc: Miscellaneous things
440 C.3. packages: Binary packages 441 C.3. packages: Binary packages
441 C.4. reports: Bulk build reports 442 C.4. reports: Bulk build reports
442 C.5. current, pkgsrc-20xxQy: source packages 443 C.5. current, pkgsrc-20xxQy: source packages
443 444
444D. Editing guidelines for the pkgsrc guide 445D. Editing guidelines for the pkgsrc guide
445 446
446 D.1. Make targets 447 D.1. Make targets
447 D.2. Procedure 448 D.2. Procedure
448 449
449List of Tables 450List of Tables
450 451
4511.1. Platforms supported by pkgsrc 4521.1. Platforms supported by pkgsrc
45211.1. Patching examples 45311.1. Patching examples
45323.1. PLIST handling for GNOME packages 45423.1. PLIST handling for GNOME packages
454 455
455Chapter 1. What is pkgsrc? 456Chapter 1. What is pkgsrc?
456 457
457Table of Contents 458Table of Contents
458 459
4591.1. Introduction 4601.1. Introduction
460 461
461 1.1.1. Why pkgsrc? 462 1.1.1. Why pkgsrc?
462 1.1.2. Supported platforms 463 1.1.2. Supported platforms
463 464
4641.2. Overview 4651.2. Overview
4651.3. Terminology 4661.3. Terminology
466 467
467 1.3.1. Roles involved in pkgsrc 468 1.3.1. Roles involved in pkgsrc
468 469
4691.4. Typography 4701.4. Typography
470 471
4711.1. Introduction 4721.1. Introduction
472 473
473There is a lot of software freely available for Unix-based systems, which is 474There is a lot of software freely available for Unix-based systems, which is
474usually available in form of the source code. Before such software can be used, 475usually available in form of the source code. Before such software can be used,
475it needs to be configured to the local system, compiled and installed, and this 476it needs to be configured to the local system, compiled and installed, and this
476is exactly what The NetBSD Packages Collection (pkgsrc) does. pkgsrc also has 477is exactly what The NetBSD Packages Collection (pkgsrc) does. pkgsrc also has
477some basic commands to handle binary packages, so that not every user has to 478some basic commands to handle binary packages, so that not every user has to
478build the packages for himself, which is a time-costly task. 479build the packages for himself, which is a time-costly task.
479 480
480pkgsrc currently contains several thousand packages, including: 481pkgsrc currently contains several thousand packages, including:
481 482
482 * www/apache - The Apache web server 483 * www/apache - The Apache web server
483 484
484 * www/firefox - The Firefox web browser 485 * www/firefox - The Firefox web browser
485 486
486 * meta-pkgs/gnome - The GNOME Desktop Environment 487 * meta-pkgs/gnome - The GNOME Desktop Environment
487 488
488 * meta-pkgs/kde3 - The K Desktop Environment 489 * meta-pkgs/kde3 - The K Desktop Environment
489 490
490...just to name a few. 491...just to name a few.
491 492
492pkgsrc has built-in support for handling varying dependencies, such as pthreads 493pkgsrc has built-in support for handling varying dependencies, such as pthreads
493and X11, and extended features such as IPv6 support on a range of platforms. 494and X11, and extended features such as IPv6 support on a range of platforms.
494 495
4951.1.1. Why pkgsrc? 4961.1.1. Why pkgsrc?
496 497
497pkgsrc provides the following key features: 498pkgsrc provides the following key features:
498 499
499 * Easy building of software from source as well as the creation and 500 * Easy building of software from source as well as the creation and
500 installation of binary packages. The source and latest patches are 501 installation of binary packages. The source and latest patches are
501 retrieved from a master or mirror download site, checksum verified, then 502 retrieved from a master or mirror download site, checksum verified, then
502 built on your system. Support for binary-only distributions is available 503 built on your system. Support for binary-only distributions is available
503 for both native platforms and NetBSD emulated platforms. 504 for both native platforms and NetBSD emulated platforms.
504 505
505 * All packages are installed in a consistent directory tree, including 506 * All packages are installed in a consistent directory tree, including
506 binaries, libraries, man pages and other documentation. 507 binaries, libraries, man pages and other documentation.
507 508
508 * Package dependencies, including when performing package updates, are 509 * Package dependencies, including when performing package updates, are
509 handled automatically. The configuration files of various packages are 510 handled automatically. The configuration files of various packages are
510 handled automatically during updates, so local changes are preserved. 511 handled automatically during updates, so local changes are preserved.
511 512
512 * Like NetBSD, pkgsrc is designed with portability in mind and consists of 513 * Like NetBSD, pkgsrc is designed with portability in mind and consists of
513 highly portable code. This allows the greatest speed of development when 514 highly portable code. This allows the greatest speed of development when
514 porting to a new platform. This portability also ensures that pkgsrc is  515 porting to a new platform. This portability also ensures that pkgsrc is
515 consistent across all platforms. 516 consistent across all platforms.
516 517
517 * The installation prefix, acceptable software licenses, international 518 * The installation prefix, acceptable software licenses, international
518 encryption requirements and build-time options for a large number of 519 encryption requirements and build-time options for a large number of
519 packages are all set in a simple, central configuration file. 520 packages are all set in a simple, central configuration file.
520 521
521 * The entire source (not including the distribution files) is freely 522 * The entire source (not including the distribution files) is freely
522 available under a BSD license, so you may extend and adapt pkgsrc to your 523 available under a BSD license, so you may extend and adapt pkgsrc to your
523 needs. Support for local packages and patches is available right out of the 524 needs. Support for local packages and patches is available right out of the
524 box, so you can configure it specifically for your environment. 525 box, so you can configure it specifically for your environment.
525 526
526The following principles are basic to pkgsrc: 527The following principles are basic to pkgsrc:
527 528
528 * "It should only work if it's right." ? That means, if a package contains 529 * "It should only work if it's right." ? That means, if a package contains
529 bugs, it's better to find them and to complain about them rather than to 530 bugs, it's better to find them and to complain about them rather than to
530 just install the package and hope that it works. There are numerous checks 531 just install the package and hope that it works. There are numerous checks
531 in pkgsrc that try to find such bugs: Static analysis tools (pkgtools/ 532 in pkgsrc that try to find such bugs: Static analysis tools (pkgtools/
532 pkglint), build-time checks (portability of shell scripts), and 533 pkglint), build-time checks (portability of shell scripts), and
533 post-installation checks (installed files, references to shared libraries, 534 post-installation checks (installed files, references to shared libraries,
534 script interpreters). 535 script interpreters).
535 536
536 * "If it works, it should work everywhere" ? Like NetBSD has been ported to 537 * "If it works, it should work everywhere" ? Like NetBSD has been ported to
537 many hardware architectures, pkgsrc has been ported to many operating 538 many hardware architectures, pkgsrc has been ported to many operating
538 systems. Care is taken that packages behave the same on all platforms. 539 systems. Care is taken that packages behave the same on all platforms.
539 540
5401.1.2. Supported platforms 5411.1.2. Supported platforms
541 542
542pkgsrc consists of both a source distribution and a binary distribution for 543pkgsrc consists of both a source distribution and a binary distribution for
543these operating systems. After retrieving the required source or binaries, you 544these operating systems. After retrieving the required source or binaries, you
544can be up and running with pkgsrc in just minutes! 545can be up and running with pkgsrc in just minutes!
545 546
546pkgsrc was derived from FreeBSD's ports system, and initially developed for 547pkgsrc was derived from FreeBSD's ports system, and initially developed for
547NetBSD only. Since then, pkgsrc has grown a lot, and now supports the following 548NetBSD only. Since then, pkgsrc has grown a lot, and now supports the following
548platforms: 549platforms:
549 550
550Table 1.1. Platforms supported by pkgsrc 551Table 1.1. Platforms supported by pkgsrc
551 552
552+----------------------------------------------------------------+ 553+----------------------------------------------------------------+
553| Platform |Date Support Added| 554| Platform |Date Support Added|
554|---------------------------------------------+------------------| 555|---------------------------------------------+------------------|
555|NetBSD | Aug 1997 | 556|NetBSD | Aug 1997 |
556|---------------------------------------------+------------------| 557|---------------------------------------------+------------------|
557|Solaris | Mar 1999 | 558|Solaris | Mar 1999 |
558|---------------------------------------------+------------------| 559|---------------------------------------------+------------------|
559|Linux | Jun 1999 | 560|Linux | Jun 1999 |
560|---------------------------------------------+------------------| 561|---------------------------------------------+------------------|
561|Darwin (Mac OS X) | Oct 2001 | 562|Darwin (Mac OS X) | Oct 2001 |
562|---------------------------------------------+------------------| 563|---------------------------------------------+------------------|
563|FreeBSD | Nov 2002 | 564|FreeBSD | Nov 2002 |
564|---------------------------------------------+------------------| 565|---------------------------------------------+------------------|
565|OpenBSD | Nov 2002 | 566|OpenBSD | Nov 2002 |
566|---------------------------------------------+------------------| 567|---------------------------------------------+------------------|
567|IRIX | Dec 2002 | 568|IRIX | Dec 2002 |
568|---------------------------------------------+------------------| 569|---------------------------------------------+------------------|
569|BSD/OS | Dec 2003 | 570|BSD/OS | Dec 2003 |
570|---------------------------------------------+------------------| 571|---------------------------------------------+------------------|
571|AIX | Dec 2003 | 572|AIX | Dec 2003 |
572|---------------------------------------------+------------------| 573|---------------------------------------------+------------------|
573|Interix (Microsoft Windows Services for Unix)| Mar 2004 | 574|Interix (Microsoft Windows Services for Unix)| Mar 2004 |
574|---------------------------------------------+------------------| 575|---------------------------------------------+------------------|
575|DragonFlyBSD | Oct 2004 | 576|DragonFlyBSD | Oct 2004 |
576|---------------------------------------------+------------------| 577|---------------------------------------------+------------------|
577|OSF/1 | Nov 2004 | 578|OSF/1 | Nov 2004 |
578|---------------------------------------------+------------------| 579|---------------------------------------------+------------------|
579|HP-UX | Apr 2007 | 580|HP-UX | Apr 2007 |
580|---------------------------------------------+------------------| 581|---------------------------------------------+------------------|
581|Haiku | Sep 2010 | 582|Haiku | Sep 2010 |
582|---------------------------------------------+------------------| 583|---------------------------------------------+------------------|
583|MirBSD | Jan 2011 | 584|MirBSD | Jan 2011 |
584|---------------------------------------------+------------------| 585|---------------------------------------------+------------------|
585|Minix3 | Nov 2011 | 586|Minix3 | Nov 2011 |
586|---------------------------------------------+------------------| 587|---------------------------------------------+------------------|
587|Cygwin | Mar 2013 | 588|Cygwin | Mar 2013 |
588|---------------------------------------------+------------------| 589|---------------------------------------------+------------------|
589|GNU/kFreeBSD | Jul 2013 | 590|GNU/kFreeBSD | Jul 2013 |
590+----------------------------------------------------------------+ 591+----------------------------------------------------------------+
591 592
592 593
5931.2. Overview 5941.2. Overview
594 595
595This document is divided into three parts. The first, The pkgsrc user's guide, 596This document is divided into three parts. The first, The pkgsrc user's guide,
596describes how one can use one of the packages in the Package Collection, either 597describes how one can use one of the packages in the Package Collection, either
597by installing a precompiled binary package, or by building one's own copy using 598by installing a precompiled binary package, or by building one's own copy using
598the NetBSD package system. The second part, The pkgsrc developer's guide, 599the NetBSD package system. The second part, The pkgsrc developer's guide,
599explains how to prepare a package so it can be easily built by other NetBSD 600explains how to prepare a package so it can be easily built by other NetBSD
600users without knowing about the package's building details. The third part, The 601users without knowing about the package's building details. The third part, The
601pkgsrc infrastructure internals is intended for those who want to understand 602pkgsrc infrastructure internals is intended for those who want to understand
602how pkgsrc is implemented. 603how pkgsrc is implemented.
603 604
604This document is available in various formats: HTML, PDF, PS, TXT. 605This document is available in various formats: HTML, PDF, PS, TXT.
605 606
6061.3. Terminology 6071.3. Terminology
607 608
608There has been a lot of talk about "ports", "packages", etc. so far. Here is a 609There has been a lot of talk about "ports", "packages", etc. so far. Here is a
609description of all the terminology used within this document. 610description of all the terminology used within this document.
610 611
611Package 612Package
612 613
613 A set of files and building instructions that describe what's necessary to 614 A set of files and building instructions that describe what's necessary to
614 build a certain piece of software using pkgsrc. Packages are traditionally 615 build a certain piece of software using pkgsrc. Packages are traditionally
615 stored under /usr/pkgsrc. 616 stored under /usr/pkgsrc.
616 617
617The NetBSD package system 618The NetBSD package system
618 619
619 This is the former name of "pkgsrc". It is part of the NetBSD operating 620 This is the former name of "pkgsrc". It is part of the NetBSD operating
620 system and can be bootstrapped to run on non-NetBSD operating systems as 621 system and can be bootstrapped to run on non-NetBSD operating systems as
621 well. It handles building (compiling), installing, and removing of 622 well. It handles building (compiling), installing, and removing of
622 packages. 623 packages.
623 624
624Distfile 625Distfile
625 626
626 This term describes the file or files that are provided by the author of 627 This term describes the file or files that are provided by the author of
627 the piece of software to distribute his work. All the changes necessary to 628 the piece of software to distribute his work. All the changes necessary to
628 build on NetBSD are reflected in the corresponding package. Usually the 629 build on NetBSD are reflected in the corresponding package. Usually the
629 distfile is in the form of a compressed tar-archive, but other types are 630 distfile is in the form of a compressed tar-archive, but other types are
630 possible, too. Distfiles are usually stored below /usr/pkgsrc/distfiles. 631 possible, too. Distfiles are usually stored below /usr/pkgsrc/distfiles.
631 632
632Port 633Port
633 634
634 This is the term used by FreeBSD and OpenBSD people for what we call a 635 This is the term used by FreeBSD and OpenBSD people for what we call a
635 package. In NetBSD terminology, "port" refers to a different architecture. 636 package. In NetBSD terminology, "port" refers to a different architecture.
636 637
637Precompiled/binary package 638Precompiled/binary package
638 639
639 A set of binaries built with pkgsrc from a distfile and stuffed together in 640 A set of binaries built with pkgsrc from a distfile and stuffed together in
640 a single .tgz file so it can be installed on machines of the same machine 641 a single .tgz file so it can be installed on machines of the same machine
641 architecture without the need to recompile. Packages are usually generated 642 architecture without the need to recompile. Packages are usually generated
642 in /usr/pkgsrc/packages; there is also an archive on ftp.NetBSD.org. 643 in /usr/pkgsrc/packages; there is also an archive on ftp.NetBSD.org.
643 644
644 Sometimes, this is referred to by the term "package" too, especially in the 645 Sometimes, this is referred to by the term "package" too, especially in the
645 context of precompiled packages. 646 context of precompiled packages.
646 647
647Program 648Program
648 649
649 The piece of software to be installed which will be constructed from all 650 The piece of software to be installed which will be constructed from all
650 the files in the distfile by the actions defined in the corresponding 651 the files in the distfile by the actions defined in the corresponding
651 package. 652 package.
652 653
6531.3.1. Roles involved in pkgsrc 6541.3.1. Roles involved in pkgsrc
654 655
655pkgsrc users 656pkgsrc users
656 657
657 The pkgsrc users are people who use the packages provided by pkgsrc. 658 The pkgsrc users are people who use the packages provided by pkgsrc.
658 Typically they are system administrators. The people using the software 659 Typically they are system administrators. The people using the software
659 that is inside the packages (maybe called "end users") are not covered by 660 that is inside the packages (maybe called "end users") are not covered by
660 the pkgsrc guide. 661 the pkgsrc guide.
661 662
662 There are two kinds of pkgsrc users: Some only want to install pre-built 663 There are two kinds of pkgsrc users: Some only want to install pre-built
663 binary packages. Others build the pkgsrc packages from source, either for 664 binary packages. Others build the pkgsrc packages from source, either for
664 installing them directly or for building binary packages themselves. For 665 installing them directly or for building binary packages themselves. For
665 pkgsrc users Part I, "The pkgsrc user's guide" should provide all necessary 666 pkgsrc users Part I, "The pkgsrc user's guide" should provide all necessary
666 documentation. 667 documentation.
667 668
668package maintainers 669package maintainers
669 670
670 A package maintainer creates packages as described in Part II, "The pkgsrc 671 A package maintainer creates packages as described in Part II, "The pkgsrc
671 developer's guide". 672 developer's guide".
672 673
673infrastructure developers 674infrastructure developers
674 675
675 These people are involved in all those files that live in the mk/ directory 676 These people are involved in all those files that live in the mk/ directory
676 and below. Only these people should need to read through Part III, "The 677 and below. Only these people should need to read through Part III, "The
677 pkgsrc infrastructure internals", though others might be curious, too. 678 pkgsrc infrastructure internals", though others might be curious, too.
678 679
6791.4. Typography 6801.4. Typography
680 681
681When giving examples for commands, shell prompts are used to show if the 682When giving examples for commands, shell prompts are used to show if the
682command should/can be issued as root, or if "normal" user privileges are 683command should/can be issued as root, or if "normal" user privileges are
683sufficient. We use a # for root's shell prompt, and a % for users' shell 684sufficient. We use a # for root's shell prompt, and a % for users' shell
684prompt, assuming they use the C-shell or tcsh. 685prompt, assuming they use the C-shell or tcsh.
685 686
686Part I. The pkgsrc user's guide 687Part I. The pkgsrc user's guide
687 688
688Table of Contents 689Table of Contents
689 690
6902. Where to get pkgsrc and how to keep it up-to-date 6912. Where to get pkgsrc and how to keep it up-to-date
691 692
692 2.1. Getting pkgsrc for the first time 693 2.1. Getting pkgsrc for the first time
693 694
694 2.1.1. As tar archive 695 2.1.1. As tar archive
695 2.1.2. Via anonymous CVS 696 2.1.2. Via anonymous CVS
696 697
697 2.2. Keeping pkgsrc up-to-date 698 2.2. Keeping pkgsrc up-to-date
698 699
699 2.2.1. Via tar files 700 2.2.1. Via tar files
700 2.2.2. Via CVS 701 2.2.2. Via CVS
701 702
7023. Using pkgsrc on systems other than NetBSD 7033. Using pkgsrc on systems other than NetBSD
703 704
704 3.1. Binary distribution 705 3.1. Binary distribution
705 3.2. Bootstrapping pkgsrc 706 3.2. Bootstrapping pkgsrc
706 3.3. Platform-specific notes 707 3.3. Platform-specific notes
707 708
708 3.3.1. Cygwin 709 3.3.1. Cygwin
709 3.3.2. Darwin (Mac OS X) 710 3.3.2. Darwin (Mac OS X)
710 3.3.3. FreeBSD 711 3.3.3. FreeBSD
711 3.3.4. GNU/kFreeBSD 712 3.3.4. GNU/kFreeBSD
712 3.3.5. Interix 713 3.3.5. Interix
713 3.3.6. IRIX 714 3.3.6. IRIX
714 3.3.7. Linux 715 3.3.7. Linux
715 3.3.8. MirBSD 716 3.3.8. MirBSD
716 3.3.9. OpenBSD 717 3.3.9. OpenBSD
717 3.3.10. Solaris 718 3.3.10. Solaris
718 719
7194. Using pkgsrc 7204. Using pkgsrc
720 721
721 4.1. Using binary packages 722 4.1. Using binary packages
722 723
723 4.1.1. Finding binary packages 724 4.1.1. Finding binary packages
724 4.1.2. Installing binary packages 725 4.1.2. Installing binary packages
725 4.1.3. Deinstalling packages 726 4.1.3. Deinstalling packages
726 4.1.4. Getting information about installed packages 727 4.1.4. Getting information about installed packages
727 4.1.5. Checking for security vulnerabilities in installed packages 728 4.1.5. Checking for security vulnerabilities in installed packages
728 4.1.6. Finding if newer versions of your installed packages are in 729 4.1.6. Finding if newer versions of your installed packages are in
729 pkgsrc 730 pkgsrc
730 4.1.7. Other administrative functions 731 4.1.7. Other administrative functions
731 4.1.8. A word of warning 732 4.1.8. A word of warning
732 733
733 4.2. Building packages from source 734 4.2. Building packages from source
734 735
735 4.2.1. Requirements 736 4.2.1. Requirements
736 4.2.2. Fetching distfiles 737 4.2.2. Fetching distfiles
737 4.2.3. How to build and install 738 4.2.3. How to build and install
738 739
7395. Configuring pkgsrc 7405. Configuring pkgsrc
740 741
741 5.1. General configuration 742 5.1. General configuration
742 5.2. Variables affecting the build process 743 5.2. Variables affecting the build process
743 5.3. Variables affecting the installation process 744 5.3. Variables affecting the installation process
744 5.4. Selecting and configuring the compiler 745 5.4. Selecting and configuring the compiler
745 746
746 5.4.1. Selecting the compiler 747 5.4.1. Selecting the compiler
747 5.4.2. Additional flags to the compiler (CFLAGS) 748 5.4.2. Additional flags to the compiler (CFLAGS)
748 5.4.3. Additional flags to the linker (LDFLAGS) 749 5.4.3. Additional flags to the linker (LDFLAGS)
749 750
750 5.5. Developer/advanced settings 751 5.5. Developer/advanced settings
751 5.6. Selecting Build Options 752 5.6. Selecting Build Options
752 753
7536. Creating binary packages 7546. Creating binary packages
754 755
755 6.1. Building a single binary package 756 6.1. Building a single binary package
756 6.2. Settings for creation of binary packages 757 6.2. Settings for creation of binary packages
757 758
7587. Creating binary packages for everything in pkgsrc (bulk builds) 7597. Creating binary packages for everything in pkgsrc (bulk builds)
759 760
760 7.1. Preparations 761 7.1. Preparations
761 7.2. Running a pbulk-style bulk build 762 7.2. Running a pbulk-style bulk build
762 763
763 7.2.1. Configuration 764 7.2.1. Configuration
764 765
765 7.3. Requirements of a full bulk build 766 7.3. Requirements of a full bulk build
766 7.4. Creating a multiple CD-ROM packages collection 767 7.4. Creating a multiple CD-ROM packages collection
767 768
768 7.4.1. Example of cdpack 769 7.4.1. Example of cdpack
769 770
7708. Directory layout of the installed files 7718. Directory layout of the installed files
771 772
772 8.1. File system layout in ${LOCALBASE} 773 8.1. File system layout in ${LOCALBASE}
773 8.2. File system layout in ${VARBASE} 774 8.2. File system layout in ${VARBASE}
774 775
7759. Frequently Asked Questions 7769. Frequently Asked Questions
776 777
777 9.1. Are there any mailing lists for pkg-related discussion? 778 9.1. Are there any mailing lists for pkg-related discussion?
778 9.2. Utilities for package management (pkgtools) 779 9.2. Where's the pkgviews documentation?
779 9.3. How to use pkgsrc as non-root 780 9.3. Utilities for package management (pkgtools)
780 9.4. How to resume transfers when fetching distfiles? 781 9.4. How to use pkgsrc as non-root
781 9.5. How can I install/use modular X.org from pkgsrc? 782 9.5. How to resume transfers when fetching distfiles?
782 9.6. How to fetch files from behind a firewall 783 9.6. How can I install/use modular X.org from pkgsrc?
783 9.7. How to fetch files from HTTPS sites 784 9.7. How to fetch files from behind a firewall
784 9.8. How do I tell make fetch to do passive FTP? 785 9.8. How to fetch files from HTTPS sites
785 9.9. How to fetch all distfiles at once 786 9.9. How do I tell make fetch to do passive FTP?
786 9.10. What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean? 787 9.10. How to fetch all distfiles at once
787 9.11. What does "Could not find bsd.own.mk" mean? 788 9.11. What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean?
788 9.12. Using 'sudo' with pkgsrc 789 9.12. What does "Could not find bsd.own.mk" mean?
789 9.13. How do I change the location of configuration files? 790 9.13. Using 'sudo' with pkgsrc
790 9.14. Automated security checks 791 9.14. How do I change the location of configuration files?
791 9.15. Why do some packages ignore my CFLAGS? 792 9.15. Automated security checks
792 9.16. A package does not build. What shall I do? 793 9.16. Why do some packages ignore my CFLAGS?
793 9.17. What does "Makefile appears to contain unresolved cvs/rcs/??? merge 794 9.17. A package does not build. What shall I do?
 795 9.18. What does "Makefile appears to contain unresolved cvs/rcs/??? merge
794 conflicts" mean? 796 conflicts" mean?
795 797
796Chapter 2. Where to get pkgsrc and how to keep it up-to-date 798Chapter 2. Where to get pkgsrc and how to keep it up-to-date
797 799
798Table of Contents 800Table of Contents
799 801
8002.1. Getting pkgsrc for the first time 8022.1. Getting pkgsrc for the first time
801 803
802 2.1.1. As tar archive 804 2.1.1. As tar archive
803 2.1.2. Via anonymous CVS 805 2.1.2. Via anonymous CVS
804 806
8052.2. Keeping pkgsrc up-to-date 8072.2. Keeping pkgsrc up-to-date
806 808
807 2.2.1. Via tar files 809 2.2.1. Via tar files
808 2.2.2. Via CVS 810 2.2.2. Via CVS
809 811
810Before you download and extract the files, you need to decide where you want to 812Before you download and extract the files, you need to decide where you want to
811extract them. When using pkgsrc as root user, pkgsrc is usually installed in / 813extract them. When using pkgsrc as root user, pkgsrc is usually installed in /
812usr/pkgsrc. You are though free to install the sources and binary packages 814usr/pkgsrc. You are though free to install the sources and binary packages
813wherever you want in your filesystem, provided that the pathname does not 815wherever you want in your filesystem, provided that the pathname does not
814contain white-space or other characters that are interpreted specially by the 816contain white-space or other characters that are interpreted specially by the
815shell and some other programs. A safe bet is to use only letters, digits, 817shell and some other programs. A safe bet is to use only letters, digits,
816underscores and dashes. 818underscores and dashes.
817 819
8182.1. Getting pkgsrc for the first time 8202.1. Getting pkgsrc for the first time
819 821
820Before you download any pkgsrc files, you should decide whether you want the  822Before you download any pkgsrc files, you should decide whether you want the
821current branch or the stable branch. The latter is forked on a quarterly basis 823current branch or the stable branch. The latter is forked on a quarterly basis
822from the current branch and only gets modified for security updates. The names 824from the current branch and only gets modified for security updates. The names
823of the stable branches are built from the year and the quarter, for example 825of the stable branches are built from the year and the quarter, for example
8242014Q3. 8262014Q3.
825 827
826The second step is to decide how you want to download pkgsrc. You can get it as 828The second step is to decide how you want to download pkgsrc. You can get it as
827a tar file or via CVS. Both ways are described here. 829a tar file or via CVS. Both ways are described here.
828 830
829Note that tar archive contains CVS working copy. Thus you can switch to using 831Note that tar archive contains CVS working copy. Thus you can switch to using
830CVS at any later time. 832CVS at any later time.
831 833
8322.1.1. As tar archive 8342.1.1. As tar archive
833 835
834The primary download location for all pkgsrc files is http://ftp.NetBSD.org/pub 836The primary download location for all pkgsrc files is http://ftp.NetBSD.org/pub
835/pkgsrc/ or ftp://ftp.NetBSD.org/pub/pkgsrc/ (it points to the same location). 837/pkgsrc/ or ftp://ftp.NetBSD.org/pub/pkgsrc/ (it points to the same location).
836There are a number of subdirectories for different purposes, which are 838There are a number of subdirectories for different purposes, which are
837described in detail in Appendix C, Directory layout of the pkgsrc FTP server. 839described in detail in Appendix C, Directory layout of the pkgsrc FTP server.
838 840
839The tar archive for the current branch is in the directory current and is 841The tar archive for the current branch is in the directory current and is
840called pkgsrc.tar.gz. It is autogenerated daily. 842called pkgsrc.tar.gz. It is autogenerated daily.
841 843
842To save download time we provide bzip2- and xz-compressed archives which are 844To save download time we provide bzip2- and xz-compressed archives which are
843published at pkgsrc.tar.bz2 and pkgsrc.tar.xz respectively. 845published at pkgsrc.tar.bz2 and pkgsrc.tar.xz respectively.
844 846
845You can fetch the same files using FTP. 847You can fetch the same files using FTP.
846 848
847The tar file for the stable branch 2014Q3 is in the directory pkgsrc-2014Q3 and 849The tar file for the stable branch 2014Q3 is in the directory pkgsrc-2014Q3 and
848is also called pkgsrc.tar.gz. 850is also called pkgsrc.tar.gz.
849 851
850To download a pkgsrc stable tarball, run: 852To download a pkgsrc stable tarball, run:
851 853
852$ ftp ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-20xxQy/pkgsrc.tar.gz 854$ ftp ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-20xxQy/pkgsrc.tar.gz
853 855
854Where pkgsrc-20xxQy is the stable branch to be downloaded, for example, " 856Where pkgsrc-20xxQy is the stable branch to be downloaded, for example, "
855pkgsrc-2014Q3". 857pkgsrc-2014Q3".
856 858
857If you prefer, you can also fetch it using "wget", "curl", or your web browser. 859If you prefer, you can also fetch it using "wget", "curl", or your web browser.
858 860
859Then, extract it with: 861Then, extract it with:
860 862
861$ tar -xzf pkgsrc.tar.gz -C /usr 863$ tar -xzf pkgsrc.tar.gz -C /usr
862 864
863This will create the directory pkgsrc/ in /usr/ and all the package source will 865This will create the directory pkgsrc/ in /usr/ and all the package source will
864be stored under /usr/pkgsrc/. 866be stored under /usr/pkgsrc/.
865 867
866To download pkgsrc-current, run: 868To download pkgsrc-current, run:
867 869
868$ ftp ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz 870$ ftp ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz
869 871
8702.1.2. Via anonymous CVS 8722.1.2. Via anonymous CVS
871 873
872To fetch a specific pkgsrc stable branch, run: 874To fetch a specific pkgsrc stable branch, run:
873 875
874$ cd /usr && cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -r pkgsrc-20xxQy -P pkgsrc 876$ cd /usr && cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -r pkgsrc-20xxQy -P pkgsrc
875 877
876Where pkgsrc-20xxQy is the stable branch to be checked out, for example, " 878Where pkgsrc-20xxQy is the stable branch to be checked out, for example, "
877pkgsrc-2014Q3" 879pkgsrc-2014Q3"
878 880
879This will create the directory pkgsrc/ in your /usr/ directory and all the 881This will create the directory pkgsrc/ in your /usr/ directory and all the
880package source will be stored under /usr/pkgsrc/. 882package source will be stored under /usr/pkgsrc/.
881 883
882To fetch the pkgsrc current branch, run: 884To fetch the pkgsrc current branch, run:
883 885
884$ cd /usr && cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc 886$ cd /usr && cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc
885 887
886Refer to the list of available mirrors to choose a faster CVS mirror, if 888Refer to the list of available mirrors to choose a faster CVS mirror, if
887needed. 889needed.
888 890
889If you get error messages from rsh, you need to set CVS_RSH variable. E.g.: 891If you get error messages from rsh, you need to set CVS_RSH variable. E.g.:
890 892
891$ cd /usr && env CVS_RSH=ssh cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc 893$ cd /usr && env CVS_RSH=ssh cvs -q -z2 -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc
892 894
893Refer to documentation on your command shell how to set CVS_RSH=ssh 895Refer to documentation on your command shell how to set CVS_RSH=ssh
894permanently. For Bourne shells, you can set it in your .profile or better 896permanently. For Bourne shells, you can set it in your .profile or better
895globally in /etc/profile: 897globally in /etc/profile:
896 898
897# set CVS remote shell command 899# set CVS remote shell command
898CVS_RSH=ssh 900CVS_RSH=ssh
899export CVS_RSH 901export CVS_RSH
900 902
901By default, CVS doesn't do things like most people would expect it to do. But 903By default, CVS doesn't do things like most people would expect it to do. But
902there is a way to convince CVS, by creating a file called .cvsrc in your home 904there is a way to convince CVS, by creating a file called .cvsrc in your home
903directory and saving the following lines to it. This file will save you lots of 905directory and saving the following lines to it. This file will save you lots of
904headache and some bug reports, so we strongly recommend it. You can find an 906headache and some bug reports, so we strongly recommend it. You can find an
905explanation of this file in the CVS documentation. 907explanation of this file in the CVS documentation.
906 908
907# recommended CVS configuration file from the pkgsrc guide 909# recommended CVS configuration file from the pkgsrc guide
908cvs -q -z2 910cvs -q -z2
909checkout -P 911checkout -P
910update -dP 912update -dP
911diff -upN 913diff -upN
912rdiff -u 914rdiff -u
913release -d 915release -d
914 916
9152.2. Keeping pkgsrc up-to-date 9172.2. Keeping pkgsrc up-to-date
916 918
917The preferred way to keep pkgsrc up-to-date is via CVS (which also works if you 919The preferred way to keep pkgsrc up-to-date is via CVS (which also works if you
918have first installed it via a tar file). It saves bandwidth and hard disk 920have first installed it via a tar file). It saves bandwidth and hard disk
919activity, compared to downloading the tar file again. 921activity, compared to downloading the tar file again.
920 922
9212.2.1. Via tar files 9232.2.1. Via tar files
922 924
923Warning 925Warning
924 926
925When updating from a tar file, you first need to completely remove the old 927When updating from a tar file, you first need to completely remove the old
926pkgsrc directory. Otherwise those files that have been removed from pkgsrc in 928pkgsrc directory. Otherwise those files that have been removed from pkgsrc in
927the mean time will not be removed on your local disk, resulting in 929the mean time will not be removed on your local disk, resulting in
928inconsistencies. When removing the old files, any changes that you have done to 930inconsistencies. When removing the old files, any changes that you have done to
929the pkgsrc files will be lost after updating. Therefore updating via CVS is 931the pkgsrc files will be lost after updating. Therefore updating via CVS is
930strongly recommended. 932strongly recommended.
931 933
932Note that by default the distfiles and the binary packages are saved in the 934Note that by default the distfiles and the binary packages are saved in the
933pkgsrc tree, so don't forget to rescue them before updating. You can also 935pkgsrc tree, so don't forget to rescue them before updating. You can also
934configure pkgsrc to store distfiles and packages in directories outside the 936configure pkgsrc to store distfiles and packages in directories outside the
935pkgsrc tree by setting the DISTDIR and PACKAGES variables. See Chapter 5,  937pkgsrc tree by setting the DISTDIR and PACKAGES variables. See Chapter 5,
936Configuring pkgsrc for the details. 938Configuring pkgsrc for the details.
937 939
938To update pkgsrc from a tar file, download the tar file as explained above. 940To update pkgsrc from a tar file, download the tar file as explained above.
939Then, make sure that you have not made any changes to the files in the pkgsrc 941Then, make sure that you have not made any changes to the files in the pkgsrc
940directory. Remove the pkgsrc directory and extract the new tar file. Done. 942directory. Remove the pkgsrc directory and extract the new tar file. Done.
941 943
9422.2.2. Via CVS 9442.2.2. Via CVS
943 945
944To update pkgsrc via CVS, change to the pkgsrc directory and run cvs: 946To update pkgsrc via CVS, change to the pkgsrc directory and run cvs:
945 947
946$ cd /usr/pkgsrc && cvs update -dP 948$ cd /usr/pkgsrc && cvs update -dP
947 949
948If you get error messages from rsh, you need to set CVS_RSH variable as 950If you get error messages from rsh, you need to set CVS_RSH variable as
949described above. E.g.: 951described above. E.g.:
950 952
951$ cd /usr/pkgsrc && env CVS_RSH=ssh cvs up -dP 953$ cd /usr/pkgsrc && env CVS_RSH=ssh cvs up -dP
952 954
9532.2.2.1. Switching between different pkgsrc branches 9552.2.2.1. Switching between different pkgsrc branches
954 956
955When updating pkgsrc, the CVS program keeps track of the branch you selected. 957When updating pkgsrc, the CVS program keeps track of the branch you selected.
956But if you, for whatever reason, want to switch from the stable branch to the 958But if you, for whatever reason, want to switch from the stable branch to the
957current one, you can do it by adding the option "-A" after the "update" 959current one, you can do it by adding the option "-A" after the "update"
958keyword. To switch from the current branch back to the stable branch, add the " 960keyword. To switch from the current branch back to the stable branch, add the "
959-rpkgsrc-2014Q3" option. 961-rpkgsrc-2014Q3" option.
960 962
9612.2.2.2. What happens to my changes when updating? 9632.2.2.2. What happens to my changes when updating?
962 964
963When you update pkgsrc, the CVS program will only touch those files that are 965When you update pkgsrc, the CVS program will only touch those files that are
964registered in the CVS repository. That means that any packages that you created 966registered in the CVS repository. That means that any packages that you created
965on your own will stay unmodified. If you change files that are managed by CVS, 967on your own will stay unmodified. If you change files that are managed by CVS,
966later updates will try to merge your changes with those that have been done by 968later updates will try to merge your changes with those that have been done by
967others. See the CVS manual, chapter "update" for details. 969others. See the CVS manual, chapter "update" for details.
968 970
969Chapter 3. Using pkgsrc on systems other than NetBSD 971Chapter 3. Using pkgsrc on systems other than NetBSD
970 972
971Table of Contents 973Table of Contents
972 974
9733.1. Binary distribution 9753.1. Binary distribution
9743.2. Bootstrapping pkgsrc 9763.2. Bootstrapping pkgsrc
9753.3. Platform-specific notes 9773.3. Platform-specific notes
976 978
977 3.3.1. Cygwin 979 3.3.1. Cygwin
978 3.3.2. Darwin (Mac OS X) 980 3.3.2. Darwin (Mac OS X)
979 3.3.3. FreeBSD 981 3.3.3. FreeBSD
980 3.3.4. GNU/kFreeBSD 982 3.3.4. GNU/kFreeBSD
981 3.3.5. Interix 983 3.3.5. Interix
982 3.3.6. IRIX 984 3.3.6. IRIX
983 3.3.7. Linux 985 3.3.7. Linux
984 3.3.8. MirBSD 986 3.3.8. MirBSD
985 3.3.9. OpenBSD 987 3.3.9. OpenBSD
986 3.3.10. Solaris 988 3.3.10. Solaris
987 989
9883.1. Binary distribution 9903.1. Binary distribution
989 991
990See Section 4.1, "Using binary packages". 992See Section 4.1, "Using binary packages".
991 993
9923.2. Bootstrapping pkgsrc 9943.2. Bootstrapping pkgsrc
993 995
994pkgsrc can be bootstrapped for use in two different modes: privileged and 996pkgsrc can be bootstrapped for use in two different modes: privileged and
995unprivileged one. In unprivileged mode in contrast to privileged one all 997unprivileged one. In unprivileged mode in contrast to privileged one all
996programs are installed under one particular user and cannot utilise privileged 998programs are installed under one particular user and cannot utilise privileged
997operations (packages don't create special users and all special file 999operations (packages don't create special users and all special file
998permissions like setuid are ignored). 1000permissions like setuid are ignored).
999 1001
1000Installing the bootstrap kit from source should be as simple as: 1002Installing the bootstrap kit from source should be as simple as:
1001 1003
1002# env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc 1004# env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout -P pkgsrc
1003# cd pkgsrc/bootstrap 1005# cd pkgsrc/bootstrap
1004# ./bootstrap 1006# ./bootstrap
1005 1007
1006 1008
1007To bootstrap in unprivileged mode pass "--unprivileged" flag to bootstrap 1009To bootstrap in unprivileged mode pass "--unprivileged" flag to bootstrap
1008 1010
1009By default, in privileged mode pkgsrc uses /usr/pkg for prefix where programs 1011By default, in privileged mode pkgsrc uses /usr/pkg for prefix where programs
1010will be installed in, and /var/db/pkg for the package database directory where 1012will be installed in, and /var/db/pkg for the package database directory where
1011pkgsrc will do its internal bookkeeping, /var is used as varbase, where 1013pkgsrc will do its internal bookkeeping, /var is used as varbase, where
1012packages install their persistent data. In unprivileged mode pkgsrc uses ~/pkg 1014packages install their persistent data. In unprivileged mode pkgsrc uses ~/pkg
1013for prefix, ~/pkg/var/db/pkg for the package database, and ~/pkg/var for  1015for prefix, ~/pkg/var/db/pkg for the package database, and ~/pkg/var for
1014varbase. 1016varbase.
1015 1017
1016You can change default layout using command-line arguments. Run "./bootstrap 1018You can change default layout using command-line arguments. Run "./bootstrap
1017--help" to get details. 1019--help" to get details.
1018 1020
1019Note 1021Note
1020 1022
1021The bootstrap installs a bmake tool. Use this bmake when building via pkgsrc. 1023The bootstrap installs a bmake tool. Use this bmake when building via pkgsrc.
1022For examples in this guide, use bmake instead of "make". 1024For examples in this guide, use bmake instead of "make".
1023 1025
1024Note 1026Note
1025 1027
1026It is possible to bootstrap multiple instances of pkgsrc using non-intersecting 1028It is possible to bootstrap multiple instances of pkgsrc using non-intersecting
1027directories. Use bmake corresponding to the installation you're working with to 1029directories. Use bmake corresponding to the installation you're working with to
1028build and install packages. 1030build and install packages.
1029 1031
10303.3. Platform-specific notes 10323.3. Platform-specific notes
1031 1033
1032Here are some platform-specific notes you should be aware of. 1034Here are some platform-specific notes you should be aware of.
1033 1035
10343.3.1. Cygwin 10363.3.1. Cygwin
1035 1037
1036Cygwin 1.7.x and later are supported. 1038Cygwin 1.7.x and later are supported.
1037 1039
1038You need to install minimal base packages in `Base' category plus any of 1040You need to install minimal base packages in `Base' category plus any of
1039compiler, gcc, gcc4, and/or clang. For gcc and gcc4, C and C++ compiler will be 1041compiler, gcc, gcc4, and/or clang. For gcc and gcc4, C and C++ compiler will be
1040installed by default, but you can install Fortran compiler additionally because 1042installed by default, but you can install Fortran compiler additionally because
1041it will be required to use libtool. If it is not installed (or too old), 1043it will be required to use libtool. If it is not installed (or too old),
1042Fortran compiler will be installed with pkgsrc automatically. 1044Fortran compiler will be installed with pkgsrc automatically.
1043 1045
1044As noted in Cygwin FAQ: `Why doesn't su work?', su(1) command has been in 1046As noted in Cygwin FAQ: `Why doesn't su work?', su(1) command has been in
1045Cygwin distribution, but it has never worked. Unless you bootstrap pkgsrc with 1047Cygwin distribution, but it has never worked. Unless you bootstrap pkgsrc with
1046the --unprivileged option, workaround is: 1048the --unprivileged option, workaround is:
1047 1049
1048 * Right click "Cygwin Terminal" in your Start Menu, then pick "Run as 1050 * Right click "Cygwin Terminal" in your Start Menu, then pick "Run as
1049 administrator". 1051 administrator".
1050 1052
10513.3.2. Darwin (Mac OS X) 10533.3.2. Darwin (Mac OS X)
1052 1054
1053Darwin 5.x and up are supported. 1055Darwin 5.x and up are supported.
1054 1056
1055Before you start, you need to download and install the Mac OS X Developer Tools 1057Before you start, you need to download and install the Mac OS X Developer Tools
1056from Apple's Developer Connection. This requires (free) membership. See http:// 1058from Apple's Developer Connection. This requires (free) membership. See http://
1057developer.apple.com/macosx/ for details. Also, make sure you install X11 (an 1059developer.apple.com/macosx/ for details. Also, make sure you install X11 (an
1058optional package included with the Developer Tools) if you intend to build 1060optional package included with the Developer Tools) if you intend to build
1059packages that use the X11 Window System. (If you don't want or need the full 1061packages that use the X11 Window System. (If you don't want or need the full
1060Xcode GUI, download and install Command Line Tools for Xcode.) 1062Xcode GUI, download and install Command Line Tools for Xcode.)
1061 1063
10623.3.3. FreeBSD 10643.3.3. FreeBSD
1063 1065
1064FreeBSD 8.3 and 9.0 have been tested and are supported, other versions may 1066FreeBSD 8.3 and 9.0 have been tested and are supported, other versions may
1065work. 1067work.
1066 1068
1067Care should be taken so that the tools that this kit installs do not conflict 1069Care should be taken so that the tools that this kit installs do not conflict
1068with the FreeBSD userland tools. There are several steps: 1070with the FreeBSD userland tools. There are several steps:
1069 1071
1070 1. FreeBSD stores its ports pkg database in /var/db/pkg. It is therefore 1072 1. FreeBSD stores its ports pkg database in /var/db/pkg. It is therefore
1071 recommended that you choose a different location (e.g. /usr/pkgdb) by using 1073 recommended that you choose a different location (e.g. /usr/pkgdb) by using
1072 the --pkgdbdir option to the bootstrap script. 1074 the --pkgdbdir option to the bootstrap script.
1073 1075
1074 2. If you do not intend to use the FreeBSD ports tools, it's probably a good 1076 2. If you do not intend to use the FreeBSD ports tools, it's probably a good
1075 idea to move them out of the way to avoid confusion, e.g. 1077 idea to move them out of the way to avoid confusion, e.g.
1076 1078
1077 # cd /usr/sbin 1079 # cd /usr/sbin
1078 # mv pkg_add pkg_add.orig 1080 # mv pkg_add pkg_add.orig
1079 # mv pkg_create pkg_create.orig 1081 # mv pkg_create pkg_create.orig
1080 # mv pkg_delete pkg_delete.orig 1082 # mv pkg_delete pkg_delete.orig
1081 # mv pkg_info pkg_info.orig 1083 # mv pkg_info pkg_info.orig
1082 1084
1083 1085
1084 3. An example mk.conf file will be placed in /etc/mk.conf.example file when 1086 3. An example mk.conf file will be placed in /etc/mk.conf.example file when
1085 you use the bootstrap script. 1087 you use the bootstrap script.
1086 1088
10873.3.4. GNU/kFreeBSD 10893.3.4. GNU/kFreeBSD
1088 1090
1089Debian GNU/kFreeBSD is the only GNU/kFreeBSD distribution now. Debian GNU/ 1091Debian GNU/kFreeBSD is the only GNU/kFreeBSD distribution now. Debian GNU/
1090kFreeBSD 7.0 or later is tested and supported. 1092kFreeBSD 7.0 or later is tested and supported.
1091 1093
1092You should install ncurses (libncurses and libncurses-dev) packages. 1094You should install ncurses (libncurses and libncurses-dev) packages.
1093 1095
10943.3.5. Interix 10963.3.5. Interix
1095 1097
1096Interix is a POSIX-compatible subsystem for the Windows NT kernel, providing a 1098Interix is a POSIX-compatible subsystem for the Windows NT kernel, providing a
1097Unix-like environment with a tighter kernel integration than available with 1099Unix-like environment with a tighter kernel integration than available with
1098Cygwin. It is part of the Windows Services for Unix package, available for free 1100Cygwin. It is part of the Windows Services for Unix package, available for free
1099for any licensed copy of Windows 2000, XP (not including XP Home), or 2003. SFU 1101for any licensed copy of Windows 2000, XP (not including XP Home), or 2003. SFU
1100can be downloaded from http://www.microsoft.com/windows/sfu/. 1102can be downloaded from http://www.microsoft.com/windows/sfu/.
1101 1103
1102Services for Unix 3.5 has been tested. 3.0 or 3.1 may work, but are not 1104Services for Unix 3.5 has been tested. 3.0 or 3.1 may work, but are not
1103officially supported. (The main difference in 3.0/3.1 is lack of pthreads, but 1105officially supported. (The main difference in 3.0/3.1 is lack of pthreads, but
1104other parts of libc may also be lacking.) 1106other parts of libc may also be lacking.)
1105 1107
1106Services for Unix Applications (aka SUA) is an integrated component of Windows 1108Services for Unix Applications (aka SUA) is an integrated component of Windows
1107Server 2003 R2 (5.2), Windows Vista and Windows Server 2008 (6.0), Windows 7 1109Server 2003 R2 (5.2), Windows Vista and Windows Server 2008 (6.0), Windows 7
1108and Windows Server 2008 R2 (6.1). As of this writing, the SUA's Interix 6.0 1110and Windows Server 2008 R2 (6.1). As of this writing, the SUA's Interix 6.0
1109(32bit) and 6.1 (64bit) subsystems have been tested. Other versions may work as 1111(32bit) and 6.1 (64bit) subsystems have been tested. Other versions may work as
1110well. The Interix 5.x subsystem has not yet been tested with pkgsrc. 1112well. The Interix 5.x subsystem has not yet been tested with pkgsrc.
1111 1113
11123.3.5.1. When installing Interix/SFU 11143.3.5.1. When installing Interix/SFU
1113 1115
1114At an absolute minimum, the following packages must be installed from the 1116At an absolute minimum, the following packages must be installed from the
1115Windows Services for Unix 3.5 distribution in order to use pkgsrc: 1117Windows Services for Unix 3.5 distribution in order to use pkgsrc:
1116 1118
1117 * Utilities -> Base Utilities 1119 * Utilities -> Base Utilities
1118 1120
1119 * Interix GNU Components -> (all) 1121 * Interix GNU Components -> (all)
1120 1122
1121 * Remote Connectivity 1123 * Remote Connectivity
1122 1124
1123 * Interix SDK 1125 * Interix SDK
1124 1126
1125When using pkgsrc on Interix, DO NOT install the Utilities subcomponent "UNIX 1127When using pkgsrc on Interix, DO NOT install the Utilities subcomponent "UNIX
1126Perl". That is Perl 5.6 without shared module support, installed to /usr/local, 1128Perl". That is Perl 5.6 without shared module support, installed to /usr/local,
1127and will only cause confusion. Instead, install Perl 5.8 from pkgsrc (or from a 1129and will only cause confusion. Instead, install Perl 5.8 from pkgsrc (or from a
1128binary package). 1130binary package).
1129 1131
1130The Remote Connectivity subcomponent "Windows Remote Shell Service" does not 1132The Remote Connectivity subcomponent "Windows Remote Shell Service" does not
1131need to be installed, but Remote Connectivity itself should be installed in 1133need to be installed, but Remote Connectivity itself should be installed in
1132order to have a working inetd. 1134order to have a working inetd.
1133 1135
1134During installation you may be asked whether to enable setuid behavior for 1136During installation you may be asked whether to enable setuid behavior for
1135Interix programs, and whether to make pathnames default to case-sensitive. 1137Interix programs, and whether to make pathnames default to case-sensitive.
1136Setuid should be enabled, and case-sensitivity MUST be enabled. (Without 1138Setuid should be enabled, and case-sensitivity MUST be enabled. (Without
1137case-sensitivity, a large number of packages including perl will not build.) 1139case-sensitivity, a large number of packages including perl will not build.)
1138 1140
1139NOTE: Newer Windows service packs change the way binary execution works (via 1141NOTE: Newer Windows service packs change the way binary execution works (via
1140the Data Execution Prevention feature). In order to use pkgsrc and other 1142the Data Execution Prevention feature). In order to use pkgsrc and other
1141gcc-compiled binaries reliably, a hotfix containing POSIX.EXE, PSXDLL.DLL, 1143gcc-compiled binaries reliably, a hotfix containing POSIX.EXE, PSXDLL.DLL,
1142PSXRUN.EXE, and PSXSS.EXE (899522 or newer) must be installed. Hotfixes are 1144PSXRUN.EXE, and PSXSS.EXE (899522 or newer) must be installed. Hotfixes are
1143available from Microsoft through a support contract; however, Debian Interix 1145available from Microsoft through a support contract; however, Debian Interix
1144Port has made most Interix hotfixes available for personal use from http:// 1146Port has made most Interix hotfixes available for personal use from http://
1145www.debian-interix.net/hotfixes/. 1147www.debian-interix.net/hotfixes/.
1146 1148
1147In addition to the hotfix noted above, it may be necessary to disable Data 1149In addition to the hotfix noted above, it may be necessary to disable Data
1148Execution Prevention entirely to make Interix functional. This may happen only 1150Execution Prevention entirely to make Interix functional. This may happen only
1149with certain types of CPUs; the cause is not fully understood at this time. If 1151with certain types of CPUs; the cause is not fully understood at this time. If
1150gcc or other applications still segfault repeatedly after installing one of the 1152gcc or other applications still segfault repeatedly after installing one of the
1151hotfixes note above, the following option can be added to the appropriate 1153hotfixes note above, the following option can be added to the appropriate
1152"boot.ini" line on the Windows boot drive: /NoExecute=AlwaysOff (WARNING, this 1154"boot.ini" line on the Windows boot drive: /NoExecute=AlwaysOff (WARNING, this
1153will disable DEP completely, which may be a security risk if applications are 1155will disable DEP completely, which may be a security risk if applications are
1154often run as a user in the Administrators group!) 1156often run as a user in the Administrators group!)
1155 1157
11563.3.5.2. What to do if Interix/SFU is already installed 11583.3.5.2. What to do if Interix/SFU is already installed
1157 1159
1158If SFU is already installed and you wish to alter these settings to work with 1160If SFU is already installed and you wish to alter these settings to work with
1159pkgsrc, note the following things. 1161pkgsrc, note the following things.
1160 1162
1161 * To uninstall UNIX Perl, use Add/Remove Programs, select Microsoft Windows 1163 * To uninstall UNIX Perl, use Add/Remove Programs, select Microsoft Windows
1162 Services for UNIX, then click Change. In the installer, choose Add or 1164 Services for UNIX, then click Change. In the installer, choose Add or
1163 Remove, then uncheck Utilities->UNIX Perl. 1165 Remove, then uncheck Utilities->UNIX Perl.
1164 1166
1165 * To enable case-sensitivity for the file system, run REGEDIT.EXE, and change 1167 * To enable case-sensitivity for the file system, run REGEDIT.EXE, and change
1166 the following registry key: 1168 the following registry key:
1167 1169
1168 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel 1170 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel
1169 1171
1170 Set the DWORD value "obcaseinsensitive" to 0; then reboot. 1172 Set the DWORD value "obcaseinsensitive" to 0; then reboot.
1171 1173
1172 * To enable setuid binaries (optional), run REGEDIT.EXE, and change the 1174 * To enable setuid binaries (optional), run REGEDIT.EXE, and change the
1173 following registry key: 1175 following registry key:
1174 1176
1175 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Services for UNIX 1177 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Services for UNIX
1176 1178
1177 Set the DWORD value "EnableSetuidBinaries" to 1; then reboot. 1179 Set the DWORD value "EnableSetuidBinaries" to 1; then reboot.
1178 1180
11793.3.5.3. Important notes for using pkgsrc 11813.3.5.3. Important notes for using pkgsrc
1180 1182
1181The package manager (either the pkgsrc "su" user, or the user running 1183The package manager (either the pkgsrc "su" user, or the user running
1182"pkg_add") must be a member of the local Administrators group. Such a user must 1184"pkg_add") must be a member of the local Administrators group. Such a user must
1183also be used to run the bootstrap. This is slightly relaxed from the normal 1185also be used to run the bootstrap. This is slightly relaxed from the normal
1184pkgsrc requirement of "root". 1186pkgsrc requirement of "root".
1185 1187
1186The package manager should use a umask of 002. "make install" will 1188The package manager should use a umask of 002. "make install" will
1187automatically complain if this is not the case. This ensures that directories 1189automatically complain if this is not the case. This ensures that directories
1188written in /var/db/pkg are Administrators-group writeable. 1190written in /var/db/pkg are Administrators-group writeable.
1189 1191
1190The popular Interix binary packages from http://www.interopsystems.com/ use an 1192The popular Interix binary packages from http://www.interopsystems.com/ use an
1191older version of pkgsrc's pkg_* tools. Ideally, these should NOT be used in 1193older version of pkgsrc's pkg_* tools. Ideally, these should NOT be used in
1192conjunction with pkgsrc. If you choose to use them at the same time as the 1194conjunction with pkgsrc. If you choose to use them at the same time as the
1193pkgsrc packages, ensure that you use the proper pkg_* tools for each type of 1195pkgsrc packages, ensure that you use the proper pkg_* tools for each type of
1194binary package. 1196binary package.
1195 1197
1196The TERM setting used for DOS-type console windows (including those invoked by 1198The TERM setting used for DOS-type console windows (including those invoked by
1197the csh and ksh startup shortcuts) is "interix". Most systems don't have a 1199the csh and ksh startup shortcuts) is "interix". Most systems don't have a
1198termcap/terminfo entry for it, but the following .termcap entry provides 1200termcap/terminfo entry for it, but the following .termcap entry provides
1199adequate emulation in most cases: 1201adequate emulation in most cases:
1200 1202
1201interix:kP=\E[S:kN=\E[T:kH=\E[U:dc@:DC@:tc=pcansi: 1203interix:kP=\E[S:kN=\E[T:kH=\E[U:dc@:DC@:tc=pcansi:
1202 1204
1203 1205
12043.3.5.4. Limitations of the Interix platform 12063.3.5.4. Limitations of the Interix platform
1205 1207
1206Though Interix suffices as a familiar and flexible substitute for a full 1208Though Interix suffices as a familiar and flexible substitute for a full
1207Unix-like platform, it has some drawbacks that should be noted for those 1209Unix-like platform, it has some drawbacks that should be noted for those
1208desiring to make the most of Interix. 1210desiring to make the most of Interix.
1209 1211
1210 * X11: 1212 * X11:
1211 1213
1212 Interix comes with the standard set of X11R6 client libraries, and can run 1214 Interix comes with the standard set of X11R6 client libraries, and can run
1213 X11 based applications, but it does not come with an X server. Some options 1215 X11 based applications, but it does not come with an X server. Some options
1214 are StarNet X-Win32, Hummingbird Exceed (available in a trimmed version for 1216 are StarNet X-Win32, Hummingbird Exceed (available in a trimmed version for
1215 Interix from Interop Systems as the Interop X Server), and the free X11 1217 Interix from Interop Systems as the Interop X Server), and the free X11
1216 server included with Cygwin. 1218 server included with Cygwin.
1217 1219
1218 * X11 acceleration: 1220 * X11 acceleration:
1219 1221
1220 Because Interix runs in a completely different NT subsystem from Win32 1222 Because Interix runs in a completely different NT subsystem from Win32
1221 applications, it does not currently support various X11 protocol extensions 1223 applications, it does not currently support various X11 protocol extensions
1222 for acceleration (such as MIT-SHM or DGA). Most interactive applications to 1224 for acceleration (such as MIT-SHM or DGA). Most interactive applications to
1223 a local X server will run reasonably fast, but full motion video and other 1225 a local X server will run reasonably fast, but full motion video and other
1224 graphics intensive applications may require a faster-than-expected CPU. 1226 graphics intensive applications may require a faster-than-expected CPU.
1225 1227
1226 * Audio: 1228 * Audio:
1227 1229
1228 Interix has no native support for audio output. For audio support, pkgsrc 1230 Interix has no native support for audio output. For audio support, pkgsrc
1229 uses the esound client/server audio system on Interix. Unlike on most 1231 uses the esound client/server audio system on Interix. Unlike on most
1230 platforms, the audio/esound package does not contain the esd server 1232 platforms, the audio/esound package does not contain the esd server
1231 component. To output audio via an Interix host, the emulators/cygwin_esound 1233 component. To output audio via an Interix host, the emulators/cygwin_esound
1232 package must also be installed. 1234 package must also be installed.
1233 1235
1234 * CD/DVDs, USB, and SCSI: 1236 * CD/DVDs, USB, and SCSI:
1235 1237
1236 Direct device access is not currently supported in Interix, so it is not 1238 Direct device access is not currently supported in Interix, so it is not
1237 currently possible to access CD/DVD drives, USB devices, or SCSI devices 1239 currently possible to access CD/DVD drives, USB devices, or SCSI devices
1238 through non-filesystem means. Among other things, this makes it impossible 1240 through non-filesystem means. Among other things, this makes it impossible
1239 to use Interix directly for CD/DVD burning. 1241 to use Interix directly for CD/DVD burning.
1240 1242
1241 * Tape drives: 1243 * Tape drives:
1242 1244
1243 Due to the same limitations as for CD-ROMs and SCSI devices, tape drives 1245 Due to the same limitations as for CD-ROMs and SCSI devices, tape drives
1244 are also not directly accessible in Interix. However, support is in work to 1246 are also not directly accessible in Interix. However, support is in work to
1245 make tape drive access possible by using Cygwin as a bridge (similarly to 1247 make tape drive access possible by using Cygwin as a bridge (similarly to
1246 audio bridged via Cygwin's esound server). 1248 audio bridged via Cygwin's esound server).
1247 1249
12483.3.5.5. Known issues for pkgsrc on Interix 12503.3.5.5. Known issues for pkgsrc on Interix
1249 1251
1250It is not necessary, in general, to have a "root" user on the Windows system; 1252It is not necessary, in general, to have a "root" user on the Windows system;
1251any member of the local Administrators group will suffice. However, some 1253any member of the local Administrators group will suffice. However, some
1252packages currently assume that the user named "root" is the privileged user. To 1254packages currently assume that the user named "root" is the privileged user. To
1253accommodate these, you may create such a user; make sure it is in the local 1255accommodate these, you may create such a user; make sure it is in the local
1254group Administrators (or your language equivalent). 1256group Administrators (or your language equivalent).
1255 1257
1256pkg_add creates directories of mode 0755, not 0775, in $PKG_DBDIR. For the time 1258pkg_add creates directories of mode 0755, not 0775, in $PKG_DBDIR. For the time
1257being, install packages as the local Administrator (or your language 1259being, install packages as the local Administrator (or your language
1258equivalent), or run the following command after installing a package to work 1260equivalent), or run the following command after installing a package to work
1259around the issue: 1261around the issue:
1260 1262
1261# chmod -R g+w $PKG_DBDIR 1263# chmod -R g+w $PKG_DBDIR
1262 1264
1263 1265
12643.3.6. IRIX 12663.3.6. IRIX
1265 1267
1266You will need a working C compiler, either gcc or SGI's MIPS and MIPSpro 1268You will need a working C compiler, either gcc or SGI's MIPS and MIPSpro
1267compiler (cc/c89). Please set the CC environment variable according to your 1269compiler (cc/c89). Please set the CC environment variable according to your
1268preference. If you do not have a license for the MIPSpro compiler suite, you 1270preference. If you do not have a license for the MIPSpro compiler suite, you
1269can download a gcc tardist file from http://freeware.sgi.com/. 1271can download a gcc tardist file from http://freeware.sgi.com/.
1270 1272
1271Please note that you will need IRIX 6.5.17 or higher, as this is the earliest 1273Please note that you will need IRIX 6.5.17 or higher, as this is the earliest
1272version of IRIX providing support for if_indextoname(3), if_nametoindex(3), 1274version of IRIX providing support for if_indextoname(3), if_nametoindex(3),
1273etc. 1275etc.
1274 1276
1275At this point in time, pkgsrc only supports one ABI at a time. That is, you 1277At this point in time, pkgsrc only supports one ABI at a time. That is, you
1276cannot switch between the old 32-bit ABI, the new 32-bit ABI and the 64-bit 1278cannot switch between the old 32-bit ABI, the new 32-bit ABI and the 64-bit
1277ABI. If you start out using "abi=n32", that's what all your packages will be 1279ABI. If you start out using "abi=n32", that's what all your packages will be
1278built with. 1280built with.
1279 1281
1280Therefore, please make sure that you have no conflicting CFLAGS in your 1282Therefore, please make sure that you have no conflicting CFLAGS in your
1281environment or the mk.conf. Particularly, make sure that you do not try to link 1283environment or the mk.conf. Particularly, make sure that you do not try to link
1282n32 object files with lib64 or vice versa. Check your /etc/compiler.defaults! 1284n32 object files with lib64 or vice versa. Check your /etc/compiler.defaults!
1283 1285
1284If you have the actual pkgsrc tree mounted via NFS from a different host, 1286If you have the actual pkgsrc tree mounted via NFS from a different host,
1285please make sure to set WRKOBJDIR to a local directory, as it appears that IRIX 1287please make sure to set WRKOBJDIR to a local directory, as it appears that IRIX
1286linker occasionally runs into issues when trying to link over a network-mounted 1288linker occasionally runs into issues when trying to link over a network-mounted
1287file system. 1289file system.
1288 1290
1289The bootstrapping process should set all the right options for programs such as 1291The bootstrapping process should set all the right options for programs such as
1290imake(1), but you may want to set some options depending on your local setup. 1292imake(1), but you may want to set some options depending on your local setup.
1291Please see pkgsrc/mk/defaults/mk.conf and, of course, your compiler's man pages 1293Please see pkgsrc/mk/defaults/mk.conf and, of course, your compiler's man pages
1292for details. 1294for details.
1293 1295
1294If you are using SGI's MIPSPro compiler, please set 1296If you are using SGI's MIPSPro compiler, please set
1295 1297
1296PKGSRC_COMPILER= mipspro 1298PKGSRC_COMPILER= mipspro
1297 1299
1298 1300
1299in mk.conf. Otherwise, pkgsrc will assume you are using gcc and may end up 1301in mk.conf. Otherwise, pkgsrc will assume you are using gcc and may end up
1300passing invalid flags to the compiler. Note that bootstrap should create an 1302passing invalid flags to the compiler. Note that bootstrap should create an
1301appropriate mk.conf.example by default. 1303appropriate mk.conf.example by default.
1302 1304
1303If you have both the MIPSPro compiler chain installed as well as gcc, but want 1305If you have both the MIPSPro compiler chain installed as well as gcc, but want
1304to make sure that MIPSPro is used, please set your PATH to not include the 1306to make sure that MIPSPro is used, please set your PATH to not include the
1305location of gcc (often /usr/freeware/bin), and (important) pass the 1307location of gcc (often /usr/freeware/bin), and (important) pass the
1306'--preserve-path' flag. 1308'--preserve-path' flag.
1307 1309
13083.3.7. Linux 13103.3.7. Linux
1309 1311
1310Some versions of Linux (for example Debian GNU/Linux) need either libtermcap or 1312Some versions of Linux (for example Debian GNU/Linux) need either libtermcap or
1311libcurses (libncurses). Installing the distributions libncurses-dev package (or 1313libcurses (libncurses). Installing the distributions libncurses-dev package (or
1312equivalent) should fix the problem. 1314equivalent) should fix the problem.
1313 1315
1314pkgsrc supports both gcc (GNU Compiler Collection) and icc (Intel C++ 1316pkgsrc supports both gcc (GNU Compiler Collection) and icc (Intel C++
1315Compiler). gcc is the default. icc 8.0 and 8.1 on i386 have been tested. 1317Compiler). gcc is the default. icc 8.0 and 8.1 on i386 have been tested.
1316 1318
1317To bootstrap using icc, assuming the default icc installation directory: 1319To bootstrap using icc, assuming the default icc installation directory:
1318 1320
1319env ICCBASE=/opt/intel/cc/10.1.008 ./bootstrap --compiler=icc 1321env ICCBASE=/opt/intel/cc/10.1.008 ./bootstrap --compiler=icc
1320 1322
1321 1323
1322Note 1324Note
1323 1325
1324For icc 8.0 you must add `LDFLAGS=-static-libcxa' to this. 1326For icc 8.0 you must add `LDFLAGS=-static-libcxa' to this.
1325 1327
1326For icc 8.1 you must add `LDFLAGS=-i-static' instead. 1328For icc 8.1 you must add `LDFLAGS=-i-static' instead.
1327 1329
1328For icc 10.1 neither of these appears to be necessary. 1330For icc 10.1 neither of these appears to be necessary.
1329 1331
1330Use a value for ICCBASE that corresponds to the directory where icc is 1332Use a value for ICCBASE that corresponds to the directory where icc is
1331installed. After bootstrapping, set ICCBASE in mk.conf: 1333installed. After bootstrapping, set ICCBASE in mk.conf:
1332 1334
1333ICCBASE= /opt/intel/cc/10.1.008 1335ICCBASE= /opt/intel/cc/10.1.008
1334 1336
1335 1337
1336The pkgsrc default for ICCBASE is /opt/intel_cc_80. This is the default install 1338The pkgsrc default for ICCBASE is /opt/intel_cc_80. This is the default install
1337directory for icc 8.0. If you are using a more recent version, be sure to set 1339directory for icc 8.0. If you are using a more recent version, be sure to set
1338the correct path explicitly. 1340the correct path explicitly.
1339 1341
1340pkgsrc uses the static linking method of the runtime libraries provided by icc, 1342pkgsrc uses the static linking method of the runtime libraries provided by icc,
1341so binaries can be run on other systems which do not have the shared libraries 1343so binaries can be run on other systems which do not have the shared libraries
1342installed. 1344installed.
1343 1345
1344Libtool, however, extracts a list of libraries from the ld(1) command run when 1346Libtool, however, extracts a list of libraries from the ld(1) command run when
1345linking a C++ shared library and records it, throwing away the -Bstatic and 1347linking a C++ shared library and records it, throwing away the -Bstatic and
1346-Bdynamic options interspersed between the libraries. This means that 1348-Bdynamic options interspersed between the libraries. This means that
1347libtool-linked C++ shared libraries will have a runtime dependency on the icc 1349libtool-linked C++ shared libraries will have a runtime dependency on the icc
1348libraries until this is fixed in libtool. 1350libraries until this is fixed in libtool.
1349 1351
13503.3.8. MirBSD 13523.3.8. MirBSD
1351 1353
1352pkgsrc has been tested on MirBSD #10-current (2011 and newer). Older versions 1354pkgsrc has been tested on MirBSD #10-current (2011 and newer). Older versions
1353might also work. Releases before #10 are not supported. 1355might also work. Releases before #10 are not supported.
1354 1356
1355The package tools of the (older) native ports tree, MirPorts, have the same 1357The package tools of the (older) native ports tree, MirPorts, have the same
1356names as the ones used by pkgsrc. Care should be taken that the right tools are 1358names as the ones used by pkgsrc. Care should be taken that the right tools are
1357used. When installing packages from source, use the bmake command for pkgsrc 1359used. When installing packages from source, use the bmake command for pkgsrc
1358and mmake for MirPorts. 1360and mmake for MirPorts.
1359 1361
1360pkgsrc and MirPorts use the same location for the package database, /var/db/ 1362pkgsrc and MirPorts use the same location for the package database, /var/db/
1361pkg. It is strongly recommended to use /usr/pkg/db instead, so that the pkgsrc 1363pkg. It is strongly recommended to use /usr/pkg/db instead, so that the pkgsrc
1362tree is self-contained. This is also the default setting used in the binary 1364tree is self-contained. This is also the default setting used in the binary
1363package builds. 1365package builds.
1364 1366
1365Binary packages for MirBSD/i386 can be found on the pkgsrc ftp server. The 1367Binary packages for MirBSD/i386 can be found on the pkgsrc ftp server. The
1366bootstrap kit there already contains the pkgin package manager. See the pkgsrc 1368bootstrap kit there already contains the pkgin package manager. See the pkgsrc
1367on MirOS page for more details. 1369on MirOS page for more details.
1368 1370
13693.3.9. OpenBSD 13713.3.9. OpenBSD
1370 1372
1371OpenBSD 5.1 has been tested and supported, other versions may work. 1373OpenBSD 5.1 has been tested and supported, other versions may work.
1372 1374
1373Care should be taken so that the tools that this kit installs do not conflict 1375Care should be taken so that the tools that this kit installs do not conflict
1374with the OpenBSD userland tools. There are several steps: 1376with the OpenBSD userland tools. There are several steps:
1375 1377
1376 1. OpenBSD stores its ports pkg database in /var/db/pkg. It is therefore 1378 1. OpenBSD stores its ports pkg database in /var/db/pkg. It is therefore
1377 recommended that you choose a different location (e.g. /usr/pkgdb) by using 1379 recommended that you choose a different location (e.g. /usr/pkgdb) by using
1378 the --pkgdbdir option to the bootstrap script. 1380 the --pkgdbdir option to the bootstrap script.
1379 1381
1380 2. If you do not intend to use the OpenBSD ports tools, it's probably a good 1382 2. If you do not intend to use the OpenBSD ports tools, it's probably a good
1381 idea to move them out of the way to avoid confusion, e.g. 1383 idea to move them out of the way to avoid confusion, e.g.
1382 1384
1383 # cd /usr/sbin 1385 # cd /usr/sbin
1384 # mv pkg_add pkg_add.orig 1386 # mv pkg_add pkg_add.orig
1385 # mv pkg_create pkg_create.orig 1387 # mv pkg_create pkg_create.orig
1386 # mv pkg_delete pkg_delete.orig 1388 # mv pkg_delete pkg_delete.orig
1387 # mv pkg_info pkg_info.orig 1389 # mv pkg_info pkg_info.orig
1388 1390
1389 1391
1390 3. An example mk.conf file will be placed in /etc/mk.conf.example file when 1392 3. An example mk.conf file will be placed in /etc/mk.conf.example file when
1391 you use the bootstrap script. OpenBSD's make program uses mk.conf as well. 1393 you use the bootstrap script. OpenBSD's make program uses mk.conf as well.
1392 You can work around this by enclosing all the pkgsrc-specific parts of the 1394 You can work around this by enclosing all the pkgsrc-specific parts of the
1393 file with: 1395 file with:
1394 1396
1395 .ifdef BSD_PKG_MK 1397 .ifdef BSD_PKG_MK
1396 # pkgsrc stuff, e.g. insert defaults/mk.conf or similar here 1398 # pkgsrc stuff, e.g. insert defaults/mk.conf or similar here
1397 .else 1399 .else
1398 # OpenBSD stuff 1400 # OpenBSD stuff
1399 .endif 1401 .endif
1400 1402
1401 1403
14023.3.10. Solaris 14043.3.10. Solaris
1403 1405
1404Solaris 2.6 through 10 are supported on both x86 and sparc. You will need a 1406Solaris 2.6 through 10 are supported on both x86 and sparc. You will need a
1405working C compiler. Both gcc 4.5.3 and Sun WorkShop 5 have been tested. 1407working C compiler. Both gcc 4.5.3 and Sun WorkShop 5 have been tested.
1406 1408
1407The following packages are required on Solaris 8 for the bootstrap process and 1409The following packages are required on Solaris 8 for the bootstrap process and
1408to build packages. 1410to build packages.
1409 1411
1410 * SUNWsprot 1412 * SUNWsprot
1411 1413
1412 * SUNWarc 1414 * SUNWarc
1413 1415
1414 * SUNWbtool 1416 * SUNWbtool
1415 1417
1416 * SUNWtoo 1418 * SUNWtoo
1417 1419
1418 * SUNWlibm 1420 * SUNWlibm
1419 1421
1420Please note that the use of GNU binutils on Solaris is not supported, as of 1422Please note that the use of GNU binutils on Solaris is not supported, as of
1421June 2006. 1423June 2006.
1422 1424
1423Whichever compiler you use, please ensure the compiler tools and your $prefix 1425Whichever compiler you use, please ensure the compiler tools and your $prefix
1424are in your PATH. This includes /usr/ccs/{bin,lib} and e.g. /usr/pkg/ 1426are in your PATH. This includes /usr/ccs/{bin,lib} and e.g. /usr/pkg/
1425{bin,sbin}. 1427{bin,sbin}.
1426 1428
14273.3.10.1. If you are using gcc 14293.3.10.1. If you are using gcc
1428 1430
1429It makes life much simpler if you only use the same gcc consistently for 1431It makes life much simpler if you only use the same gcc consistently for
1430building all packages. 1432building all packages.
1431 1433
1432It is recommended that an external gcc be used only for bootstrapping, then 1434It is recommended that an external gcc be used only for bootstrapping, then
1433either build gcc from lang/gcc46 or install a binary gcc package, then remove 1435either build gcc from lang/gcc46 or install a binary gcc package, then remove
1434gcc used during bootstrapping. 1436gcc used during bootstrapping.
1435 1437
1436Binary packages of gcc can be found through http://www.sunfreeware.com/. 1438Binary packages of gcc can be found through http://www.sunfreeware.com/.
1437 1439
14383.3.10.2. If you are using Sun WorkShop 14403.3.10.2. If you are using Sun WorkShop
1439 1441
1440You will need at least the following packages installed (from WorkShop 5.0) 1442You will need at least the following packages installed (from WorkShop 5.0)
1441 1443
1442 * SPROcc - Sun WorkShop Compiler C 5.0 1444 * SPROcc - Sun WorkShop Compiler C 5.0
1443 1445
1444 * SPROcpl - Sun WorkShop Compiler C++ 5.0 1446 * SPROcpl - Sun WorkShop Compiler C++ 5.0
1445 1447
1446 * SPROild - Sun WorkShop Incremental Linker 1448 * SPROild - Sun WorkShop Incremental Linker
1447 1449
1448 * SPROlang - Sun WorkShop Compilers common components 1450 * SPROlang - Sun WorkShop Compilers common components
1449 1451
1450You should set the following variables in your mk.conf file: 1452You should set the following variables in your mk.conf file:
1451 1453
1452CC= cc 1454CC= cc
1453CXX= CC 1455CXX= CC
1454CPP= cc -E 1456CPP= cc -E
1455CXXCPP= CC -E 1457CXXCPP= CC -E
1456 1458
1457Note 1459Note
1458 1460
1459The CPP setting might break some packages that use the C preprocessor for 1461The CPP setting might break some packages that use the C preprocessor for
1460processing things other than C source code. 1462processing things other than C source code.
1461 1463
14623.3.10.3. Building 64-bit binaries with SunPro 14643.3.10.3. Building 64-bit binaries with SunPro
1463 1465
1464To build 64-bit packages, you just need to have the following lines in your 1466To build 64-bit packages, you just need to have the following lines in your
1465mk.conf file: 1467mk.conf file:
1466 1468
1467PKGSRC_COMPILER= sunpro 1469PKGSRC_COMPILER= sunpro
1468ABI= 64 1470ABI= 64
1469 1471
1470Note 1472Note
1471 1473
1472This setting has been tested for the SPARC architecture. Intel and AMD machines 1474This setting has been tested for the SPARC architecture. Intel and AMD machines
1473need some more work. 1475need some more work.
1474 1476
14753.3.10.4. Common problems 14773.3.10.4. Common problems
1476 1478
1477Sometimes, when using libtool, /bin/ksh crashes with a segmentation fault. The 1479Sometimes, when using libtool, /bin/ksh crashes with a segmentation fault. The
1478workaround is to use another shell for the configure scripts, for example by 1480workaround is to use another shell for the configure scripts, for example by
1479installing shells/bash and adding the following lines to your mk.conf: 1481installing shells/bash and adding the following lines to your mk.conf:
1480 1482
1481CONFIG_SHELL= ${LOCALBASE}/bin/bash 1483CONFIG_SHELL= ${LOCALBASE}/bin/bash
1482WRAPPER_SHELL= ${LOCALBASE}/bin/bash 1484WRAPPER_SHELL= ${LOCALBASE}/bin/bash
1483 1485
1484 1486
1485Then, rebuild the devel/libtool-base package. 1487Then, rebuild the devel/libtool-base package.
1486 1488
1487Chapter 4. Using pkgsrc 1489Chapter 4. Using pkgsrc
1488 1490
1489Table of Contents 1491Table of Contents
1490 1492
14914.1. Using binary packages 14934.1. Using binary packages
1492 1494
1493 4.1.1. Finding binary packages 1495 4.1.1. Finding binary packages
1494 4.1.2. Installing binary packages 1496 4.1.2. Installing binary packages
1495 4.1.3. Deinstalling packages 1497 4.1.3. Deinstalling packages
1496 4.1.4. Getting information about installed packages 1498 4.1.4. Getting information about installed packages
1497 4.1.5. Checking for security vulnerabilities in installed packages 1499 4.1.5. Checking for security vulnerabilities in installed packages
1498 4.1.6. Finding if newer versions of your installed packages are in pkgsrc 1500 4.1.6. Finding if newer versions of your installed packages are in pkgsrc
1499 4.1.7. Other administrative functions 1501 4.1.7. Other administrative functions
1500 4.1.8. A word of warning 1502 4.1.8. A word of warning
1501 1503
15024.2. Building packages from source 15044.2. Building packages from source
1503 1505
1504 4.2.1. Requirements 1506 4.2.1. Requirements
1505 4.2.2. Fetching distfiles 1507 4.2.2. Fetching distfiles
1506 4.2.3. How to build and install 1508 4.2.3. How to build and install
1507 1509
1508Basically, there are two ways of using pkgsrc. The first is to only install the 1510Basically, there are two ways of using pkgsrc. The first is to only install the
1509package tools and to use binary packages that someone else has prepared. This 1511package tools and to use binary packages that someone else has prepared. This
1510is the "pkg" in pkgsrc. The second way is to install the "src" of pkgsrc, too. 1512is the "pkg" in pkgsrc. The second way is to install the "src" of pkgsrc, too.
1511Then you are able to build your own packages, and you can still use binary 1513Then you are able to build your own packages, and you can still use binary
1512packages from someone else. 1514packages from someone else.
1513 1515
15144.1. Using binary packages 15164.1. Using binary packages
1515 1517
1516On the ftp.NetBSD.org server and its mirrors, there are collections of binary 1518On the ftp.NetBSD.org server and its mirrors, there are collections of binary
1517packages, ready to be installed. These binary packages have been built using 1519packages, ready to be installed. These binary packages have been built using
1518the default settings for the directories, that is: 1520the default settings for the directories, that is:
1519 1521
1520 * /usr/pkg for LOCALBASE, where most of the files are installed, 1522 * /usr/pkg for LOCALBASE, where most of the files are installed,
1521 1523
1522 * /usr/pkg/etc for configuration files, 1524 * /usr/pkg/etc for configuration files,
1523 1525
1524 * /var for VARBASE, where those files are installed that may change after 1526 * /var for VARBASE, where those files are installed that may change after
1525 installation. 1527 installation.
1526 1528
1527If you cannot use these directories for whatever reasons (maybe because you're 1529If you cannot use these directories for whatever reasons (maybe because you're
1528not root), you cannot use these binary packages, but have to build the packages 1530not root), you cannot use these binary packages, but have to build the packages
1529yourself, which is explained in Section 3.2, "Bootstrapping pkgsrc". 1531yourself, which is explained in Section 3.2, "Bootstrapping pkgsrc".
1530 1532
15314.1.1. Finding binary packages 15334.1.1. Finding binary packages
1532 1534
1533To install binary packages, you first need to know from where to get them. The 1535To install binary packages, you first need to know from where to get them. The
1534first place where you should look is on the main pkgsrc FTP server in the 1536first place where you should look is on the main pkgsrc FTP server in the
1535directory /pub/pkgsrc/packages. 1537directory /pub/pkgsrc/packages.
1536 1538
1537This directory contains binary packages for multiple platforms. First, select 1539This directory contains binary packages for multiple platforms. First, select
1538your operating system. (Ignore the directories with version numbers attached to 1540your operating system. (Ignore the directories with version numbers attached to
1539it, they just exist for legacy reasons.) Then, select your hardware 1541it, they just exist for legacy reasons.) Then, select your hardware
1540architecture, and in the third step, the OS version and the "version" of 1542architecture, and in the third step, the OS version and the "version" of
1541pkgsrc. 1543pkgsrc.
1542 1544
1543In this directory, you often find a file called bootstrap.tar.gz which contains 1545In this directory, you often find a file called bootstrap.tar.gz which contains
1544the package management tools. If the file is missing, it is likely that your 1546the package management tools. If the file is missing, it is likely that your
1545operating system already provides those tools. Download the file and extract it 1547operating system already provides those tools. Download the file and extract it
1546in the / directory. It will create the directories /usr/pkg (containing the 1548in the / directory. It will create the directories /usr/pkg (containing the
1547tools for managing binary packages) and /var/db/pkg (the database of installed 1549tools for managing binary packages) and /var/db/pkg (the database of installed
1548packages). 1550packages).
1549 1551
15504.1.2. Installing binary packages 15524.1.2. Installing binary packages
1551 1553
1552In the directory from the last section, there is a subdirectory called All, 1554In the directory from the last section, there is a subdirectory called All,
1553which contains all the binary packages that are available for the platform, 1555which contains all the binary packages that are available for the platform,
1554excluding those that may not be distributed via FTP or CDROM (depending on 1556excluding those that may not be distributed via FTP or CDROM (depending on
1555which medium you are using). 1557which medium you are using).
1556 1558
1557To install packages directly from an FTP or HTTP server, run the following 1559To install packages directly from an FTP or HTTP server, run the following
1558commands in a Bourne-compatible shell (be sure to su to root first): 1560commands in a Bourne-compatible shell (be sure to su to root first):
1559 1561
1560# PATH="/usr/pkg/sbin:$PATH" 1562# PATH="/usr/pkg/sbin:$PATH"
1561# PKG_PATH="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/OPSYS/ARCH/VERSIONS/All" 1563# PKG_PATH="ftp://ftp.NetBSD.org/pub/pkgsrc/packages/OPSYS/ARCH/VERSIONS/All"
1562# export PATH PKG_PATH 1564# export PATH PKG_PATH
1563 1565
1564Instead of URLs, you can also use local paths, for example if you are 1566Instead of URLs, you can also use local paths, for example if you are
1565installing from a set of CDROMs, DVDs or an NFS-mounted repository. If you want 1567installing from a set of CDROMs, DVDs or an NFS-mounted repository. If you want
1566to install packages from multiple sources, you can separate them by a semicolon 1568to install packages from multiple sources, you can separate them by a semicolon
1567in PKG_PATH. 1569in PKG_PATH.
1568 1570
1569After these preparations, installing a package is very easy: 1571After these preparations, installing a package is very easy:
1570 1572
1571# pkg_add openoffice2 1573# pkg_add openoffice2
1572# pkg_add kde-3.5.7 1574# pkg_add kde-3.5.7
1573# pkg_add ap2-php5-* 1575# pkg_add ap2-php5-*
1574 1576
1575Note that any prerequisite packages needed to run the package in question will 1577Note that any prerequisite packages needed to run the package in question will
1576be installed, too, assuming they are present where you install from. 1578be installed, too, assuming they are present where you install from.
1577 1579
1578Adding packages might install vulnerable packages. Thus you should run  1580Adding packages might install vulnerable packages. Thus you should run
1579pkg_admin audit regularly, especially after installing new packages, and verify 1581pkg_admin audit regularly, especially after installing new packages, and verify
1580that the vulnerabilities are acceptable for your configuration. 1582that the vulnerabilities are acceptable for your configuration.
1581 1583
1582After you've installed packages, be sure to have /usr/pkg/bin and /usr/pkg/sbin 1584After you've installed packages, be sure to have /usr/pkg/bin and /usr/pkg/sbin
1583in your PATH so you can actually start the just installed program. 1585in your PATH so you can actually start the just installed program.
1584 1586
15854.1.3. Deinstalling packages 15874.1.3. Deinstalling packages
1586 1588
1587To deinstall a package, it does not matter whether it was installed from source 1589To deinstall a package, it does not matter whether it was installed from source
1588code or from a binary package. The pkg_delete command does not know it anyway. 1590code or from a binary package. The pkg_delete command does not know it anyway.
1589To delete a package, you can just run pkg_delete package-name. The package name 1591To delete a package, you can just run pkg_delete package-name. The package name
1590can be given with or without version number. Wildcards can also be used to 1592can be given with or without version number. Wildcards can also be used to
1591deinstall a set of packages, for example *emacs*. Be sure to include them in 1593deinstall a set of packages, for example *emacs*. Be sure to include them in
1592quotes, so that the shell does not expand them before pkg_delete sees them. 1594quotes, so that the shell does not expand them before pkg_delete sees them.
1593 1595
1594The -r option is very powerful: it removes all the packages that require the 1596The -r option is very powerful: it removes all the packages that require the
1595package in question and then removes the package itself. For example: 1597package in question and then removes the package itself. For example:
1596 1598
1597# pkg_delete -r jpeg 1599# pkg_delete -r jpeg
1598 1600
1599 1601
1600will remove jpeg and all the packages that used it; this allows upgrading the 1602will remove jpeg and all the packages that used it; this allows upgrading the
1601jpeg package. 1603jpeg package.
1602 1604
16034.1.4. Getting information about installed packages 16054.1.4. Getting information about installed packages
1604 1606
1605The pkg_info shows information about installed packages or binary package 1607The pkg_info shows information about installed packages or binary package
1606files. 1608files.
1607 1609
16084.1.5. Checking for security vulnerabilities in installed packages 16104.1.5. Checking for security vulnerabilities in installed packages
1609 1611
1610The NetBSD Security-Officer and Packages Groups maintain a list of known 1612The NetBSD Security-Officer and Packages Groups maintain a list of known
1611security vulnerabilities to packages which are (or have been) included in 1613security vulnerabilities to packages which are (or have been) included in
1612pkgsrc. The list is available from the NetBSD FTP site at ftp://ftp.NetBSD.org/ 1614pkgsrc. The list is available from the NetBSD FTP site at ftp://ftp.NetBSD.org/
1613pub/pkgsrc/distfiles/vulnerabilities. 1615pub/pkgsrc/distfiles/vulnerabilities.
1614 1616
1615Through pkg_admin fetch-pkg-vulnerabilities, this list can be downloaded 1617Through pkg_admin fetch-pkg-vulnerabilities, this list can be downloaded
1616automatically, and a security audit of all packages installed on a system can 1618automatically, and a security audit of all packages installed on a system can
1617take place. 1619take place.
1618 1620
1619There are two components to auditing. The first step, pkg_admin 1621There are two components to auditing. The first step, pkg_admin
1620fetch-pkg-vulnerabilities, is for downloading the list of vulnerabilities from 1622fetch-pkg-vulnerabilities, is for downloading the list of vulnerabilities from
1621the NetBSD FTP site. The second step, pkg_admin audit, checks to see if any of 1623the NetBSD FTP site. The second step, pkg_admin audit, checks to see if any of
1622your installed packages are vulnerable. If a package is vulnerable, you will 1624your installed packages are vulnerable. If a package is vulnerable, you will
1623see output similar to the following: 1625see output similar to the following:
1624 1626
1625Package samba-2.0.9 has a local-root-shell vulnerability, see 1627Package samba-2.0.9 has a local-root-shell vulnerability, see
1626 http://www.samba.org/samba/whatsnew/macroexploit.html 1628 http://www.samba.org/samba/whatsnew/macroexploit.html
1627 1629
1628You may wish to have the vulnerabilities file downloaded daily so that it 1630You may wish to have the vulnerabilities file downloaded daily so that it
1629remains current. This may be done by adding an appropriate entry to the root 1631remains current. This may be done by adding an appropriate entry to the root
1630users crontab(5) entry. For example the entry 1632users crontab(5) entry. For example the entry
1631 1633
1632# download vulnerabilities file 1634# download vulnerabilities file
16330 3 * * * /usr/sbin/pkg_admin fetch-pkg-vulnerabilities >/dev/null 2>&1 16350 3 * * * /usr/sbin/pkg_admin fetch-pkg-vulnerabilities >/dev/null 2>&1
1634 1636
1635 1637
1636will update the vulnerability list every day at 3AM. You may wish to do this 1638will update the vulnerability list every day at 3AM. You may wish to do this
1637more often than once a day. In addition, you may wish to run the package audit 1639more often than once a day. In addition, you may wish to run the package audit
1638from the daily security script. This may be accomplished by adding the 1640from the daily security script. This may be accomplished by adding the
1639following line to /etc/security.local: 1641following line to /etc/security.local:
1640 1642
1641/usr/sbin/pkg_admin audit 1643/usr/sbin/pkg_admin audit
1642 1644
1643 1645
16444.1.6. Finding if newer versions of your installed packages are in pkgsrc 16464.1.6. Finding if newer versions of your installed packages are in pkgsrc
1645 1647
1646Install pkgtools/lintpkgsrc and run lintpkgsrc with the "-i" argument to check 1648Install pkgtools/lintpkgsrc and run lintpkgsrc with the "-i" argument to check
1647if your packages are up-to-date, e.g. 1649if your packages are up-to-date, e.g.
1648 1650
1649% lintpkgsrc -i 1651% lintpkgsrc -i
1650... 1652...
1651Version mismatch: 'tcsh' 6.09.00 vs 6.10.00 1653Version mismatch: 'tcsh' 6.09.00 vs 6.10.00
1652 1654
1653 1655
1654You can then use make update to update the package on your system and rebuild 1656You can then use make update to update the package on your system and rebuild
1655any dependencies. 1657any dependencies.
1656 1658
16574.1.7. Other administrative functions 16594.1.7. Other administrative functions
1658 1660
1659The pkg_admin executes various administrative functions on the package system. 1661The pkg_admin executes various administrative functions on the package system.
1660 1662
16614.1.8. A word of warning 16634.1.8. A word of warning
1662 1664
1663Please pay very careful attention to the warnings expressed in the pkg_add(1) 1665Please pay very careful attention to the warnings expressed in the pkg_add(1)
1664manual page about the inherent dangers of installing binary packages which you 1666manual page about the inherent dangers of installing binary packages which you
1665did not create yourself, and the security holes that can be introduced onto 1667did not create yourself, and the security holes that can be introduced onto
1666your system by indiscriminate adding of such files. 1668your system by indiscriminate adding of such files.
1667 1669
1668The same warning of course applies to every package you install from source 1670The same warning of course applies to every package you install from source
1669when you haven't completely read and understood the source code of the package, 1671when you haven't completely read and understood the source code of the package,
1670the compiler that is used to build the package and all the other tools that are 1672the compiler that is used to build the package and all the other tools that are
1671involved. 1673involved.
1672 1674
16734.2. Building packages from source 16754.2. Building packages from source
1674 1676
1675After obtaining pkgsrc, the pkgsrc directory now contains a set of packages, 1677After obtaining pkgsrc, the pkgsrc directory now contains a set of packages,
1676organized into categories. You can browse the online index of packages, or run  1678organized into categories. You can browse the online index of packages, or run
1677make readme from the pkgsrc directory to build local README.html files for all 1679make readme from the pkgsrc directory to build local README.html files for all
1678packages, viewable with any web browser such as www/lynx or www/firefox. 1680packages, viewable with any web browser such as www/lynx or www/firefox.
1679 1681
1680The default prefix for installed packages is /usr/pkg. If you wish to change 1682The default prefix for installed packages is /usr/pkg. If you wish to change
1681this, you should do so by setting LOCALBASE in mk.conf. You should not try to 1683this, you should do so by setting LOCALBASE in mk.conf. You should not try to
1682use multiple different LOCALBASE definitions on the same system (inside a 1684use multiple different LOCALBASE definitions on the same system (inside a
1683chroot is an exception). 1685chroot is an exception).
1684 1686
1685The rest of this chapter assumes that the package is already in pkgsrc. If it 1687The rest of this chapter assumes that the package is already in pkgsrc. If it
1686is not, see Part II, "The pkgsrc developer's guide" for instructions how to 1688is not, see Part II, "The pkgsrc developer's guide" for instructions how to
1687create your own packages. 1689create your own packages.
1688 1690
16894.2.1. Requirements 16914.2.1. Requirements
1690 1692
1691To build packages from source, you need a working C compiler. On NetBSD, you 1693To build packages from source, you need a working C compiler. On NetBSD, you
1692need to install the "comp" and the "text" distribution sets. If you want to 1694need to install the "comp" and the "text" distribution sets. If you want to
1693build X11-related packages, the "xbase" and "xcomp" distribution sets are 1695build X11-related packages, the "xbase" and "xcomp" distribution sets are
1694required, too. 1696required, too.
1695 1697
16964.2.2. Fetching distfiles 16984.2.2. Fetching distfiles
1697 1699
1698The first step for building a package is downloading the distfiles (i.e. the 1700The first step for building a package is downloading the distfiles (i.e. the
1699unmodified source). If they have not yet been downloaded, pkgsrc will fetch 1701unmodified source). If they have not yet been downloaded, pkgsrc will fetch
1700them automatically. 1702them automatically.
1701 1703
1702If you have all files that you need in the distfiles directory, you don't need 1704If you have all files that you need in the distfiles directory, you don't need
1703to connect. If the distfiles are on CD-ROM, you can mount the CD-ROM on /cdrom 1705to connect. If the distfiles are on CD-ROM, you can mount the CD-ROM on /cdrom
1704and add: 1706and add:
1705 1707
1706DISTDIR=/cdrom/pkgsrc/distfiles 1708DISTDIR=/cdrom/pkgsrc/distfiles
1707 1709
1708to your mk.conf. 1710to your mk.conf.
1709 1711
1710By default a list of distribution sites will be randomly intermixed to prevent 1712By default a list of distribution sites will be randomly intermixed to prevent
1711huge load on servers which holding popular packages (for example, 1713huge load on servers which holding popular packages (for example,
1712SourceForge.net mirrors). Thus, every time when you need to fetch yet another 1714SourceForge.net mirrors). Thus, every time when you need to fetch yet another
1713distfile all the mirrors will be tried in new (random) order. You can turn this 1715distfile all the mirrors will be tried in new (random) order. You can turn this
1714feature off by setting MASTER_SORT_RANDOM=NO (for PKG_DEVELOPERs it's already 1716feature off by setting MASTER_SORT_RANDOM=NO (for PKG_DEVELOPERs it's already
1715disabled). 1717disabled).
1716 1718
1717You can overwrite some of the major distribution sites to fit to sites that are 1719You can overwrite some of the major distribution sites to fit to sites that are
1718close to your own. By setting one or two variables you can modify the order in 1720close to your own. By setting one or two variables you can modify the order in
1719which the master sites are accessed. MASTER_SORT contains a whitespace 1721which the master sites are accessed. MASTER_SORT contains a whitespace
1720delimited list of domain suffixes. MASTER_SORT_REGEX is even more flexible, it 1722delimited list of domain suffixes. MASTER_SORT_REGEX is even more flexible, it
1721contains a whitespace delimited list of regular expressions. It has higher 1723contains a whitespace delimited list of regular expressions. It has higher
1722priority than MASTER_SORT. Have a look at pkgsrc/mk/defaults/mk.conf to find 1724priority than MASTER_SORT. Have a look at pkgsrc/mk/defaults/mk.conf to find
1723some examples. This may save some of your bandwidth and time. 1725some examples. This may save some of your bandwidth and time.
1724 1726
1725You can change these settings either in your shell's environment, or, if you 1727You can change these settings either in your shell's environment, or, if you
1726want to keep the settings, by editing the mk.conf file, and adding the 1728want to keep the settings, by editing the mk.conf file, and adding the
1727definitions there. 1729definitions there.
1728 1730
1729If a package depends on many other packages (such as meta-pkgs/kde3), the build 1731If a package depends on many other packages (such as meta-pkgs/kde3), the build
1730process may alternate between periods of downloading source, and compiling. To 1732process may alternate between periods of downloading source, and compiling. To
1731ensure you have all the source downloaded initially you can run the command: 1733ensure you have all the source downloaded initially you can run the command:
1732 1734
1733% make fetch-list | sh 1735% make fetch-list | sh
1734 1736
1735which will output and run a set of shell commands to fetch the necessary files 1737which will output and run a set of shell commands to fetch the necessary files
1736into the distfiles directory. You can also choose to download the files 1738into the distfiles directory. You can also choose to download the files
1737manually. 1739manually.
1738 1740
17394.2.3. How to build and install 17414.2.3. How to build and install
1740 1742
1741Once the software has downloaded, any patches will be applied, then it will be 1743Once the software has downloaded, any patches will be applied, then it will be
1742compiled for you. This may take some time depending on your computer, and how 1744compiled for you. This may take some time depending on your computer, and how
1743many other packages the software depends on and their compile time. 1745many other packages the software depends on and their compile time.
1744 1746
1745Note 1747Note
1746 1748
1747If using bootstrap or pkgsrc on a non-NetBSD system, use the pkgsrc bmake 1749If using bootstrap or pkgsrc on a non-NetBSD system, use the pkgsrc bmake
1748command instead of "make" in the examples in this guide. 1750command instead of "make" in the examples in this guide.
1749 1751
1750For example, type 1752For example, type
1751 1753
1752% cd misc/figlet 1754% cd misc/figlet
1753% make 1755% make
1754 1756
1755 1757
1756at the shell prompt to build the various components of the package. 1758at the shell prompt to build the various components of the package.
1757 1759
1758The next stage is to actually install the newly compiled program onto your 1760The next stage is to actually install the newly compiled program onto your
1759system. Do this by entering: 1761system. Do this by entering:
1760 1762
1761% make install 1763% make install
1762 1764
1763 1765
1764while you are still in the directory for whatever package you are installing. 1766while you are still in the directory for whatever package you are installing.
1765 1767
1766Installing the package on your system may require you to be root. However, 1768Installing the package on your system may require you to be root. However,
1767pkgsrc has a just-in-time-su feature, which allows you to only become root for 1769pkgsrc has a just-in-time-su feature, which allows you to only become root for
1768the actual installation step. 1770the actual installation step.
1769 1771
1770That's it, the software should now be installed and setup for use. You can now 1772That's it, the software should now be installed and setup for use. You can now
1771enter: 1773enter:
1772 1774
1773% make clean 1775% make clean
1774 1776
1775 1777
1776to remove the compiled files in the work directory, as you shouldn't need them 1778to remove the compiled files in the work directory, as you shouldn't need them
1777any more. If other packages were also added to your system (dependencies) to 1779any more. If other packages were also added to your system (dependencies) to
1778allow your program to compile, you can tidy these up also with the command: 1780allow your program to compile, you can tidy these up also with the command:
1779 1781
1780% make clean-depends 1782% make clean-depends
1781 1783
1782 1784
1783Taking the figlet utility as an example, we can install it on our system by 1785Taking the figlet utility as an example, we can install it on our system by
1784building as shown in Appendix B, Build logs. 1786building as shown in Appendix B, Build logs.
1785 1787
1786The program is installed under the default root of the packages tree - /usr/ 1788The program is installed under the default root of the packages tree - /usr/
1787pkg. Should this not conform to your tastes, set the LOCALBASE variable in your 1789pkg. Should this not conform to your tastes, set the LOCALBASE variable in your
1788environment, and it will use that value as the root of your packages tree. So, 1790environment, and it will use that value as the root of your packages tree. So,
1789to use /usr/local, set LOCALBASE=/usr/local in your environment. Please note 1791to use /usr/local, set LOCALBASE=/usr/local in your environment. Please note
1790that you should use a directory which is dedicated to packages and not shared 1792that you should use a directory which is dedicated to packages and not shared
1791with other programs (i.e., do not try and use LOCALBASE=/usr). Also, you should 1793with other programs (i.e., do not try and use LOCALBASE=/usr). Also, you should
1792not try to add any of your own files or directories (such as src/, obj/, or 1794not try to add any of your own files or directories (such as src/, obj/, or
1793pkgsrc/) below the LOCALBASE tree. This is to prevent possible conflicts 1795pkgsrc/) below the LOCALBASE tree. This is to prevent possible conflicts
1794between programs and other files installed by the package system and whatever 1796between programs and other files installed by the package system and whatever
1795else may have been installed there. 1797else may have been installed there.
1796 1798
1797Some packages look in mk.conf to alter some configuration options at build 1799Some packages look in mk.conf to alter some configuration options at build
1798time. Have a look at pkgsrc/mk/defaults/mk.conf to get an overview of what will 1800time. Have a look at pkgsrc/mk/defaults/mk.conf to get an overview of what will
1799be set there by default. Environment variables such as LOCALBASE can be set in 1801be set there by default. Environment variables such as LOCALBASE can be set in
1800mk.conf to save having to remember to set them each time you want to use 1802mk.conf to save having to remember to set them each time you want to use
1801pkgsrc. 1803pkgsrc.
1802 1804
1803Occasionally, people want to "look under the covers" to see what is going on 1805Occasionally, people want to "look under the covers" to see what is going on
1804when a package is building or being installed. This may be for debugging 1806when a package is building or being installed. This may be for debugging
1805purposes, or out of simple curiosity. A number of utility values have been 1807purposes, or out of simple curiosity. A number of utility values have been
1806added to help with this. 1808added to help with this.
1807 1809
1808 1. If you invoke the make(1) command with PKG_DEBUG_LEVEL=2, then a huge 1810 1. If you invoke the make(1) command with PKG_DEBUG_LEVEL=2, then a huge
1809 amount of information will be displayed. For example, 1811 amount of information will be displayed. For example,
1810 1812
1811 make patch PKG_DEBUG_LEVEL=2 1813 make patch PKG_DEBUG_LEVEL=2
1812 1814
1813 will show all the commands that are invoked, up to and including the "patch 1815 will show all the commands that are invoked, up to and including the "patch
1814 " stage. 1816 " stage.
1815 1817
1816 2. If you want to know the value of a certain make(1) definition, then the 1818 2. If you want to know the value of a certain make(1) definition, then the
1817 VARNAME definition should be used, in conjunction with the show-var target. 1819 VARNAME definition should be used, in conjunction with the show-var target.
1818 e.g. to show the expansion of the make(1) variable LOCALBASE: 1820 e.g. to show the expansion of the make(1) variable LOCALBASE:
1819 1821
1820 % make show-var VARNAME=LOCALBASE 1822 % make show-var VARNAME=LOCALBASE
1821 /usr/pkg 1823 /usr/pkg
1822 % 1824 %
1823 1825
1824 1826
1825If you want to install a binary package that you've either created yourself 1827If you want to install a binary package that you've either created yourself
1826(see next section), that you put into pkgsrc/packages manually or that is 1828(see next section), that you put into pkgsrc/packages manually or that is
1827located on a remote FTP server, you can use the "bin-install" target. This 1829located on a remote FTP server, you can use the "bin-install" target. This
1828target will install a binary package - if available - via pkg_add(1), else do a 1830target will install a binary package - if available - via pkg_add(1), else do a
1829make package. The list of remote FTP sites searched is kept in the variable 1831make package. The list of remote FTP sites searched is kept in the variable
1830BINPKG_SITES, which defaults to ftp.NetBSD.org. Any flags that should be added 1832BINPKG_SITES, which defaults to ftp.NetBSD.org. Any flags that should be added
1831to pkg_add(1) can be put into BIN_INSTALL_FLAGS. See pkgsrc/mk/defaults/mk.conf 1833to pkg_add(1) can be put into BIN_INSTALL_FLAGS. See pkgsrc/mk/defaults/mk.conf
1832for more details. 1834for more details.
1833 1835
1834A final word of warning: If you set up a system that has a non-standard setting 1836A final word of warning: If you set up a system that has a non-standard setting
1835for LOCALBASE, be sure to set that before any packages are installed, as you 1837for LOCALBASE, be sure to set that before any packages are installed, as you
1836cannot use several directories for the same purpose. Doing so will result in 1838cannot use several directories for the same purpose. Doing so will result in
1837pkgsrc not being able to properly detect your installed packages, and fail 1839pkgsrc not being able to properly detect your installed packages, and fail
1838miserably. Note also that precompiled binary packages are usually built with 1840miserably. Note also that precompiled binary packages are usually built with
1839the default LOCALBASE of /usr/pkg, and that you should not install any if you 1841the default LOCALBASE of /usr/pkg, and that you should not install any if you
1840use a non-standard LOCALBASE. 1842use a non-standard LOCALBASE.
1841 1843
1842Chapter 5. Configuring pkgsrc 1844Chapter 5. Configuring pkgsrc
1843 1845
1844Table of Contents 1846Table of Contents
1845 1847
18465.1. General configuration 18485.1. General configuration
18475.2. Variables affecting the build process 18495.2. Variables affecting the build process
18485.3. Variables affecting the installation process 18505.3. Variables affecting the installation process
18495.4. Selecting and configuring the compiler 18515.4. Selecting and configuring the compiler
1850 1852
1851 5.4.1. Selecting the compiler 1853 5.4.1. Selecting the compiler
1852 5.4.2. Additional flags to the compiler (CFLAGS) 1854 5.4.2. Additional flags to the compiler (CFLAGS)
1853 5.4.3. Additional flags to the linker (LDFLAGS) 1855 5.4.3. Additional flags to the linker (LDFLAGS)
1854 1856
18555.5. Developer/advanced settings 18575.5. Developer/advanced settings
18565.6. Selecting Build Options 18585.6. Selecting Build Options
1857 1859
1858The whole pkgsrc system is configured in a single file, usually called mk.conf. 1860The whole pkgsrc system is configured in a single file, usually called mk.conf.
1859In which directory pkgsrc looks for that file depends on the installation. On 1861In which directory pkgsrc looks for that file depends on the installation. On
1860NetBSD, when you use make(1) from the base system, it is in the directory /etc 1862NetBSD, when you use make(1) from the base system, it is in the directory /etc
1861/. In all other cases the default location is ${PREFIX}/etc/, depending on 1863/. In all other cases the default location is ${PREFIX}/etc/, depending on
1862where you told the bootstrap program to install the binary packages. 1864where you told the bootstrap program to install the binary packages.
1863 1865
1864During the bootstrap, an example configuration file is created. To use that, 1866During the bootstrap, an example configuration file is created. To use that,
1865you have to create the directory ${PREFIX}/etc and copy the example file there. 1867you have to create the directory ${PREFIX}/etc and copy the example file there.
1866 1868
1867The format of the configuration file is that of the usual BSD-style Makefiles. 1869The format of the configuration file is that of the usual BSD-style Makefiles.
1868The whole pkgsrc configuration is done by setting variables in this file. Note 1870The whole pkgsrc configuration is done by setting variables in this file. Note
1869that you can define all kinds of variables, and no special error checking (for 1871that you can define all kinds of variables, and no special error checking (for
1870example for spelling mistakes) takes place, so you have to try it out to see if 1872example for spelling mistakes) takes place, so you have to try it out to see if
1871it works. 1873it works.
1872 1874
18735.1. General configuration 18755.1. General configuration
1874 1876
1875In this section, you can find some variables that apply to all pkgsrc packages. 1877In this section, you can find some variables that apply to all pkgsrc packages.
1876A complete list of the variables that can be configured by the user is 1878A complete list of the variables that can be configured by the user is
1877available in mk/defaults/mk.conf, together with some comments that describe 1879available in mk/defaults/mk.conf, together with some comments that describe
1878each variable's intent. 1880each variable's intent.
1879 1881
1880 * LOCALBASE: Where packages will be installed. The default is /usr/pkg. Do 1882 * LOCALBASE: Where packages will be installed. The default is /usr/pkg. Do
1881 not mix binary packages with different LOCALBASEs! 1883 not mix binary packages with different LOCALBASEs!
1882 1884
1883 * CROSSBASE: Where "cross" category packages will be installed. The default 1885 * CROSSBASE: Where "cross" category packages will be installed. The default
1884 is ${LOCALBASE}/cross. 1886 is ${LOCALBASE}/cross.
1885 1887
1886 * X11BASE: Where X11 is installed on the system. The default is /usr/X11R6. 1888 * X11BASE: Where X11 is installed on the system. The default is /usr/X11R6.
1887 1889
1888 * DISTDIR: Where to store the downloaded copies of the original source 1890 * DISTDIR: Where to store the downloaded copies of the original source
1889 distributions used for building pkgsrc packages. The default is $ 1891 distributions used for building pkgsrc packages. The default is $
1890 {PKGSRCDIR}/distfiles. 1892 {PKGSRCDIR}/distfiles.
1891 1893
1892 * PKG_DBDIR: Where the database about installed packages is stored. The 1894 * PKG_DBDIR: Where the database about installed packages is stored. The
1893 default is /var/db/pkg. 1895 default is /var/db/pkg.
1894 1896
1895 * MASTER_SITE_OVERRIDE: If set, override the packages' MASTER_SITES with this 1897 * MASTER_SITE_OVERRIDE: If set, override the packages' MASTER_SITES with this
1896 value. 1898 value.
1897 1899
1898 * MASTER_SITE_BACKUP: Backup location(s) for distribution files and patch 1900 * MASTER_SITE_BACKUP: Backup location(s) for distribution files and patch
1899 files if not found locally or in ${MASTER_SITES} or ${PATCH_SITES} 1901 files if not found locally or in ${MASTER_SITES} or ${PATCH_SITES}
1900 respectively. The defaults are ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/$ 1902 respectively. The defaults are ftp://ftp.NetBSD.org/pub/pkgsrc/distfiles/$
1901 {DIST_SUBDIR}/ and ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/$ 1903 {DIST_SUBDIR}/ and ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/$
1902 {DIST_SUBDIR}/. 1904 {DIST_SUBDIR}/.
1903 1905
1904 * BINPKG_SITES: List of sites carrying binary pkgs. rel and arch are replaced 1906 * BINPKG_SITES: List of sites carrying binary pkgs. rel and arch are replaced
1905 with OS release ("2.0", etc.) and architecture ("mipsel", etc.). 1907 with OS release ("2.0", etc.) and architecture ("mipsel", etc.).
1906 1908
1907 * ACCEPTABLE_LICENSES: List of acceptable licenses. License names are 1909 * ACCEPTABLE_LICENSES: List of acceptable licenses. License names are
1908 case-sensitive. Whenever you try to build a package whose license is not in 1910 case-sensitive. Whenever you try to build a package whose license is not in
1909 this list, you will get an error message. If the license condition is 1911 this list, you will get an error message. If the license condition is
1910 simple enough, the error message will include specific instructions on how 1912 simple enough, the error message will include specific instructions on how
1911 to change this variable. 1913 to change this variable.
1912 1914
19135.2. Variables affecting the build process 19155.2. Variables affecting the build process
1914 1916
1915XXX 1917XXX
1916 1918
1917 * PACKAGES: The top level directory for the binary packages. The default is $ 1919 * PACKAGES: The top level directory for the binary packages. The default is $
1918 {PKGSRCDIR}/packages. 1920 {PKGSRCDIR}/packages.
1919 1921
1920 * WRKOBJDIR: The top level directory where, if defined, the separate working 1922 * WRKOBJDIR: The top level directory where, if defined, the separate working
1921 directories will get created, and symbolically linked to from ${WRKDIR} 1923 directories will get created, and symbolically linked to from ${WRKDIR}
1922 (see below). This is useful for building packages on several architectures, 1924 (see below). This is useful for building packages on several architectures,
1923 then ${PKGSRCDIR} can be NFS-mounted while ${WRKOBJDIR} is local to every 1925 then ${PKGSRCDIR} can be NFS-mounted while ${WRKOBJDIR} is local to every
1924 architecture. (It should be noted that PKGSRCDIR should not be set by the 1926 architecture. (It should be noted that PKGSRCDIR should not be set by the
1925 user ? it is an internal definition which refers to the root of the pkgsrc 1927 user ? it is an internal definition which refers to the root of the pkgsrc
1926 tree. It is possible to have many pkgsrc tree instances.) 1928 tree. It is possible to have many pkgsrc tree instances.)
1927 1929
1928 * LOCALPATCHES: Directory for local patches that aren't part of pkgsrc. See 1930 * LOCALPATCHES: Directory for local patches that aren't part of pkgsrc. See
1929 Section 11.3, "patches/*" for more information. 1931 Section 11.3, "patches/*" for more information.
1930 1932
1931 * PKGMAKECONF: Location of the mk.conf file used by a package's BSD-style 1933 * PKGMAKECONF: Location of the mk.conf file used by a package's BSD-style
1932 Makefile. If this is not set, MAKECONF is set to /dev/null to avoid picking 1934 Makefile. If this is not set, MAKECONF is set to /dev/null to avoid picking
1933 up settings used by builds in /usr/src. 1935 up settings used by builds in /usr/src.
1934 1936
1935 * DEPENDS_TARGET: By default, dependencies are only installed, and no binary 1937 * DEPENDS_TARGET: By default, dependencies are only installed, and no binary
1936 package is created for them. You can set this variable to package-install 1938 package is created for them. You can set this variable to package-install
1937 to automatically create binary packages after installing dependencies. 1939 to automatically create binary packages after installing dependencies.
1938 Please note that the PKGSRC_KEEP_BIN_PKGScan be set to yes to preserve 1940 Please note that the PKGSRC_KEEP_BIN_PKGScan be set to yes to preserve
1939 binary packages when using the install as well. 1941 binary packages when using the install as well.
1940 1942
19415.3. Variables affecting the installation process 19435.3. Variables affecting the installation process
1942 1944
1943Most packages support installation into a subdirectory of WRKDIR. This allows a 1945Most packages support installation into a subdirectory of WRKDIR. This allows a
1944package to be built, before the actual filesystem is touched. DESTDIR support 1946package to be built, before the actual filesystem is touched. DESTDIR support
1945exists in two variations: 1947exists in two variations:
1946 1948
1947 * Basic DESTDIR support means that the package installation and packaging is 1949 * Basic DESTDIR support means that the package installation and packaging is
1948 still run as root. 1950 still run as root.
1949 1951
1950 * Full DESTDIR support can run the complete build, installation and packaging 1952 * Full DESTDIR support can run the complete build, installation and packaging
1951 as normal user. Root privileges are only needed to add packages. 1953 as normal user. Root privileges are only needed to add packages.
1952 1954
1953DESTDIR support is now the default. To switch back to non-DESTDIR, you can set 1955DESTDIR support is now the default. To switch back to non-DESTDIR, you can set
1954USE_DESTDIR=no; this setting will be deprecated though, so it's preferable to 1956USE_DESTDIR=no; this setting will be deprecated though, so it's preferable to
1955convert a package to DESTDIR instead. 1957convert a package to DESTDIR instead.
1956 1958
1957With basic DESTDIR support, make clean needs to be run as root. 1959With basic DESTDIR support, make clean needs to be run as root.
1958 1960
1959Considering the foo/bar package, DESTDIR full support can be tested using the 1961Considering the foo/bar package, DESTDIR full support can be tested using the
1960following commands 1962following commands
1961 1963
1962$ id 1964$ id
1963uid=1000(myusername) gid=100(users) groups=100(users),0(wheel) 1965uid=1000(myusername) gid=100(users) groups=100(users),0(wheel)
1964$ mkdir $HOME/packages 1966$ mkdir $HOME/packages
1965$ cd $PKGSRCDIR/foo/bar 1967$ cd $PKGSRCDIR/foo/bar
1966 1968
1967Verify DESTDIR full support, no root privileges should be needed 1969Verify DESTDIR full support, no root privileges should be needed
1968 1970
1969$ make stage-install 1971$ make stage-install
1970 1972
1971Create a package without root privileges 1973Create a package without root privileges
1972 1974
1973$ make PACKAGES=$HOME/packages package 1975$ make PACKAGES=$HOME/packages package
1974 1976
1975For the following command, you must be able to gain root privileges using su(1) 1977For the following command, you must be able to gain root privileges using su(1)
1976 1978
1977$ make PACKAGES=$HOME/packages install 1979$ make PACKAGES=$HOME/packages install
1978 1980
1979Then, as a simple user 1981Then, as a simple user
1980 1982
1981$ make clean 1983$ make clean
1982 1984
19835.4. Selecting and configuring the compiler 19855.4. Selecting and configuring the compiler
1984 1986
19855.4.1. Selecting the compiler 19875.4.1. Selecting the compiler
1986 1988
1987By default, pkgsrc will use GCC to build packages. This may be overridden by 1989By default, pkgsrc will use GCC to build packages. This may be overridden by
1988setting the following variables in /etc/mk.conf: 1990setting the following variables in /etc/mk.conf:
1989 1991
1990PKGSRC_COMPILER: 1992PKGSRC_COMPILER:
1991 1993
1992 This is a list of values specifying the chain of compilers to invoke when 1994 This is a list of values specifying the chain of compilers to invoke when
1993 building packages. Valid values are: 1995 building packages. Valid values are:
1994 1996
1995 + ccc: Compaq C Compilers (Tru64) 1997 + ccc: Compaq C Compilers (Tru64)
1996 1998
1997 + ccache: compiler cache (chainable) 1999 + ccache: compiler cache (chainable)
1998 2000
1999 + clang: Clang C and Objective-C compiler 2001 + clang: Clang C and Objective-C compiler
2000 2002
2001 + distcc: distributed C/C++ (chainable) 2003 + distcc: distributed C/C++ (chainable)
2002 2004
2003 + f2c: Fortran 77 to C compiler (chainable) 2005 + f2c: Fortran 77 to C compiler (chainable)
2004 2006
2005 + icc: Intel C++ Compiler (Linux) 2007 + icc: Intel C++ Compiler (Linux)
2006 2008
2007 + ido: SGI IRIS Development Option cc (IRIX 5) 2009 + ido: SGI IRIS Development Option cc (IRIX 5)
2008 2010
2009 + gcc: GNU C/C++ Compiler 2011 + gcc: GNU C/C++ Compiler
2010 2012
2011 + hp: HP-UX C/aC++ compilers 2013 + hp: HP-UX C/aC++ compilers
2012 2014
2013 + mipspro: Silicon Graphics, Inc. MIPSpro (n32/n64) 2015 + mipspro: Silicon Graphics, Inc. MIPSpro (n32/n64)
2014 2016
2015 + mipspro-ucode: Silicon Graphics, Inc. MIPSpro (o32) 2017 + mipspro-ucode: Silicon Graphics, Inc. MIPSpro (o32)
2016 2018
2017 + sunpro: Sun Microsystems, Inc. WorkShip/Forte/Sun ONE Studio 2019 + sunpro: Sun Microsystems, Inc. WorkShip/Forte/Sun ONE Studio
2018 2020
2019 + xlc: IBM's XL C/C++ compiler suite (Darwin/MacOSX) 2021 + xlc: IBM's XL C/C++ compiler suite (Darwin/MacOSX)
2020 2022
2021 The default is "gcc". You can use ccache and/or distcc with an appropriate 2023 The default is "gcc". You can use ccache and/or distcc with an appropriate
2022 PKGSRC_COMPILER setting, e.g. "ccache gcc". This variable should always be 2024 PKGSRC_COMPILER setting, e.g. "ccache gcc". This variable should always be
2023 terminated with a value for a real compiler. Note that only one real 2025 terminated with a value for a real compiler. Note that only one real
2024 compiler should be listed (e.g. "sunpro gcc" is not allowed). 2026 compiler should be listed (e.g. "sunpro gcc" is not allowed).
2025 2027
2026GCC_REQD: 2028GCC_REQD:
2027 2029
2028 This specifies the minimum version of GCC to use when building packages. If 2030 This specifies the minimum version of GCC to use when building packages. If
2029 the system GCC doesn't satisfy this requirement, then pkgsrc will build and 2031 the system GCC doesn't satisfy this requirement, then pkgsrc will build and
2030 install one of the GCC packages to use instead. 2032 install one of the GCC packages to use instead.
2031 2033
20325.4.2. Additional flags to the compiler (CFLAGS) 20345.4.2. Additional flags to the compiler (CFLAGS)
2033 2035
2034If you wish to set the CFLAGS variable, please make sure to use the += operator 2036If you wish to set the CFLAGS variable, please make sure to use the += operator
2035instead of the = operator: 2037instead of the = operator:
2036 2038
2037CFLAGS+= -your -flags 2039CFLAGS+= -your -flags
2038 2040
2039Using CFLAGS= (i.e. without the "+") may lead to problems with packages that 2041Using CFLAGS= (i.e. without the "+") may lead to problems with packages that
2040need to add their own flags. You may want to take a look at the devel/cpuflags 2042need to add their own flags. You may want to take a look at the devel/cpuflags
2041package if you're interested in optimization specifically for the current CPU. 2043package if you're interested in optimization specifically for the current CPU.
2042 2044
20435.4.3. Additional flags to the linker (LDFLAGS) 20455.4.3. Additional flags to the linker (LDFLAGS)
2044 2046
2045If you want to pass flags to the linker, both in the configure step and the 2047If you want to pass flags to the linker, both in the configure step and the
2046build step, you can do this in two ways. Either set LDFLAGS or LIBS. The 2048build step, you can do this in two ways. Either set LDFLAGS or LIBS. The
2047difference between the two is that LIBS will be appended to the command line, 2049difference between the two is that LIBS will be appended to the command line,
2048while LDFLAGS come earlier. LDFLAGS is pre-loaded with rpath settings for ELF 2050while LDFLAGS come earlier. LDFLAGS is pre-loaded with rpath settings for ELF
2049machines depending on the setting of USE_IMAKE or the inclusion of mk/ 2051machines depending on the setting of USE_IMAKE or the inclusion of mk/
2050x11.buildlink3.mk. As with CFLAGS, if you do not wish to override these 2052x11.buildlink3.mk. As with CFLAGS, if you do not wish to override these
2051settings, use the += operator: 2053settings, use the += operator:
2052 2054
2053LDFLAGS+= -your -linkerflags 2055LDFLAGS+= -your -linkerflags
2054 2056
20555.5. Developer/advanced settings 20575.5. Developer/advanced settings
2056 2058
2057XXX 2059XXX
2058 2060
2059 * PKG_DEVELOPER: Run some sanity checks that package developers want: 2061 * PKG_DEVELOPER: Run some sanity checks that package developers want:
2060 2062
2061 + make sure patches apply with zero fuzz 2063 + make sure patches apply with zero fuzz
2062 2064
2063 + run check-shlibs to see that all binaries will find their shared libs. 2065 + run check-shlibs to see that all binaries will find their shared libs.
2064 2066
2065 * PKG_DEBUG_LEVEL: The level of debugging output which is displayed whilst 2067 * PKG_DEBUG_LEVEL: The level of debugging output which is displayed whilst
2066 making and installing the package. The default value for this is 0, which 2068 making and installing the package. The default value for this is 0, which
2067 will not display the commands as they are executed (normal, default, quiet 2069 will not display the commands as they are executed (normal, default, quiet
2068 operation); the value 1 will display all shell commands before their 2070 operation); the value 1 will display all shell commands before their
2069 invocation, and the value 2 will display both the shell commands before 2071 invocation, and the value 2 will display both the shell commands before
2070 their invocation, and their actual execution progress with set -x will be 2072 their invocation, and their actual execution progress with set -x will be
2071 displayed. 2073 displayed.
2072 2074
20735.6. Selecting Build Options 20755.6. Selecting Build Options
2074 2076
2075Some packages have build time options, usually to select between different 2077Some packages have build time options, usually to select between different
2076dependencies, enable optional support for big dependencies or enable 2078dependencies, enable optional support for big dependencies or enable
2077experimental features. 2079experimental features.
2078 2080
2079To see which options, if any, a package supports, and which options are 2081To see which options, if any, a package supports, and which options are
2080mutually exclusive, run make show-options, for example: 2082mutually exclusive, run make show-options, for example:
2081 2083
2082 The following options are supported by this package: 2084 The following options are supported by this package:
2083 ssl Enable SSL support. 2085 ssl Enable SSL support.
2084 Exactly one of the following gecko options is required: 2086 Exactly one of the following gecko options is required:
2085 firefox Use firefox as gecko rendering engine. 2087 firefox Use firefox as gecko rendering engine.
2086 mozilla Use mozilla as gecko rendering engine. 2088 mozilla Use mozilla as gecko rendering engine.
2087 At most one of the following database options may be selected: 2089 At most one of the following database options may be selected:
2088 mysql Enable support for MySQL database. 2090 mysql Enable support for MySQL database.
2089 pgsql Enable support for PostgreSQL database. 2091 pgsql Enable support for PostgreSQL database.
2090 2092
2091 These options are enabled by default: firefox 2093 These options are enabled by default: firefox
2092 These options are currently enabled: mozilla ssl 2094 These options are currently enabled: mozilla ssl
2093 2095
2094The following variables can be defined in mk.conf to select which options to 2096The following variables can be defined in mk.conf to select which options to
2095enable for a package: PKG_DEFAULT_OPTIONS, which can be used to select or 2097enable for a package: PKG_DEFAULT_OPTIONS, which can be used to select or
2096disable options for all packages that support them, and PKG_OPTIONS.pkgbase, 2098disable options for all packages that support them, and PKG_OPTIONS.pkgbase,
2097which can be used to select or disable options specifically for package pkgbase 2099which can be used to select or disable options specifically for package pkgbase
2098. Options listed in these variables are selected, options preceded by "-" are 2100. Options listed in these variables are selected, options preceded by "-" are
2099disabled. A few examples: 2101disabled. A few examples:
2100 2102
2101$ grep "PKG.*OPTION" mk.conf 2103$ grep "PKG.*OPTION" mk.conf
2102PKG_DEFAULT_OPTIONS= -arts -dvdread -esound 2104PKG_DEFAULT_OPTIONS= -arts -dvdread -esound
2103PKG_OPTIONS.kdebase= debug -sasl 2105PKG_OPTIONS.kdebase= debug -sasl
2104PKG_OPTIONS.apache= suexec 2106PKG_OPTIONS.apache= suexec
2105 2107
2106It is important to note that options that were specifically suggested by the 2108It is important to note that options that were specifically suggested by the
2107package maintainer must be explicitly removed if you do not wish to include the 2109package maintainer must be explicitly removed if you do not wish to include the
2108option. If you are unsure you can view the current state with make show-options 2110option. If you are unsure you can view the current state with make show-options
2109. 2111.
2110 2112
2111The following settings are consulted in the order given, and the last setting 2113The following settings are consulted in the order given, and the last setting
2112that selects or disables an option is used: 2114that selects or disables an option is used:
2113 2115
2114 1. the default options as suggested by the package maintainer 2116 1. the default options as suggested by the package maintainer
2115 2117
2116 2. the options implied by the settings of legacy variables (see below) 2118 2. the options implied by the settings of legacy variables (see below)
2117 2119
2118 3. PKG_DEFAULT_OPTIONS 2120 3. PKG_DEFAULT_OPTIONS
2119 2121
2120 4. PKG_OPTIONS.pkgbase 2122 4. PKG_OPTIONS.pkgbase
2121 2123
2122For groups of mutually exclusive options, the last option selected is used, all 2124For groups of mutually exclusive options, the last option selected is used, all
2123others are automatically disabled. If an option of the group is explicitly 2125others are automatically disabled. If an option of the group is explicitly
2124disabled, the previously selected option, if any, is used. It is an error if no 2126disabled, the previously selected option, if any, is used. It is an error if no
2125option from a required group of options is selected, and building the package 2127option from a required group of options is selected, and building the package
2126will fail. 2128will fail.
2127 2129
2128Before the options framework was introduced, build options were selected by 2130Before the options framework was introduced, build options were selected by
2129setting a variable (often named USE_FOO) in mk.conf for each option. To ease 2131setting a variable (often named USE_FOO) in mk.conf for each option. To ease
2130transition to the options framework for the user, these legacy variables are 2132transition to the options framework for the user, these legacy variables are
2131converted to the appropriate options setting (PKG_OPTIONS.pkgbase) 2133converted to the appropriate options setting (PKG_OPTIONS.pkgbase)
2132automatically. A warning is issued to prompt the user to update mk.conf to use 2134automatically. A warning is issued to prompt the user to update mk.conf to use
2133the options framework directly. Support for the legacy variables will be 2135the options framework directly. Support for the legacy variables will be
2134removed eventually. 2136removed eventually.
2135 2137
2136Chapter 6. Creating binary packages 2138Chapter 6. Creating binary packages
2137 2139
2138Table of Contents 2140Table of Contents
2139 2141
21406.1. Building a single binary package 21426.1. Building a single binary package
21416.2. Settings for creation of binary packages 21436.2. Settings for creation of binary packages
2142 2144
21436.1. Building a single binary package 21456.1. Building a single binary package
2144 2146
2145Once you have built and installed a package, you can create a binary package 2147Once you have built and installed a package, you can create a binary package
2146which can be installed on another system with pkg_add(1). This saves having to 2148which can be installed on another system with pkg_add(1). This saves having to
2147build the same package on a group of hosts and wasting CPU time. It also 2149build the same package on a group of hosts and wasting CPU time. It also
2148provides a simple means for others to install your package, should you 2150provides a simple means for others to install your package, should you
2149distribute it. 2151distribute it.
2150 2152
2151To create a binary package, change into the appropriate directory in pkgsrc, 2153To create a binary package, change into the appropriate directory in pkgsrc,
2152and run make package: 2154and run make package:
2153 2155
2154# cd misc/figlet 2156# cd misc/figlet
2155# make package 2157# make package
2156 2158
2157 2159
2158This will build and install your package (if not already done), and then build 2160This will build and install your package (if not already done), and then build
2159a binary package from what was installed. You can then use the pkg_* tools to 2161a binary package from what was installed. You can then use the pkg_* tools to
2160manipulate it. Binary packages are created by default in /usr/pkgsrc/packages, 2162manipulate it. Binary packages are created by default in /usr/pkgsrc/packages,
2161in the form of a gzipped tar file. See Section B.2, "Packaging figlet" for a 2163in the form of a gzipped tar file. See Section B.2, "Packaging figlet" for a
2162continuation of the above misc/figlet example. 2164continuation of the above misc/figlet example.
2163 2165
2164See Chapter 21, Submitting and Committing for information on how to submit such 2166See Chapter 21, Submitting and Committing for information on how to submit such
2165a binary package. 2167a binary package.
2166 2168
21676.2. Settings for creation of binary packages 21696.2. Settings for creation of binary packages
2168 2170
2169See Section 17.17, "Other helpful targets". 2171See Section 17.17, "Other helpful targets".
2170 2172
2171Chapter 7. Creating binary packages for everything in pkgsrc (bulk builds) 2173Chapter 7. Creating binary packages for everything in pkgsrc (bulk builds)
2172 2174
2173Table of Contents 2175Table of Contents
2174 2176
21757.1. Preparations 21777.1. Preparations
21767.2. Running a pbulk-style bulk build 21787.2. Running a pbulk-style bulk build
2177 2179
2178 7.2.1. Configuration 2180 7.2.1. Configuration
2179 2181
21807.3. Requirements of a full bulk build 21827.3. Requirements of a full bulk build
21817.4. Creating a multiple CD-ROM packages collection 21837.4. Creating a multiple CD-ROM packages collection
2182 2184
2183 7.4.1. Example of cdpack 2185 7.4.1. Example of cdpack
2184 2186
2185For a number of reasons you may want to build binary packages for a large 2187For a number of reasons you may want to build binary packages for a large
2186selected set of packages in pkgsrc or even for all pkgsrc packages. For 2188selected set of packages in pkgsrc or even for all pkgsrc packages. For
2187instance, when you have multiple machines that should run the same software, it 2189instance, when you have multiple machines that should run the same software, it
2188is wasted time if they all build their packages themselves from source. Or you 2190is wasted time if they all build their packages themselves from source. Or you
2189may want to build a list of packages you want and check them before deploying 2191may want to build a list of packages you want and check them before deploying
2190onto production system. There is a way of getting a set of binary packages: The 2192onto production system. There is a way of getting a set of binary packages: The
2191bulk build system, or pbulk ("p" stands for "parallel). This chapter describes 2193bulk build system, or pbulk ("p" stands for "parallel). This chapter describes
2192how to set it up so that the packages are most likely to be usable later. 2194how to set it up so that the packages are most likely to be usable later.
2193 2195
21947.1. Preparations 21967.1. Preparations
2195 2197
2196First of all, you have to decide whether you build all packages or a limited 2198First of all, you have to decide whether you build all packages or a limited
2197set of them. Full bulk builds usually consume a lot more resources, both space 2199set of them. Full bulk builds usually consume a lot more resources, both space
2198and time, than builds for some practical sets of packages. There exists a 2200and time, than builds for some practical sets of packages. There exists a
2199number of particularly heavy packages that are not actually interesting to a 2201number of particularly heavy packages that are not actually interesting to a
2200wide audience. For a limited bulk builds you need to make a list of packages 2202wide audience. For a limited bulk builds you need to make a list of packages
2201you want to build. Note, that all their dependencies will be built, so you 2203you want to build. Note, that all their dependencies will be built, so you
2202don't need to track them manually. 2204don't need to track them manually.
2203 2205
2204During bulk builds various packages are installed and deinstalled in /usr/pkg 2206During bulk builds various packages are installed and deinstalled in /usr/pkg
2205(or whatever LOCALBASE is), so make sure that you don't need any package during 2207(or whatever LOCALBASE is), so make sure that you don't need any package during
2206the builds. Essentially, you should provide fresh system, either a chroot 2208the builds. Essentially, you should provide fresh system, either a chroot
2207environment or something even more restrictive, depending on what the operating 2209environment or something even more restrictive, depending on what the operating
2208system provides, or dedicate the whole physical machine. As a useful side 2210system provides, or dedicate the whole physical machine. As a useful side
2209effect this makes sure that bulk builds cannot break anything in your system. 2211effect this makes sure that bulk builds cannot break anything in your system.
2210There have been numerous cases where certain packages tried to install files 2212There have been numerous cases where certain packages tried to install files
2211outside the LOCALBASE or wanted to edit some files in /etc. 2213outside the LOCALBASE or wanted to edit some files in /etc.
2212 2214
22137.2. Running a pbulk-style bulk build 22157.2. Running a pbulk-style bulk build
2214 2216
2215Running a pbulk-style bulk build works roughly as follows: 2217Running a pbulk-style bulk build works roughly as follows:
2216 2218
2217 * First, build the pbulk infrastructure in a fresh pkgsrc location. 2219 * First, build the pbulk infrastructure in a fresh pkgsrc location.
2218 2220
2219 * Then, build each of the packages from a clean installation directory using 2221 * Then, build each of the packages from a clean installation directory using
2220 the infrastructure. 2222 the infrastructure.
2221 2223
22227.2.1. Configuration 22247.2.1. Configuration
2223 2225
2224To simplify configuration we provide helper script mk/pbulk/pbulk.sh. 2226To simplify configuration we provide helper script mk/pbulk/pbulk.sh.
2225 2227
2226In order to use it, prepare a clear system (real one, chroot environment, jail, 2228In order to use it, prepare a clear system (real one, chroot environment, jail,
2227zone, virtual machine). Configure network access to fetch distribution files. 2229zone, virtual machine). Configure network access to fetch distribution files.
2228Create user with name "pbulk". 2230Create user with name "pbulk".
2229 2231
2230Fetch and extract pkgsrc. Use a command like one of these: 2232Fetch and extract pkgsrc. Use a command like one of these:
2231 2233
2232# (cd /usr && ftp -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-) 2234# (cd /usr && ftp -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-)
2233# (cd /usr && fetch -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-) 2235# (cd /usr && fetch -o - http://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz | tar -zxf-)
2234# (cd /usr && cvs -Q -z3 -d anoncvs@anoncvs.NetBSD.org:/cvsroot get -P pkgsrc) 2236# (cd /usr && cvs -Q -z3 -d anoncvs@anoncvs.NetBSD.org:/cvsroot get -P pkgsrc)
2235 2237
2236Or any other way that fits (e.g., curl, wget). 2238Or any other way that fits (e.g., curl, wget).
2237 2239
2238Deploy and configure pbulk tools, e.g.: 2240Deploy and configure pbulk tools, e.g.:
2239 2241
2240# sh pbulk.sh -n # native (NetBSD) 2242# sh pbulk.sh -n # native (NetBSD)
2241# sh pbulk.sh -n -c mk.conf.frag # native, apply settings from given mk.conf fragment 2243# sh pbulk.sh -n -c mk.conf.frag # native, apply settings from given mk.conf fragment
2242# sh pbulk.sh -nlc mk.conf.frag # native, apply settings, configure for limited build 2244# sh pbulk.sh -nlc mk.conf.frag # native, apply settings, configure for limited build
2243 2245
2244Note 2246Note
2245 2247
2246mk.conf.frag is a fragment of mk.conf that contains settings you want to apply 2248mk.conf.frag is a fragment of mk.conf that contains settings you want to apply
2247to packages you build. For instance, 2249to packages you build. For instance,
2248 2250
2249PKG_DEVELOPER= yes # perform more checks 2251PKG_DEVELOPER= yes # perform more checks
2250X11_TYPE= modular # use pkgsrc X11 2252X11_TYPE= modular # use pkgsrc X11
2251SKIP_LICENSE_CHECK= yes # accept all licences (useful when building all packages) 2253SKIP_LICENSE_CHECK= yes # accept all licences (useful when building all packages)
2252 2254
2253If configured for limited list, replace the list in /usr/pbulk/etc/pbulk.list 2255If configured for limited list, replace the list in /usr/pbulk/etc/pbulk.list
2254with your list of packages one per line without empty lines or comments. E.g.: 2256with your list of packages one per line without empty lines or comments. E.g.:
2255 2257
2256www/firefox 2258www/firefox
2257mail/thunderbird 2259mail/thunderbird
2258misc/libreoffice4 2260misc/libreoffice4
2259 2261
2260At this point you can also review configuration in /usr/pbulk/etc and make 2262At this point you can also review configuration in /usr/pbulk/etc and make
2261final amendments, if wanted. 2263final amendments, if wanted.
2262 2264
2263Start it: 2265Start it:
2264 2266
2265# /usr/pbulk/bin/bulkbuild 2267# /usr/pbulk/bin/bulkbuild
2266 2268
2267After it finishes, you'll have /mnt filled with distribution files, binary 2269After it finishes, you'll have /mnt filled with distribution files, binary
2268packages, and reports, plain text summary in /mnt/bulklog/meta/report.txt 2270packages, and reports, plain text summary in /mnt/bulklog/meta/report.txt
2269 2271
2270Note 2272Note
2271 2273
2272The pbulk.sh script does not cover all possible use cases. While being ready to 2274The pbulk.sh script does not cover all possible use cases. While being ready to
2273run, it serves as a good starting point to understand and build more complex 2275run, it serves as a good starting point to understand and build more complex
2274setups. The script is kept small enough for better understanding. 2276setups. The script is kept small enough for better understanding.
2275 2277
2276Note 2278Note
2277 2279
2278The pbulk.sh script supports running unprivileged bulk build and helps 2280The pbulk.sh script supports running unprivileged bulk build and helps
2279configuring distributed bulk builds. 2281configuring distributed bulk builds.
2280 2282
22817.3. Requirements of a full bulk build 22837.3. Requirements of a full bulk build
2282 2284
2283A complete bulk build requires lots of disk space. Some of the disk space can 2285A complete bulk build requires lots of disk space. Some of the disk space can
2284be read-only, some other must be writable. Some can be on remote filesystems 2286be read-only, some other must be writable. Some can be on remote filesystems
2285(such as NFS) and some should be local. Some can be temporary filesystems, 2287(such as NFS) and some should be local. Some can be temporary filesystems,
2286others must survive a sudden reboot. 2288others must survive a sudden reboot.
2287 2289
2288 * 40 GB for the distfiles (read-write, remote, temporary) 2290 * 40 GB for the distfiles (read-write, remote, temporary)
2289 2291
2290 * 30 GB for the binary packages (read-write, remote, permanent) 2292 * 30 GB for the binary packages (read-write, remote, permanent)
2291 2293
2292 * 1 GB for the pkgsrc tree (read-only, remote, permanent) 2294 * 1 GB for the pkgsrc tree (read-only, remote, permanent)
2293 2295
2294 * 5 GB for LOCALBASE (read-write, local, temporary) 2296 * 5 GB for LOCALBASE (read-write, local, temporary)
2295 2297
2296 * 10 GB for the log files (read-write, remote, permanent) 2298 * 10 GB for the log files (read-write, remote, permanent)
2297 2299
2298 * 5 GB for temporary files (read-write, local, temporary) 2300 * 5 GB for temporary files (read-write, local, temporary)
2299 2301
23007.4. Creating a multiple CD-ROM packages collection 23027.4. Creating a multiple CD-ROM packages collection
2301 2303
2302After your pkgsrc bulk-build has completed, you may wish to create a CD-ROM set 2304After your pkgsrc bulk-build has completed, you may wish to create a CD-ROM set
2303of the resulting binary packages to assist in installing packages on other 2305of the resulting binary packages to assist in installing packages on other
2304machines. The pkgtools/cdpack package provides a simple tool for creating the 2306machines. The pkgtools/cdpack package provides a simple tool for creating the
2305ISO 9660 images. cdpack arranges the packages on the CD-ROMs in a way that 2307ISO 9660 images. cdpack arranges the packages on the CD-ROMs in a way that
2306keeps all the dependencies for a given package on the same CD as that package. 2308keeps all the dependencies for a given package on the same CD as that package.
2307 2309
23087.4.1. Example of cdpack 23107.4.1. Example of cdpack
2309 2311
2310Complete documentation for cdpack is found in the cdpack(1) man page. The 2312Complete documentation for cdpack is found in the cdpack(1) man page. The
2311following short example assumes that the binary packages are left in /usr/ 2313following short example assumes that the binary packages are left in /usr/
2312pkgsrc/packages/All and that sufficient disk space exists in /u2 to hold the 2314pkgsrc/packages/All and that sufficient disk space exists in /u2 to hold the
2313ISO 9660 images. 2315ISO 9660 images.
2314 2316
2315# mkdir /u2/images 2317# mkdir /u2/images
2316# pkg_add /usr/pkgsrc/packages/All/cdpack 2318# pkg_add /usr/pkgsrc/packages/All/cdpack
2317# cdpack /usr/pkgsrc/packages/All /u2/images 2319# cdpack /usr/pkgsrc/packages/All /u2/images
2318 2320
2319 2321
2320If you wish to include a common set of files (COPYRIGHT, README, etc.) on each 2322If you wish to include a common set of files (COPYRIGHT, README, etc.) on each
2321CD in the collection, then you need to create a directory which contains these 2323CD in the collection, then you need to create a directory which contains these
2322files. e.g. 2324files. e.g.
2323 2325
2324# mkdir /tmp/common 2326# mkdir /tmp/common
2325# echo "This is a README" > /tmp/common/README 2327# echo "This is a README" > /tmp/common/README
2326# echo "Another file" > /tmp/common/COPYING 2328# echo "Another file" > /tmp/common/COPYING
2327# mkdir /tmp/common/bin 2329# mkdir /tmp/common/bin
2328# echo "#!/bin/sh" > /tmp/common/bin/myscript 2330# echo "#!/bin/sh" > /tmp/common/bin/myscript
2329# echo "echo Hello world" >> /tmp/common/bin/myscript 2331# echo "echo Hello world" >> /tmp/common/bin/myscript
2330# chmod 755 /tmp/common/bin/myscript 2332# chmod 755 /tmp/common/bin/myscript
2331 2333
2332 2334
2333Now create the images: 2335Now create the images:
2334 2336
2335# cdpack -x /tmp/common /usr/pkgsrc/packages/All /u2/images 2337# cdpack -x /tmp/common /usr/pkgsrc/packages/All /u2/images
2336 2338
2337Each image will contain README, COPYING, and bin/myscript in their root 2339Each image will contain README, COPYING, and bin/myscript in their root
2338directories. 2340directories.
2339 2341
2340Chapter 8. Directory layout of the installed files 2342Chapter 8. Directory layout of the installed files
2341 2343
2342Table of Contents 2344Table of Contents
2343 2345
23448.1. File system layout in ${LOCALBASE} 23468.1. File system layout in ${LOCALBASE}
23458.2. File system layout in ${VARBASE} 23478.2. File system layout in ${VARBASE}
2346 2348
2347The files that are installed by pkgsrc are organized in a way that is similar 2349The files that are installed by pkgsrc are organized in a way that is similar
2348to what you find in the /usr directory of the base system. But some details are 2350to what you find in the /usr directory of the base system. But some details are
2349different. This is because pkgsrc initially came from FreeBSD and had adopted 2351different. This is because pkgsrc initially came from FreeBSD and had adopted
2350its file system hierarchy. Later it was largely influenced by NetBSD. But no 2352its file system hierarchy. Later it was largely influenced by NetBSD. But no
2351matter which operating system you are using pkgsrc with, you can expect the 2353matter which operating system you are using pkgsrc with, you can expect the
2352same layout for pkgsrc. 2354same layout for pkgsrc.
2353 2355
2354There are mainly four root directories for pkgsrc, which are all configurable 2356There are mainly four root directories for pkgsrc, which are all configurable
2355in the bootstrap/bootstrap script. When pkgsrc has been installed as root, the 2357in the bootstrap/bootstrap script. When pkgsrc has been installed as root, the
2356default locations are: 2358default locations are:
2357 2359
2358LOCALBASE= /usr/pkg 2360LOCALBASE= /usr/pkg
2359PKG_SYSCONFBASE= /usr/pkg/etc 2361PKG_SYSCONFBASE= /usr/pkg/etc
2360VARBASE= /var 2362VARBASE= /var
2361PKG_DBDIR= /var/db/pkg 2363PKG_DBDIR= /var/db/pkg
2362 2364
2363In unprivileged mode (when pkgsrc has been installed as any other user), the 2365In unprivileged mode (when pkgsrc has been installed as any other user), the
2364default locations are: 2366default locations are:
2365 2367
2366LOCALBASE= ${HOME}/pkg 2368LOCALBASE= ${HOME}/pkg
2367PKG_SYSCONFBASE= ${HOME}/pkg/etc 2369PKG_SYSCONFBASE= ${HOME}/pkg/etc
2368VARBASE= ${HOME}/pkg/var 2370VARBASE= ${HOME}/pkg/var
2369PKG_DBDIR= ${HOME}/pkg/var/db/pkg 2371PKG_DBDIR= ${HOME}/pkg/var/db/pkg
2370 2372
2371What these four directories are for, and what they look like is explained 2373What these four directories are for, and what they look like is explained
2372below. 2374below.
2373 2375
2374 * LOCALBASE corresponds to the /usr directory in the base system. It is the " 2376 * LOCALBASE corresponds to the /usr directory in the base system. It is the "
2375 main" directory where the files are installed and contains the well-known 2377 main" directory where the files are installed and contains the well-known
2376 subdirectories like bin, include, lib, share and sbin. 2378 subdirectories like bin, include, lib, share and sbin.
2377 2379
2378 * VARBASE corresponds to /var in the base system. Some programs (especially 2380 * VARBASE corresponds to /var in the base system. Some programs (especially
2379 games, network daemons) need write access to it during normal operation. 2381 games, network daemons) need write access to it during normal operation.
2380 2382
2381 * PKG_SYSCONFDIR corresponds to /etc in the base system. It contains 2383 * PKG_SYSCONFDIR corresponds to /etc in the base system. It contains
2382 configuration files of the packages, as well as pkgsrc's mk.conf itself. 2384 configuration files of the packages, as well as pkgsrc's mk.conf itself.
2383 2385
23848.1. File system layout in ${LOCALBASE} 23868.1. File system layout in ${LOCALBASE}
2385 2387
2386The following directories exist in a typical pkgsrc installation in $ 2388The following directories exist in a typical pkgsrc installation in $
2387{LOCALBASE}. 2389{LOCALBASE}.
2388 2390
2389bin 2391bin
2390 2392
2391 Contains executable programs that are intended to be directly used by the 2393 Contains executable programs that are intended to be directly used by the
2392 end user. 2394 end user.
2393 2395
2394emul 2396emul
2395 2397
2396 Contains files for the emulation layers of various other operating systems, 2398 Contains files for the emulation layers of various other operating systems,
2397 especially for NetBSD. 2399 especially for NetBSD.
2398 2400
2399etc (the usual location of ${PKG_SYSCONFDIR}) 2401etc (the usual location of ${PKG_SYSCONFDIR})
2400 2402
2401 Contains the configuration files. 2403 Contains the configuration files.
2402 2404
2403include 2405include
2404 2406
2405 Contains headers for the C and C++ programming languages. 2407 Contains headers for the C and C++ programming languages.
2406 2408
2407info 2409info
2408 2410
2409 Contains GNU info files of various packages. 2411 Contains GNU info files of various packages.
2410 2412
2411lib 2413lib
2412 2414
2413 Contains shared and static libraries. 2415 Contains shared and static libraries.
2414 2416
2415libdata 2417libdata
2416 2418
2417 Contains data files that don't change after installation. Other data files 2419 Contains data files that don't change after installation. Other data files
2418 belong into ${VARBASE}. 2420 belong into ${VARBASE}.
2419 2421
2420libexec 2422libexec
2421 2423
2422 Contains programs that are not intended to be used by end users, such as 2424 Contains programs that are not intended to be used by end users, such as
2423 helper programs or network daemons. 2425 helper programs or network daemons.
2424 2426
2425libexec/cgi-bin 2427libexec/cgi-bin
2426 2428
2427 Contains programs that are intended to be executed as CGI scripts by a web 2429 Contains programs that are intended to be executed as CGI scripts by a web
2428 server. 2430 server.
2429 2431
2430man (the usual value of ${PKGMANDIR}) 2432man (the usual value of ${PKGMANDIR})
2431 2433
2432 Contains brief documentation in form of manual pages. 2434 Contains brief documentation in form of manual pages.
2433 2435
2434sbin 2436sbin
2435 2437
2436 Contains programs that are intended to be used only by the super-user. 2438 Contains programs that are intended to be used only by the super-user.
2437 2439
2438share 2440share
2439 2441
2440 Contains platform-independent data files that don't change after 2442 Contains platform-independent data files that don't change after
2441 installation. 2443 installation.
2442 2444
2443share/doc 2445share/doc
2444 2446
2445 Contains documentation files provided by the packages. 2447 Contains documentation files provided by the packages.
2446 2448
2447share/examples 2449share/examples
2448 2450
2449 Contains example files provided by the packages. Among others, the original 2451 Contains example files provided by the packages. Among others, the original
2450 configuration files are saved here and copied to ${PKG_SYSCONFDIR} during 2452 configuration files are saved here and copied to ${PKG_SYSCONFDIR} during
2451 installation. 2453 installation.
2452 2454
2453share/examples/rc.d 2455share/examples/rc.d
2454 2456
2455 Contains the original files for rc.d scripts. 2457 Contains the original files for rc.d scripts.
2456 2458
2457var (the usual location of ${VARBASE}) 2459var (the usual location of ${VARBASE})
2458 2460
2459 Contains files that may be modified after installation. 2461 Contains files that may be modified after installation.
2460 2462
24618.2. File system layout in ${VARBASE} 24638.2. File system layout in ${VARBASE}
2462 2464
2463db/pkg (the usual location of ${PKG_DBDIR}) 2465db/pkg (the usual location of ${PKG_DBDIR})
2464 2466
2465 Contains information about the currently installed packages. 2467 Contains information about the currently installed packages.
2466 2468
2467games 2469games
2468 2470
2469 Contains highscore files. 2471 Contains highscore files.
2470 2472
2471log 2473log
2472 2474
2473 Contains log files. 2475 Contains log files.
2474 2476
2475run 2477run
2476 2478
2477 Contains informational files about daemons that are currently running. 2479 Contains informational files about daemons that are currently running.
2478 2480
2479Chapter 9. Frequently Asked Questions 2481Chapter 9. Frequently Asked Questions
2480 2482
2481Table of Contents 2483Table of Contents
2482 2484
24839.1. Are there any mailing lists for pkg-related discussion? 24859.1. Are there any mailing lists for pkg-related discussion?
24849.2. Utilities for package management (pkgtools) 24869.2. Where's the pkgviews documentation?
24859.3. How to use pkgsrc as non-root 24879.3. Utilities for package management (pkgtools)
24869.4. How to resume transfers when fetching distfiles? 24889.4. How to use pkgsrc as non-root
24879.5. How can I install/use modular X.org from pkgsrc? 24899.5. How to resume transfers when fetching distfiles?
24889.6. How to fetch files from behind a firewall 24909.6. How can I install/use modular X.org from pkgsrc?
24899.7. How to fetch files from HTTPS sites 24919.7. How to fetch files from behind a firewall
24909.8. How do I tell make fetch to do passive FTP? 24929.8. How to fetch files from HTTPS sites
24919.9. How to fetch all distfiles at once 24939.9. How do I tell make fetch to do passive FTP?
24929.10. What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean? 24949.10. How to fetch all distfiles at once
24939.11. What does "Could not find bsd.own.mk" mean? 24959.11. What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean?
24949.12. Using 'sudo' with pkgsrc 24969.12. What does "Could not find bsd.own.mk" mean?
24959.13. How do I change the location of configuration files? 24979.13. Using 'sudo' with pkgsrc
24969.14. Automated security checks 24989.14. How do I change the location of configuration files?
24979.15. Why do some packages ignore my CFLAGS? 24999.15. Automated security checks
24989.16. A package does not build. What shall I do? 25009.16. Why do some packages ignore my CFLAGS?
24999.17. What does "Makefile appears to contain unresolved cvs/rcs/??? merge 25019.17. A package does not build. What shall I do?
 25029.18. What does "Makefile appears to contain unresolved cvs/rcs/??? merge
2500 conflicts" mean? 2503 conflicts" mean?
2501 2504
2502This section contains hints, tips & tricks on special things in pkgsrc that we 2505This section contains hints, tips & tricks on special things in pkgsrc that we
2503didn't find a better place for in the previous chapters, and it contains items 2506didn't find a better place for in the previous chapters, and it contains items
2504for both pkgsrc users and developers. 2507for both pkgsrc users and developers.
2505 2508
25069.1. Are there any mailing lists for pkg-related discussion? 25099.1. Are there any mailing lists for pkg-related discussion?
2507 2510
2508The following mailing lists may be of interest to pkgsrc users: 2511The following mailing lists may be of interest to pkgsrc users:
2509 2512
2510 * pkgsrc-users: This is a general purpose list for most issues regarding 2513 * pkgsrc-users: This is a general purpose list for most issues regarding
2511 pkgsrc, regardless of platform, e.g. soliciting user help for pkgsrc 2514 pkgsrc, regardless of platform, e.g. soliciting user help for pkgsrc
2512 configuration, unexpected build failures, using particular packages, 2515 configuration, unexpected build failures, using particular packages,
2513 upgrading pkgsrc installations, questions regarding the pkgsrc release 2516 upgrading pkgsrc installations, questions regarding the pkgsrc release
2514 branches, etc. General announcements or proposals for changes that impact 2517 branches, etc. General announcements or proposals for changes that impact
2515 the pkgsrc user community, e.g. major infrastructure changes, new features, 2518 the pkgsrc user community, e.g. major infrastructure changes, new features,
2516 package removals, etc., may also be posted. 2519 package removals, etc., may also be posted.
2517 2520
2518 * pkgsrc-bulk: A list where the results of pkgsrc bulk builds are sent and 2521 * pkgsrc-bulk: A list where the results of pkgsrc bulk builds are sent and
2519 discussed. 2522 discussed.
2520 2523
2521 * pkgsrc-changes: This list is for those who are interested in getting a 2524 * pkgsrc-changes: This list is for those who are interested in getting a
2522 commit message for every change committed to pkgsrc. It is also available 2525 commit message for every change committed to pkgsrc. It is also available
2523 in digest form, meaning one daily message containing all commit messages 2526 in digest form, meaning one daily message containing all commit messages
2524 for changes to the package source tree in that 24 hour period. 2527 for changes to the package source tree in that 24 hour period.
2525 2528
2526To subscribe, do: 2529To subscribe, do:
2527 2530
2528% echo subscribe listname | mail majordomo@NetBSD.org 2531% echo subscribe listname | mail majordomo@NetBSD.org
2529 2532
2530Archives for all these mailing lists are available from http:// 2533Archives for all these mailing lists are available from http://
2531mail-index.NetBSD.org/. 2534mail-index.NetBSD.org/.
2532 2535
25339.2. Utilities for package management (pkgtools) 25369.2. Where's the pkgviews documentation?
 2537
 2538Pkgviews is tightly integrated with buildlink. You can find a pkgviews User's
 2539guide in pkgsrc/mk/buildlink3/PKGVIEWS_UG.
 2540
 25419.3. Utilities for package management (pkgtools)
2534 2542
2535The directory pkgsrc/pkgtools contains a number of useful utilities for both 2543The directory pkgsrc/pkgtools contains a number of useful utilities for both
2536users and developers of pkgsrc. This section attempts only to make the reader 2544users and developers of pkgsrc. This section attempts only to make the reader
2537aware of the utilities and when they might be useful, and not to duplicate the 2545aware of the utilities and when they might be useful, and not to duplicate the
2538documentation that comes with each package. 2546documentation that comes with each package.
2539 2547
2540Utilities used by pkgsrc (automatically installed when needed): 2548Utilities used by pkgsrc (automatically installed when needed):
2541 2549
2542 * pkgtools/x11-links: Symlinks for use by buildlink. 2550 * pkgtools/x11-links: Symlinks for use by buildlink.
2543 2551
2544OS tool augmentation (automatically installed when needed): 2552OS tool augmentation (automatically installed when needed):
2545 2553
2546 * pkgtools/digest: Calculates various kinds of checksums (including SHA1). 2554 * pkgtools/digest: Calculates various kinds of checksums (including SHA1).
2547 2555
2548 * pkgtools/libnbcompat: Compatibility library for pkgsrc tools. 2556 * pkgtools/libnbcompat: Compatibility library for pkgsrc tools.
2549 2557
2550 * pkgtools/mtree: Installed on non-BSD systems due to lack of native mtree. 2558 * pkgtools/mtree: Installed on non-BSD systems due to lack of native mtree.
2551 2559
2552 * pkgtools/pkg_install: Up-to-date replacement for /usr/sbin/pkg_install, or 2560 * pkgtools/pkg_install: Up-to-date replacement for /usr/sbin/pkg_install, or
2553 for use on operating systems where pkg_install is not present. 2561 for use on operating systems where pkg_install is not present.
2554 2562
2555Utilities used by pkgsrc (not automatically installed): 2563Utilities used by pkgsrc (not automatically installed):
2556 2564
2557 * pkgtools/pkg_tarup: Create a binary package from an already-installed 2565 * pkgtools/pkg_tarup: Create a binary package from an already-installed
2558 package. Used by make replace to save the old package. 2566 package. Used by make replace to save the old package.
2559 2567
2560 * pkgtools/dfdisk: Adds extra functionality to pkgsrc, allowing it to fetch 2568 * pkgtools/dfdisk: Adds extra functionality to pkgsrc, allowing it to fetch
2561 distfiles from multiple locations. It currently supports the following 2569 distfiles from multiple locations. It currently supports the following
2562 methods: multiple CD-ROMs and network FTP/HTTP connections. 2570 methods: multiple CD-ROMs and network FTP/HTTP connections.
2563 2571
2564 * devel/cpuflags: Determine the best compiler flags to optimise code for your 2572 * devel/cpuflags: Determine the best compiler flags to optimise code for your
2565 current CPU and compiler. 2573 current CPU and compiler.
2566 2574
2567Utilities for keeping track of installed packages, being up to date, etc: 2575Utilities for keeping track of installed packages, being up to date, etc:
2568 2576
2569 * pkgtools/pkgin: A package update tool similar to apt(1). Download, install, 2577 * pkgtools/pkgin: A package update tool similar to apt(1). Download, install,
2570 and upgrade binary packages easily. 2578 and upgrade binary packages easily.
2571 2579
2572 * pkgtools/pkg_chk: Reports on packages whose installed versions do not match 2580 * pkgtools/pkg_chk: Reports on packages whose installed versions do not match
2573 the latest pkgsrc entries. 2581 the latest pkgsrc entries.
2574 2582
2575 * pkgtools/pkgdep: Makes dependency graphs of packages, to aid in choosing a 2583 * pkgtools/pkgdep: Makes dependency graphs of packages, to aid in choosing a
2576 strategy for updating. 2584 strategy for updating.
2577 2585
2578 * pkgtools/pkgdepgraph: Makes graphs from the output of pkgtools/pkgdep (uses 2586 * pkgtools/pkgdepgraph: Makes graphs from the output of pkgtools/pkgdep (uses
2579 graphviz). 2587 graphviz).
2580 2588
2581 * pkgtools/pkglint: The pkglint(1) program checks a pkgsrc entry for errors. 2589 * pkgtools/pkglint: The pkglint(1) program checks a pkgsrc entry for errors.
2582 2590
2583 * pkgtools/lintpkgsrc: The lintpkgsrc(1) program does various checks on the 2591 * pkgtools/lintpkgsrc: The lintpkgsrc(1) program does various checks on the
2584 complete pkgsrc system. 2592 complete pkgsrc system.
2585 2593
2586 * pkgtools/pkgsurvey: Report what packages you have installed. 2594 * pkgtools/pkgsurvey: Report what packages you have installed.
2587 2595
2588Utilities for people maintaining or creating individual packages: 2596Utilities for people maintaining or creating individual packages:
2589 2597
2590 * pkgtools/pkgdiff: Automate making and maintaining patches for a package 2598 * pkgtools/pkgdiff: Automate making and maintaining patches for a package
2591 (includes pkgdiff, pkgvi, mkpatches, etc.). 2599 (includes pkgdiff, pkgvi, mkpatches, etc.).
2592 2600
2593 * pkgtools/url2pkg: Aids in converting to pkgsrc. 2601 * pkgtools/url2pkg: Aids in converting to pkgsrc.
2594 2602
2595Utilities for people maintaining pkgsrc (or: more obscure pkg utilities) 2603Utilities for people maintaining pkgsrc (or: more obscure pkg utilities)
2596 2604
2597 * pkgtools/pkg_comp: Build packages in a chrooted area. 2605 * pkgtools/pkg_comp: Build packages in a chrooted area.
2598 2606
2599 * pkgtools/libkver: Spoof kernel version for chrooted cross builds. 2607 * pkgtools/libkver: Spoof kernel version for chrooted cross builds.
2600 2608
26019.3. How to use pkgsrc as non-root 26099.4. How to use pkgsrc as non-root
2602 2610
2603If you want to use pkgsrc as non-root user, you can set some variables to make 2611If you want to use pkgsrc as non-root user, you can set some variables to make
2604pkgsrc work under these conditions. At the very least, you need to set 2612pkgsrc work under these conditions. At the very least, you need to set
2605UNPRIVILEGED to "yes"; this will turn on unprivileged mode and set multiple 2613UNPRIVILEGED to "yes"; this will turn on unprivileged mode and set multiple
2606related variables to allow installation of packages as non-root. 2614related variables to allow installation of packages as non-root.
2607 2615
2608In case the defaults are not enough, you may want to tune some other variables 2616In case the defaults are not enough, you may want to tune some other variables
2609used. For example, if the automatic user/group detection leads to incorrect 2617used. For example, if the automatic user/group detection leads to incorrect
2610values (or not the ones you would like to use), you can change them by setting 2618values (or not the ones you would like to use), you can change them by setting
2611UNPRIVILEGED_USER and UNPRIVILEGED_GROUP respectively. 2619UNPRIVILEGED_USER and UNPRIVILEGED_GROUP respectively.
2612 2620
2613As regards bootstrapping, please note that the bootstrap script will ease 2621As regards bootstrapping, please note that the bootstrap script will ease
2614non-root configuration when given the "--ignore-user-check" flag, as it will 2622non-root configuration when given the "--ignore-user-check" flag, as it will
2615choose and use multiple default directories under ~/pkg as the installation 2623choose and use multiple default directories under ~/pkg as the installation
2616targets. These directories can be overridden by the "--prefix" flag provided by 2624targets. These directories can be overridden by the "--prefix" flag provided by
2617the script, as well as some others that allow finer tuning of the tree layout. 2625the script, as well as some others that allow finer tuning of the tree layout.
2618 2626
26199.4. How to resume transfers when fetching distfiles? 26279.5. How to resume transfers when fetching distfiles?
2620 2628
2621By default, resuming transfers in pkgsrc is disabled, but you can enable this 2629By default, resuming transfers in pkgsrc is disabled, but you can enable this
2622feature by adding the option PKG_RESUME_TRANSFERS=YES into mk.conf. If, during 2630feature by adding the option PKG_RESUME_TRANSFERS=YES into mk.conf. If, during
2623a fetch step, an incomplete distfile is found, pkgsrc will try to resume it. 2631a fetch step, an incomplete distfile is found, pkgsrc will try to resume it.
2624 2632
2625You can also use a different program than the platform default program by 2633You can also use a different program than the platform default program by
2626changing the FETCH_USING variable. You can specify the program by using of ftp, 2634changing the FETCH_USING variable. You can specify the program by using of ftp,
2627fetch, wget or curl. Alternatively, fetching can be disabled by using the value 2635fetch, wget or curl. Alternatively, fetching can be disabled by using the value
2628manual. A value of custom disables the system defaults and dependency tracking 2636manual. A value of custom disables the system defaults and dependency tracking
2629for the fetch program. In that case you have to provide FETCH_CMD, 2637for the fetch program. In that case you have to provide FETCH_CMD,
2630FETCH_BEFORE_ARGS, FETCH_RESUME_ARGS, FETCH_OUTPUT_ARGS, FETCH_AFTER_ARGS. 2638FETCH_BEFORE_ARGS, FETCH_RESUME_ARGS, FETCH_OUTPUT_ARGS, FETCH_AFTER_ARGS.
2631 2639
2632For example, if you want to use wget to download, you'll have to use something 2640For example, if you want to use wget to download, you'll have to use something
2633like: 2641like:
2634 2642
2635FETCH_USING= wget 2643FETCH_USING= wget
2636 2644
26379.5. How can I install/use modular X.org from pkgsrc? 26459.6. How can I install/use modular X.org from pkgsrc?
2638 2646
2639If you want to use modular X.org from pkgsrc instead of your system's own X11 2647If you want to use modular X.org from pkgsrc instead of your system's own X11
2640(/usr/X11R6, /usr/openwin, ...) you will have to add the following line into 2648(/usr/X11R6, /usr/openwin, ...) you will have to add the following line into
2641mk.conf: 2649mk.conf:
2642 2650
2643X11_TYPE=modular 2651X11_TYPE=modular
2644 2652
2645Note 2653Note
2646 2654
2647The DragonFly operating system defaults to using modular X.org from pkgsrc. 2655The DragonFly operating system defaults to using modular X.org from pkgsrc.
2648 2656
26499.6. How to fetch files from behind a firewall 26579.7. How to fetch files from behind a firewall
2650 2658
2651If you are sitting behind a firewall which does not allow direct connections to 2659If you are sitting behind a firewall which does not allow direct connections to
2652Internet hosts (i.e. non-NAT), you may specify the relevant proxy hosts. This 2660Internet hosts (i.e. non-NAT), you may specify the relevant proxy hosts. This
2653is done using an environment variable in the form of a URL, e.g. in Amdahl, the 2661is done using an environment variable in the form of a URL, e.g. in Amdahl, the
2654machine "orpheus.amdahl.com" is one of the firewalls, and it uses port 80 as 2662machine "orpheus.amdahl.com" is one of the firewalls, and it uses port 80 as
2655the proxy port number. So the proxy environment variables are: 2663the proxy port number. So the proxy environment variables are:
2656 2664
2657ftp_proxy=ftp://orpheus.amdahl.com:80/ 2665ftp_proxy=ftp://orpheus.amdahl.com:80/
2658http_proxy=http://orpheus.amdahl.com:80/ 2666http_proxy=http://orpheus.amdahl.com:80/
2659 2667
26609.7. How to fetch files from HTTPS sites 26689.8. How to fetch files from HTTPS sites
2661 2669
2662Some fetch tools are not prepared to support HTTPS by default (for example, the 2670Some fetch tools are not prepared to support HTTPS by default (for example, the
2663one in NetBSD 6.0), or the one installed by the pkgsrc bootstrap (to avoid an 2671one in NetBSD 6.0), or the one installed by the pkgsrc bootstrap (to avoid an
2664openssl dependency that low in the dependency graph). 2672openssl dependency that low in the dependency graph).
2665 2673
2666Usually you won't notice, because distribution files are mirrored weekly to " 2674Usually you won't notice, because distribution files are mirrored weekly to "
2667ftp.NetBSD.org", but that might not be often enough if you are following 2675ftp.NetBSD.org", but that might not be often enough if you are following
2668pkgsrc-current. In that case, set FETCH_USING in your mk.conf file to "curl" or 2676pkgsrc-current. In that case, set FETCH_USING in your mk.conf file to "curl" or
2669"wget", which are both compiled with HTTPS support by default. Of course, these 2677"wget", which are both compiled with HTTPS support by default. Of course, these
2670tools need to be installed before you can use them this way. 2678tools need to be installed before you can use them this way.
2671 2679
26729.8. How do I tell make fetch to do passive FTP? 26809.9. How do I tell make fetch to do passive FTP?
2673 2681
2674This depends on which utility is used to retrieve distfiles. From bsd.pkg.mk, 2682This depends on which utility is used to retrieve distfiles. From bsd.pkg.mk,
2675FETCH_CMD is assigned the first available command from the following list: 2683FETCH_CMD is assigned the first available command from the following list:
2676 2684
2677 * ${LOCALBASE}/bin/ftp 2685 * ${LOCALBASE}/bin/ftp
2678 2686
2679 * /usr/bin/ftp 2687 * /usr/bin/ftp
2680 2688
2681On a default NetBSD installation, this will be /usr/bin/ftp, which 2689On a default NetBSD installation, this will be /usr/bin/ftp, which
2682automatically tries passive connections first, and falls back to active 2690automatically tries passive connections first, and falls back to active
2683connections if the server refuses to do passive. For the other tools, add the 2691connections if the server refuses to do passive. For the other tools, add the
2684following to your mk.conf file: PASSIVE_FETCH=1. 2692following to your mk.conf file: PASSIVE_FETCH=1.
2685 2693
2686Having that option present will prevent /usr/bin/ftp from falling back to 2694Having that option present will prevent /usr/bin/ftp from falling back to
2687active transfers. 2695active transfers.
2688 2696
26899.9. How to fetch all distfiles at once 26979.10. How to fetch all distfiles at once
2690 2698
2691You would like to download all the distfiles in a single batch from work or 2699You would like to download all the distfiles in a single batch from work or
2692university, where you can't run a make fetch. There is an archive of distfiles 2700university, where you can't run a make fetch. There is an archive of distfiles
2693on ftp.NetBSD.org, but downloading the entire directory may not be appropriate. 2701on ftp.NetBSD.org, but downloading the entire directory may not be appropriate.
2694 2702
2695The answer here is to do a make fetch-list in /usr/pkgsrc or one of its 2703The answer here is to do a make fetch-list in /usr/pkgsrc or one of its
2696subdirectories, carry the resulting list to your machine at work/school and use 2704subdirectories, carry the resulting list to your machine at work/school and use
2697it there. If you don't have a NetBSD-compatible ftp(1) (like tnftp) at work, 2705it there. If you don't have a NetBSD-compatible ftp(1) (like tnftp) at work,
2698don't forget to set FETCH_CMD to something that fetches a URL: 2706don't forget to set FETCH_CMD to something that fetches a URL:
2699 2707
2700At home: 2708At home:
2701 2709
2702% cd /usr/pkgsrc 2710% cd /usr/pkgsrc
2703% make fetch-list FETCH_CMD=wget DISTDIR=/tmp/distfiles >/tmp/fetch.sh 2711% make fetch-list FETCH_CMD=wget DISTDIR=/tmp/distfiles >/tmp/fetch.sh
2704% scp /tmp/fetch.sh work:/tmp 2712% scp /tmp/fetch.sh work:/tmp
2705 2713
2706At work: 2714At work:
2707 2715
2708% sh /tmp/fetch.sh 2716% sh /tmp/fetch.sh
2709 2717
2710then tar up /tmp/distfiles and take it home. 2718then tar up /tmp/distfiles and take it home.
2711 2719
2712If you have a machine running NetBSD, and you want to get all distfiles (even 2720If you have a machine running NetBSD, and you want to get all distfiles (even
2713ones that aren't for your machine architecture), you can do so by using the 2721ones that aren't for your machine architecture), you can do so by using the
2714above-mentioned make fetch-list approach, or fetch the distfiles directly by 2722above-mentioned make fetch-list approach, or fetch the distfiles directly by
2715running: 2723running:
2716 2724
2717% make mirror-distfiles 2725% make mirror-distfiles
2718 2726
2719If you even decide to ignore NO_{SRC,BIN}_ON_{FTP,CDROM}, then you can get 2727If you even decide to ignore NO_{SRC,BIN}_ON_{FTP,CDROM}, then you can get
2720everything by running: 2728everything by running:
2721 2729
2722% make fetch NO_SKIP=yes 2730% make fetch NO_SKIP=yes
2723 2731
27249.10. What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean? 27329.11. What does "Don't know how to make /usr/share/tmac/tmac.andoc" mean?
2725 2733
2726When compiling the pkgtools/pkg_install package, you get the error from make 2734When compiling the pkgtools/pkg_install package, you get the error from make
2727that it doesn't know how to make /usr/share/tmac/tmac.andoc? This indicates 2735that it doesn't know how to make /usr/share/tmac/tmac.andoc? This indicates
2728that you don't have installed the "text" set (nroff, ...) from the NetBSD base 2736that you don't have installed the "text" set (nroff, ...) from the NetBSD base
2729distribution on your machine. It is recommended to do that to format man pages. 2737distribution on your machine. It is recommended to do that to format man pages.
2730 2738
2731In the case of the pkgtools/pkg_install package, you can get away with setting 2739In the case of the pkgtools/pkg_install package, you can get away with setting
2732NOMAN=YES either in the environment or in mk.conf. 2740NOMAN=YES either in the environment or in mk.conf.
2733 2741
27349.11. What does "Could not find bsd.own.mk" mean? 27429.12. What does "Could not find bsd.own.mk" mean?
2735 2743
2736You didn't install the compiler set, comp.tgz, when you installed your NetBSD 2744You didn't install the compiler set, comp.tgz, when you installed your NetBSD
2737machine. Please get and install it, by extracting it in /: 2745machine. Please get and install it, by extracting it in /:
2738 2746
2739# cd / 2747# cd /
2740# tar --unlink -zxvpf .../comp.tgz 2748# tar --unlink -zxvpf .../comp.tgz
2741 2749
2742comp.tgz is part of every NetBSD release. Get the one that corresponds to your 2750comp.tgz is part of every NetBSD release. Get the one that corresponds to your
2743release (determine via uname -r). 2751release (determine via uname -r).
2744 2752
27459.12. Using 'sudo' with pkgsrc 27539.13. Using 'sudo' with pkgsrc
2746 2754
2747When installing packages as non-root user and using the just-in-time su(1) 2755When installing packages as non-root user and using the just-in-time su(1)
2748feature of pkgsrc, it can become annoying to type in the root password for each 2756feature of pkgsrc, it can become annoying to type in the root password for each
2749required package installed. To avoid this, the sudo package can be used, which 2757required package installed. To avoid this, the sudo package can be used, which
2750does password caching over a limited time. To use it, install sudo (either as 2758does password caching over a limited time. To use it, install sudo (either as
2751binary package or from security/sudo) and then put the following into your 2759binary package or from security/sudo) and then put the following into your
2752mk.conf, somewhere after the definition of the LOCALBASE variable: 2760mk.conf, somewhere after the definition of the LOCALBASE variable:
2753 2761
2754.if exists(${LOCALBASE}/bin/sudo) 2762.if exists(${LOCALBASE}/bin/sudo)
2755SU_CMD= ${LOCALBASE}/bin/sudo /bin/sh -c 2763SU_CMD= ${LOCALBASE}/bin/sudo /bin/sh -c
2756.endif 2764.endif
2757 2765
27589.13. How do I change the location of configuration files? 27669.14. How do I change the location of configuration files?
2759 2767
2760As the system administrator, you can choose where configuration files are 2768As the system administrator, you can choose where configuration files are
2761installed. The default settings make all these files go into ${PREFIX}/etc or 2769installed. The default settings make all these files go into ${PREFIX}/etc or
2762some of its subdirectories; this may be suboptimal depending on your 2770some of its subdirectories; this may be suboptimal depending on your
2763expectations (e.g., a read-only, NFS-exported PREFIX with a need of per-machine 2771expectations (e.g., a read-only, NFS-exported PREFIX with a need of per-machine
2764configuration of the provided packages). 2772configuration of the provided packages).
2765 2773
2766In order to change the defaults, you can modify the PKG_SYSCONFBASE variable 2774In order to change the defaults, you can modify the PKG_SYSCONFBASE variable
2767(in mk.conf) to point to your preferred configuration directory; some common 2775(in mk.conf) to point to your preferred configuration directory; some common
2768examples include /etc or /etc/pkg. 2776examples include /etc or /etc/pkg.
2769 2777
2770Furthermore, you can change this value on a per-package basis by setting the 2778Furthermore, you can change this value on a per-package basis by setting the
2771PKG_SYSCONFDIR.${PKG_SYSCONFVAR} variable. PKG_SYSCONFVAR's value usually 2779PKG_SYSCONFDIR.${PKG_SYSCONFVAR} variable. PKG_SYSCONFVAR's value usually
2772matches the name of the package you would like to modify, that is, the contents 2780matches the name of the package you would like to modify, that is, the contents
2773of PKGBASE. 2781of PKGBASE.
2774 2782
2775Note that after changing these settings, you must rebuild and reinstall any 2783Note that after changing these settings, you must rebuild and reinstall any
2776affected packages. 2784affected packages.
2777 2785
27789.14. Automated security checks 27869.15. Automated security checks
2779 2787
2780Please be aware that there can often be bugs in third-party software, and some 2788Please be aware that there can often be bugs in third-party software, and some
2781of these bugs can leave a machine vulnerable to exploitation by attackers. In 2789of these bugs can leave a machine vulnerable to exploitation by attackers. In
2782an effort to lessen the exposure, the NetBSD packages team maintains a database 2790an effort to lessen the exposure, the NetBSD packages team maintains a database
2783of known-exploits to packages which have at one time been included in pkgsrc. 2791of known-exploits to packages which have at one time been included in pkgsrc.
2784The database can be downloaded automatically, and a security audit of all 2792The database can be downloaded automatically, and a security audit of all
2785packages installed on a system can take place. To do this, refer to the 2793packages installed on a system can take place. To do this, refer to the
2786following two tools (installed as part of the pkgtools/pkg_install package): 2794following two tools (installed as part of the pkgtools/pkg_install package):
2787 2795
2788 1. pkg_admin fetch-pkg-vulnerabilities, an easy way to download a list of the 2796 1. pkg_admin fetch-pkg-vulnerabilities, an easy way to download a list of the
2789 security vulnerabilities information. This list is kept up to date by the 2797 security vulnerabilities information. This list is kept up to date by the
2790 pkgsrc security team, and is distributed from the NetBSD ftp server: 2798 pkgsrc security team, and is distributed from the NetBSD ftp server:
2791 2799
2792 ftp://ftp.NetBSD.org/pkgsrc/distfiles/pkg-vulnerabilities 2800 ftp://ftp.NetBSD.org/pkgsrc/distfiles/pkg-vulnerabilities
2793 2801
2794 2. pkg_admin audit, an easy way to audit the current machine, checking each 2802 2. pkg_admin audit, an easy way to audit the current machine, checking each
2795 known vulnerability. If a vulnerable package is installed, it will be shown 2803 known vulnerability. If a vulnerable package is installed, it will be shown
2796 by output to stdout, including a description of the type of vulnerability, 2804 by output to stdout, including a description of the type of vulnerability,
2797 and a URL containing more information. 2805 and a URL containing more information.
2798 2806
2799Use of these tools is strongly recommended! After "pkg_install" is installed, 2807Use of these tools is strongly recommended! After "pkg_install" is installed,
2800please read the package's message, which you can get by running pkg_info -D 2808please read the package's message, which you can get by running pkg_info -D
2801pkg_install. 2809pkg_install.
2802 2810
2803If this package is installed, pkgsrc builds will use it to perform a security 2811If this package is installed, pkgsrc builds will use it to perform a security
2804check before building any package. See Section 5.2, "Variables affecting the 2812check before building any package. See Section 5.2, "Variables affecting the
2805build process" for ways to control this check. 2813build process" for ways to control this check.
2806 2814
28079.15. Why do some packages ignore my CFLAGS? 28159.16. Why do some packages ignore my CFLAGS?
2808 2816
2809When you add your own preferences to the CFLAGS variable in your mk.conf, these 2817When you add your own preferences to the CFLAGS variable in your mk.conf, these
2810flags are passed in environment variables to the ./configure scripts and to 2818flags are passed in environment variables to the ./configure scripts and to
2811make(1). Some package authors ignore the CFLAGS from the environment variable 2819make(1). Some package authors ignore the CFLAGS from the environment variable
2812by overriding them in the Makefiles of their package. 2820by overriding them in the Makefiles of their package.
2813 2821
2814Currently there is no solution to this problem. If you really need the package 2822Currently there is no solution to this problem. If you really need the package
2815to use your CFLAGS you should run make patch in the package directory and then 2823to use your CFLAGS you should run make patch in the package directory and then
2816inspect any Makefile and Makefile.in for whether they define CFLAGS explicitly. 2824inspect any Makefile and Makefile.in for whether they define CFLAGS explicitly.
2817Usually you can remove these lines. But be aware that some "smart" programmers 2825Usually you can remove these lines. But be aware that some "smart" programmers
2818write so bad code that it only works for the specific combination of CFLAGS 2826write so bad code that it only works for the specific combination of CFLAGS
2819they have chosen. 2827they have chosen.
2820 2828
28219.16. A package does not build. What shall I do? 28299.17. A package does not build. What shall I do?
2822 2830
2823 1. Make sure that your copy of pkgsrc is consistent. A case that occurs often 2831 1. Make sure that your copy of pkgsrc is consistent. A case that occurs often
2824 is that people only update pkgsrc in parts, because of performance reasons. 2832 is that people only update pkgsrc in parts, because of performance reasons.
2825 Since pkgsrc is one large system, not a collection of many small systems, 2833 Since pkgsrc is one large system, not a collection of many small systems,
2826 there are sometimes changes that only work when the whole pkgsrc tree is 2834 there are sometimes changes that only work when the whole pkgsrc tree is
2827 updated. 2835 updated.
2828 2836
2829 2. Make sure that you don't have any CVS conflicts. Search for "<<<<<<" or " 2837 2. Make sure that you don't have any CVS conflicts. Search for "<<<<<<" or "
2830 >>>>>>" in all your pkgsrc files. 2838 >>>>>>" in all your pkgsrc files.
2831 2839
2832 3. Make sure that you don't have old copies of the packages extracted. Run  2840 3. Make sure that you don't have old copies of the packages extracted. Run
2833 make clean clean-depends to verify this. 2841 make clean clean-depends to verify this.
2834 2842
2835 4. If the problem still exists, write a mail to the pkgsrc-users mailing list. 2843 4. If the problem still exists, write a mail to the pkgsrc-users mailing list.
2836 2844
28379.17. What does "Makefile appears to contain unresolved cvs/rcs/??? merge 28459.18. What does "Makefile appears to contain unresolved cvs/rcs/??? merge
2838conflicts" mean? 2846conflicts" mean?
2839 2847
2840You have modified a file from pkgsrc, and someone else has modified that same 2848You have modified a file from pkgsrc, and someone else has modified that same
2841file afterwards in the CVS repository. Both changes are in the same region of 2849file afterwards in the CVS repository. Both changes are in the same region of
2842the file, so when you updated pkgsrc, the cvs command marked the conflicting 2850the file, so when you updated pkgsrc, the cvs command marked the conflicting
2843changes in the file. Because of these markers, the file is no longer a valid 2851changes in the file. Because of these markers, the file is no longer a valid
2844Makefile. 2852Makefile.
2845 2853
2846Have a look at that file, and if you don't need your local changes anymore, you 2854Have a look at that file, and if you don't need your local changes anymore, you
2847can remove that file and run cvs -q update -dP in that directory to download 2855can remove that file and run cvs -q update -dP in that directory to download
2848the current version. 2856the current version.
2849 2857
2850Part II. The pkgsrc developer's guide 2858Part II. The pkgsrc developer's guide
2851 2859
2852This part of the book deals with creating and modifying packages. It starts 2860This part of the book deals with creating and modifying packages. It starts
2853with a "HOWTO"-like guide on creating a new package. The remaining chapters are 2861with a "HOWTO"-like guide on creating a new package. The remaining chapters are
2854more like a reference manual for pkgsrc. 2862more like a reference manual for pkgsrc.
2855 2863
2856Table of Contents 2864Table of Contents
2857 2865
285810. Creating a new pkgsrc package from scratch 286610. Creating a new pkgsrc package from scratch
2859 2867
2860 10.1. Common types of packages 2868 10.1. Common types of packages
2861 2869
2862 10.1.1. Perl modules 2870 10.1.1. Perl modules
2863 10.1.2. KDE3 applications 2871 10.1.2. KDE3 applications
2864 10.1.3. Python modules and programs 2872 10.1.3. Python modules and programs
2865 2873
2866 10.2. Examples 2874 10.2. Examples
2867 2875
2868 10.2.1. How the www/nvu package came into pkgsrc 2876 10.2.1. How the www/nvu package came into pkgsrc
2869 2877
287011. Package components - files, directories and contents 287811. Package components - files, directories and contents
2871 2879
2872 11.1. Makefile 2880 11.1. Makefile
2873 11.2. distinfo 2881 11.2. distinfo
2874 11.3. patches/* 2882 11.3. patches/*
2875 2883
2876 11.3.1. Structure of a single patch file 2884 11.3.1. Structure of a single patch file
2877 11.3.2. Creating patch files 2885 11.3.2. Creating patch files
2878 11.3.3. Sources where the patch files come from 2886 11.3.3. Sources where the patch files come from
2879 11.3.4. Patching guidelines 2887 11.3.4. Patching guidelines
2880 11.3.5. Feedback to the author 2888 11.3.5. Feedback to the author
2881 2889
2882 11.4. Other mandatory files 2890 11.4. Other mandatory files
2883 11.5. Optional files 2891 11.5. Optional files
2884 2892
2885 11.5.1. Files affecting the binary package 2893 11.5.1. Files affecting the binary package
2886 11.5.2. Files affecting the build process 2894 11.5.2. Files affecting the build process
2887 11.5.3. Files affecting nothing at all 2895 11.5.3. Files affecting nothing at all
2888 2896
2889 11.6. work* 2897 11.6. work*
2890 11.7. files/* 2898 11.7. files/*
2891 2899
289212. Programming in Makefiles 290012. Programming in Makefiles
2893 2901
2894 12.1. Caveats 2902 12.1. Caveats
2895 12.2. Makefile variables 2903 12.2. Makefile variables
2896 2904
2897 12.2.1. Naming conventions 2905 12.2.1. Naming conventions
2898 2906
2899 12.3. Code snippets 2907 12.3. Code snippets
2900 2908
2901 12.3.1. Adding things to a list 2909 12.3.1. Adding things to a list
2902 12.3.2. Converting an internal list into an external list 2910 12.3.2. Converting an internal list into an external list
2903 12.3.3. Passing variables to a shell command 2911 12.3.3. Passing variables to a shell command
2904 12.3.4. Quoting guideline 2912 12.3.4. Quoting guideline
2905 12.3.5. Workaround for a bug in BSD Make 2913 12.3.5. Workaround for a bug in BSD Make
2906 2914
290713. PLIST issues 291513. PLIST issues
2908 2916
2909 13.1. RCS ID 2917 13.1. RCS ID
2910 13.2. Semi-automatic PLIST generation 2918 13.2. Semi-automatic PLIST generation
2911 13.3. Tweaking output of make print-PLIST 2919 13.3. Tweaking output of make print-PLIST
2912 13.4. Variable substitution in PLIST 2920 13.4. Variable substitution in PLIST
2913 13.5. Man page compression 2921 13.5. Man page compression
2914 13.6. Changing PLIST source with PLIST_SRC 2922 13.6. Changing PLIST source with PLIST_SRC
2915 13.7. Platform-specific and differing PLISTs 2923 13.7. Platform-specific and differing PLISTs
2916 13.8. Sharing directories between packages 2924 13.8. Sharing directories between packages
2917 2925
291814. Buildlink methodology 292614. Buildlink methodology
2919 2927
2920 14.1. Converting packages to use buildlink3 2928 14.1. Converting packages to use buildlink3
2921 14.2. Writing buildlink3.mk files 2929 14.2. Writing buildlink3.mk files
2922 2930
2923 14.2.1. Anatomy of a buildlink3.mk file 2931 14.2.1. Anatomy of a buildlink3.mk file
2924 14.2.2. Updating BUILDLINK_API_DEPENDS.pkg and BUILDLINK_ABI_DEPENDS. 2932 14.2.2. Updating BUILDLINK_API_DEPENDS.pkg and BUILDLINK_ABI_DEPENDS.
2925 pkg in buildlink3.mk files 2933 pkg in buildlink3.mk files
2926 2934
2927 14.3. Writing builtin.mk files 2935 14.3. Writing builtin.mk files
2928 2936
2929 14.3.1. Anatomy of a builtin.mk file 2937 14.3.1. Anatomy of a builtin.mk file
2930 14.3.2. Global preferences for native or pkgsrc software 2938 14.3.2. Global preferences for native or pkgsrc software
2931 2939
293215. The pkginstall framework 294015. The pkginstall framework
2933 2941
2934 15.1. Files and directories outside the installation prefix 2942 15.1. Files and directories outside the installation prefix
2935 2943
2936 15.1.1. Directory manipulation 2944 15.1.1. Directory manipulation
2937 15.1.2. File manipulation 2945 15.1.2. File manipulation
2938 2946
2939 15.2. Configuration files 2947 15.2. Configuration files
2940 2948
2941 15.2.1. How PKG_SYSCONFDIR is set 2949 15.2.1. How PKG_SYSCONFDIR is set
2942 15.2.2. Telling the software where configuration files are 2950 15.2.2. Telling the software where configuration files are
2943 15.2.3. Patching installations 2951 15.2.3. Patching installations
2944 15.2.4. Disabling handling of configuration files 2952 15.2.4. Disabling handling of configuration files
2945 2953
2946 15.3. System startup scripts 2954 15.3. System startup scripts
2947 2955
2948 15.3.1. Disabling handling of system startup scripts 2956 15.3.1. Disabling handling of system startup scripts
2949 2957
2950 15.4. System users and groups 2958 15.4. System users and groups
2951 15.5. System shells 2959 15.5. System shells
2952 2960
2953 15.5.1. Disabling shell registration 2961 15.5.1. Disabling shell registration
2954 2962
2955 15.6. Fonts 2963 15.6. Fonts
2956 2964
2957 15.6.1. Disabling automatic update of the fonts databases 2965 15.6.1. Disabling automatic update of the fonts databases
2958 2966
295916. Options handling 296716. Options handling
2960 2968
2961 16.1. Global default options 2969 16.1. Global default options
2962 16.2. Converting packages to use bsd.options.mk 2970 16.2. Converting packages to use bsd.options.mk
2963 16.3. Option Names 2971 16.3. Option Names
2964 16.4. Determining the options of dependencies 2972 16.4. Determining the options of dependencies
2965 2973
296617. The build process 297417. The build process
2967 2975
2968 17.1. Introduction 2976 17.1. Introduction
2969 17.2. Program location 2977 17.2. Program location
2970 17.3. Directories used during the build process 2978 17.3. Directories used during the build process
2971 17.4. Running a phase 2979 17.4. Running a phase
2972 17.5. The fetch phase 2980 17.5. The fetch phase
2973 2981
2974 17.5.1. What to fetch and where to get it from 2982 17.5.1. What to fetch and where to get it from
2975 17.5.2. How are the files fetched? 2983 17.5.2. How are the files fetched?
2976 2984
2977 17.6. The checksum phase 2985 17.6. The checksum phase
2978 17.7. The extract phase 2986 17.7. The extract phase
2979 17.8. The patch phase 2987 17.8. The patch phase
2980 17.9. The tools phase 2988 17.9. The tools phase
2981 17.10. The wrapper phase 2989 17.10. The wrapper phase
2982 17.11. The configure phase 2990 17.11. The configure phase
2983 17.12. The build phase 2991 17.12. The build phase
2984 17.13. The test phase 2992 17.13. The test phase
2985 17.14. The install phase 2993 17.14. The install phase
2986 17.15. The package phase 2994 17.15. The package phase
2987 17.16. Cleaning up 2995 17.16. Cleaning up
2988 17.17. Other helpful targets 2996 17.17. Other helpful targets
2989 2997
299018. Tools needed for building or running 299818. Tools needed for building or running
2991 2999
2992 18.1. Tools for pkgsrc builds 3000 18.1. Tools for pkgsrc builds
2993 18.2. Tools needed by packages 3001 18.2. Tools needed by packages
2994 18.3. Tools provided by platforms 3002 18.3. Tools provided by platforms
2995 18.4. Questions regarding the tools 3003 18.4. Questions regarding the tools
2996 3004
299719. Making your package work 300519. Making your package work
2998 3006
2999 19.1. General operation 3007 19.1. General operation
3000 3008
3001 19.1.1. Portability of packages 3009 19.1.1. Portability of packages
3002 19.1.2. How to pull in user-settable variables from mk.conf 3010 19.1.2. How to pull in user-settable variables from mk.conf
3003 19.1.3. User interaction 3011 19.1.3. User interaction
3004 19.1.4. Handling licenses 3012 19.1.4. Handling licenses
3005 19.1.5. Restricted packages 3013 19.1.5. Restricted packages
3006 19.1.6. Handling dependencies 3014 19.1.6. Handling dependencies
3007 19.1.7. Handling conflicts with other packages 3015 19.1.7. Handling conflicts with other packages
3008 19.1.8. Packages that cannot or should not be built 3016 19.1.8. Packages that cannot or should not be built
3009 19.1.9. Packages which should not be deleted, once installed 3017 19.1.9. Packages which should not be deleted, once installed
3010 19.1.10. Handling packages with security problems 3018 19.1.10. Handling packages with security problems
3011 19.1.11. How to handle incrementing versions when fixing an existing 3019 19.1.11. How to handle incrementing versions when fixing an existing
3012 package 3020 package
3013 19.1.12. Substituting variable text in the package files (the SUBST 3021 19.1.12. Substituting variable text in the package files (the SUBST
3014 framework) 3022 framework)
3015 3023
3016 19.2. Fixing problems in the fetch phase 3024 19.2. Fixing problems in the fetch phase
3017 3025
3018 19.2.1. Packages whose distfiles aren't available for plain downloading 3026 19.2.1. Packages whose distfiles aren't available for plain downloading
3019 19.2.2. How to handle modified distfiles with the 'old' name 3027 19.2.2. How to handle modified distfiles with the 'old' name
3020 3028
3021 19.3. Fixing problems in the configure phase 3029 19.3. Fixing problems in the configure phase
3022 3030
3023 19.3.1. Shared libraries - libtool 3031 19.3.1. Shared libraries - libtool
3024 19.3.2. Using libtool on GNU packages that already support libtool 3032 19.3.2. Using libtool on GNU packages that already support libtool
3025 19.3.3. GNU Autoconf/Automake 3033 19.3.3. GNU Autoconf/Automake
3026 3034
3027 19.4. Programming languages 3035 19.4. Programming languages
3028 3036
3029 19.4.1. C, C++, and Fortran 3037 19.4.1. C, C++, and Fortran
3030 19.4.2. Java 3038 19.4.2. Java
3031 19.4.3. Packages containing perl scripts 3039 19.4.3. Packages containing perl scripts
3032 19.4.4. Packages containing shell scripts 3040 19.4.4. Packages containing shell scripts
3033 19.4.5. Other programming languages 3041 19.4.5. Other programming languages
3034 3042
3035 19.5. Fixing problems in the build phase 3043 19.5. Fixing problems in the build phase
3036 3044
3037 19.5.1. Compiling C and C++ code conditionally 3045 19.5.1. Compiling C and C++ code conditionally
3038 19.5.2. How to handle compiler bugs 3046 19.5.2. How to handle compiler bugs
3039 19.5.3. Undefined reference to "..." 3047 19.5.3. Undefined reference to "..."
3040 19.5.4. Running out of memory 3048 19.5.4. Running out of memory
3041 3049
3042 19.6. Fixing problems in the install phase 3050 19.6. Fixing problems in the install phase
3043 3051
3044 19.6.1. Creating needed directories 3052 19.6.1. Creating needed directories
3045 19.6.2. Where to install documentation 3053 19.6.2. Where to install documentation
3046 19.6.3. Installing highscore files 3054 19.6.3. Installing highscore files
3047 19.6.4. Adding DESTDIR support to packages 3055 19.6.4. Adding DESTDIR support to packages
3048 19.6.5. Packages with hardcoded paths to other interpreters 3056 19.6.5. Packages with hardcoded paths to other interpreters
3049 19.6.6. Packages installing perl modules 3057 19.6.6. Packages installing perl modules
3050 19.6.7. Packages installing info files 3058 19.6.7. Packages installing info files
3051 19.6.8. Packages installing man pages 3059 19.6.8. Packages installing man pages
3052 19.6.9. Packages installing GConf data files 3060 19.6.9. Packages installing GConf data files
3053 19.6.10. Packages installing scrollkeeper/rarian data files 3061 19.6.10. Packages installing scrollkeeper/rarian data files
3054 19.6.11. Packages installing X11 fonts 3062 19.6.11. Packages installing X11 fonts
3055 19.6.12. Packages installing GTK2 modules 3063 19.6.12. Packages installing GTK2 modules
3056 19.6.13. Packages installing SGML or XML data 3064 19.6.13. Packages installing SGML or XML data
3057 19.6.14. Packages installing extensions to the MIME database 3065 19.6.14. Packages installing extensions to the MIME database
3058 19.6.15. Packages using intltool 3066 19.6.15. Packages using intltool
3059 19.6.16. Packages installing startup scripts 3067 19.6.16. Packages installing startup scripts
3060 19.6.17. Packages installing TeX modules 3068 19.6.17. Packages installing TeX modules
3061 19.6.18. Packages supporting running binaries in emulation 3069 19.6.18. Packages supporting running binaries in emulation
3062 19.6.19. Packages installing hicolor theme icons 3070 19.6.19. Packages installing hicolor theme icons
3063 19.6.20. Packages installing desktop files 3071 19.6.20. Packages installing desktop files
3064 3072
3065 19.7. Marking packages as having problems 3073 19.7. Marking packages as having problems
3066 3074
306720. Debugging 307520. Debugging
306821. Submitting and Committing 307621. Submitting and Committing
3069 3077
3070 21.1. Submitting binary packages 3078 21.1. Submitting binary packages
3071 21.2. Submitting source packages (for non-NetBSD-developers) 3079 21.2. Submitting source packages (for non-NetBSD-developers)
3072 21.3. General notes when adding, updating, or removing packages 3080 21.3. General notes when adding, updating, or removing packages
3073 21.4. Committing: Adding a package to CVS 3081 21.4. Committing: Adding a package to CVS
3074 21.5. Updating a package to a newer version 3082 21.5. Updating a package to a newer version
3075 21.6. Renaming a package in pkgsrc 3083 21.6. Renaming a package in pkgsrc
3076 21.7. Moving a package in pkgsrc 3084 21.7. Moving a package in pkgsrc
3077 3085
307822. Frequently Asked Questions 308622. Frequently Asked Questions
307923. GNOME packaging and porting 308723. GNOME packaging and porting
3080 3088
3081 23.1. Meta packages 3089 23.1. Meta packages
3082 23.2. Packaging a GNOME application 3090 23.2. Packaging a GNOME application
3083 23.3. Updating GNOME to a newer version 3091 23.3. Updating GNOME to a newer version
3084 23.4. Patching guidelines 3092 23.4. Patching guidelines
3085 3093
3086Chapter 10. Creating a new pkgsrc package from scratch 3094Chapter 10. Creating a new pkgsrc package from scratch
3087 3095
3088Table of Contents 3096Table of Contents
3089 3097
309010.1. Common types of packages 309810.1. Common types of packages
3091 3099
3092 10.1.1. Perl modules 3100 10.1.1. Perl modules
3093 10.1.2. KDE3 applications 3101 10.1.2. KDE3 applications
3094 10.1.3. Python modules and programs 3102 10.1.3. Python modules and programs
3095 3103
309610.2. Examples 310410.2. Examples
3097 3105
3098 10.2.1. How the www/nvu package came into pkgsrc 3106 10.2.1. How the www/nvu package came into pkgsrc
3099 3107
3100When you find a package that is not yet in pkgsrc, you most likely have a URL 3108When you find a package that is not yet in pkgsrc, you most likely have a URL
3101from where you can download the source code. Starting with this URL, creating a 3109from where you can download the source code. Starting with this URL, creating a
3102package involves only a few steps. 3110package involves only a few steps.
3103 3111
3104 1. First, install the packages pkgtools/url2pkg and pkgtools/pkglint. 3112 1. First, install the packages pkgtools/url2pkg and pkgtools/pkglint.
3105 3113
3106 2. Then, choose one of the top-level directories as the category in which you 3114 2. Then, choose one of the top-level directories as the category in which you
3107 want to place your package. You can also create a directory of your own 3115 want to place your package. You can also create a directory of your own
3108 (maybe called local). In that category directory, create another directory 3116 (maybe called local). In that category directory, create another directory
3109 for your package and change into it. 3117 for your package and change into it.
3110 3118
3111 3. Run the program url2pkg, which will ask you for a URL. Enter the URL of the 3119 3. Run the program url2pkg, which will ask you for a URL. Enter the URL of the
3112 distribution file (in most cases a .tar.gz file) and watch how the basic 3120 distribution file (in most cases a .tar.gz file) and watch how the basic
3113 ingredients of your package are created automatically. The distribution 3121 ingredients of your package are created automatically. The distribution
3114 file is extracted automatically to fill in some details in the Makefile 3122 file is extracted automatically to fill in some details in the Makefile
3115 that would otherwise have to be done manually. 3123 that would otherwise have to be done manually.
3116 3124
3117 4. Examine the extracted files to determine the dependencies of your package. 3125 4. Examine the extracted files to determine the dependencies of your package.
3118 Ideally, this is mentioned in some README file, but things may differ. For 3126 Ideally, this is mentioned in some README file, but things may differ. For
3119 each of these dependencies, look where it exists in pkgsrc, and if there is 3127 each of these dependencies, look where it exists in pkgsrc, and if there is
3120 a file called buildlink3.mk in that directory, add a line to your package 3128 a file called buildlink3.mk in that directory, add a line to your package
3121 Makefile which includes that file just before the last line. If the 3129 Makefile which includes that file just before the last line. If the
3122 buildlink3.mk file does not exist, it must be created first. The 3130 buildlink3.mk file does not exist, it must be created first. The
3123 buildlink3.mk file makes sure that the package's include files and 3131 buildlink3.mk file makes sure that the package's include files and
3124 libraries are provided. 3132 libraries are provided.
3125 3133
3126 If you just need binaries from a package, add a DEPENDS line to the 3134 If you just need binaries from a package, add a DEPENDS line to the
3127 Makefile, which specifies the version of the dependency and where it can be 3135 Makefile, which specifies the version of the dependency and where it can be
3128 found in pkgsrc. This line should be placed in the third paragraph. If the 3136 found in pkgsrc. This line should be placed in the third paragraph. If the
3129 dependency is only needed for building the package, but not when using it, 3137 dependency is only needed for building the package, but not when using it,
3130 use BUILD_DEPENDS instead of DEPENDS. Your package may then look like this: 3138 use BUILD_DEPENDS instead of DEPENDS. Your package may then look like this:
3131 3139
3132 [...] 3140 [...]
3133 3141
3134 BUILD_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt 3142 BUILD_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt
3135 DEPENDS+= screen-[0-9]*:../../misc/screen 3143 DEPENDS+= screen-[0-9]*:../../misc/screen
3136 DEPENDS+= screen>=4.0:../../misc/screen 3144 DEPENDS+= screen>=4.0:../../misc/screen
3137 3145
3138 [...] 3146 [...]
3139 3147
3140 .include "../../category/package/buildlink3.mk" 3148 .include "../../category/package/buildlink3.mk"
3141 .include "../../devel/glib2/buildlink3.mk" 3149 .include "../../devel/glib2/buildlink3.mk"
3142 .include "../../mk/bsd.pkg.mk" 3150 .include "../../mk/bsd.pkg.mk"
3143 3151
3144 5. Run pkglint to see what things still need to be done to make your package a 3152 5. Run pkglint to see what things still need to be done to make your package a
3145 "good" one. If you don't know what pkglint's warnings want to tell you, try 3153 "good" one. If you don't know what pkglint's warnings want to tell you, try
3146 pkglint --explain or pkglint -e, which outputs additional explanations. 3154 pkglint --explain or pkglint -e, which outputs additional explanations.
3147 3155
3148 6. In many cases the package is not yet ready to build. You can find 3156 6. In many cases the package is not yet ready to build. You can find
3149 instructions for the most common cases in the next section, Section 10.1, 3157 instructions for the most common cases in the next section, Section 10.1,
3150 "Common types of packages". After you have followed the instructions over 3158 "Common types of packages". After you have followed the instructions over
3151 there, you can hopefully continue here. 3159 there, you can hopefully continue here.
3152 3160
3153 7. Run bmake clean to clean the working directory from the extracted files. 3161 7. Run bmake clean to clean the working directory from the extracted files.
3154 Besides these files, a lot of cache files and other system information has 3162 Besides these files, a lot of cache files and other system information has
3155 been saved in the working directory, which may become wrong after you 3163 been saved in the working directory, which may become wrong after you
3156 edited the Makefile. 3164 edited the Makefile.
3157 3165
3158 8. Now, run bmake to build the package. For the various things that can go 3166 8. Now, run bmake to build the package. For the various things that can go
3159 wrong in this phase, consult Chapter 19, Making your package work. 3167 wrong in this phase, consult Chapter 19, Making your package work.
3160 3168
3161 9. When the package builds fine, the next step is to install the package. Run  3169 9. When the package builds fine, the next step is to install the package. Run
3162 bmake install and hope that everything works. 3170 bmake install and hope that everything works.
3163 3171
316410. Up to now, the file PLIST, which contains a list of the files that are 317210. Up to now, the file PLIST, which contains a list of the files that are
3165 installed by the package, is nearly empty. Run bmake print-PLIST >PLIST to 3173 installed by the package, is nearly empty. Run bmake print-PLIST >PLIST to
3166 generate a probably correct list. Check the file using your preferred text 3174 generate a probably correct list. Check the file using your preferred text
3167 editor to see if the list of files looks plausible. 3175 editor to see if the list of files looks plausible.
3168 3176
316911. Run pkglint again to see if the generated PLIST contains garbage or not. 317711. Run pkglint again to see if the generated PLIST contains garbage or not.
3170 3178
317112. When you ran bmake install, the package has been registered in the database 317912. When you ran bmake install, the package has been registered in the database
3172 of installed files, but with an empty list of files. To fix this, run bmake 3180 of installed files, but with an empty list of files. To fix this, run bmake
3173 deinstall and bmake install again. Now the package is registered with the 3181 deinstall and bmake install again. Now the package is registered with the
3174 list of files from PLIST. 3182 list of files from PLIST.
3175 3183
317613. Run bmake package to create a binary package from the set of installed 318413. Run bmake package to create a binary package from the set of installed
3177 files. 3185 files.
3178 3186
317910.1. Common types of packages 318710.1. Common types of packages
3180 3188
318110.1.1. Perl modules 318910.1.1. Perl modules
3182 3190
3183Simple Perl modules are handled automatically by url2pkg, including 3191Simple Perl modules are handled automatically by url2pkg, including
3184dependencies. 3192dependencies.
3185 3193
318610.1.2. KDE3 applications 319410.1.2. KDE3 applications
3187 3195
3188KDE3 applications should always include meta-pkgs/kde3/kde3.mk, which contains 3196KDE3 applications should always include meta-pkgs/kde3/kde3.mk, which contains
3189numerous settings that are typical of KDE3 packages. 3197numerous settings that are typical of KDE3 packages.
3190 3198
319110.1.3. Python modules and programs 319910.1.3. Python modules and programs
3192 3200
3193Python modules and programs packages are easily created using a set of 3201Python modules and programs packages are easily created using a set of
3194predefined variables. 3202predefined variables.
3195 3203
3196If some Python versions are not supported by the software, set the 3204If some Python versions are not supported by the software, set the
3197PYTHON_VERSIONS_INCOMPATIBLE variable to the Python versions that are not 3205PYTHON_VERSIONS_INCOMPATIBLE variable to the Python versions that are not
3198supported, e.g. 3206supported, e.g.
3199 3207
3200PYTHON_VERSIONS_INCOMPATIBLE= 26 3208PYTHON_VERSIONS_INCOMPATIBLE= 26
3201 3209
3202If the packaged software is a Python module, include "../../lang/python/ 3210If the packaged software is a Python module, include "../../lang/python/
3203extension.mk". In this case, the package directory should be called " 3211extension.mk". In this case, the package directory should be called "
3204py-software" and PKGNAME should be set to "${PYPKGPREFIX}-${DISTNAME}", e.g. 3212py-software" and PKGNAME should be set to "${PYPKGPREFIX}-${DISTNAME}", e.g.
3205 3213
3206DISTNAME= foopymodule-1.2.10 3214DISTNAME= foopymodule-1.2.10
3207PKGNAME= ${PYPKGPREFIX}-${DISTNAME} 3215PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
3208 3216
3209If it is an application, include "../../lang/python/application.mk". In order 3217If it is an application, include "../../lang/python/application.mk". In order
3210to correctly set the path to the Python interpreter, use the REPLACE_PYTHON 3218to correctly set the path to the Python interpreter, use the REPLACE_PYTHON
3211variable and set it to the list of files (paths relative to WRKSRC) that must 3219variable and set it to the list of files (paths relative to WRKSRC) that must
3212be corrected. For example: 3220be corrected. For example:
3213 3221
3214REPLACE_PYTHON= *.py 3222REPLACE_PYTHON= *.py
3215 3223
3216Most Python packages use either "distutils" or easy-setup ("eggs"). If the 3224Most Python packages use either "distutils" or easy-setup ("eggs"). If the
3217software uses "distutils", include "../../lang/python/distutils.mk". so pkgsrc 3225software uses "distutils", include "../../lang/python/distutils.mk". so pkgsrc
3218will use this framework. "distutils" uses a script called setup.py, if the " 3226will use this framework. "distutils" uses a script called setup.py, if the "
3219distutils" driver is not called setup.py, set the PYSETUP variable to the name 3227distutils" driver is not called setup.py, set the PYSETUP variable to the name
3220of the script. 3228of the script.
3221 3229
3222Otherwise, if the packaged software is egg-aware, you only need to include ".. 3230Otherwise, if the packaged software is egg-aware, you only need to include "..
3223/../lang/python/egg.mk". 3231/../lang/python/egg.mk".
3224 3232
3225Some Python modules have separate distributions for Python-2.x and Python-3.x 3233Some Python modules have separate distributions for Python-2.x and Python-3.x
3226support. In pkgsrc this is handled by the versioned_dependencies.mk file. Set 3234support. In pkgsrc this is handled by the versioned_dependencies.mk file. Set
3227PYTHON_VERSIONED_DEPENDENCIES to the list of packages that should be depended 3235PYTHON_VERSIONED_DEPENDENCIES to the list of packages that should be depended
3228upon and include "../../lang/python/versioned_dependencies.mk", then the pkgsrc 3236upon and include "../../lang/python/versioned_dependencies.mk", then the pkgsrc
3229infrastructure will depend on the appropriate package version. For example: 3237infrastructure will depend on the appropriate package version. For example:
3230 3238
3231PYTHON_VERSIONED_DEPENDENCIES=dateutil dns 3239PYTHON_VERSIONED_DEPENDENCIES=dateutil dns
3232 3240
3233Look inside versioned_dependencies.mk for a list of supported packages. 3241Look inside versioned_dependencies.mk for a list of supported packages.
3234 3242
323510.2. Examples 324310.2. Examples
3236 3244
323710.2.1. How the www/nvu package came into pkgsrc 324510.2.1. How the www/nvu package came into pkgsrc
3238 3246
323910.2.1.1. The initial package 324710.2.1.1. The initial package
3240 3248
3241Looking at the file pkgsrc/doc/TODO, I saw that the "nvu" package has not yet 3249Looking at the file pkgsrc/doc/TODO, I saw that the "nvu" package has not yet
3242been imported into pkgsrc. As the description says it has to do with the web, 3250been imported into pkgsrc. As the description says it has to do with the web,
3243the obvious choice for the category is "www". 3251the obvious choice for the category is "www".
3244 3252
3245$ mkdir www/nvu 3253$ mkdir www/nvu
3246$ cd www/nvu 3254$ cd www/nvu
3247 3255
3248The web site says that the sources are available as a tar file, so I fed that 3256The web site says that the sources are available as a tar file, so I fed that
3249URL to the url2pkg program: 3257URL to the url2pkg program:
3250 3258
3251$ url2pkg http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2 3259$ url2pkg http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2
3252 3260
3253My editor popped up, and I added a PKGNAME line below the DISTNAME line, as the 3261My editor popped up, and I added a PKGNAME line below the DISTNAME line, as the
3254package name should not have the word "sources" in it. I also filled in the 3262package name should not have the word "sources" in it. I also filled in the
3255MAINTAINER, HOMEPAGE and COMMENT fields. Then the package Makefile looked like 3263MAINTAINER, HOMEPAGE and COMMENT fields. Then the package Makefile looked like
3256that: 3264that:
3257 3265
3258# $NetBSD$ 3266# $NetBSD$
3259# 3267#
3260 3268
3261DISTNAME= nvu-1.0-sources 3269DISTNAME= nvu-1.0-sources
3262PKGNAME= nvu-1.0 3270PKGNAME= nvu-1.0
3263CATEGORIES= www 3271CATEGORIES= www
3264MASTER_SITES= http://cvs.nvu.com/download/ 3272MASTER_SITES= http://cvs.nvu.com/download/
3265EXTRACT_SUFX= .tar.bz2 3273EXTRACT_SUFX= .tar.bz2
3266 3274
3267MAINTAINER= rillig@NetBSD.org 3275MAINTAINER= rillig@NetBSD.org
3268HOMEPAGE= http://cvs.nvu.com/ 3276HOMEPAGE= http://cvs.nvu.com/
3269COMMENT= Web Authoring System 3277COMMENT= Web Authoring System
3270 3278
3271# url2pkg-marker (please do not remove this line.) 3279# url2pkg-marker (please do not remove this line.)
3272.include "../../mk/bsd.pkg.mk" 3280.include "../../mk/bsd.pkg.mk"
3273 3281
3274Then, I quit the editor and watched pkgsrc downloading a large source archive: 3282Then, I quit the editor and watched pkgsrc downloading a large source archive:
3275 3283
3276url2pkg> Running "make makesum" ... 3284url2pkg> Running "make makesum" ...
3277=> Required installed package digest>=20010302: digest-20060826 found 3285=> Required installed package digest>=20010302: digest-20060826 found
3278=> Fetching nvu-1.0-sources.tar.bz2 3286=> Fetching nvu-1.0-sources.tar.bz2
3279Requesting http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2 3287Requesting http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2
3280100% |*************************************| 28992 KB 150.77 KB/s00:00 ETA 3288100% |*************************************| 28992 KB 150.77 KB/s00:00 ETA
328129687976 bytes retrieved in 03:12 (150.77 KB/s) 328929687976 bytes retrieved in 03:12 (150.77 KB/s)
3282url2pkg> Running "make extract" ... 3290url2pkg> Running "make extract" ...
3283=> Required installed package digest>=20010302: digest-20060826 found 3291=> Required installed package digest>=20010302: digest-20060826 found
3284=> Checksum SHA1 OK for nvu-1.0-sources.tar.bz2 3292=> Checksum SHA1 OK for nvu-1.0-sources.tar.bz2
3285=> Checksum RMD160 OK for nvu-1.0-sources.tar.bz2 3293=> Checksum RMD160 OK for nvu-1.0-sources.tar.bz2
3286work.bacc -> /tmp/roland/pkgsrc/www/nvu/work.bacc 3294work.bacc -> /tmp/roland/pkgsrc/www/nvu/work.bacc
3287===> Installing dependencies for nvu-1.0 3295===> Installing dependencies for nvu-1.0
3288===> Overriding tools for nvu-1.0 3296===> Overriding tools for nvu-1.0
3289===> Extracting for nvu-1.0 3297===> Extracting for nvu-1.0
3290url2pkg> Adjusting the Makefile. 3298url2pkg> Adjusting the Makefile.
3291 3299
3292Remember to correct CATEGORIES, HOMEPAGE, COMMENT, and DESCR when you're done! 3300Remember to correct CATEGORIES, HOMEPAGE, COMMENT, and DESCR when you're done!
3293 3301
3294Good luck! (See pkgsrc/doc/pkgsrc.txt for some more help :-) 3302Good luck! (See pkgsrc/doc/pkgsrc.txt for some more help :-)
3295 3303
329610.2.1.2. Fixing all kinds of problems to make the package work 330410.2.1.2. Fixing all kinds of problems to make the package work
3297 3305
3298Now that the package has been extracted, let's see what's inside it. The 3306Now that the package has been extracted, let's see what's inside it. The
3299package has a README.txt, but that only says something about mozilla, so it's 3307package has a README.txt, but that only says something about mozilla, so it's
3300probably useless for seeing what dependencies this package has. But since there 3308probably useless for seeing what dependencies this package has. But since there
3301is a GNU configure script in the package, let's hope that it will complain 3309is a GNU configure script in the package, let's hope that it will complain
3302about everything it needs. 3310about everything it needs.
3303 3311
3304$ bmake 3312$ bmake
3305=> Required installed package digest>=20010302: digest-20060826 found 3313=> Required installed package digest>=20010302: digest-20060826 found
3306=> Checksum SHA1 OK for nvu-1.0-sources.tar.bz2 3314=> Checksum SHA1 OK for nvu-1.0-sources.tar.bz2
3307=> Checksum RMD160 OK for nvu-1.0-sources.tar.bz2 3315=> Checksum RMD160 OK for nvu-1.0-sources.tar.bz2
3308===> Patching for nvu-1.0 3316===> Patching for nvu-1.0
3309===> Creating toolchain wrappers for nvu-1.0 3317===> Creating toolchain wrappers for nvu-1.0
3310===> Configuring for nvu-1.0 3318===> Configuring for nvu-1.0
3311[...] 3319[...]
3312configure: error: Perl 5.004 or higher is required. 3320configure: error: Perl 5.004 or higher is required.
3313[...] 3321[...]
3314WARNING: Please add USE_TOOLS+=perl to the package Makefile. 3322WARNING: Please add USE_TOOLS+=perl to the package Makefile.
3315[...] 3323[...]
3316 3324
3317That worked quite well. So I opened the package Makefile in my editor, and 3325That worked quite well. So I opened the package Makefile in my editor, and
3318since it already has a USE_TOOLS line, I just appended "perl" to it. Since the 3326since it already has a USE_TOOLS line, I just appended "perl" to it. Since the
3319dependencies of the package have changed now, and since a perl wrapper is 3327dependencies of the package have changed now, and since a perl wrapper is
3320automatically installed in the "tools" phase, I need to build the package from 3328automatically installed in the "tools" phase, I need to build the package from
3321scratch. 3329scratch.
3322 3330
3323$ bmake clean 3331$ bmake clean
3324===> Cleaning for nvu-1.0 3332===> Cleaning for nvu-1.0
3325$ bmake 3333$ bmake
3326[...] 3334[...]
3327*** /tmp/roland/pkgsrc/www/nvu/work.bacc/.tools/bin/make is not \ 3335*** /tmp/roland/pkgsrc/www/nvu/work.bacc/.tools/bin/make is not \
3328GNU Make. You will not be able to build Mozilla without GNU Make. 3336GNU Make. You will not be able to build Mozilla without GNU Make.
3329[...] 3337[...]
3330 3338
3331So I added "gmake" to the USE_TOOLS line and tried again (from scratch). 3339So I added "gmake" to the USE_TOOLS line and tried again (from scratch).
3332 3340
3333[...] 3341[...]
3334checking for GTK - version >= 1.2.0... no 3342checking for GTK - version >= 1.2.0... no
3335*** Could not run GTK test program, checking why... 3343*** Could not run GTK test program, checking why...
3336[...] 3344[...]
3337 3345
3338Now to the other dependencies. The first question is: Where is the GTK package 3346Now to the other dependencies. The first question is: Where is the GTK package
3339hidden in pkgsrc? 3347hidden in pkgsrc?
3340 3348
3341$ echo ../../*/gtk* 3349$ echo ../../*/gtk*
3342[many packages ...] 3350[many packages ...]
3343$ echo ../../*/gtk 3351$ echo ../../*/gtk
3344../../x11/gtk 3352../../x11/gtk
3345$ echo ../../*/gtk2 3353$ echo ../../*/gtk2
3346../../x11/gtk2 3354../../x11/gtk2
3347$ echo ../../*/gtk2/bui* 3355$ echo ../../*/gtk2/bui*
3348../../x11/gtk2/buildlink3.mk 3356../../x11/gtk2/buildlink3.mk
3349 3357
3350The first try was definitely too broad. The second one had exactly one result, 3358The first try was definitely too broad. The second one had exactly one result,
3351which is very good. But there is one pitfall with GNOME packages. Before GNOME 3359which is very good. But there is one pitfall with GNOME packages. Before GNOME
33522 had been released, there were already many GNOME 1 packages in pkgsrc. To be 33602 had been released, there were already many GNOME 1 packages in pkgsrc. To be
3353able to continue to use these packages, the GNOME 2 packages were imported as 3361able to continue to use these packages, the GNOME 2 packages were imported as
3354separate packages, and their names usually have a "2" appended. So I checked 3362separate packages, and their names usually have a "2" appended. So I checked
3355whether this was the case here, and indeed it was. 3363whether this was the case here, and indeed it was.
3356 3364
3357Since the GTK2 package has a buildlink3.mk file, adding the dependency is very 3365Since the GTK2 package has a buildlink3.mk file, adding the dependency is very
3358easy. I just inserted an .include line before the last line of the package 3366easy. I just inserted an .include line before the last line of the package
3359Makefile, so that it now looks like this: 3367Makefile, so that it now looks like this:
3360 3368
3361[...] 3369[...]
3362.include "../../x11/gtk2/buildlink3.mk" 3370.include "../../x11/gtk2/buildlink3.mk"
3363.include "../../mk/bsd.pkg.mk 3371.include "../../mk/bsd.pkg.mk
3364 3372
3365After another bmake clean && bmake, the answer was: 3373After another bmake clean && bmake, the answer was:
3366 3374
3367[...] 3375[...]
3368checking for gtk-config... /home/roland/pkg/bin/gtk-config 3376checking for gtk-config... /home/roland/pkg/bin/gtk-config
3369checking for GTK - version >= 1.2.0... no 3377checking for GTK - version >= 1.2.0... no
3370*** Could not run GTK test program, checking why... 3378*** Could not run GTK test program, checking why...
3371*** The test program failed to compile or link. See the file config.log for the 3379*** The test program failed to compile or link. See the file config.log for the
3372*** exact error that occured. This usually means GTK was incorrectly installed 3380*** exact error that occured. This usually means GTK was incorrectly installed
3373*** or that you have moved GTK since it was installed. In the latter case, you 3381*** or that you have moved GTK since it was installed. In the latter case, you
3374*** may want to edit the gtk-config script: /home/roland/pkg/bin/gtk-config 3382*** may want to edit the gtk-config script: /home/roland/pkg/bin/gtk-config
3375configure: error: Test for GTK failed. 3383configure: error: Test for GTK failed.
3376[...] 3384[...]
3377 3385
3378In this particular case, the assumption that "every package prefers GNOME 2" 3386In this particular case, the assumption that "every package prefers GNOME 2"
3379had been wrong. The first of the lines above told me that this package really 3387had been wrong. The first of the lines above told me that this package really
3380wanted to have the GNOME 1 version of GTK. If the package had looked for GTK2, 3388wanted to have the GNOME 1 version of GTK. If the package had looked for GTK2,
3381it would have looked for pkg-config instead of gtk-config. So I changed the x11 3389it would have looked for pkg-config instead of gtk-config. So I changed the x11
3382/gtk2 to x11/gtk in the package Makefile, and tried again. 3390/gtk2 to x11/gtk in the package Makefile, and tried again.
3383 3391
3384[...] 3392[...]
3385cc -o xpidl.o -c -DOSTYPE=\"NetBSD3\" -DOSARCH=\"NetBSD\" [...] 3393cc -o xpidl.o -c -DOSTYPE=\"NetBSD3\" -DOSARCH=\"NetBSD\" [...]
3386In file included from xpidl.c:42: 3394In file included from xpidl.c:42:
3387xpidl.h:53:24: libIDL/IDL.h: No such file or directory 3395xpidl.h:53:24: libIDL/IDL.h: No such file or directory
3388In file included from xpidl.c:42: 3396In file included from xpidl.c:42:
3389xpidl.h:132: error: parse error before "IDL_ns" 3397xpidl.h:132: error: parse error before "IDL_ns"
3390[...] 3398[...]
3391 3399
3392The package still does not find all of its dependencies. Now the question is: 3400The package still does not find all of its dependencies. Now the question is:
3393Which package provides the libIDL/IDL.h header file? 3401Which package provides the libIDL/IDL.h header file?
3394 3402
3395$ echo ../../*/*idl* 3403$ echo ../../*/*idl*
3396../../devel/py-idle ../../wip/idled ../../x11/acidlaunch 3404../../devel/py-idle ../../wip/idled ../../x11/acidlaunch
3397$ echo ../../*/*IDL* 3405$ echo ../../*/*IDL*
3398../../net/libIDL 3406../../net/libIDL
3399 3407
3400Let's take the one from the second try. So I included the ../../net/libIDL/ 3408Let's take the one from the second try. So I included the ../../net/libIDL/
3401buildlink3.mk file and tried again. But the error didn't change. After digging 3409buildlink3.mk file and tried again. But the error didn't change. After digging
3402through some of the code, I concluded that the build process of the package was 3410through some of the code, I concluded that the build process of the package was
3403broken and couldn't have ever worked, but since the Mozilla source tree is 3411broken and couldn't have ever worked, but since the Mozilla source tree is
3404quite large, I didn't want to fix it. So I added the following to the package 3412quite large, I didn't want to fix it. So I added the following to the package
3405Makefile and tried again: 3413Makefile and tried again:
3406 3414
3407CPPFLAGS+= -I${BUILDLINK_PREFIX.libIDL}/include/libIDL-2.0 3415CPPFLAGS+= -I${BUILDLINK_PREFIX.libIDL}/include/libIDL-2.0
3408BUILDLINK_TRANSFORM+= -l:IDL:IDL-2 3416BUILDLINK_TRANSFORM+= -l:IDL:IDL-2
3409 3417
3410The latter line is needed because the package expects the library libIDL.so, 3418The latter line is needed because the package expects the library libIDL.so,
3411but only libIDL-2.so is available. So I told the compiler wrapper to rewrite 3419but only libIDL-2.so is available. So I told the compiler wrapper to rewrite
3412that on the fly. 3420that on the fly.
3413 3421
3414The next problem was related to a recent change of the FreeType interface. I 3422The next problem was related to a recent change of the FreeType interface. I
3415looked up in www/seamonkey which patch files were relevant for this issue and 3423looked up in www/seamonkey which patch files were relevant for this issue and
3416copied them to the patches directory. Then I retried, fixed the patches so that 3424copied them to the patches directory. Then I retried, fixed the patches so that
3417they applied cleanly and retried again. This time, everything worked. 3425they applied cleanly and retried again. This time, everything worked.
3418 3426
341910.2.1.3. Installing the package 342710.2.1.3. Installing the package
3420 3428
3421$ bmake CHECK_FILES=no install 3429$ bmake CHECK_FILES=no install
3422[...] 3430[...]
3423$ bmake print-PLIST >PLIST 3431$ bmake print-PLIST >PLIST
3424$ bmake deinstall 3432$ bmake deinstall
3425$ bmake install 3433$ bmake install
3426 3434
3427Chapter 11. Package components - files, directories and contents 3435Chapter 11. Package components - files, directories and contents
3428 3436
3429Table of Contents 3437Table of Contents
3430 3438
343111.1. Makefile 343911.1. Makefile
343211.2. distinfo 344011.2. distinfo
343311.3. patches/* 344111.3. patches/*
3434 3442
3435 11.3.1. Structure of a single patch file 3443 11.3.1. Structure of a single patch file
3436 11.3.2. Creating patch files 3444 11.3.2. Creating patch files
3437 11.3.3. Sources where the patch files come from 3445 11.3.3. Sources where the patch files come from
3438 11.3.4. Patching guidelines 3446 11.3.4. Patching guidelines
3439 11.3.5. Feedback to the author 3447 11.3.5. Feedback to the author
3440 3448
344111.4. Other mandatory files 344911.4. Other mandatory files
344211.5. Optional files 345011.5. Optional files
3443 3451
3444 11.5.1. Files affecting the binary package 3452 11.5.1. Files affecting the binary package
3445 11.5.2. Files affecting the build process 3453 11.5.2. Files affecting the build process
3446 11.5.3. Files affecting nothing at all 3454 11.5.3. Files affecting nothing at all
3447 3455
344811.6. work* 345611.6. work*
344911.7. files/* 345711.7. files/*
3450 3458
3451Whenever you're preparing a package, there are a number of files involved which 3459Whenever you're preparing a package, there are a number of files involved which
3452are described in the following sections. 3460are described in the following sections.
3453 3461
345411.1. Makefile 346211.1. Makefile
3455 3463
3456Building, installation and creation of a binary package are all controlled by 3464Building, installation and creation of a binary package are all controlled by
3457the package's Makefile. The Makefile describes various things about a package, 3465the package's Makefile. The Makefile describes various things about a package,
3458for example from where to get it, how to configure, build, and install it. 3466for example from where to get it, how to configure, build, and install it.
3459 3467
3460A package Makefile contains several sections that describe the package. 3468A package Makefile contains several sections that describe the package.
3461 3469
3462In the first section there are the following variables, which should appear 3470In the first section there are the following variables, which should appear
3463exactly in the order given here. The order and grouping of the variables is 3471exactly in the order given here. The order and grouping of the variables is
3464mostly historical and has no further meaning. 3472mostly historical and has no further meaning.
3465 3473
3466 * DISTNAME is the basename of the distribution file to be downloaded from the 3474 * DISTNAME is the basename of the distribution file to be downloaded from the
3467 package's website. 3475 package's website.
3468 3476
3469 * PKGNAME is the name of the package, as used by pkgsrc. You need to provide 3477 * PKGNAME is the name of the package, as used by pkgsrc. You need to provide
3470 it if DISTNAME (which is the default) is not a good name for the package in 3478 it if DISTNAME (which is the default) is not a good name for the package in
3471 pkgsrc or DISTNAME is not provided (no distribution file is required). 3479 pkgsrc or DISTNAME is not provided (no distribution file is required).
3472 Usually it is the pkgsrc directory name together with the version number. 3480 Usually it is the pkgsrc directory name together with the version number.
3473 It must match the regular expression ^[A-Za-z0-9][A-Za-z0-9-_.+]*$, that 3481 It must match the regular expression ^[A-Za-z0-9][A-Za-z0-9-_.+]*$, that
3474 is, it starts with a letter or digit, and contains only letters, digits, 3482 is, it starts with a letter or digit, and contains only letters, digits,
3475 dashes, underscores, dots and plus signs. 3483 dashes, underscores, dots and plus signs.
3476 3484
3477 * CATEGORIES is a list of categories which the package fits in. You can 3485 * CATEGORIES is a list of categories which the package fits in. You can
3478 choose any of the top-level directories of pkgsrc for it. 3486 choose any of the top-level directories of pkgsrc for it.
3479 3487
3480 Currently the following values are available for CATEGORIES. If more than 3488 Currently the following values are available for CATEGORIES. If more than
3481 one is used, they need to be separated by spaces: 3489 one is used, they need to be separated by spaces:
3482 3490
3483 archivers cross geography meta-pkgs security 3491 archivers cross geography meta-pkgs security
3484 audio databases graphics misc shells 3492 audio databases graphics misc shells
3485 benchmarks devel ham multimedia sysutils 3493 benchmarks devel ham multimedia sysutils
3486 biology editors inputmethod net textproc 3494 biology editors inputmethod net textproc
3487 cad emulators lang news time 3495 cad emulators lang news time
3488 chat finance mail parallel wm 3496 chat finance mail parallel wm
3489 comms fonts math pkgtools www 3497 comms fonts math pkgtools www
3490 converters games mbone print x11 3498 converters games mbone print x11
3491 3499
3492 * MASTER_SITES, DYNAMIC_MASTER_SITES, DIST_SUBDIR, EXTRACT_SUFX and DISTFILES 3500 * MASTER_SITES, DYNAMIC_MASTER_SITES, DIST_SUBDIR, EXTRACT_SUFX and DISTFILES
3493 are discussed in detail in Section 17.5, "The fetch phase". 3501 are discussed in detail in Section 17.5, "The fetch phase".
3494 3502
3495The second section contains information about separately downloaded patches, if 3503The second section contains information about separately downloaded patches, if
3496any. 3504any.
3497 3505
3498 * PATCHFILES: Name(s) of additional files that contain distribution patches. 3506 * PATCHFILES: Name(s) of additional files that contain distribution patches.
3499 There is no default. pkgsrc will look for them at PATCH_SITES. They will 3507 There is no default. pkgsrc will look for them at PATCH_SITES. They will
3500 automatically be uncompressed before patching if the names end with .gz or 3508 automatically be uncompressed before patching if the names end with .gz or
3501 .Z. 3509 .Z.
3502 3510
3503 * PATCH_SITES: Primary location(s) for distribution patch files (see 3511 * PATCH_SITES: Primary location(s) for distribution patch files (see
3504 PATCHFILES above) if not found locally. 3512 PATCHFILES above) if not found locally.
3505 3513
3506 * PATCH_DIST_STRIP: an argument to patch(1) that sets the pathname strip 3514 * PATCH_DIST_STRIP: an argument to patch(1) that sets the pathname strip
3507 count to help find the correct files to patch. It defaults to -p0. 3515 count to help find the correct files to patch. It defaults to -p0.
3508 3516
3509The third section contains the following variables. 3517The third section contains the following variables.
3510 3518
3511 * MAINTAINER is the email address of the person who feels responsible for 3519 * MAINTAINER is the email address of the person who feels responsible for
3512 this package, and who is most likely to look at problems or questions 3520 this package, and who is most likely to look at problems or questions
3513 regarding this package which have been reported with send-pr(1). Other 3521 regarding this package which have been reported with send-pr(1). Other
3514 developers may contact the MAINTAINER before making changes to the package, 3522 developers may contact the MAINTAINER before making changes to the package,
3515 but are not required to do so. When packaging a new program, set MAINTAINER 3523 but are not required to do so. When packaging a new program, set MAINTAINER
3516 to yourself. If you really can't maintain the package for future updates, 3524 to yourself. If you really can't maintain the package for future updates,
3517 set it to <pkgsrc-users@NetBSD.org>. 3525 set it to <pkgsrc-users@NetBSD.org>.
3518 3526
3519 * OWNER should be used instead of MAINTAINER when you do not want other 3527 * OWNER should be used instead of MAINTAINER when you do not want other
3520 developers to update or change the package without contacting you first. A 3528 developers to update or change the package without contacting you first. A
3521 package Makefile should contain one of MAINTAINER or OWNER, but not both. 3529 package Makefile should contain one of MAINTAINER or OWNER, but not both.
3522 3530
3523 * HOMEPAGE is a URL where users can find more information about the package. 3531 * HOMEPAGE is a URL where users can find more information about the package.
3524 3532
3525 * COMMENT is a one-line description of the package (should not include the 3533 * COMMENT is a one-line description of the package (should not include the
3526 package name). 3534 package name).
3527 3535
3528Other variables that affect the build: 3536Other variables that affect the build:
3529 3537
3530 * WRKSRC: The directory where the interesting distribution files of the 3538 * WRKSRC: The directory where the interesting distribution files of the
3531 package are found. The default is ${WRKDIR}/${DISTNAME}, which works for 3539 package are found. The default is ${WRKDIR}/${DISTNAME}, which works for
3532 most packages. 3540 most packages.
3533 3541
3534 If a package doesn't create a subdirectory for itself (most GNU software 3542 If a package doesn't create a subdirectory for itself (most GNU software
3535 does, for instance), but extracts itself in the current directory, you 3543 does, for instance), but extracts itself in the current directory, you
3536 should set WRKSRC=${WRKDIR}. 3544 should set WRKSRC=${WRKDIR}.
3537 3545
3538 If a package doesn't create a subdirectory with the name of DISTNAME but 3546 If a package doesn't create a subdirectory with the name of DISTNAME but
3539 some different name, set WRKSRC to point to the proper name in ${WRKDIR}, 3547 some different name, set WRKSRC to point to the proper name in ${WRKDIR},
3540 for example WRKSRC=${WRKDIR}/${DISTNAME}/unix. See lang/tcl and x11/tk for 3548 for example WRKSRC=${WRKDIR}/${DISTNAME}/unix. See lang/tcl and x11/tk for
3541 other examples. 3549 other examples.
3542 3550
3543 The name of the working directory created by pkgsrc is taken from the 3551 The name of the working directory created by pkgsrc is taken from the
3544 WRKDIR_BASENAME variable. By default, its value is work. If you want to use 3552 WRKDIR_BASENAME variable. By default, its value is work. If you want to use
3545 the same pkgsrc tree for building different kinds of binary packages, you 3553 the same pkgsrc tree for building different kinds of binary packages, you
3546 can change the variable according to your needs. Two other variables handle 3554 can change the variable according to your needs. Two other variables handle
3547 common cases of setting WRKDIR_BASENAME individually. If OBJHOSTNAME is 3555 common cases of setting WRKDIR_BASENAME individually. If OBJHOSTNAME is
3548 defined in mk.conf, the first component of the host's name is attached to 3556 defined in mk.conf, the first component of the host's name is attached to
3549 the directory name. If OBJMACHINE is defined, the platform name is 3557 the directory name. If OBJMACHINE is defined, the platform name is
3550 attached, which might look like work.i386 or work.sparc. 3558 attached, which might look like work.i386 or work.sparc.
3551 3559
3552Please pay attention to the following gotchas: 3560Please pay attention to the following gotchas:
3553 3561
3554 * Add MANCOMPRESSED if man pages are installed in compressed form by the 3562 * Add MANCOMPRESSED if man pages are installed in compressed form by the
3555 package. For packages using BSD-style makefiles which honor MANZ, there is 3563 package. For packages using BSD-style makefiles which honor MANZ, there is
3556 MANCOMPRESSED_IF_MANZ. 3564 MANCOMPRESSED_IF_MANZ.
3557 3565
3558 * Replace /usr/local with "${PREFIX}" in all files (see patches, below). 3566 * Replace /usr/local with "${PREFIX}" in all files (see patches, below).
3559 3567
3560 * If the package installs any info files, see Section 19.6.7, "Packages 3568 * If the package installs any info files, see Section 19.6.7, "Packages
3561 installing info files". 3569 installing info files".
3562 3570
356311.2. distinfo 357111.2. distinfo
3564 3572
3565The distinfo file contains the message digest, or checksum, of each distfile 3573The distinfo file contains the message digest, or checksum, of each distfile
3566needed for the package. This ensures that the distfiles retrieved from the 3574needed for the package. This ensures that the distfiles retrieved from the
3567Internet have not been corrupted during transfer or altered by a malign force 3575Internet have not been corrupted during transfer or altered by a malign force
3568to introduce a security hole. Due to recent rumor about weaknesses of digest 3576to introduce a security hole. Due to recent rumor about weaknesses of digest
3569algorithms, all distfiles are protected using both SHA1 and RMD160 message 3577algorithms, all distfiles are protected using both SHA1 and RMD160 message
3570digests, as well as the file size. 3578digests, as well as the file size.
3571 3579
3572The distinfo file also contains the checksums for all the patches found in the 3580The distinfo file also contains the checksums for all the patches found in the
3573patches directory (see Section 11.3, "patches/*"). 3581patches directory (see Section 11.3, "patches/*").
3574 3582
3575To regenerate the distinfo file, use the make makedistinfo or make mdi command. 3583To regenerate the distinfo file, use the make makedistinfo or make mdi command.
3576 3584
3577Some packages have different sets of distfiles depending on the platform, for 3585Some packages have different sets of distfiles depending on the platform, for
3578example lang/openjdk7. These are kept in the same distinfo file and care should 3586example lang/openjdk7. These are kept in the same distinfo file and care should
3579be taken when upgrading such a package to ensure distfile information is not 3587be taken when upgrading such a package to ensure distfile information is not
3580lost. 3588lost.
3581 3589
358211.3. patches/* 359011.3. patches/*
3583 3591
3584Many packages still don't work out-of-the box on the various platforms that are 3592Many packages still don't work out-of-the box on the various platforms that are
3585supported by pkgsrc. Therefore, a number of custom patch files are needed to 3593supported by pkgsrc. Therefore, a number of custom patch files are needed to
3586make the package work. These patch files are found in the patches/ directory. 3594make the package work. These patch files are found in the patches/ directory.
3587 3595
3588In the patch phase, these patches are applied to the files in WRKSRC directory 3596In the patch phase, these patches are applied to the files in WRKSRC directory
3589after extracting them, in alphabetic order. 3597after extracting them, in alphabetic order.
3590 3598
359111.3.1. Structure of a single patch file 359911.3.1. Structure of a single patch file
3592 3600
3593The patch-* files should be in diff -bu format, and apply without a fuzz to 3601The patch-* files should be in diff -bu format, and apply without a fuzz to
3594avoid problems. (To force patches to apply with fuzz you can set 3602avoid problems. (To force patches to apply with fuzz you can set
3595PATCH_FUZZ_FACTOR=-F2). Furthermore, each patch should contain only changes for 3603PATCH_FUZZ_FACTOR=-F2). Furthermore, each patch should contain only changes for
3596a single file, and no file should be patched by more than one patch file. This 3604a single file, and no file should be patched by more than one patch file. This
3597helps to keep future modifications simple. 3605helps to keep future modifications simple.
3598 3606
3599Each patch file is structured as follows: In the first line, there is the RCS 3607Each patch file is structured as follows: In the first line, there is the RCS
3600Id of the patch itself. The second line should be empty for aesthetic reasons. 3608Id of the patch itself. The second line should be empty for aesthetic reasons.
3601After that, there should be a comment for each change that the patch does. 3609After that, there should be a comment for each change that the patch does.
3602There are a number of standard cases: 3610There are a number of standard cases:
3603 3611
3604 * Patches for commonly known vulnerabilities should mention the vulnerability 3612 * Patches for commonly known vulnerabilities should mention the vulnerability
3605 ID (CAN, CVE). 3613 ID (CAN, CVE).
3606 3614
3607 * Patches that change source code should mention the platform and other 3615 * Patches that change source code should mention the platform and other
3608 environment (for example, the compiler) that the patch is needed for. 3616 environment (for example, the compiler) that the patch is needed for.
3609 3617
3610In all, the patch should be commented so that any developer who knows the code 3618In all, the patch should be commented so that any developer who knows the code
3611of the application can make some use of the patch. Special care should be taken 3619of the application can make some use of the patch. Special care should be taken
3612for the upstream developers, since we generally want that they accept our 3620for the upstream developers, since we generally want that they accept our
3613patches, so we have less work in the future. 3621patches, so we have less work in the future.
3614 3622
361511.3.2. Creating patch files 362311.3.2. Creating patch files
3616 3624
3617One important thing to mention is to pay attention that no RCS IDs get stored 3625One important thing to mention is to pay attention that no RCS IDs get stored
3618in the patch files, as these will cause problems when later checked into the 3626in the patch files, as these will cause problems when later checked into the
3619NetBSD CVS tree. Use the pkgdiff command from the pkgtools/pkgdiff package to 3627NetBSD CVS tree. Use the pkgdiff command from the pkgtools/pkgdiff package to
3620avoid these problems. 3628avoid these problems.
3621 3629
3622For even more automation, we recommend using mkpatches from the same package to 3630For even more automation, we recommend using mkpatches from the same package to
3623make a whole set of patches. You just have to backup files before you edit them 3631make a whole set of patches. You just have to backup files before you edit them
3624to filename.orig, e.g. with cp -p filename filename.orig or, easier, by using  3632to filename.orig, e.g. with cp -p filename filename.orig or, easier, by using
3625pkgvi again from the same package. If you upgrade a package this way, you can 3633pkgvi again from the same package. If you upgrade a package this way, you can
3626easily compare the new set of patches with the previously existing one with  3634easily compare the new set of patches with the previously existing one with
3627patchdiff. The files in patches are replaced by new files, so carefully check 3635patchdiff. The files in patches are replaced by new files, so carefully check
3628if you want to take all the changes. 3636if you want to take all the changes.
3629 3637
3630When you have finished a package, remember to generate the checksums for the 3638When you have finished a package, remember to generate the checksums for the
3631patch files by using the make makepatchsum command, see Section 11.2, 3639patch files by using the make makepatchsum command, see Section 11.2,
3632"distinfo". 3640"distinfo".
3633 3641
3634When adding a patch that corrects a problem in the distfile (rather than e.g. 3642When adding a patch that corrects a problem in the distfile (rather than e.g.
3635enforcing pkgsrc's view of where man pages should go), send the patch as a bug 3643enforcing pkgsrc's view of where man pages should go), send the patch as a bug
3636report to the maintainer. This benefits non-pkgsrc users of the package, and 3644report to the maintainer. This benefits non-pkgsrc users of the package, and
3637usually makes it possible to remove the patch in future version. 3645usually makes it possible to remove the patch in future version.
3638 3646
3639The file names of the patch files are usually of the form patch- 3647The file names of the patch files are usually of the form patch-
3640path_to_file__with__underscores.c. Many packages still use the previous 3648path_to_file__with__underscores.c. Many packages still use the previous
3641convention patch-[a-z][a-z], but new patches should be of the form containing 3649convention patch-[a-z][a-z], but new patches should be of the form containing
3642the filename. mkpatches included in pkgtools/pkgdiff takes care of the name 3650the filename. mkpatches included in pkgtools/pkgdiff takes care of the name
3643automatically. 3651automatically.
3644 3652
364511.3.3. Sources where the patch files come from 365311.3.3. Sources where the patch files come from
3646 3654
3647If you want to share patches between multiple packages in pkgsrc, e.g. because 3655If you want to share patches between multiple packages in pkgsrc, e.g. because
3648they use the same distfiles, set PATCHDIR to the path where the patch files can 3656they use the same distfiles, set PATCHDIR to the path where the patch files can
3649be found, e.g.: 3657be found, e.g.:
3650 3658
3651PATCHDIR= ${.CURDIR}/../xemacs/patches 3659PATCHDIR= ${.CURDIR}/../xemacs/patches
3652 3660
3653Patch files that are distributed by the author or other maintainers can be 3661Patch files that are distributed by the author or other maintainers can be
3654listed in PATCHFILES. 3662listed in PATCHFILES.
3655 3663
3656If it is desired to store any patches that should not be committed into pkgsrc, 3664If it is desired to store any patches that should not be committed into pkgsrc,
3657they can be kept outside the pkgsrc tree in the $LOCALPATCHES directory. The 3665they can be kept outside the pkgsrc tree in the $LOCALPATCHES directory. The
3658directory tree there is expected to have the same "category/package" structure 3666directory tree there is expected to have the same "category/package" structure
3659as pkgsrc, and patches are expected to be stored inside these dirs (also known 3667as pkgsrc, and patches are expected to be stored inside these dirs (also known
3660as $LOCALPATCHES/$PKGPATH). For example, if you want to keep a private patch 3668as $LOCALPATCHES/$PKGPATH). For example, if you want to keep a private patch
3661for pkgsrc/graphics/png, keep it in $LOCALPATCHES/graphics/png/mypatch. All 3669for pkgsrc/graphics/png, keep it in $LOCALPATCHES/graphics/png/mypatch. All
3662files in the named directory are expected to be patch files, and they are 3670files in the named directory are expected to be patch files, and they are
3663applied after pkgsrc patches are applied. 3671applied after pkgsrc patches are applied.
3664 3672
366511.3.4. Patching guidelines 367311.3.4. Patching guidelines
3666 3674
3667When fixing a portability issue in the code do not use preprocessor magic to 3675When fixing a portability issue in the code do not use preprocessor magic to
3668check for the current operating system nor platform. Doing so hurts portability 3676check for the current operating system nor platform. Doing so hurts portability
3669to other platforms because the OS-specific details are not abstracted 3677to other platforms because the OS-specific details are not abstracted
3670appropriately. 3678appropriately.
3671 3679
3672The general rule to follow is: instead of checking for the operating system the 3680The general rule to follow is: instead of checking for the operating system the
3673application is being built on, check for the specific features you need. For 3681application is being built on, check for the specific features you need. For
3674example, instead of assuming that kqueue is available under NetBSD and using 3682example, instead of assuming that kqueue is available under NetBSD and using
3675the __NetBSD__ macro to conditionalize kqueue support, add a check that detects 3683the __NetBSD__ macro to conditionalize kqueue support, add a check that detects
3676kqueue itself ? yes, this generally involves patching the configure script. 3684kqueue itself ? yes, this generally involves patching the configure script.
3677There is absolutely nothing that prevents some OSes from adopting interfaces 3685There is absolutely nothing that prevents some OSes from adopting interfaces
3678from other OSes (e.g. Linux implementing kqueue), something that the above 3686from other OSes (e.g. Linux implementing kqueue), something that the above
3679checks cannot take into account. 3687checks cannot take into account.
3680 3688
3681Of course, checking for features generally involves more work on the 3689Of course, checking for features generally involves more work on the
3682developer's side, but the resulting changes are cleaner and there are chances 3690developer's side, but the resulting changes are cleaner and there are chances
3683they will work on many other platforms. Not to mention that there are higher 3691they will work on many other platforms. Not to mention that there are higher
3684chances of being later integrated into the mainstream sources. Remember: It 3692chances of being later integrated into the mainstream sources. Remember: It
3685doesn't work unless it is right! 3693doesn't work unless it is right!
3686 3694
3687Some typical examples: 3695Some typical examples:
3688 3696
3689Table 11.1. Patching examples 3697Table 11.1. Patching examples
3690 3698
3691+-------------------------------------------------------------------------------------------+ 3699+-------------------------------------------------------------------------------------------+
3692| Where | Incorrect | Correct | 3700| Where | Incorrect | Correct |
3693|---------+--------------------------+------------------------------------------------------| 3701|---------+--------------------------+------------------------------------------------------|
3694| |case ${target_os} in | | 3702| |case ${target_os} in | |
3695|configure|netbsd*) have_kvm=yes ;; |AC_CHECK_LIB(kvm, kvm_open, have_kvm=yes, have_kvm=no)| 3703|configure|netbsd*) have_kvm=yes ;; |AC_CHECK_LIB(kvm, kvm_open, have_kvm=yes, have_kvm=no)|
3696|script |*) have_kvm=no ;; | | 3704|script |*) have_kvm=no ;; | |
3697| |esac | | 3705| |esac | |
3698|---------+--------------------------+------------------------------------------------------| 3706|---------+--------------------------+------------------------------------------------------|
3699|C source |#if defined(__NetBSD__) |#if defined(HAVE_SYS_EVENT_H) | 3707|C source |#if defined(__NetBSD__) |#if defined(HAVE_SYS_EVENT_H) |
3700|file |# include <sys/event.h> |# include <sys/event.h> | 3708|file |# include <sys/event.h> |# include <sys/event.h> |
3701| |#endif |#endif | 3709| |#endif |#endif |
3702|---------+--------------------------+------------------------------------------------------| 3710|---------+--------------------------+------------------------------------------------------|
3703| |int |int | 3711| |int |int |
3704| |monitor_file(...) |monitor_file(...) | 3712| |monitor_file(...) |monitor_file(...) |
3705| |{ |{ | 3713| |{ |{ |
3706| |#if defined(__NetBSD__) |#if defined(HAVE_KQUEUE) | 3714| |#if defined(__NetBSD__) |#if defined(HAVE_KQUEUE) |
3707|C source | int fd = kqueue();| int fd = kqueue(); | 3715|C source | int fd = kqueue();| int fd = kqueue(); |
3708|file | ... | ... | 3716|file | ... | ... |
3709| |#else |#else | 3717| |#else |#else |
3710| | ... | ... | 3718| | ... | ... |
3711| |#endif |#endif | 3719| |#endif |#endif |
3712| |} |} | 3720| |} |} |
3713+-------------------------------------------------------------------------------------------+ 3721+-------------------------------------------------------------------------------------------+
3714 3722
3715 3723
3716For more information, please read the Making packager-friendly software article 3724For more information, please read the Making packager-friendly software article
3717(part 1, part 2). It summarizes multiple details on how to make software easier 3725(part 1, part 2). It summarizes multiple details on how to make software easier
3718to package; all the suggestions in it were collected from our experience in 3726to package; all the suggestions in it were collected from our experience in
3719pkgsrc work, so they are possibly helpful when creating patches too. 3727pkgsrc work, so they are possibly helpful when creating patches too.
3720 3728
372111.3.5. Feedback to the author 372911.3.5. Feedback to the author
3722 3730
3723Always, always, always feed back any portability fixes or improvements you do 3731Always, always, always feed back any portability fixes or improvements you do
3724to a package to the mainstream developers. This is the only way to get their 3732to a package to the mainstream developers. This is the only way to get their
3725attention on portability issues and to ensure that future versions can be built 3733attention on portability issues and to ensure that future versions can be built
3726out-of-the box on NetBSD. Furthermore, any user that gets newer distfiles will 3734out-of-the box on NetBSD. Furthermore, any user that gets newer distfiles will
3727get the fixes straight from the packaged code. 3735get the fixes straight from the packaged code.
3728 3736
3729This generally involves cleaning up the patches (because sometimes the patches 3737This generally involves cleaning up the patches (because sometimes the patches
3730that are added to pkgsrc are quick hacks), filing bug reports in the 3738that are added to pkgsrc are quick hacks), filing bug reports in the
3731appropriate trackers for the projects and working with the mainstream authors 3739appropriate trackers for the projects and working with the mainstream authors
3732to accept your changes. It is extremely important that you do it so that the 3740to accept your changes. It is extremely important that you do it so that the
3733packages in pkgsrc are kept simple and thus further changes can be done without 3741packages in pkgsrc are kept simple and thus further changes can be done without
3734much hassle. 3742much hassle.
3735 3743
3736When you have done this, please add a URL to the upstream bug report to the 3744When you have done this, please add a URL to the upstream bug report to the
3737patch comment. 3745patch comment.
3738 3746
3739Support the idea of free software! 3747Support the idea of free software!
3740 3748
374111.4. Other mandatory files 374911.4. Other mandatory files
3742 3750
3743DESCR 3751DESCR
3744 3752
3745 A multi-line description of the piece of software. This should include any 3753 A multi-line description of the piece of software. This should include any
3746 credits where they are due. Please bear in mind that others do not share 3754 credits where they are due. Please bear in mind that others do not share
3747 your sense of humour (or spelling idiosyncrasies), and that others will 3755 your sense of humour (or spelling idiosyncrasies), and that others will
3748 read everything that you write here. 3756 read everything that you write here.
3749 3757
3750PLIST 3758PLIST
3751 3759
3752 This file governs the files that are installed on your system: all the 3760 This file governs the files that are installed on your system: all the
3753 binaries, manual pages, etc. There are other directives which may be 3761 binaries, manual pages, etc. There are other directives which may be
3754 entered in this file, to control the creation and deletion of directories, 3762 entered in this file, to control the creation and deletion of directories,
3755 and the location of inserted files. See Chapter 13, PLIST issues for more 3763 and the location of inserted files. See Chapter 13, PLIST issues for more
3756 information. 3764 information.
3757 3765
375811.5. Optional files 376611.5. Optional files
3759 3767
376011.5.1. Files affecting the binary package 376811.5.1. Files affecting the binary package
3761 3769
3762INSTALL 3770INSTALL
3763 3771
3764 This shell script is invoked twice by pkg_add(1). First time after package 3772 This shell script is invoked twice by pkg_add(1). First time after package
3765 extraction and before files are moved in place, the second time after the 3773 extraction and before files are moved in place, the second time after the
3766 files to install are moved in place. This can be used to do any custom 3774 files to install are moved in place. This can be used to do any custom
3767 procedures not possible with @exec commands in PLIST. See pkg_add(1) and 3775 procedures not possible with @exec commands in PLIST. See pkg_add(1) and
3768 pkg_create(1) for more information. See also Section 15.1, "Files and 3776 pkg_create(1) for more information. See also Section 15.1, "Files and
3769 directories outside the installation prefix". Please note that you can 3777 directories outside the installation prefix". Please note that you can
3770 modify variables in it easily by using FILES_SUBST in the package's 3778 modify variables in it easily by using FILES_SUBST in the package's
3771 Makefile: 3779 Makefile:
3772 3780
3773 FILES_SUBST+= SOMEVAR="somevalue" 3781 FILES_SUBST+= SOMEVAR="somevalue"
3774 3782
3775 replaces "@SOMEVAR@" with "somevalue" in the INSTALL. By default, 3783 replaces "@SOMEVAR@" with "somevalue" in the INSTALL. By default,
3776 substitution is performed for PREFIX, LOCALBASE, X11BASE, VARBASE, and a 3784 substitution is performed for PREFIX, LOCALBASE, X11BASE, VARBASE, and a
3777 few others, type make help topic=FILES_SUBST for a complete list. 3785 few others, type make help topic=FILES_SUBST for a complete list.
3778 3786
3779DEINSTALL 3787DEINSTALL
3780 3788
3781 This script is executed before and after any files are removed. It is this 3789 This script is executed before and after any files are removed. It is this
3782 script's responsibility to clean up any additional messy details around the 3790 script's responsibility to clean up any additional messy details around the
3783 package's installation, since all pkg_delete knows is how to delete the 3791 package's installation, since all pkg_delete knows is how to delete the
3784 files created in the original distribution. See pkg_delete(1) and 3792 files created in the original distribution. See pkg_delete(1) and
3785 pkg_create(1) for more information. The same methods to replace variables 3793 pkg_create(1) for more information. The same methods to replace variables
3786 can be used as for the INSTALL file. 3794 can be used as for the INSTALL file.
3787 3795
3788MESSAGE 3796MESSAGE
3789 3797
3790 This file is displayed after installation of the package. Useful for things 3798 This file is displayed after installation of the package. Useful for things
3791 like legal notices on almost-free software and hints for updating config 3799 like legal notices on almost-free software and hints for updating config
3792 files after installing modules for apache, PHP etc. Please note that you 3800 files after installing modules for apache, PHP etc. Please note that you
3793 can modify variables in it easily by using MESSAGE_SUBST in the package's 3801 can modify variables in it easily by using MESSAGE_SUBST in the package's
3794 Makefile: 3802 Makefile:
3795 3803
3796 MESSAGE_SUBST+= SOMEVAR="somevalue" 3804 MESSAGE_SUBST+= SOMEVAR="somevalue"
3797 3805
3798 replaces "${SOMEVAR}" with "somevalue" in MESSAGE. By default, substitution 3806 replaces "${SOMEVAR}" with "somevalue" in MESSAGE. By default, substitution
3799 is performed for PKGNAME, PKGBASE, PREFIX, LOCALBASE, X11PREFIX, X11BASE, 3807 is performed for PKGNAME, PKGBASE, PREFIX, LOCALBASE, X11PREFIX, X11BASE,
3800 PKG_SYSCONFDIR, ROOT_GROUP, and ROOT_USER. 3808 PKG_SYSCONFDIR, ROOT_GROUP, and ROOT_USER.
3801 3809
3802 You can display a different or additional files by setting the MESSAGE_SRC 3810 You can display a different or additional files by setting the MESSAGE_SRC
3803 variable. Its default is MESSAGE, if the file exists. 3811 variable. Its default is MESSAGE, if the file exists.
3804 3812
3805ALTERNATIVES 3813ALTERNATIVES
3806 3814
3807 This file is used by the alternatives framework. It creates, configures, 3815 This file is used by the alternatives framework. It creates, configures,
3808 and destroys generic wrappers used to run programs with similar interfaces. 3816 and destroys generic wrappers used to run programs with similar interfaces.
3809 See pkg_alternatives(8) from pkgtools/pkg_alternatives for more 3817 See pkg_alternatives(8) from pkgtools/pkg_alternatives for more
3810 information. 3818 information.
3811 3819
3812 Each line of the file contains two filenames, first the wrapper and then 3820 Each line of the file contains two filenames, first the wrapper and then
3813 the alternative provided by the package. Both paths are relative to PREFIX. 3821 the alternative provided by the package. Both paths are relative to PREFIX.
3814 3822
381511.5.2. Files affecting the build process 382311.5.2. Files affecting the build process
3816 3824
3817Makefile.common 3825Makefile.common
3818 3826
3819 This file contains arbitrary things that could also go into a Makefile, but 3827 This file contains arbitrary things that could also go into a Makefile, but
3820 its purpose is to be used by more than one package. This file should only 3828 its purpose is to be used by more than one package. This file should only
3821 be used when the packages that will use the file are known in advance. For 3829 be used when the packages that will use the file are known in advance. For
3822 other purposes it is often better to write a *.mk file and give it a good 3830 other purposes it is often better to write a *.mk file and give it a good
3823 name that describes what it does. 3831 name that describes what it does.
3824 3832
3825buildlink3.mk 3833buildlink3.mk
3826 3834
3827 This file contains the dependency information for the buildlink3 framework 3835 This file contains the dependency information for the buildlink3 framework
3828 (see Chapter 14, Buildlink methodology). 3836 (see Chapter 14, Buildlink methodology).
3829 3837
3830hacks.mk 3838hacks.mk
3831 3839
3832 This file contains workarounds for compiler bugs and similar things. It is 3840 This file contains workarounds for compiler bugs and similar things. It is
3833 included automatically by the pkgsrc infrastructure, so you don't need an 3841 included automatically by the pkgsrc infrastructure, so you don't need an
3834 extra .include line for it. 3842 extra .include line for it.
3835 3843
3836options.mk 3844options.mk
3837 3845
3838 This file contains the code for the package-specific options (see 3846 This file contains the code for the package-specific options (see
3839 Chapter 16, Options handling) that can be selected by the user. If a 3847 Chapter 16, Options handling) that can be selected by the user. If a
3840 package has only one or two options, it is equally acceptable to put the 3848 package has only one or two options, it is equally acceptable to put the
3841 code directly into the Makefile. 3849 code directly into the Makefile.
3842 3850
384311.5.3. Files affecting nothing at all 385111.5.3. Files affecting nothing at all
3844 3852
3845README* 3853README*
3846 3854
3847 These files do not take place in the creation of a package and thus are 3855 These files do not take place in the creation of a package and thus are
3848 purely informative to the package developer. 3856 purely informative to the package developer.
3849 3857
3850TODO 3858TODO
3851 3859
3852 This file contains things that need to be done to make the package even 3860 This file contains things that need to be done to make the package even
3853 better. 3861 better.
3854 3862
385511.6. work* 386311.6. work*
3856 3864
3857When you type make, the distribution files are unpacked into the directory 3865When you type make, the distribution files are unpacked into the directory
3858denoted by WRKDIR. It can be removed by running make clean. Besides the 3866denoted by WRKDIR. It can be removed by running make clean. Besides the
3859sources, this directory is also used to keep various timestamp files. The 3867sources, this directory is also used to keep various timestamp files. The
3860directory gets removed completely on clean. The default is ${.CURDIR}/work or $ 3868directory gets removed completely on clean. The default is ${.CURDIR}/work or $
3861{.CURDIR}/work.${MACHINE_ARCH} if OBJMACHINE is set. 3869{.CURDIR}/work.${MACHINE_ARCH} if OBJMACHINE is set.
3862 3870
386311.7. files/* 387111.7. files/*
3864 3872
3865If you have any files that you wish to be placed in the package prior to 3873If you have any files that you wish to be placed in the package prior to
3866configuration or building, you could place these files here and use a ${CP} 3874configuration or building, you could place these files here and use a ${CP}
3867command in the "pre-configure" target to achieve this. Alternatively, you could 3875command in the "pre-configure" target to achieve this. Alternatively, you could
3868simply diff the file against /dev/null and use the patch mechanism to manage 3876simply diff the file against /dev/null and use the patch mechanism to manage
3869the creation of this file. 3877the creation of this file.
3870 3878
3871If you want to share files in this way with other packages, set the FILESDIR 3879If you want to share files in this way with other packages, set the FILESDIR
3872variable to point to the other package's files directory, e.g.: 3880variable to point to the other package's files directory, e.g.:
3873 3881
3874FILESDIR=${.CURDIR}/../xemacs/files 3882FILESDIR=${.CURDIR}/../xemacs/files
3875 3883
3876Chapter 12. Programming in Makefiles 3884Chapter 12. Programming in Makefiles
3877 3885
3878Table of Contents 3886Table of Contents
3879 3887
388012.1. Caveats 388812.1. Caveats
388112.2. Makefile variables 388912.2. Makefile variables
3882 3890
3883 12.2.1. Naming conventions 3891 12.2.1. Naming conventions
3884 3892
388512.3. Code snippets 389312.3. Code snippets
3886 3894
3887 12.3.1. Adding things to a list 3895 12.3.1. Adding things to a list
3888 12.3.2. Converting an internal list into an external list 3896 12.3.2. Converting an internal list into an external list
3889 12.3.3. Passing variables to a shell command 3897 12.3.3. Passing variables to a shell command
3890 12.3.4. Quoting guideline 3898 12.3.4. Quoting guideline
3891 12.3.5. Workaround for a bug in BSD Make 3899 12.3.5. Workaround for a bug in BSD Make
3892 3900
3893Pkgsrc consists of many Makefile fragments, each of which forms a well-defined 3901Pkgsrc consists of many Makefile fragments, each of which forms a well-defined
3894part of the pkgsrc system. Using the make(1) system as a programming language 3902part of the pkgsrc system. Using the make(1) system as a programming language
3895for a big system like pkgsrc requires some discipline to keep the code correct 3903for a big system like pkgsrc requires some discipline to keep the code correct
3896and understandable. 3904and understandable.
3897 3905
3898The basic ingredients for Makefile programming are variables (which are 3906The basic ingredients for Makefile programming are variables (which are
3899actually macros) and shell commands. Among these shell commands may even be 3907actually macros) and shell commands. Among these shell commands may even be
3900more complex ones like awk(1) programs. To make sure that every shell command 3908more complex ones like awk(1) programs. To make sure that every shell command
3901runs as intended it is necessary to quote all variables correctly when they are 3909runs as intended it is necessary to quote all variables correctly when they are
3902used. 3910used.
3903 3911
3904This chapter describes some patterns, that appear quite often in Makefiles, 3912This chapter describes some patterns, that appear quite often in Makefiles,
3905including the pitfalls that come along with them. 3913including the pitfalls that come along with them.
3906 3914
390712.1. Caveats 391512.1. Caveats
3908 3916
3909 * When you are creating a file as a target of a rule, always write the data 3917 * When you are creating a file as a target of a rule, always write the data
3910 to a temporary file first and finally rename that file. Otherwise there 3918 to a temporary file first and finally rename that file. Otherwise there
3911 might occur an error in the middle of generating the file, and when the 3919 might occur an error in the middle of generating the file, and when the
3912 user runs make(1) for the second time, the file exists and will not be 3920 user runs make(1) for the second time, the file exists and will not be
3913 regenerated properly. Example: 3921 regenerated properly. Example:
3914 3922
3915 wrong: 3923 wrong:
3916 @echo "line 1" > ${.TARGET} 3924 @echo "line 1" > ${.TARGET}
3917 @echo "line 2" >> ${.TARGET} 3925 @echo "line 2" >> ${.TARGET}
3918 @false 3926 @false
3919 3927
3920 correct: 3928 correct:
3921 @echo "line 1" > ${.TARGET}.tmp 3929 @echo "line 1" > ${.TARGET}.tmp
3922 @echo "line 2" >> ${.TARGET}.tmp 3930 @echo "line 2" >> ${.TARGET}.tmp
3923 @false 3931 @false
3924 @mv ${.TARGET}.tmp ${.TARGET} 3932 @mv ${.TARGET}.tmp ${.TARGET}
3925 3933
3926 When you run make wrong twice, the file wrong will exist, although there 3934 When you run make wrong twice, the file wrong will exist, although there
3927 was an error message in the first run. On the other hand, running make 3935 was an error message in the first run. On the other hand, running make
3928 correct gives an error message twice, as expected. 3936 correct gives an error message twice, as expected.
3929 3937
3930 You might remember that make(1) sometimes removes ${.TARGET} in case of 3938 You might remember that make(1) sometimes removes ${.TARGET} in case of
3931 error, but this only happens when it is interrupted, for example by 3939 error, but this only happens when it is interrupted, for example by
3932 pressing ^C. This does not happen when one of the commands fails (like 3940 pressing ^C. This does not happen when one of the commands fails (like
3933 false(1) above). 3941 false(1) above).
3934 3942
393512.2. Makefile variables 394312.2. Makefile variables
3936 3944
3937Makefile variables contain strings that can be processed using the five 3945Makefile variables contain strings that can be processed using the five
3938operators ``='', ``+='', ``?='', ``:='', and ``!='', which are described in the 3946operators ``='', ``+='', ``?='', ``:='', and ``!='', which are described in the
3939make(1) man page. 3947make(1) man page.
3940 3948
3941When a variable's value is parsed from a Makefile, the hash character ``#'' and 3949When a variable's value is parsed from a Makefile, the hash character ``#'' and
3942the backslash character ``\'' are handled specially. If a backslash is followed 3950the backslash character ``\'' are handled specially. If a backslash is followed
3943by a newline, any whitespace immediately in front of the backslash, the 3951by a newline, any whitespace immediately in front of the backslash, the
3944backslash, the newline, and any whitespace immediately behind the newline are 3952backslash, the newline, and any whitespace immediately behind the newline are
3945replaced with a single space. A backslash character and an immediately 3953replaced with a single space. A backslash character and an immediately
3946following hash character are replaced with a single hash character. Otherwise, 3954following hash character are replaced with a single hash character. Otherwise,
3947the backslash is passed as is. In a variable assignment, any hash character 3955the backslash is passed as is. In a variable assignment, any hash character
3948that is not preceded by a backslash starts a comment that continues upto the 3956that is not preceded by a backslash starts a comment that continues upto the
3949end of the logical line. 3957end of the logical line.
3950 3958
3951Note: Because of this parsing algorithm the only way to create a variable 3959Note: Because of this parsing algorithm the only way to create a variable
3952consisting of a single backslash is using the ``!='' operator, for example: 3960consisting of a single backslash is using the ``!='' operator, for example:
3953BACKSLASH!=echo "\\". 3961BACKSLASH!=echo "\\".
3954 3962
3955So far for defining variables. The other thing you can do with variables is 3963So far for defining variables. The other thing you can do with variables is
3956evaluating them. A variable is evaluated when it is part of the right side of 3964evaluating them. A variable is evaluated when it is part of the right side of
3957the ``:='' or the ``!='' operator, or directly before executing a shell command 3965the ``:='' or the ``!='' operator, or directly before executing a shell command
3958which the variable is part of. In all other cases, make(1) performs lazy 3966which the variable is part of. In all other cases, make(1) performs lazy
3959evaluation, that is, variables are not evaluated until there's no other way. 3967evaluation, that is, variables are not evaluated until there's no other way.
3960The ``modifiers'' mentioned in the man page also evaluate the variable. 3968The ``modifiers'' mentioned in the man page also evaluate the variable.
3961 3969
3962Some of the modifiers split the string into words and then operate on the 3970Some of the modifiers split the string into words and then operate on the
3963words, others operate on the string as a whole. When a string is split into 3971words, others operate on the string as a whole. When a string is split into
3964words, it is split as you would expect it from sh(1). 3972words, it is split as you would expect it from sh(1).
3965 3973
3966No rule without exception?the .for loop does not follow the shell quoting rules 3974No rule without exception?the .for loop does not follow the shell quoting rules
3967but splits at sequences of whitespace. 3975but splits at sequences of whitespace.
3968 3976
3969There are several types of variables that should be handled differently. 3977There are several types of variables that should be handled differently.
3970Strings and two types of lists. 3978Strings and two types of lists.
3971 3979
3972 * Strings can contain arbitrary characters. Nevertheless, you should restrict 3980 * Strings can contain arbitrary characters. Nevertheless, you should restrict
3973 yourself to only using printable characters. Examples are PREFIX and 3981 yourself to only using printable characters. Examples are PREFIX and
3974 COMMENT. 3982 COMMENT.
3975 3983
3976 * Internal lists are lists that are never exported to any shell command. 3984 * Internal lists are lists that are never exported to any shell command.
3977 Their elements are separated by whitespace. Therefore, the elements 3985 Their elements are separated by whitespace. Therefore, the elements
3978 themselves cannot have embedded whitespace. Any other characters are 3986 themselves cannot have embedded whitespace. Any other characters are
3979 allowed. Internal lists can be used in .for loops. Examples are DEPENDS and 3987 allowed. Internal lists can be used in .for loops. Examples are DEPENDS and
3980 BUILD_DEPENDS. 3988 BUILD_DEPENDS.
3981 3989
3982 * External lists are lists that may be exported to a shell command. Their 3990 * External lists are lists that may be exported to a shell command. Their
3983 elements can contain any characters, including whitespace. That's why they 3991 elements can contain any characters, including whitespace. That's why they
3984 cannot be used in .for loops. Examples are DISTFILES and MASTER_SITES. 3992 cannot be used in .for loops. Examples are DISTFILES and MASTER_SITES.
3985 3993
398612.2.1. Naming conventions 399412.2.1. Naming conventions
3987 3995
3988 * All variable names starting with an underscore are reserved for use by the 3996 * All variable names starting with an underscore are reserved for use by the
3989 pkgsrc infrastructure. They shall not be used by package Makefiles. 3997 pkgsrc infrastructure. They shall not be used by package Makefiles.
3990 3998
3991 * In .for loops you should use lowercase variable names for the iteration 3999 * In .for loops you should use lowercase variable names for the iteration
3992 variables. 4000 variables.
3993 4001
3994 * All list variables should have a ``plural'' name, e.g. PKG_OPTIONS or 4002 * All list variables should have a ``plural'' name, e.g. PKG_OPTIONS or
3995 DISTFILES. 4003 DISTFILES.
3996 4004
399712.3. Code snippets 400512.3. Code snippets
3998 4006
3999This section presents you with some code snippets you should use in your own 4007This section presents you with some code snippets you should use in your own
4000code. If you don't find anything appropriate here, you should test your code 4008code. If you don't find anything appropriate here, you should test your code
4001and add it here. 4009and add it here.
4002 4010
400312.3.1. Adding things to a list 401112.3.1. Adding things to a list
4004 4012
4005STRING= foo * bar `date` 4013STRING= foo * bar `date`
4006INT_LIST= # empty 4014INT_LIST= # empty
4007ANOTHER_INT_LIST= apache-[0-9]*:../../www/apache 4015ANOTHER_INT_LIST= apache-[0-9]*:../../www/apache
4008EXT_LIST= # empty 4016EXT_LIST= # empty
4009ANOTHER_EXT_LIST= a=b c=d 4017ANOTHER_EXT_LIST= a=b c=d
4010 4018
4011INT_LIST+= ${STRING} # 1 4019INT_LIST+= ${STRING} # 1
4012INT_LIST+= ${ANOTHER_INT_LIST} # 2 4020INT_LIST+= ${ANOTHER_INT_LIST} # 2
4013EXT_LIST+= ${STRING:Q} # 3 4021EXT_LIST+= ${STRING:Q} # 3
4014EXT_LIST+= ${ANOTHER_EXT_LIST} # 4 4022EXT_LIST+= ${ANOTHER_EXT_LIST} # 4
4015 4023
4016When you add a string to an external list (example 3), it must be quoted. In 4024When you add a string to an external list (example 3), it must be quoted. In
4017all other cases, you must not add a quoting level. You must not merge internal 4025all other cases, you must not add a quoting level. You must not merge internal
4018and external lists, unless you are sure that all entries are correctly 4026and external lists, unless you are sure that all entries are correctly
4019interpreted in both lists. 4027interpreted in both lists.
4020 4028
402112.3.2. Converting an internal list into an external list 402912.3.2. Converting an internal list into an external list
4022 4030
4023EXT_LIST= # empty 4031EXT_LIST= # empty
4024.for i in ${INT_LIST} 4032.for i in ${INT_LIST}
4025EXT_LIST+= ${i:Q}"" 4033EXT_LIST+= ${i:Q}""
4026.endfor 4034.endfor
4027 4035
4028This code converts the internal list INT_LIST into the external list EXT_LIST. 4036This code converts the internal list INT_LIST into the external list EXT_LIST.
4029As the elements of an internal list are unquoted they must be quoted here. The 4037As the elements of an internal list are unquoted they must be quoted here. The
4030reason for appending "" is explained below. 4038reason for appending "" is explained below.
4031 4039
403212.3.3. Passing variables to a shell command 404012.3.3. Passing variables to a shell command
4033 4041
4034Sometimes you may want to print an arbitrary string. There are many ways to get 4042Sometimes you may want to print an arbitrary string. There are many ways to get
4035it wrong and only few that can handle every nastiness. 4043it wrong and only few that can handle every nastiness.
4036 4044
4037STRING= foo bar < > * `date` $$HOME ' " 4045STRING= foo bar < > * `date` $$HOME ' "
4038EXT_LIST= string=${STRING:Q} x=second\ item 4046EXT_LIST= string=${STRING:Q} x=second\ item
4039 4047
4040all: 4048all:
4041 echo ${STRING} # 1 4049 echo ${STRING} # 1
4042 echo "${STRING}" # 2 4050 echo "${STRING}" # 2
4043 echo "${STRING:Q}" # 3 4051 echo "${STRING:Q}" # 3
4044 echo ${STRING:Q} # 4 4052 echo ${STRING:Q} # 4
4045 echo x${STRING:Q} | sed 1s,.,, # 5 4053 echo x${STRING:Q} | sed 1s,.,, # 5
4046 printf "%s\\n" ${STRING:Q}"" # 6 4054 printf "%s\\n" ${STRING:Q}"" # 6
4047 env ${EXT_LIST} /bin/sh -c 'echo "$$string"; echo "$$x"' 4055 env ${EXT_LIST} /bin/sh -c 'echo "$$string"; echo "$$x"'
4048 4056
4049Example 1 leads to a syntax error in the shell, as the characters are just 4057Example 1 leads to a syntax error in the shell, as the characters are just
4050copied. 4058copied.
4051 4059
4052Example 2 leads to a syntax error too, and if you leave out the last " 4060Example 2 leads to a syntax error too, and if you leave out the last "
4053character from ${STRING}, date(1) will be executed. The $HOME shell variable 4061character from ${STRING}, date(1) will be executed. The $HOME shell variable
4054would be evaluated, too. 4062would be evaluated, too.
4055 4063
4056Example 3 outputs each space character preceded by a backslash (or not), 4064Example 3 outputs each space character preceded by a backslash (or not),
4057depending on the implementation of the echo(1) command. 4065depending on the implementation of the echo(1) command.
4058 4066
4059Example 4 handles correctly every string that does not start with a dash. In 4067Example 4 handles correctly every string that does not start with a dash. In
4060that case, the result depends on the implementation of the echo(1) command. As 4068that case, the result depends on the implementation of the echo(1) command. As
4061long as you can guarantee that your input does not start with a dash, this form 4069long as you can guarantee that your input does not start with a dash, this form
4062is appropriate. 4070is appropriate.
4063 4071
4064Example 5 handles even the case of a leading dash correctly. 4072Example 5 handles even the case of a leading dash correctly.
4065 4073
4066Example 6 also works with every string and is the light-weight solution, since 4074Example 6 also works with every string and is the light-weight solution, since
4067it does not involve a pipe, which has its own problems. 4075it does not involve a pipe, which has its own problems.
4068 4076
4069The EXT_LIST does not need to be quoted because the quoting has already been 4077The EXT_LIST does not need to be quoted because the quoting has already been
4070done when adding elements to the list. 4078done when adding elements to the list.
4071 4079
4072As internal lists shall not be passed to the shell, there is no example for it. 4080As internal lists shall not be passed to the shell, there is no example for it.
4073 4081
407412.3.4. Quoting guideline 408212.3.4. Quoting guideline
4075 4083
4076There are many possible sources of wrongly quoted variables. This section lists 4084There are many possible sources of wrongly quoted variables. This section lists
4077some of the commonly known ones. 4085some of the commonly known ones.
4078 4086
4079 * Whenever you use the value of a list, think about what happens to leading 4087 * Whenever you use the value of a list, think about what happens to leading
4080 or trailing whitespace. If the list is a well-formed shell expression, you 4088 or trailing whitespace. If the list is a well-formed shell expression, you
4081 can apply the :M* modifier to strip leading and trailing whitespace from 4089 can apply the :M* modifier to strip leading and trailing whitespace from
4082 each word. The :M operator first splits its argument according to the rules 4090 each word. The :M operator first splits its argument according to the rules
4083 of the shell, and then creates a new list consisting of all words that 4091 of the shell, and then creates a new list consisting of all words that
4084 match the shell glob expression *, that is: all. One class of situations 4092 match the shell glob expression *, that is: all. One class of situations
4085 where this is needed is when adding a variable like CPPFLAGS to 4093 where this is needed is when adding a variable like CPPFLAGS to
4086 CONFIGURE_ARGS. If the configure script invokes other configure scripts, it 4094 CONFIGURE_ARGS. If the configure script invokes other configure scripts, it
4087 strips the leading and trailing whitespace from the variable and then 4095 strips the leading and trailing whitespace from the variable and then
4088 passes it to the other configure scripts. But these configure scripts 4096 passes it to the other configure scripts. But these configure scripts
4089 expect the (child) CPPFLAGS variable to be the same as the parent CPPFLAGS. 4097 expect the (child) CPPFLAGS variable to be the same as the parent CPPFLAGS.
4090 That's why we better pass the CPPFLAGS value properly trimmed. And here is 4098 That's why we better pass the CPPFLAGS value properly trimmed. And here is
4091 how we do it: 4099 how we do it:
4092 4100
4093 CPPFLAGS= # empty 4101 CPPFLAGS= # empty
4094 CPPFLAGS+= -Wundef -DPREFIX=\"${PREFIX:Q}\" 4102 CPPFLAGS+= -Wundef -DPREFIX=\"${PREFIX:Q}\"
4095 CPPFLAGS+= ${MY_CPPFLAGS} 4103 CPPFLAGS+= ${MY_CPPFLAGS}
4096 4104
4097 CONFIGURE_ARGS+= CPPFLAGS=${CPPFLAGS:M*:Q} 4105 CONFIGURE_ARGS+= CPPFLAGS=${CPPFLAGS:M*:Q}
4098 4106
4099 all: 4107 all:
4100 echo x${CPPFLAGS:Q}x # leading and trailing whitespace 4108 echo x${CPPFLAGS:Q}x # leading and trailing whitespace
4101 echo x${CONFIGURE_ARGS}x # properly trimmed 4109 echo x${CONFIGURE_ARGS}x # properly trimmed
4102 4110
4103 * The example above contains one bug: The ${PREFIX} is a properly quoted 4111 * The example above contains one bug: The ${PREFIX} is a properly quoted
4104 shell expression, but there is the C compiler after it, which also expects 4112 shell expression, but there is the C compiler after it, which also expects
4105 a properly quoted string (this time in C syntax). The version above is 4113 a properly quoted string (this time in C syntax). The version above is
4106 therefore only correct if ${PREFIX} does not have embedded backslashes or 4114 therefore only correct if ${PREFIX} does not have embedded backslashes or
4107 double quotes. If you want to allow these, you have to add another layer of 4115 double quotes. If you want to allow these, you have to add another layer of
4108 quoting to each variable that is used as a C string literal. You cannot use 4116 quoting to each variable that is used as a C string literal. You cannot use
4109 the :Q operator for it, as this operator only works for the shell. 4117 the :Q operator for it, as this operator only works for the shell.
4110 4118
4111 * Whenever a variable can be empty, the :Q operator can have surprising 4119 * Whenever a variable can be empty, the :Q operator can have surprising
4112 results. Here are two completely different cases which can be solved with 4120 results. Here are two completely different cases which can be solved with
4113 the same trick. 4121 the same trick.
4114 4122
4115 EMPTY= # empty 4123 EMPTY= # empty
4116 empty_test: 4124 empty_test:
4117 for i in a ${EMPTY:Q} c; do \ 4125 for i in a ${EMPTY:Q} c; do \
4118 echo "$$i"; \ 4126 echo "$$i"; \
4119 done 4127 done
4120 4128
4121 for_test: 4129 for_test:
4122 .for i in a:\ a:\test.txt 4130 .for i in a:\ a:\test.txt
4123 echo ${i:Q} 4131 echo ${i:Q}
4124 echo "foo" 4132 echo "foo"
4125 .endfor 4133 .endfor
4126 4134
4127 The first example will only print two of the three lines we might have 4135 The first example will only print two of the three lines we might have
4128 expected. This is because ${EMPTY:Q} expands to the empty string, which the 4136 expected. This is because ${EMPTY:Q} expands to the empty string, which the
4129 shell cannot see. The workaround is to write ${EMPTY:Q}"". This pattern can 4137 shell cannot see. The workaround is to write ${EMPTY:Q}"". This pattern can
4130 be often found as ${TEST} -z ${VAR:Q} or as ${TEST} -f ${FNAME:Q} (both of 4138 be often found as ${TEST} -z ${VAR:Q} or as ${TEST} -f ${FNAME:Q} (both of
4131 these are wrong). 4139 these are wrong).
4132 4140
4133 The second example will only print three lines instead of four. The first 4141 The second example will only print three lines instead of four. The first
4134 line looks like a:\ echo foo. This is because the backslash of the value a: 4142 line looks like a:\ echo foo. This is because the backslash of the value a:
4135 \ is interpreted as a line-continuation by make(1), which makes the second 4143 \ is interpreted as a line-continuation by make(1), which makes the second
4136 line the arguments of the echo(1) command from the first line. To avoid 4144 line the arguments of the echo(1) command from the first line. To avoid
4137 this, write ${i:Q}"". 4145 this, write ${i:Q}"".
4138 4146
413912.3.5. Workaround for a bug in BSD Make 414712.3.5. Workaround for a bug in BSD Make
4140 4148
4141The pkgsrc bmake program does not handle the following assignment correctly. In 4149The pkgsrc bmake program does not handle the following assignment correctly. In
4142case _othervar_ contains a ``-'' character, one of the closing braces is 4150case _othervar_ contains a ``-'' character, one of the closing braces is
4143included in ${VAR} after this code executes. 4151included in ${VAR} after this code executes.
4144 4152
4145VAR:= ${VAR:N${_othervar_:C/-//}} 4153VAR:= ${VAR:N${_othervar_:C/-//}}
4146 4154
4147For a more complex code snippet and a workaround, see the package regress/ 4155For a more complex code snippet and a workaround, see the package regress/
4148make-quoting, testcase bug1. 4156make-quoting, testcase bug1.
4149 4157
4150Chapter 13. PLIST issues 4158Chapter 13. PLIST issues
4151 4159
4152Table of Contents 4160Table of Contents
4153 4161
415413.1. RCS ID 416213.1. RCS ID
415513.2. Semi-automatic PLIST generation 416313.2. Semi-automatic PLIST generation
415613.3. Tweaking output of make print-PLIST 416413.3. Tweaking output of make print-PLIST
415713.4. Variable substitution in PLIST 416513.4. Variable substitution in PLIST
415813.5. Man page compression 416613.5. Man page compression
415913.6. Changing PLIST source with PLIST_SRC 416713.6. Changing PLIST source with PLIST_SRC
416013.7. Platform-specific and differing PLISTs 416813.7. Platform-specific and differing PLISTs
416113.8. Sharing directories between packages 416913.8. Sharing directories between packages
4162 4170
4163The PLIST file contains a package's "packing list", i.e. a list of files that 4171The PLIST file contains a package's "packing list", i.e. a list of files that
4164belong to the package (relative to the ${PREFIX} directory it's been installed 4172belong to the package (relative to the ${PREFIX} directory it's been installed
4165in) plus some additional statements - see the pkg_create(1) man page for a full 4173in) plus some additional statements - see the pkg_create(1) man page for a full
4166list. This chapter addresses some issues that need attention when dealing with 4174list. This chapter addresses some issues that need attention when dealing with
4167the PLIST file (or files, see below!). 4175the PLIST file (or files, see below!).
4168 4176
416913.1. RCS ID 417713.1. RCS ID
4170 4178
4171Be sure to add a RCS ID line as the first thing in any PLIST file you write: 4179Be sure to add a RCS ID line as the first thing in any PLIST file you write:
4172 4180
4173@comment $NetBSD$ 4181@comment $NetBSD$
4174 4182
4175 4183
417613.2. Semi-automatic PLIST generation 418413.2. Semi-automatic PLIST generation
4177 4185
4178You can use the make print-PLIST command to output a PLIST that matches any new 4186You can use the make print-PLIST command to output a PLIST that matches any new
4179files since the package was extracted. See Section 17.17, "Other helpful 4187files since the package was extracted. See Section 17.17, "Other helpful
4180targets" for more information on this target. 4188targets" for more information on this target.
4181 4189
418213.3. Tweaking output of make print-PLIST 419013.3. Tweaking output of make print-PLIST
4183 4191
4184If you have used any of the *-dirs packages, as explained in Section 13.8, 4192If you have used any of the *-dirs packages, as explained in Section 13.8,
4185"Sharing directories between packages", you may have noticed that make 4193"Sharing directories between packages", you may have noticed that make
4186print-PLIST outputs a set of @comments instead of real @dirrm lines. You can 4194print-PLIST outputs a set of @comments instead of real @dirrm lines. You can
4187also do this for specific directories and files, so that the results of that 4195also do this for specific directories and files, so that the results of that
4188command are very close to reality. This helps a lot during the update of 4196command are very close to reality. This helps a lot during the update of
4189packages. 4197packages.
4190 4198
4191The PRINT_PLIST_AWK variable takes a set of AWK patterns and actions that are 4199The PRINT_PLIST_AWK variable takes a set of AWK patterns and actions that are
4192used to filter the output of print-PLIST. You can append any chunk of AWK 4200used to filter the output of print-PLIST. You can append any chunk of AWK
4193scripting you like to it, but be careful with quoting. 4201scripting you like to it, but be careful with quoting.
4194 4202
4195For example, to get all files inside the libdata/foo directory removed from the 4203For example, to get all files inside the libdata/foo directory removed from the
4196resulting PLIST: 4204resulting PLIST:
4197 4205
4198PRINT_PLIST_AWK+= /^libdata\/foo/ { next; } 4206PRINT_PLIST_AWK+= /^libdata\/foo/ { next; }
4199 4207
4200 4208
4201And to get all the @dirrm lines referring to a specific (shared) directory 4209And to get all the @dirrm lines referring to a specific (shared) directory
4202converted to @comments: 4210converted to @comments:
4203 4211
4204PRINT_PLIST_AWK+= /^@dirrm share\/specific/ { print "@comment " $$0; next; } 4212PRINT_PLIST_AWK+= /^@dirrm share\/specific/ { print "@comment " $$0; next; }
4205 4213
4206 4214
420713.4. Variable substitution in PLIST 421513.4. Variable substitution in PLIST
4208 4216
4209A number of variables are substituted automatically in PLISTs when a package is 4217A number of variables are substituted automatically in PLISTs when a package is
4210installed on a system. This includes the following variables: 4218installed on a system. This includes the following variables:
4211 4219
4212${MACHINE_ARCH}, ${MACHINE_GNU_ARCH} 4220${MACHINE_ARCH}, ${MACHINE_GNU_ARCH}
4213 4221
4214 Some packages like emacs and perl embed information about which 4222 Some packages like emacs and perl embed information about which
4215 architecture they were built on into the pathnames where they install their 4223 architecture they were built on into the pathnames where they install their
4216 files. To handle this case, PLIST will be preprocessed before actually 4224 files. To handle this case, PLIST will be preprocessed before actually
4217 used, and the symbol "${MACHINE_ARCH}" will be replaced by what uname -p 4225 used, and the symbol "${MACHINE_ARCH}" will be replaced by what uname -p
4218 gives. The same is done if the string ${MACHINE_GNU_ARCH} is embedded in 4226 gives. The same is done if the string ${MACHINE_GNU_ARCH} is embedded in
4219 PLIST somewhere - use this on packages that have GNU autoconf-created 4227 PLIST somewhere - use this on packages that have GNU autoconf-created
4220 configure scripts. 4228 configure scripts.
4221 4229
4222 Legacy note 4230 Legacy note
4223 4231
4224 There used to be a symbol "$ARCH" that was replaced by the output of uname 4232 There used to be a symbol "$ARCH" that was replaced by the output of uname
4225 -m, but that's no longer supported and has been removed. 4233 -m, but that's no longer supported and has been removed.
4226 4234
4227${OPSYS}, ${LOWER_OPSYS}, ${OS_VERSION} 4235${OPSYS}, ${LOWER_OPSYS}, ${OS_VERSION}
4228 4236
4229 Some packages want to embed the OS name and version into some paths. To do 4237 Some packages want to embed the OS name and version into some paths. To do
4230 this, use these variables in the PLIST: 4238 this, use these variables in the PLIST:
4231 4239
4232 + ${OPSYS} - output of "uname -s" 4240 + ${OPSYS} - output of "uname -s"
4233 4241
4234 + ${LOWER_OPSYS} - lowercase common name (eg. "solaris") 4242 + ${LOWER_OPSYS} - lowercase common name (eg. "solaris")
4235 4243
4236 + ${OS_VERSION} - "uname -r" 4244 + ${OS_VERSION} - "uname -r"
4237 4245
4238For a complete list of values which are replaced by default, please look in 4246For a complete list of values which are replaced by default, please look in
4239bsd.pkg.mk (and search for PLIST_SUBST). 4247bsd.pkg.mk (and search for PLIST_SUBST).
4240 4248
4241If you want to change other variables not listed above, you can add variables 4249If you want to change other variables not listed above, you can add variables
4242and their expansions to this variable in the following way, similar to 4250and their expansions to this variable in the following way, similar to
4243MESSAGE_SUBST (see Section 11.5, "Optional files"): 4251MESSAGE_SUBST (see Section 11.5, "Optional files"):
4244 4252
4245PLIST_SUBST+= SOMEVAR="somevalue" 4253PLIST_SUBST+= SOMEVAR="somevalue"
4246 4254
4247 4255
4248This replaces all occurrences of "${SOMEVAR}" in the PLIST with "somevalue". 4256This replaces all occurrences of "${SOMEVAR}" in the PLIST with "somevalue".
4249 4257
4250The PLIST_VARS variable can be used to simplify the common case of 4258The PLIST_VARS variable can be used to simplify the common case of
4251conditionally including some PLIST entries. It can be done by adding 4259conditionally including some PLIST entries. It can be done by adding
4252PLIST_VARS+=foo and setting the corresponding PLIST.foo variable to yes if the 4260PLIST_VARS+=foo and setting the corresponding PLIST.foo variable to yes if the
4253entry should be included. This will substitute "${PLIST.foo}" in the PLIST with 4261entry should be included. This will substitute "${PLIST.foo}" in the PLIST with
4254either """" or ""@comment "". For example, in Makefile: 4262either """" or ""@comment "". For example, in Makefile:
4255 4263
4256PLIST_VARS+= foo 4264PLIST_VARS+= foo
4257.if condition 4265.if condition
4258PLIST.foo= yes 4266PLIST.foo= yes
4259.else 4267.else
4260 4268
4261 4269
4262And then in PLIST: 4270And then in PLIST:
4263 4271
4264@comment $NetBSD$ 4272@comment $NetBSD$
4265bin/bar 4273bin/bar
4266man/man1/bar.1 4274man/man1/bar.1
4267${PLIST.foo}bin/foo 4275${PLIST.foo}bin/foo
4268${PLIST.foo}man/man1/foo.1 4276${PLIST.foo}man/man1/foo.1
4269${PLIST.foo}share/bar/foo.data 4277${PLIST.foo}share/bar/foo.data
4270${PLIST.foo}@dirrm share/bar 4278${PLIST.foo}@dirrm share/bar
4271 4279
4272 4280
427313.5. Man page compression 428113.5. Man page compression
4274 4282
4275Man pages should be installed in compressed form if MANZ is set (in 4283Man pages should be installed in compressed form if MANZ is set (in
4276bsd.own.mk), and uncompressed otherwise. To handle this in the PLIST file, the 4284bsd.own.mk), and uncompressed otherwise. To handle this in the PLIST file, the
4277suffix ".gz" is appended/removed automatically for man pages according to MANZ 4285suffix ".gz" is appended/removed automatically for man pages according to MANZ
4278and MANCOMPRESSED being set or not, see above for details. This modification of 4286and MANCOMPRESSED being set or not, see above for details. This modification of
4279the PLIST file is done on a copy of it, not PLIST itself. 4287the PLIST file is done on a copy of it, not PLIST itself.
4280 4288
428113.6. Changing PLIST source with PLIST_SRC 428913.6. Changing PLIST source with PLIST_SRC
4282 4290
4283To use one or more files as source for the PLIST used in generating the binary 4291To use one or more files as source for the PLIST used in generating the binary
4284package, set the variable PLIST_SRC to the names of that file(s). The files are 4292package, set the variable PLIST_SRC to the names of that file(s). The files are
4285later concatenated using cat(1), and the order of things is important. The 4293later concatenated using cat(1), and the order of things is important. The
4286default for PLIST_SRC is ${PKGDIR}/PLIST. 4294default for PLIST_SRC is ${PKGDIR}/PLIST.
4287 4295
428813.7. Platform-specific and differing PLISTs 429613.7. Platform-specific and differing PLISTs
4289 4297
4290Some packages decide to install a different set of files based on the operating 4298Some packages decide to install a different set of files based on the operating
4291system being used. These differences can be automatically handled by using the 4299system being used. These differences can be automatically handled by using the
4292following files: 4300following files:
4293 4301
4294 * PLIST.common 4302 * PLIST.common
4295 4303
4296 * PLIST.${OPSYS} 4304 * PLIST.${OPSYS}
4297 4305
4298 * PLIST.${MACHINE_ARCH} 4306 * PLIST.${MACHINE_ARCH}
4299 4307
4300 * PLIST.${OPSYS}-${MACHINE_ARCH} 4308 * PLIST.${OPSYS}-${MACHINE_ARCH}
4301 4309
4302 * PLIST.common_end 4310 * PLIST.common_end
4303 4311
430413.8. Sharing directories between packages 431213.8. Sharing directories between packages
4305 4313
4306A "shared directory" is a directory where multiple (and unrelated) packages 4314A "shared directory" is a directory where multiple (and unrelated) packages
4307install files. These directories were problematic because you had to add 4315install files. These directories were problematic because you had to add
4308special tricks in the PLIST to conditionally remove them, or have some 4316special tricks in the PLIST to conditionally remove them, or have some
4309centralized package handle them. 4317centralized package handle them.
4310 4318
4311In pkgsrc, it is now easy: Each package should create directories and install 4319In pkgsrc, it is now easy: Each package should create directories and install
4312files as needed; pkg_delete will remove any directories left empty after 4320files as needed; pkg_delete will remove any directories left empty after
4313uninstalling a package. 4321uninstalling a package.
4314 4322
4315If a package needs an empty directory to work, create the directory during 4323If a package needs an empty directory to work, create the directory during
4316installation as usual, and also add an entry to the PLIST: 4324installation as usual, and also add an entry to the PLIST:
4317 4325
4318@pkgdir path/to/empty/directory 4326@pkgdir path/to/empty/directory
4319 4327
4320 4328
4321Chapter 14. Buildlink methodology 4329Chapter 14. Buildlink methodology
4322 4330
4323Table of Contents 4331Table of Contents
4324 4332
432514.1. Converting packages to use buildlink3 433314.1. Converting packages to use buildlink3
432614.2. Writing buildlink3.mk files 433414.2. Writing buildlink3.mk files
4327 4335
4328 14.2.1. Anatomy of a buildlink3.mk file 4336 14.2.1. Anatomy of a buildlink3.mk file
4329 14.2.2. Updating BUILDLINK_API_DEPENDS.pkg and BUILDLINK_ABI_DEPENDS.pkg in 4337 14.2.2. Updating BUILDLINK_API_DEPENDS.pkg and BUILDLINK_ABI_DEPENDS.pkg in
4330 buildlink3.mk files 4338 buildlink3.mk files
4331 4339
433214.3. Writing builtin.mk files 434014.3. Writing builtin.mk files
4333 4341
4334 14.3.1. Anatomy of a builtin.mk file 4342 14.3.1. Anatomy of a builtin.mk file
4335 14.3.2. Global preferences for native or pkgsrc software 4343 14.3.2. Global preferences for native or pkgsrc software
4336 4344
4337Buildlink is a framework in pkgsrc that controls what headers and libraries are 4345Buildlink is a framework in pkgsrc that controls what headers and libraries are
4338seen by a package's configure and build processes. This is implemented in a two 4346seen by a package's configure and build processes. This is implemented in a two
4339step process: 4347step process:
4340 4348
4341 1. Symlink headers and libraries for dependencies into BUILDLINK_DIR, which by 4349 1. Symlink headers and libraries for dependencies into BUILDLINK_DIR, which by
4342 default is a subdirectory of WRKDIR. 4350 default is a subdirectory of WRKDIR.
4343 4351
4344 2. Create wrapper scripts that are used in place of the normal compiler tools 4352 2. Create wrapper scripts that are used in place of the normal compiler tools
4345 that translate -I${LOCALBASE}/include and -L${LOCALBASE}/lib into 4353 that translate -I${LOCALBASE}/include and -L${LOCALBASE}/lib into
4346 references to BUILDLINK_DIR. The wrapper scripts also make native compiler 4354 references to BUILDLINK_DIR. The wrapper scripts also make native compiler
4347 on some operating systems look like GCC, so that packages that expect GCC 4355 on some operating systems look like GCC, so that packages that expect GCC
4348 won't require modifications to build with those native compilers. 4356 won't require modifications to build with those native compilers.
4349 4357
4350This normalizes the environment in which a package is built so that the package 4358This normalizes the environment in which a package is built so that the package
4351may be built consistently despite what other software may be installed. Please 4359may be built consistently despite what other software may be installed. Please
4352note that the normal system header and library paths, e.g. /usr/include, /usr/ 4360note that the normal system header and library paths, e.g. /usr/include, /usr/
4353lib, etc., are always searched -- buildlink3 is designed to insulate the 4361lib, etc., are always searched -- buildlink3 is designed to insulate the
4354package build from non-system-supplied software. 4362package build from non-system-supplied software.
4355 4363
435614.1. Converting packages to use buildlink3 436414.1. Converting packages to use buildlink3
4357 4365
4358The process of converting packages to use the buildlink3 framework ("bl3ifying" 4366The process of converting packages to use the buildlink3 framework ("bl3ifying"
4359) is fairly straightforward. The things to keep in mind are: 4367) is fairly straightforward. The things to keep in mind are:
4360 4368
4361 1. Ensure that the build always calls the wrapper scripts instead of the 4369 1. Ensure that the build always calls the wrapper scripts instead of the
4362 actual toolchain. Some packages are tricky, and the only way to know for 4370 actual toolchain. Some packages are tricky, and the only way to know for
4363 sure is the check ${WRKDIR}/.work.log to see if the wrappers are being 4371 sure is the check ${WRKDIR}/.work.log to see if the wrappers are being
4364 invoked. 4372 invoked.
4365 4373
4366 2. Don't override PREFIX from within the package Makefile, e.g. Java VMs, 4374 2. Don't override PREFIX from within the package Makefile, e.g. Java VMs,
4367 standalone shells, etc., because the code to symlink files into $ 4375 standalone shells, etc., because the code to symlink files into $
4368 {BUILDLINK_DIR} looks for files relative to "pkg_info -qp pkgname". 4376 {BUILDLINK_DIR} looks for files relative to "pkg_info -qp pkgname".
4369 4377
4370 3. Remember that only the buildlink3.mk files that you list in a package's 4378 3. Remember that only the buildlink3.mk files that you list in a package's
4371 Makefile are added as dependencies for that package. 4379 Makefile are added as dependencies for that package.
4372 4380
4373If a dependency on a particular package is required for its libraries and 4381If a dependency on a particular package is required for its libraries and
4374headers, then we replace: 4382headers, then we replace:
4375 4383
4376DEPENDS+= foo>=1.1.0:../../category/foo 4384DEPENDS+= foo>=1.1.0:../../category/foo
4377 4385
4378with 4386with
4379 4387
4380.include "../../category/foo/buildlink3.mk" 4388.include "../../category/foo/buildlink3.mk"
4381 4389
4382The buildlink3.mk files usually define the required dependencies. If you need a 4390The buildlink3.mk files usually define the required dependencies. If you need a
4383newer version of the dependency when using buildlink3.mk files, then you can 4391newer version of the dependency when using buildlink3.mk files, then you can
4384define it in your Makefile; for example: 4392define it in your Makefile; for example:
4385 4393
4386BUILDLINK_API_DEPENDS.foo+= foo>=1.1.0 4394BUILDLINK_API_DEPENDS.foo+= foo>=1.1.0
4387.include "../../category/foo/buildlink3.mk" 4395.include "../../category/foo/buildlink3.mk"
4388 4396
4389There are several buildlink3.mk files in pkgsrc/mk that handle special package 4397There are several buildlink3.mk files in pkgsrc/mk that handle special package
4390issues: 4398issues:
4391 4399
4392 * bdb.buildlink3.mk chooses either the native or a pkgsrc Berkeley DB 4400 * bdb.buildlink3.mk chooses either the native or a pkgsrc Berkeley DB
4393 implementation based on the values of BDB_ACCEPTED and BDB_DEFAULT. 4401 implementation based on the values of BDB_ACCEPTED and BDB_DEFAULT.
4394 4402
4395 * curses.buildlink3.mk: If the system comes with neither Curses nor NCurses, 4403 * curses.buildlink3.mk: If the system comes with neither Curses nor NCurses,
4396 this will take care to install the devel/ncurses package. 4404 this will take care to install the devel/ncurses package.
4397 4405
4398 * krb5.buildlink3.mk uses the value of KRB5_ACCEPTED to choose between adding 4406 * krb5.buildlink3.mk uses the value of KRB5_ACCEPTED to choose between adding
4399 a dependency on Heimdal or MIT-krb5 for packages that require a Kerberos 5 4407 a dependency on Heimdal or MIT-krb5 for packages that require a Kerberos 5
4400 implementation. 4408 implementation.
4401 4409
4402 * motif.buildlink3.mk checks for a system-provided Motif installation or adds 4410 * motif.buildlink3.mk checks for a system-provided Motif installation or adds
4403 a dependency on x11/lesstif, x11/motif or x11/openmotif. The user can set 4411 a dependency on x11/lesstif, x11/motif or x11/openmotif. The user can set
4404 MOTIF_TYPE to "dt", "lesstif", "motif" or "openmotif" to choose which Motif 4412 MOTIF_TYPE to "dt", "lesstif", "motif" or "openmotif" to choose which Motif
4405 version will be used. 4413 version will be used.
4406 4414
4407 * readline.buildlink3.mk checks for a system-provided GNU readline or 4415 * readline.buildlink3.mk checks for a system-provided GNU readline or
4408 editline (libedit) installation, or adds a dependency on devel/readline, 4416 editline (libedit) installation, or adds a dependency on devel/readline,
4409 devel/editline. The user can set READLINE_DEFAULT to choose readline 4417 devel/editline. The user can set READLINE_DEFAULT to choose readline
4410 implementation. If your package really needs GNU readline library, its 4418 implementation. If your package really needs GNU readline library, its
4411 Makefile should include devel/readline/buildlink3.mk instead of 4419 Makefile should include devel/readline/buildlink3.mk instead of
4412 readline.buildlink3.mk. 4420 readline.buildlink3.mk.
4413 4421
4414 * oss.buildlink3.mk defines several variables that may be used by packages 4422 * oss.buildlink3.mk defines several variables that may be used by packages
4415 that use the Open Sound System (OSS) API. 4423 that use the Open Sound System (OSS) API.
4416 4424
4417 * pgsql.buildlink3.mk will accept any of the Postgres versions in the 4425 * pgsql.buildlink3.mk will accept any of the Postgres versions in the
4418 variable PGSQL_VERSIONS_ACCEPTED and default to the version 4426 variable PGSQL_VERSIONS_ACCEPTED and default to the version
4419 PGSQL_VERSION_DEFAULT. See the file for more information. 4427 PGSQL_VERSION_DEFAULT. See the file for more information.
4420 4428
4421 * pthread.buildlink3.mk uses the value of PTHREAD_OPTS and checks for native 4429 * pthread.buildlink3.mk uses the value of PTHREAD_OPTS and checks for native
4422 pthreads or adds a dependency on devel/pth as needed. 4430 pthreads or adds a dependency on devel/pth as needed.
4423 4431
4424 * xaw.buildlink3.mk uses the value of XAW_TYPE to choose a particular Athena 4432 * xaw.buildlink3.mk uses the value of XAW_TYPE to choose a particular Athena
4425 widgets library. 4433 widgets library.
4426 4434
4427The comments in those buildlink3.mk files provide a more complete description 4435The comments in those buildlink3.mk files provide a more complete description
4428of how to use them properly. 4436of how to use them properly.
4429 4437
443014.2. Writing buildlink3.mk files 443814.2. Writing buildlink3.mk files
4431 4439
4432A package's buildlink3.mk file is included by Makefiles to indicate the need to 4440A package's buildlink3.mk file is included by Makefiles to indicate the need to
4433compile and link against header files and libraries provided by the package. A 4441compile and link against header files and libraries provided by the package. A
4434buildlink3.mk file should always provide enough information to add the correct 4442buildlink3.mk file should always provide enough information to add the correct
4435type of dependency relationship and include any other buildlink3.mk files that 4443type of dependency relationship and include any other buildlink3.mk files that
4436it needs to find headers and libraries that it needs in turn. 4444it needs to find headers and libraries that it needs in turn.
4437 4445
4438To generate an initial buildlink3.mk file for further editing, Rene Hexel's 4446To generate an initial buildlink3.mk file for further editing, Rene Hexel's
4439pkgtools/createbuildlink package is highly recommended. For most packages, the 4447pkgtools/createbuildlink package is highly recommended. For most packages, the
4440following command will generate a good starting point for buildlink3.mk files: 4448following command will generate a good starting point for buildlink3.mk files:
4441 4449
4442% cd pkgsrc/category/pkgdir 4450% cd pkgsrc/category/pkgdir
4443% createbuildlink >buildlink3.mk 4451% createbuildlink >buildlink3.mk
4444 4452
4445 4453
444614.2.1. Anatomy of a buildlink3.mk file 445414.2.1. Anatomy of a buildlink3.mk file
4447 4455
4448The following real-life example buildlink3.mk is taken from pkgsrc/graphics/ 4456The following real-life example buildlink3.mk is taken from pkgsrc/graphics/
4449tiff: 4457tiff:
4450 4458
4451# $NetBSD: buildlink3.mk,v 1.16 2009/03/20 19:24:45 joerg Exp $ 4459# $NetBSD: buildlink3.mk,v 1.16 2009/03/20 19:24:45 joerg Exp $
4452 4460
4453BUILDLINK_TREE+= tiff 4461BUILDLINK_TREE+= tiff
4454 4462
4455.if !defined(TIFF_BUILDLINK3_MK) 4463.if !defined(TIFF_BUILDLINK3_MK)
4456TIFF_BUILDLINK3_MK:= 4464TIFF_BUILDLINK3_MK:=
4457 4465
4458BUILDLINK_API_DEPENDS.tiff+= tiff>=3.6.1 4466BUILDLINK_API_DEPENDS.tiff+= tiff>=3.6.1
4459BUILDLINK_ABI_DEPENDS.tiff+= tiff>=3.7.2nb1 4467BUILDLINK_ABI_DEPENDS.tiff+= tiff>=3.7.2nb1
4460BUILDLINK_PKGSRCDIR.tiff?= ../../graphics/tiff 4468BUILDLINK_PKGSRCDIR.tiff?= ../../graphics/tiff
4461 4469
4462.include "../../devel/zlib/buildlink3.mk" 4470.include "../../devel/zlib/buildlink3.mk"
4463.include "../../graphics/jpeg/buildlink3.mk" 4471.include "../../graphics/jpeg/buildlink3.mk"
4464.endif # TIFF_BUILDLINK3_MK 4472.endif # TIFF_BUILDLINK3_MK
4465 4473
4466BUILDLINK_TREE+= -tiff 4474BUILDLINK_TREE+= -tiff
4467 4475
4468The header and footer manipulate BUILDLINK_TREE, which is common across all 4476The header and footer manipulate BUILDLINK_TREE, which is common across all
4469buildlink3.mk files and is used to track the dependency tree. 4477buildlink3.mk files and is used to track the dependency tree.
4470 4478
4471The main section is protected from multiple inclusion and controls how the 4479The main section is protected from multiple inclusion and controls how the
4472dependency on pkg is added. Several important variables are set in the section: 4480dependency on pkg is added. Several important variables are set in the section:
4473 4481
4474 * BUILDLINK_API_DEPENDS.pkg is the actual dependency recorded in the 4482 * BUILDLINK_API_DEPENDS.pkg is the actual dependency recorded in the
4475 installed package; this should always be set using += to ensure that we're 4483 installed package; this should always be set using += to ensure that we're
4476 appending to any pre-existing list of values. This variable should be set 4484 appending to any pre-existing list of values. This variable should be set
4477 to the first version of the package that had an backwards-incompatible API 4485 to the first version of the package that had an backwards-incompatible API
4478 change. 4486 change.
4479 4487
4480 * BUILDLINK_PKGSRCDIR.pkg is the location of the pkg pkgsrc directory. 4488 * BUILDLINK_PKGSRCDIR.pkg is the location of the pkg pkgsrc directory.
4481 4489
4482 * BUILDLINK_DEPMETHOD.pkg (not shown above) controls whether we use 4490 * BUILDLINK_DEPMETHOD.pkg (not shown above) controls whether we use
4483 BUILD_DEPENDS or DEPENDS to add the dependency on pkg. The build dependency 4491 BUILD_DEPENDS or DEPENDS to add the dependency on pkg. The build dependency
4484 is selected by setting BUILDLINK_DEPMETHOD.pkg to "build". By default, the 4492 is selected by setting BUILDLINK_DEPMETHOD.pkg to "build". By default, the
4485 full dependency is used. 4493 full dependency is used.
4486 4494
4487 * BUILDLINK_INCDIRS.pkg and BUILDLINK_LIBDIRS.pkg (not shown above) are lists 4495 * BUILDLINK_INCDIRS.pkg and BUILDLINK_LIBDIRS.pkg (not shown above) are lists
4488 of subdirectories of ${BUILDLINK_PREFIX.pkg} to add to the header and 4496 of subdirectories of ${BUILDLINK_PREFIX.pkg} to add to the header and
4489 library search paths. These default to "include" and "lib" respectively. 4497 library search paths. These default to "include" and "lib" respectively.
4490 4498
4491 * BUILDLINK_CPPFLAGS.pkg (not shown above) is the list of preprocessor flags 4499 * BUILDLINK_CPPFLAGS.pkg (not shown above) is the list of preprocessor flags
4492 to add to CPPFLAGS, which are passed on to the configure and build phases. 4500 to add to CPPFLAGS, which are passed on to the configure and build phases.
4493 The "-I" option should be avoided and instead be handled using 4501 The "-I" option should be avoided and instead be handled using
4494 BUILDLINK_INCDIRS.pkg as above. 4502 BUILDLINK_INCDIRS.pkg as above.
4495 4503
4496The following variables are all optionally defined within this second section 4504The following variables are all optionally defined within this second section
4497(protected against multiple inclusion) and control which package files are 4505(protected against multiple inclusion) and control which package files are
4498symlinked into ${BUILDLINK_DIR} and how their names are transformed during the 4506symlinked into ${BUILDLINK_DIR} and how their names are transformed during the
4499symlinking: 4507symlinking:
4500 4508
4501 * BUILDLINK_FILES.pkg (not shown above) is a shell glob pattern relative to $ 4509 * BUILDLINK_FILES.pkg (not shown above) is a shell glob pattern relative to $
4502 {BUILDLINK_PREFIX.pkg} to be symlinked into ${BUILDLINK_DIR}, e.g. include/ 4510 {BUILDLINK_PREFIX.pkg} to be symlinked into ${BUILDLINK_DIR}, e.g. include/
4503 *.h. 4511 *.h.
4504 4512
4505 * BUILDLINK_FILES_CMD.pkg (not shown above) is a shell pipeline that outputs 4513 * BUILDLINK_FILES_CMD.pkg (not shown above) is a shell pipeline that outputs
4506 to stdout a list of files relative to ${BUILDLINK_PREFIX.pkg}. The 4514 to stdout a list of files relative to ${BUILDLINK_PREFIX.pkg}. The
4507 resulting files are to be symlinked into ${BUILDLINK_DIR}. By default, this 4515 resulting files are to be symlinked into ${BUILDLINK_DIR}. By default, this
4508 takes the +CONTENTS of a pkg and filters it through $ 4516 takes the +CONTENTS of a pkg and filters it through $
4509 {BUILDLINK_CONTENTS_FILTER.pkg}. 4517 {BUILDLINK_CONTENTS_FILTER.pkg}.
4510 4518
4511 * BUILDLINK_CONTENTS_FILTER.pkg (not shown above) is a filter command that 4519 * BUILDLINK_CONTENTS_FILTER.pkg (not shown above) is a filter command that
4512 filters +CONTENTS input into a list of files relative to $ 4520 filters +CONTENTS input into a list of files relative to $
4513 {BUILDLINK_PREFIX.pkg} on stdout. By default, BUILDLINK_CONTENTS_FILTER.pkg 4521 {BUILDLINK_PREFIX.pkg} on stdout. By default for overwrite packages,
4514 outputs the contents of the include and lib directories in the package 4522 BUILDLINK_CONTENTS_FILTER.pkg outputs the contents of the include and lib
4515 +CONTENTS. 4523 directories in the package +CONTENTS, and for pkgviews packages, it outputs
 4524 any libtool archives in lib directories.
4516 4525
4517 * BUILDLINK_FNAME_TRANSFORM.pkg (not shown above) is a list of sed arguments 4526 * BUILDLINK_FNAME_TRANSFORM.pkg (not shown above) is a list of sed arguments
4518 used to transform the name of the source filename into a destination 4527 used to transform the name of the source filename into a destination
4519 filename, e.g. -e "s|/curses.h|/ncurses.h|g". 4528 filename, e.g. -e "s|/curses.h|/ncurses.h|g".
4520 4529
4521This section can additionally include any buildlink3.mk needed for pkg's 4530This section can additionally include any buildlink3.mk needed for pkg's
4522library dependencies. Including these buildlink3.mk files means that the 4531library dependencies. Including these buildlink3.mk files means that the
4523headers and libraries for these dependencies are also symlinked into $ 4532headers and libraries for these dependencies are also symlinked into $
4524{BUILDLINK_DIR} whenever the pkg buildlink3.mk file is included. Dependencies 4533{BUILDLINK_DIR} whenever the pkg buildlink3.mk file is included. Dependencies
4525are only added for directly include buildlink3.mk files. 4534are only added for directly include buildlink3.mk files.
4526 4535
4527When providing a buildlink3.mk and including other buildlink3.mk files in it, 4536When providing a buildlink3.mk and including other buildlink3.mk files in it,
4528please only add necessary ones, i.e., those whose libraries or header files are 4537please only add necessary ones, i.e., those whose libraries or header files are
4529automatically exposed when the package is use. 4538automatically exposed when the package is use.
4530 4539
4531In particular, if only an executable (bin/foo) is linked against a library, 4540In particular, if only an executable (bin/foo) is linked against a library,
4532that library does not need to be propagated in the buildlink3.mk file. 4541that library does not need to be propagated in the buildlink3.mk file.
4533 4542
4534The following steps should help you decide if a buildlink3.mk file needs to be 4543The following steps should help you decide if a buildlink3.mk file needs to be
4535included: 4544included:
4536 4545
4537 * Look at the installed header files: What headers do they include? The 4546 * Look at the installed header files: What headers do they include? The
4538 packages providing these files must be buildlinked. 4547 packages providing these files must be buildlinked.
4539 4548
4540 * Run ldd on all installed libraries and look against what other libraries 4549 * Run ldd on all installed libraries and look against what other libraries
4541 they link. Some of the packages providing these probably need to be 4550 they link. Some of the packages providing these probably need to be
4542 buildlinked; however, it's not automatic, since e.g. GTK on some systems 4551 buildlinked; however, it's not automatic, since e.g. GTK on some systems
4543 pulls in the X libraries, so they will show up in the ldd output, while on 4552 pulls in the X libraries, so they will show up in the ldd output, while on
4544 others (like OS X) it won't. ldd output can thus only be used as a hint. 4553 others (like OS X) it won't. ldd output can thus only be used as a hint.
4545 4554
454614.2.2. Updating BUILDLINK_API_DEPENDS.pkg and BUILDLINK_ABI_DEPENDS.pkg in 455514.2.2. Updating BUILDLINK_API_DEPENDS.pkg and BUILDLINK_ABI_DEPENDS.pkg in
4547buildlink3.mk files 4556buildlink3.mk files
4548 4557
4549These two variables differ in that one describes source compatibility (API) and 4558These two variables differ in that one describes source compatibility (API) and
4550the other binary compatibility (ABI). The difference is that a change in the 4559the other binary compatibility (ABI). The difference is that a change in the
4551API breaks compilation of programs while changes in the ABI stop compiled 4560API breaks compilation of programs while changes in the ABI stop compiled
4552programs from running. 4561programs from running.
4553 4562
4554Changes to the BUILDLINK_API_DEPENDS.pkg variable in a buildlink3.mk file 4563Changes to the BUILDLINK_API_DEPENDS.pkg variable in a buildlink3.mk file
4555happen very rarely. One possible reason is that all packages depending on this 4564happen very rarely. One possible reason is that all packages depending on this
4556already need a newer version. In case it is bumped see the description below. 4565already need a newer version. In case it is bumped see the description below.
4557 4566
4558The most common example of an ABI change is that the major version of a shared 4567The most common example of an ABI change is that the major version of a shared
4559library is increased. In this case, BUILDLINK_ABI_DEPENDS.pkg should be 4568library is increased. In this case, BUILDLINK_ABI_DEPENDS.pkg should be
4560adjusted to require at least the new package version. Then the packages that 4569adjusted to require at least the new package version. Then the packages that
4561depend on this package need their PKGREVISIONs increased and, if they have 4570depend on this package need their PKGREVISIONs increased and, if they have
4562buildlink3.mk files, their BUILDLINK_ABI_DEPENDS.pkg adjusted, too. This is 4571buildlink3.mk files, their BUILDLINK_ABI_DEPENDS.pkg adjusted, too. This is
4563needed so pkgsrc will require the correct package dependency and not settle for 4572needed so pkgsrc will require the correct package dependency and not settle for
4564an older one when building the source. 4573an older one when building the source.
4565 4574
4566See Section 19.1.6, "Handling dependencies" for more information about 4575See Section 19.1.6, "Handling dependencies" for more information about
4567dependencies on other packages, including the BUILDLINK_ABI_DEPENDS and 4576dependencies on other packages, including the BUILDLINK_ABI_DEPENDS and
4568ABI_DEPENDS definitions. 4577ABI_DEPENDS definitions.
4569 4578
4570Please take careful consideration before adjusting BUILDLINK_API_DEPENDS.pkg or 4579Please take careful consideration before adjusting BUILDLINK_API_DEPENDS.pkg or
4571BUILDLINK_ABI_DEPENDS.pkg as we don't want to cause unneeded package deletions 4580BUILDLINK_ABI_DEPENDS.pkg as we don't want to cause unneeded package deletions
4572and rebuilds. In many cases, new versions of packages work just fine with older 4581and rebuilds. In many cases, new versions of packages work just fine with older
4573dependencies. 4582dependencies.
4574 4583
4575Also it is not needed to set BUILDLINK_ABI_DEPENDS.pkg when it is identical to 4584Also it is not needed to set BUILDLINK_ABI_DEPENDS.pkg when it is identical to
4576BUILDLINK_API_DEPENDS.pkg. 4585BUILDLINK_API_DEPENDS.pkg.
4577 4586
457814.3. Writing builtin.mk files 458714.3. Writing builtin.mk files
4579 4588
4580Some packages in pkgsrc install headers and libraries that coincide with 4589Some packages in pkgsrc install headers and libraries that coincide with
4581headers and libraries present in the base system. Aside from a buildlink3.mk 4590headers and libraries present in the base system. Aside from a buildlink3.mk
4582file, these packages should also include a builtin.mk file that includes the 4591file, these packages should also include a builtin.mk file that includes the
4583necessary checks to decide whether using the built-in software or the pkgsrc 4592necessary checks to decide whether using the built-in software or the pkgsrc
4584software is appropriate. 4593software is appropriate.
4585 4594
4586The only requirements of a builtin.mk file for pkg are: 4595The only requirements of a builtin.mk file for pkg are:
4587 4596
4588 1. It should set USE_BUILTIN.pkg to either "yes" or "no" after it is included. 4597 1. It should set USE_BUILTIN.pkg to either "yes" or "no" after it is included.
4589 4598
4590 2. It should not override any USE_BUILTIN.pkg which is already set before the 4599 2. It should not override any USE_BUILTIN.pkg which is already set before the
4591 builtin.mk file is included. 4600 builtin.mk file is included.
4592 4601
4593 3. It should be written to allow multiple inclusion. This is very important 4602 3. It should be written to allow multiple inclusion. This is very important
4594 and takes careful attention to Makefile coding. 4603 and takes careful attention to Makefile coding.
4595 4604
459614.3.1. Anatomy of a builtin.mk file 460514.3.1. Anatomy of a builtin.mk file
4597 4606
4598The following is the recommended template for builtin.mk files: 4607The following is the recommended template for builtin.mk files:
4599 4608
4600.if !defined(IS_BUILTIN.foo) 4609.if !defined(IS_BUILTIN.foo)
4601# 4610#
4602# IS_BUILTIN.foo is set to "yes" or "no" depending on whether "foo" 4611# IS_BUILTIN.foo is set to "yes" or "no" depending on whether "foo"
4603# genuinely exists in the system or not. 4612# genuinely exists in the system or not.
4604# 4613#
4605IS_BUILTIN.foo?= no 4614IS_BUILTIN.foo?= no
4606 4615
4607# BUILTIN_PKG.foo should be set here if "foo" is built-in and its package 4616# BUILTIN_PKG.foo should be set here if "foo" is built-in and its package
4608# version can be determined. 4617# version can be determined.
4609# 4618#
4610. if !empty(IS_BUILTIN.foo:M[yY][eE][sS]) 4619. if !empty(IS_BUILTIN.foo:M[yY][eE][sS])
4611BUILTIN_PKG.foo?= foo-1.0 4620BUILTIN_PKG.foo?= foo-1.0
4612. endif 4621. endif
4613.endif # IS_BUILTIN.foo 4622.endif # IS_BUILTIN.foo
4614 4623
4615.if !defined(USE_BUILTIN.foo) 4624.if !defined(USE_BUILTIN.foo)
4616USE_BUILTIN.foo?= ${IS_BUILTIN.foo} 4625USE_BUILTIN.foo?= ${IS_BUILTIN.foo}
4617. if defined(BUILTIN_PKG.foo) 4626. if defined(BUILTIN_PKG.foo)
4618. for _depend_ in ${BUILDLINK_API_DEPENDS.foo} 4627. for _depend_ in ${BUILDLINK_API_DEPENDS.foo}
4619. if !empty(USE_BUILTIN.foo:M[yY][eE][sS]) 4628. if !empty(USE_BUILTIN.foo:M[yY][eE][sS])
4620USE_BUILTIN.foo!= \ 4629USE_BUILTIN.foo!= \
4621 ${PKG_ADMIN} pmatch '${_depend_}' ${BUILTIN_PKG.foo} \ 4630 ${PKG_ADMIN} pmatch '${_depend_}' ${BUILTIN_PKG.foo} \
4622 && ${ECHO} "yes" || ${ECHO} "no" 4631 && ${ECHO} "yes" || ${ECHO} "no"
4623. endif 4632. endif
4624. endfor 4633. endfor
4625. endif 4634. endif
4626.endif # USE_BUILTIN.foo 4635.endif # USE_BUILTIN.foo
4627 4636
4628CHECK_BUILTIN.foo?= no 4637CHECK_BUILTIN.foo?= no
4629.if !empty(CHECK_BUILTIN.foo:M[nN][oO]) 4638.if !empty(CHECK_BUILTIN.foo:M[nN][oO])
4630# 4639#
4631# Here we place code that depends on whether USE_BUILTIN.foo is set to 4640# Here we place code that depends on whether USE_BUILTIN.foo is set to
4632# "yes" or "no". 4641# "yes" or "no".
4633# 4642#
4634.endif # CHECK_BUILTIN.foo 4643.endif # CHECK_BUILTIN.foo
4635 4644
4636The first section sets IS_BUILTIN.pkg depending on if pkg really exists in the 4645The first section sets IS_BUILTIN.pkg depending on if pkg really exists in the
4637base system. This should not be a base system software with similar 4646base system. This should not be a base system software with similar
4638functionality to pkg; it should only be "yes" if the actual package is included 4647functionality to pkg; it should only be "yes" if the actual package is included
4639as part of the base system. This variable is only used internally within the 4648as part of the base system. This variable is only used internally within the
4640builtin.mk file. 4649builtin.mk file.
4641 4650
4642The second section sets BUILTIN_PKG.pkg to the version of pkg in the base 4651The second section sets BUILTIN_PKG.pkg to the version of pkg in the base
4643system if it exists (if IS_BUILTIN.pkg is "yes"). This variable is only used 4652system if it exists (if IS_BUILTIN.pkg is "yes"). This variable is only used
4644internally within the builtin.mk file. 4653internally within the builtin.mk file.
4645 4654
4646The third section sets USE_BUILTIN.pkg and is required in all builtin.mk files. 4655The third section sets USE_BUILTIN.pkg and is required in all builtin.mk files.
4647The code in this section must make the determination whether the built-in 4656The code in this section must make the determination whether the built-in
4648software is adequate to satisfy the dependencies listed in 4657software is adequate to satisfy the dependencies listed in
4649BUILDLINK_API_DEPENDS.pkg. This is typically done by comparing BUILTIN_PKG.pkg 4658BUILDLINK_API_DEPENDS.pkg. This is typically done by comparing BUILTIN_PKG.pkg
4650against each of the dependencies in BUILDLINK_API_DEPENDS.pkg. USE_BUILTIN.pkg  4659against each of the dependencies in BUILDLINK_API_DEPENDS.pkg. USE_BUILTIN.pkg
4651must be set to the correct value by the end of the builtin.mk file. Note that 4660must be set to the correct value by the end of the builtin.mk file. Note that
4652USE_BUILTIN.pkg may be "yes" even if IS_BUILTIN.pkg is "no" because we may make 4661USE_BUILTIN.pkg may be "yes" even if IS_BUILTIN.pkg is "no" because we may make
4653the determination that the built-in version of the software is similar enough 4662the determination that the built-in version of the software is similar enough
4654to be used as a replacement. 4663to be used as a replacement.
4655 4664
4656The last section is guarded by CHECK_BUILTIN.pkg, and includes code that uses 4665The last section is guarded by CHECK_BUILTIN.pkg, and includes code that uses
4657the value of USE_BUILTIN.pkg set in the previous section. This typically 4666the value of USE_BUILTIN.pkg set in the previous section. This typically
4658includes, e.g., adding additional dependency restrictions and listing 4667includes, e.g., adding additional dependency restrictions and listing
4659additional files to symlink into ${BUILDLINK_DIR} (via BUILDLINK_FILES.pkg). 4668additional files to symlink into ${BUILDLINK_DIR} (via BUILDLINK_FILES.pkg).
4660 4669
466114.3.2. Global preferences for native or pkgsrc software 467014.3.2. Global preferences for native or pkgsrc software
4662 4671
4663When building packages, it's possible to choose whether to set a global 4672When building packages, it's possible to choose whether to set a global
4664preference for using either the built-in (native) version or the pkgsrc version 4673preference for using either the built-in (native) version or the pkgsrc version
4665of software to satisfy a dependency. This is controlled by setting 4674of software to satisfy a dependency. This is controlled by setting
4666PREFER_PKGSRC and PREFER_NATIVE. These variables take values of either "yes", " 4675PREFER_PKGSRC and PREFER_NATIVE. These variables take values of either "yes", "
4667no", or a list of packages. PREFER_PKGSRC tells pkgsrc to use the pkgsrc 4676no", or a list of packages. PREFER_PKGSRC tells pkgsrc to use the pkgsrc
4668versions of software, while PREFER_NATIVE tells pkgsrc to use the built-in 4677versions of software, while PREFER_NATIVE tells pkgsrc to use the built-in
4669versions. Preferences are determined by the most specific instance of the 4678versions. Preferences are determined by the most specific instance of the
4670package in either PREFER_PKGSRC or PREFER_NATIVE. If a package is specified in 4679package in either PREFER_PKGSRC or PREFER_NATIVE. If a package is specified in
4671neither or in both variables, then PREFER_PKGSRC has precedence over 4680neither or in both variables, then PREFER_PKGSRC has precedence over
4672PREFER_NATIVE. For example, to require using pkgsrc versions of software for 4681PREFER_NATIVE. For example, to require using pkgsrc versions of software for
4673all but the most basic bits on a NetBSD system, you can set: 4682all but the most basic bits on a NetBSD system, you can set:
4674 4683
4675PREFER_PKGSRC= yes 4684PREFER_PKGSRC= yes
4676PREFER_NATIVE= getopt skey tcp_wrappers 4685PREFER_NATIVE= getopt skey tcp_wrappers
4677 4686
4678A package must have a builtin.mk file to be listed in PREFER_NATIVE, otherwise 4687A package must have a builtin.mk file to be listed in PREFER_NATIVE, otherwise
4679it is simply ignored in that list. 4688it is simply ignored in that list.
4680 4689
4681Chapter 15. The pkginstall framework 4690Chapter 15. The pkginstall framework
4682 4691
4683Table of Contents 4692Table of Contents
4684 4693
468515.1. Files and directories outside the installation prefix 469415.1. Files and directories outside the installation prefix
4686 4695
4687 15.1.1. Directory manipulation 4696 15.1.1. Directory manipulation
4688 15.1.2. File manipulation 4697 15.1.2. File manipulation
4689 4698
469015.2. Configuration files 469915.2. Configuration files
4691 4700
4692 15.2.1. How PKG_SYSCONFDIR is set 4701 15.2.1. How PKG_SYSCONFDIR is set
4693 15.2.2. Telling the software where configuration files are 4702 15.2.2. Telling the software where configuration files are
4694 15.2.3. Patching installations 4703 15.2.3. Patching installations
4695 15.2.4. Disabling handling of configuration files 4704 15.2.4. Disabling handling of configuration files
4696 4705
469715.3. System startup scripts 470615.3. System startup scripts
4698 4707
4699 15.3.1. Disabling handling of system startup scripts 4708 15.3.1. Disabling handling of system startup scripts
4700 4709
470115.4. System users and groups 471015.4. System users and groups
470215.5. System shells 471115.5. System shells
4703 4712
4704 15.5.1. Disabling shell registration 4713 15.5.1. Disabling shell registration
4705 4714
470615.6. Fonts 471515.6. Fonts
4707 4716
4708 15.6.1. Disabling automatic update of the fonts databases 4717 15.6.1. Disabling automatic update of the fonts databases
4709 4718
4710This chapter describes the framework known as pkginstall, whose key features 4719This chapter describes the framework known as pkginstall, whose key features
4711are: 4720are:
4712 4721
4713 * Generic installation and manipulation of directories and files outside the 4722 * Generic installation and manipulation of directories and files outside the
4714 pkgsrc-handled tree, LOCALBASE. 4723 pkgsrc-handled tree, LOCALBASE.
4715 4724
4716 * Automatic handling of configuration files during installation, provided 4725 * Automatic handling of configuration files during installation, provided
4717 that packages are correctly designed. 4726 that packages are correctly designed.
4718 4727
4719 * Generation and installation of system startup scripts. 4728 * Generation and installation of system startup scripts.
4720 4729
4721 * Registration of system users and groups. 4730 * Registration of system users and groups.
4722 4731
4723 * Registration of system shells. 4732 * Registration of system shells.
4724 4733
4725 * Automatic updating of fonts databases. 4734 * Automatic updating of fonts databases.
4726 4735
4727The following sections inspect each of the above points in detail. 4736The following sections inspect each of the above points in detail.
4728 4737
4729You may be thinking that many of the things described here could be easily done 4738You may be thinking that many of the things described here could be easily done
4730with simple code in the package's post-installation target (post-install). This 4739with simple code in the package's post-installation target (post-install). This
4731is incorrect, as the code in them is only executed when building from source. 4740is incorrect, as the code in them is only executed when building from source.
4732Machines using binary packages could not benefit from it at all (as the code 4741Machines using binary packages could not benefit from it at all (as the code
4733itself could be unavailable). Therefore, the only way to achieve any of the 4742itself could be unavailable). Therefore, the only way to achieve any of the
4734items described above is by means of the installation scripts, which are 4743items described above is by means of the installation scripts, which are
4735automatically generated by pkginstall. 4744automatically generated by pkginstall.
4736 4745
473715.1. Files and directories outside the installation prefix 474615.1. Files and directories outside the installation prefix
4738 4747
4739As you already know, the PLIST file holds a list of files and directories that 4748As you already know, the PLIST file holds a list of files and directories that
4740belong to a package. The names used in it are relative to the installation 4749belong to a package. The names used in it are relative to the installation
4741prefix (${PREFIX}), which means that it cannot register files outside this 4750prefix (${PREFIX}), which means that it cannot register files outside this
4742directory (absolute path names are not allowed). Despite this restriction, some 4751directory (absolute path names are not allowed). Despite this restriction, some
4743packages need to install files outside this location; e.g., under ${VARBASE} or 4752packages need to install files outside this location; e.g., under ${VARBASE} or
4744${PKG_SYSCONFDIR}. The only way to achieve this is to create such files during 4753${PKG_SYSCONFDIR}. The only way to achieve this is to create such files during
4745installation time by using installation scripts. 4754installation time by using installation scripts.
4746 4755
4747The generic installation scripts are shell scripts that can contain arbitrary 4756The generic installation scripts are shell scripts that can contain arbitrary
4748code. The list of scripts to execute is taken from the INSTALL_FILE variable, 4757code. The list of scripts to execute is taken from the INSTALL_FILE variable,
4749which defaults to INSTALL. A similar variable exists for package removal 4758which defaults to INSTALL. A similar variable exists for package removal
4750(DEINSTALL_FILE, whose default is DEINSTALL). These scripts can run arbitrary 4759(DEINSTALL_FILE, whose default is DEINSTALL). These scripts can run arbitrary
4751commands, so they have the potential to create and manage files anywhere in the 4760commands, so they have the potential to create and manage files anywhere in the
4752file system. 4761file system.
4753 4762
4754Using these general installation files is not recommended, but may be needed in 4763Using these general installation files is not recommended, but may be needed in
4755some special cases. One reason for avoiding them is that the user has to trust 4764some special cases. One reason for avoiding them is that the user has to trust
4756the packager that there is no unwanted or simply erroneous code included in the 4765the packager that there is no unwanted or simply erroneous code included in the
4757installation script. Also, previously there were many similar scripts for the 4766installation script. Also, previously there were many similar scripts for the
4758same functionality, and fixing a common error involved finding and changing all 4767same functionality, and fixing a common error involved finding and changing all
4759of them. 4768of them.
4760 4769
4761The pkginstall framework offers another, standardized way. It provides generic 4770The pkginstall framework offers another, standardized way. It provides generic
4762scripts to abstract the manipulation of such files and directories based on 4771scripts to abstract the manipulation of such files and directories based on
4763variables set in the package's Makefile. The rest of this section describes 4772variables set in the package's Makefile. The rest of this section describes
4764these variables. 4773these variables.
4765 4774
476615.1.1. Directory manipulation 477515.1.1. Directory manipulation
4767 4776
4768The following variables can be set to request the creation of directories 4777The following variables can be set to request the creation of directories
4769anywhere in the file system: 4778anywhere in the file system:
4770 4779
4771 * MAKE_DIRS and OWN_DIRS contain a list of directories that should be created 4780 * MAKE_DIRS and OWN_DIRS contain a list of directories that should be created
4772 and should attempt to be destroyed by the installation scripts. The 4781 and should attempt to be destroyed by the installation scripts. The
4773 difference between the two is that the latter prompts the administrator to 4782 difference between the two is that the latter prompts the administrator to
4774 remove any directories that may be left after deinstallation (because they 4783 remove any directories that may be left after deinstallation (because they
4775 were not empty), while the former does not. 4784 were not empty), while the former does not.
4776 4785
4777 * MAKE_DIRS_PERMS and OWN_DIRS_PERMS contain a list of tuples describing 4786 * MAKE_DIRS_PERMS and OWN_DIRS_PERMS contain a list of tuples describing
4778 which directories should be created and should attempt to be destroyed by 4787 which directories should be created and should attempt to be destroyed by
4779 the installation scripts. Each tuple holds the following values, separated 4788 the installation scripts. Each tuple holds the following values, separated
4780 by spaces: the directory name, its owner, its group and its numerical mode. 4789 by spaces: the directory name, its owner, its group and its numerical mode.
4781 For example: 4790 For example:
4782 4791
4783 MAKE_DIRS_PERMS+= ${VARBASE}/foo/private ${ROOT_USER} ${ROOT_GROUP} 0700 4792 MAKE_DIRS_PERMS+= ${VARBASE}/foo/private ${ROOT_USER} ${ROOT_GROUP} 0700
4784 4793
4785 The difference between the two is exactly the same as their non-PERMS 4794 The difference between the two is exactly the same as their non-PERMS
4786 counterparts. 4795 counterparts.
4787 4796
478815.1.2. File manipulation 479715.1.2. File manipulation
4789 4798
4790Creating non-empty files outside the installation prefix is tricky because the 4799Creating non-empty files outside the installation prefix is tricky because the
4791PLIST forces all files to be inside it. To overcome this problem, the only 4800PLIST forces all files to be inside it. To overcome this problem, the only
4792solution is to extract the file in the known place (i.e., inside the 4801solution is to extract the file in the known place (i.e., inside the
4793installation prefix) and copy it to the appropriate location during 4802installation prefix) and copy it to the appropriate location during
4794installation (done by the installation scripts generated by pkginstall). We 4803installation (done by the installation scripts generated by pkginstall). We
4795will call the former the master file in the following paragraphs, which 4804will call the former the master file in the following paragraphs, which
4796describe the variables that can be used to automatically and consistently 4805describe the variables that can be used to automatically and consistently
4797handle files outside the installation prefix: 4806handle files outside the installation prefix:
4798 4807
4799 * CONF_FILES and REQD_FILES are pairs of master and target files. During 4808 * CONF_FILES and REQD_FILES are pairs of master and target files. During
4800 installation time, the master file is copied to the target one if and only 4809 installation time, the master file is copied to the target one if and only
4801 if the latter does not exist. Upon deinstallation, the target file is 4810 if the latter does not exist. Upon deinstallation, the target file is
4802 removed provided that it was not modified by the installation. 4811 removed provided that it was not modified by the installation.
4803 4812
4804 The difference between the two is that the latter prompts the administrator 4813 The difference between the two is that the latter prompts the administrator
4805 to remove any files that may be left after deinstallation (because they 4814 to remove any files that may be left after deinstallation (because they
4806 were not empty), while the former does not. 4815 were not empty), while the former does not.
4807 4816
4808 * CONF_FILES_PERMS and REQD_FILES_PERMS contain tuples describing master 4817 * CONF_FILES_PERMS and REQD_FILES_PERMS contain tuples describing master
4809 files as well as their target locations. For each of them, it also 4818 files as well as their target locations. For each of them, it also
4810 specifies their owner, their group and their numeric permissions, in this 4819 specifies their owner, their group and their numeric permissions, in this
4811 order. For example: 4820 order. For example:
4812 4821
4813 REQD_FILES_PERMS+= ${PREFIX}/share/somefile ${VARBASE}/somefile ${ROOT_USER} ${ROOT_GROUP} 0700 4822 REQD_FILES_PERMS+= ${PREFIX}/share/somefile ${VARBASE}/somefile ${ROOT_USER} ${ROOT_GROUP} 0700
4814 4823
4815 The difference between the two is exactly the same as their non-PERMS 4824 The difference between the two is exactly the same as their non-PERMS
4816 counterparts. 4825 counterparts.
4817 4826
481815.2. Configuration files 482715.2. Configuration files
4819 4828
4820Configuration files are special in the sense that they are installed in their 4829Configuration files are special in the sense that they are installed in their
4821own specific directory, PKG_SYSCONFDIR, and need special treatment during 4830own specific directory, PKG_SYSCONFDIR, and need special treatment during
4822installation (most of which is automated by pkginstall). The main concept you 4831installation (most of which is automated by pkginstall). The main concept you
4823must bear in mind is that files marked as configuration files are automatically 4832must bear in mind is that files marked as configuration files are automatically
4824copied to the right place (somewhere inside PKG_SYSCONFDIR) during installation 4833copied to the right place (somewhere inside PKG_SYSCONFDIR) during installation
4825if and only if they didn't exist before. Similarly, they will not be removed if 4834if and only if they didn't exist before. Similarly, they will not be removed if
4826they have local modifications. This ensures that administrators never lose any 4835they have local modifications. This ensures that administrators never lose any
4827custom changes they may have made. 4836custom changes they may have made.
4828 4837
482915.2.1. How PKG_SYSCONFDIR is set 483815.2.1. How PKG_SYSCONFDIR is set
4830 4839
4831As said before, the PKG_SYSCONFDIR variable specifies where configuration files 4840As said before, the PKG_SYSCONFDIR variable specifies where configuration files
4832shall be installed. Its contents are set based upon the following variables: 4841shall be installed. Its contents are set based upon the following variables:
4833 4842
4834 * PKG_SYSCONFBASE: The configuration's root directory. Defaults to ${PREFIX}/ 4843 * PKG_SYSCONFBASE: The configuration's root directory. Defaults to ${PREFIX}/
4835 etc although it may be overridden by the user to point to his preferred 4844 etc although it may be overridden by the user to point to his preferred
4836 location (e.g., /etc, /etc/pkg, etc.). Packages must not use it directly. 4845 location (e.g., /etc, /etc/pkg, etc.). Packages must not use it directly.
4837 4846
4838 * PKG_SYSCONFSUBDIR: A subdirectory of PKG_SYSCONFBASE under which the 4847 * PKG_SYSCONFSUBDIR: A subdirectory of PKG_SYSCONFBASE under which the
4839 configuration files for the package being built shall be installed. The 4848 configuration files for the package being built shall be installed. The
4840 definition of this variable only makes sense in the package's Makefile 4849 definition of this variable only makes sense in the package's Makefile
4841 (i.e., it is not user-customizable). 4850 (i.e., it is not user-customizable).
4842 4851
4843 As an example, consider the Apache package, www/apache24, which places its 4852 As an example, consider the Apache package, www/apache24, which places its
4844 configuration files under the httpd/ subdirectory of PKG_SYSCONFBASE. This 4853 configuration files under the httpd/ subdirectory of PKG_SYSCONFBASE. This
4845 should be set in the package Makefile. 4854 should be set in the package Makefile.
4846 4855
4847 * PKG_SYSCONFVAR: Specifies the name of the variable that holds this 4856 * PKG_SYSCONFVAR: Specifies the name of the variable that holds this
4848 package's configuration directory (if different from PKG_SYSCONFBASE). It 4857 package's configuration directory (if different from PKG_SYSCONFBASE). It
4849 defaults to PKGBASE's value, and is always prefixed with PKG_SYSCONFDIR. 4858 defaults to PKGBASE's value, and is always prefixed with PKG_SYSCONFDIR.
4850 4859
4851 * PKG_SYSCONFDIR.${PKG_SYSCONFVAR}: Holds the directory where the 4860 * PKG_SYSCONFDIR.${PKG_SYSCONFVAR}: Holds the directory where the
4852 configuration files for the package identified by PKG_SYSCONFVAR's shall be 4861 configuration files for the package identified by PKG_SYSCONFVAR's shall be
4853 placed. 4862 placed.
4854 4863
4855Based on the above variables, pkginstall determines the value of 4864Based on the above variables, pkginstall determines the value of
4856PKG_SYSCONFDIR, which is the only variable that can be used within a package to 4865PKG_SYSCONFDIR, which is the only variable that can be used within a package to
4857refer to its configuration directory. The algorithm used to set its value is 4866refer to its configuration directory. The algorithm used to set its value is
4858basically the following: 4867basically the following:
4859 4868
4860 1. If PKG_SYSCONFDIR.${PKG_SYSCONFVAR} is set, its value is used. 4869 1. If PKG_SYSCONFDIR.${PKG_SYSCONFVAR} is set, its value is used.
4861 4870
4862 2. If the previous variable is not defined but PKG_SYSCONFSUBDIR is set in the 4871 2. If the previous variable is not defined but PKG_SYSCONFSUBDIR is set in the
4863 package's Makefile, the resulting value is ${PKG_SYSCONFBASE}/$ 4872 package's Makefile, the resulting value is ${PKG_SYSCONFBASE}/$
4864 {PKG_SYSCONFSUBDIR}. 4873 {PKG_SYSCONFSUBDIR}.
4865 4874
4866 3. Otherwise, it is set to ${PKG_SYSCONFBASE}. 4875 3. Otherwise, it is set to ${PKG_SYSCONFBASE}.
4867 4876
4868It is worth mentioning that ${PKG_SYSCONFDIR} is automatically added to 4877It is worth mentioning that ${PKG_SYSCONFDIR} is automatically added to
4869OWN_DIRS. See Section 15.1.1, "Directory manipulation" what this means. This 4878OWN_DIRS. See Section 15.1.1, "Directory manipulation" what this means. This
4870does not apply to subdirectories of ${PKG_SYSCONFDIR}, they still have to be 4879does not apply to subdirectories of ${PKG_SYSCONFDIR}, they still have to be
4871created with OWN_DIRS or MAKE_DIRS. 4880created with OWN_DIRS or MAKE_DIRS.
4872 4881
487315.2.2. Telling the software where configuration files are 488215.2.2. Telling the software where configuration files are
4874 4883
4875Given that pkgsrc (and users!) expect configuration files to be in a known 4884Given that pkgsrc (and users!) expect configuration files to be in a known
4876place, you need to teach each package where it shall install its files. In some 4885place, you need to teach each package where it shall install its files. In some
4877cases you will have to patch the package Makefiles to achieve it. If you are 4886cases you will have to patch the package Makefiles to achieve it. If you are
4878lucky, though, it may be as easy as passing an extra flag to the configuration 4887lucky, though, it may be as easy as passing an extra flag to the configuration
4879script; this is the case of GNU Autoconf- generated files: 4888script; this is the case of GNU Autoconf- generated files:
4880 4889
4881CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR} 4890CONFIGURE_ARGS+= --sysconfdir=${PKG_SYSCONFDIR}
4882 4891
4883Note that this specifies where the package has to look for its configuration 4892Note that this specifies where the package has to look for its configuration
4884files, not where they will be originally installed (although the difference is 4893files, not where they will be originally installed (although the difference is
4885never explicit, unfortunately). 4894never explicit, unfortunately).
4886 4895
488715.2.3. Patching installations 489615.2.3. Patching installations
4888 4897
4889As said before, pkginstall automatically handles configuration files. This 4898As said before, pkginstall automatically handles configuration files. This
4890means that the packages themselves must not touch the contents of $ 4899means that the packages themselves must not touch the contents of $
4891{PKG_SYSCONFDIR} directly. Bad news is that many software installation scripts 4900{PKG_SYSCONFDIR} directly. Bad news is that many software installation scripts
4892will, out of the box, mess with the contents of that directory. So what is the 4901will, out of the box, mess with the contents of that directory. So what is the
4893correct procedure to fix this issue? 4902correct procedure to fix this issue?
4894 4903
4895You must teach the package (usually by manually patching it) to install any 4904You must teach the package (usually by manually patching it) to install any
4896configuration files under the examples hierarchy, share/examples/${PKGBASE}/. 4905configuration files under the examples hierarchy, share/examples/${PKGBASE}/.
4897This way, the PLIST registers them and the administrator always has the 4906This way, the PLIST registers them and the administrator always has the
4898original copies available. 4907original copies available.
4899 4908
4900Once the required configuration files are in place (i.e., under the examples 4909Once the required configuration files are in place (i.e., under the examples
4901hierarchy), the pkginstall framework can use them as master copies during the 4910hierarchy), the pkginstall framework can use them as master copies during the
4902package installation to update what is in ${PKG_SYSCONFDIR}. To achieve this, 4911package installation to update what is in ${PKG_SYSCONFDIR}. To achieve this,
4903the variables CONF_FILES and CONF_FILES_PERMS are used. Check out 4912the variables CONF_FILES and CONF_FILES_PERMS are used. Check out
4904Section 15.1.2, "File manipulation" for information about their syntax and 4913Section 15.1.2, "File manipulation" for information about their syntax and
4905their purpose. Here is an example, taken from the mail/mutt package: 4914their purpose. Here is an example, taken from the mail/mutt package:
4906 4915
4907EGDIR= ${PREFIX}/share/doc/mutt/samples 4916EGDIR= ${PREFIX}/share/doc/mutt/samples
4908CONF_FILES= ${EGDIR}/Muttrc ${PKG_SYSCONFDIR}/Muttrc 4917CONF_FILES= ${EGDIR}/Muttrc ${PKG_SYSCONFDIR}/Muttrc
4909 4918
4910Note that the EGDIR variable is specific to that package and has no meaning 4919Note that the EGDIR variable is specific to that package and has no meaning
4911outside it. 4920outside it.
4912 4921
491315.2.4. Disabling handling of configuration files 492215.2.4. Disabling handling of configuration files
4914 4923
4915The automatic copying of config files can be toggled by setting the environment 4924The automatic copying of config files can be toggled by setting the environment
4916variable PKG_CONFIG prior to package installation. 4925variable PKG_CONFIG prior to package installation.
4917 4926
491815.3. System startup scripts 492715.3. System startup scripts
4919 4928
4920System startup scripts are special files because they must be installed in a 4929System startup scripts are special files because they must be installed in a
4921place known by the underlying OS, usually outside the installation prefix. 4930place known by the underlying OS, usually outside the installation prefix.
4922Therefore, the same rules described in Section 15.1, "Files and directories 4931Therefore, the same rules described in Section 15.1, "Files and directories
4923outside the installation prefix" apply, and the same solutions can be used. 4932outside the installation prefix" apply, and the same solutions can be used.
4924However, pkginstall provides a special mechanism to handle these files. 4933However, pkginstall provides a special mechanism to handle these files.
4925 4934
4926In order to provide system startup scripts, the package has to: 4935In order to provide system startup scripts, the package has to:
4927 4936
4928 1. Store the script inside ${FILESDIR}, with the .sh suffix appended. 4937 1. Store the script inside ${FILESDIR}, with the .sh suffix appended.
4929 Considering the print/cups package as an example, it has a cupsd.sh in its 4938 Considering the print/cups package as an example, it has a cupsd.sh in its
4930 files directory. 4939 files directory.
4931 4940
4932 2. Tell pkginstall to handle it, appending the name of the script, without its 4941 2. Tell pkginstall to handle it, appending the name of the script, without its
4933 extension, to the RCD_SCRIPTS variable. Continuing the previous example: 4942 extension, to the RCD_SCRIPTS variable. Continuing the previous example:
4934 4943
4935 RCD_SCRIPTS+= cupsd 4944 RCD_SCRIPTS+= cupsd
4936 4945
4937Once this is done, pkginstall will do the following steps for each script in an 4946Once this is done, pkginstall will do the following steps for each script in an
4938automated fashion: 4947automated fashion:
4939 4948
4940 1. Process the file found in the files directory applying all the 4949 1. Process the file found in the files directory applying all the
4941 substitutions described in the FILES_SUBST variable. 4950 substitutions described in the FILES_SUBST variable.
4942 4951
4943 2. Copy the script from the files directory to the examples hierarchy, $ 4952 2. Copy the script from the files directory to the examples hierarchy, $
4944 {PREFIX}/share/examples/rc.d/. Note that this master file must be 4953 {PREFIX}/share/examples/rc.d/. Note that this master file must be
4945 explicitly registered in the PLIST. 4954 explicitly registered in the PLIST.
4946 4955
4947 3. Add code to the installation scripts to copy the startup script from the 4956 3. Add code to the installation scripts to copy the startup script from the
4948 examples hierarchy into the system-wide startup scripts directory. 4957 examples hierarchy into the system-wide startup scripts directory.
4949 4958
495015.3.1. Disabling handling of system startup scripts 495915.3.1. Disabling handling of system startup scripts
4951 4960
4952The automatic copying of config files can be toggled by setting the environment 4961The automatic copying of config files can be toggled by setting the environment
4953variable PKG_RCD_SCRIPTS prior to package installation. Note that the scripts 4962variable PKG_RCD_SCRIPTS prior to package installation. Note that the scripts
4954will be always copied inside the examples hierarchy, ${PREFIX}/share/examples/ 4963will be always copied inside the examples hierarchy, ${PREFIX}/share/examples/
4955rc.d/, no matter what the value of this variable is. 4964rc.d/, no matter what the value of this variable is.
4956 4965
495715.4. System users and groups 496615.4. System users and groups
4958 4967
4959If a package needs to create special users and/or groups during installation, 4968If a package needs to create special users and/or groups during installation,
4960it can do so by using the pkginstall framework. 4969it can do so by using the pkginstall framework.
4961 4970
4962Users can be created by adding entries to the PKG_USERS variable. Each entry 4971Users can be created by adding entries to the PKG_USERS variable. Each entry
4963has the following syntax: 4972has the following syntax:
4964 4973
4965user:group 4974user:group
4966 4975
4967Further specification of user details may be done by setting per-user 4976Further specification of user details may be done by setting per-user
4968variables. PKG_UID.user is the numeric UID for the user. PKG_GECOS.user is the 4977variables. PKG_UID.user is the numeric UID for the user. PKG_GECOS.user is the
4969user's description or comment. PKG_HOME.user is the user's home directory, and 4978user's description or comment. PKG_HOME.user is the user's home directory, and
4970defaults to /nonexistent if not specified. PKG_SHELL.user is the user's shell, 4979defaults to /nonexistent if not specified. PKG_SHELL.user is the user's shell,
4971and defaults to /sbin/nologin if not specified. 4980and defaults to /sbin/nologin if not specified.
4972 4981
4973Similarly, groups can be created by adding entries to the PKG_GROUPS variable, 4982Similarly, groups can be created by adding entries to the PKG_GROUPS variable,
4974whose syntax is: 4983whose syntax is:
4975 4984
4976group 4985group
4977 4986
4978The numeric GID of the group may be set by defining PKG_GID.group. 4987The numeric GID of the group may be set by defining PKG_GID.group.
4979 4988
4980If a package needs to create the users and groups at an earlier stage, then it 4989If a package needs to create the users and groups at an earlier stage, then it
4981can set USERGROUP_PHASE to either configure or build to indicate the phase 4990can set USERGROUP_PHASE to either configure or build to indicate the phase
4982before which the users and groups are created. In this case, the numeric UIDs 4991before which the users and groups are created. In this case, the numeric UIDs
4983and GIDs of the created users and groups are automatically hardcoded into the 4992and GIDs of the created users and groups are automatically hardcoded into the
4984final installation scripts. 4993final installation scripts.
4985 4994
498615.5. System shells 499515.5. System shells
4987 4996
4988Packages that install system shells should register them in the shell database, 4997Packages that install system shells should register them in the shell database,
4989/etc/shells, to make things easier to the administrator. This must be done from 4998/etc/shells, to make things easier to the administrator. This must be done from
4990the installation scripts to keep binary packages working on any system. 4999the installation scripts to keep binary packages working on any system.
4991pkginstall provides an easy way to accomplish this task. 5000pkginstall provides an easy way to accomplish this task.
4992 5001
4993When a package provides a shell interpreter, it has to set the PKG_SHELL 5002When a package provides a shell interpreter, it has to set the PKG_SHELL
4994variable to its absolute file name. This will add some hooks to the 5003variable to its absolute file name. This will add some hooks to the
4995installation scripts to handle it. Consider the following example, taken from 5004installation scripts to handle it. Consider the following example, taken from
4996shells/zsh: 5005shells/zsh:
4997 5006
4998PKG_SHELL= ${PREFIX}/bin/zsh 5007PKG_SHELL= ${PREFIX}/bin/zsh
4999 5008
500015.5.1. Disabling shell registration 500915.5.1. Disabling shell registration
5001 5010
5002The automatic registration of shell interpreters can be disabled by the 5011The automatic registration of shell interpreters can be disabled by the
5003administrator by setting the PKG_REGISTER_SHELLS environment variable to NO. 5012administrator by setting the PKG_REGISTER_SHELLS environment variable to NO.
5004 5013
500515.6. Fonts 501415.6. Fonts
5006 5015
5007Packages that install X11 fonts should update the database files that index the 5016Packages that install X11 fonts should update the database files that index the
5008fonts within each fonts directory. This can easily be accomplished within the 5017fonts within each fonts directory. This can easily be accomplished within the
5009pkginstall framework. 5018pkginstall framework.
5010 5019
5011When a package installs X11 fonts, it must list the directories in which fonts 5020When a package installs X11 fonts, it must list the directories in which fonts
5012are installed in the FONTS_DIRS.type variables, where type can be one of "ttf", 5021are installed in the FONTS_DIRS.type variables, where type can be one of "ttf",
5013"type1" or "x11". This will add hooks to the installation scripts to run the 5022"type1" or "x11". This will add hooks to the installation scripts to run the
5014appropriate commands to update the fonts database files within each of those 5023appropriate commands to update the fonts database files within each of those
5015directories. For convenience, if the directory path is relative, it is taken to 5024directories. For convenience, if the directory path is relative, it is taken to
5016be relative to the package's installation prefix. Consider the following 5025be relative to the package's installation prefix. Consider the following
5017example, taken from fonts/dbz-ttf: 5026example, taken from fonts/dbz-ttf:
5018 5027
5019FONTS_DIRS.ttf= ${PREFIX}/share/fonts/X11/TTF 5028FONTS_DIRS.ttf= ${PREFIX}/share/fonts/X11/TTF
5020 5029
502115.6.1. Disabling automatic update of the fonts databases 503015.6.1. Disabling automatic update of the fonts databases
5022 5031
5023The automatic update of fonts databases can be disabled by the administrator by 5032The automatic update of fonts databases can be disabled by the administrator by
5024setting the PKG_UPDATE_FONTS_DB environment variable to NO. 5033setting the PKG_UPDATE_FONTS_DB environment variable to NO.
5025 5034
5026Chapter 16. Options handling 5035Chapter 16. Options handling
5027 5036
5028Table of Contents 5037Table of Contents
5029 5038
503016.1. Global default options 503916.1. Global default options
503116.2. Converting packages to use bsd.options.mk 504016.2. Converting packages to use bsd.options.mk
503216.3. Option Names 504116.3. Option Names
503316.4. Determining the options of dependencies 504216.4. Determining the options of dependencies
5034 5043
5035Many packages have the ability to be built to support different sets of 5044Many packages have the ability to be built to support different sets of
5036features. bsd.options.mk is a framework in pkgsrc that provides generic 5045features. bsd.options.mk is a framework in pkgsrc that provides generic
5037handling of those options that determine different ways in which the packages 5046handling of those options that determine different ways in which the packages
5038can be built. It's possible for the user to specify exactly which sets of 5047can be built. It's possible for the user to specify exactly which sets of
5039options will be built into a package or to allow a set of global default 5048options will be built into a package or to allow a set of global default
5040options apply. 5049options apply.
5041 5050
5042There are two broad classes of behaviors that one might want to control via 5051There are two broad classes of behaviors that one might want to control via
5043options. One is whether some particular feature is enabled in a program that 5052options. One is whether some particular feature is enabled in a program that
5044will be built anyway, often by including or not including a dependency on some 5053will be built anyway, often by including or not including a dependency on some
5045other package. The other is whether or not an additional program will be built 5054other package. The other is whether or not an additional program will be built
5046as part of the package. Generally, it is better to make a split package for 5055as part of the package. Generally, it is better to make a split package for
5047such additional programs instead of using options, because it enables binary 5056such additional programs instead of using options, because it enables binary
5048packages to be built which can then be added separately. For example, the foo 5057packages to be built which can then be added separately. For example, the foo
5049package might have minimal dependencies (those packages without which foo 5058package might have minimal dependencies (those packages without which foo
5050doesn't make sense), and then the foo-gfoo package might include the GTK 5059doesn't make sense), and then the foo-gfoo package might include the GTK
5051frontend program gfoo. This is better than including a gtk option to foo that 5060frontend program gfoo. This is better than including a gtk option to foo that
5052adds gfoo, because either that option is default, in which case binary users 5061adds gfoo, because either that option is default, in which case binary users
5053can't get foo without gfoo, or not default, in which case they can't get gfoo. 5062can't get foo without gfoo, or not default, in which case they can't get gfoo.
5054With split packages, they can install foo without having GTK, and later decide 5063With split packages, they can install foo without having GTK, and later decide
5055to install gfoo (pulling in GTK at that time). This is an advantage to source 5064to install gfoo (pulling in GTK at that time). This is an advantage to source
5056users too, avoiding the need for rebuilds. 5065users too, avoiding the need for rebuilds.
5057 5066
5058Plugins with widely varying dependencies should usually be split instead of 5067Plugins with widely varying dependencies should usually be split instead of
5059options. 5068options.
5060 5069
5061It is often more work to maintain split packages, especially if the upstream 5070It is often more work to maintain split packages, especially if the upstream
5062package does not support this. The decision of split vs. option should be made 5071package does not support this. The decision of split vs. option should be made
5063based on the likelihood that users will want or object to the various pieces, 5072based on the likelihood that users will want or object to the various pieces,
5064the size of the dependencies that are included, and the amount of work. 5073the size of the dependencies that are included, and the amount of work.
5065 5074
5066A further consideration is licensing. Non-free parts, or parts that depend on 5075A further consideration is licensing. Non-free parts, or parts that depend on
5067non-free dependencies (especially plugins) should almost always be split if 5076non-free dependencies (especially plugins) should almost always be split if
5068feasible. 5077feasible.
5069 5078
507016.1. Global default options 507916.1. Global default options
5071 5080
5072Global default options are listed in PKG_DEFAULT_OPTIONS, which is a list of 5081Global default options are listed in PKG_DEFAULT_OPTIONS, which is a list of
5073the options that should be built into every package if that option is 5082the options that should be built into every package if that option is
5074supported. This variable should be set in mk.conf. 5083supported. This variable should be set in mk.conf.
5075 5084
507616.2. Converting packages to use bsd.options.mk 508516.2. Converting packages to use bsd.options.mk
5077 5086
5078The following example shows how bsd.options.mk should be used by the 5087The following example shows how bsd.options.mk should be used by the
5079hypothetical ``wibble'' package, either in the package Makefile, or in a file, 5088hypothetical ``wibble'' package, either in the package Makefile, or in a file,
5080e.g. options.mk, that is included by the main package Makefile. 5089e.g. options.mk, that is included by the main package Makefile.
5081 5090
5082PKG_OPTIONS_VAR= PKG_OPTIONS.wibble 5091PKG_OPTIONS_VAR= PKG_OPTIONS.wibble
5083PKG_SUPPORTED_OPTIONS= wibble-foo ldap 5092PKG_SUPPORTED_OPTIONS= wibble-foo ldap
5084PKG_OPTIONS_OPTIONAL_GROUPS= database 5093PKG_OPTIONS_OPTIONAL_GROUPS= database
5085PKG_OPTIONS_GROUP.database= mysql pgsql 5094PKG_OPTIONS_GROUP.database= mysql pgsql
5086PKG_SUGGESTED_OPTIONS= wibble-foo 5095PKG_SUGGESTED_OPTIONS= wibble-foo
5087PKG_OPTIONS_LEGACY_VARS+= WIBBLE_USE_OPENLDAP:ldap 5096PKG_OPTIONS_LEGACY_VARS+= WIBBLE_USE_OPENLDAP:ldap
5088PKG_OPTIONS_LEGACY_OPTS+= foo:wibble-foo 5097PKG_OPTIONS_LEGACY_OPTS+= foo:wibble-foo
5089 5098
5090.include "../../mk/bsd.prefs.mk" 5099.include "../../mk/bsd.prefs.mk"
5091 5100
5092# this package was previously named wibble2 5101# this package was previously named wibble2
5093.if defined(PKG_OPTIONS.wibble2) 5102.if defined(PKG_OPTIONS.wibble2)
5094PKG_LEGACY_OPTIONS+= ${PKG_OPTIONS.wibble2} 5103PKG_LEGACY_OPTIONS+= ${PKG_OPTIONS.wibble2}
5095PKG_OPTIONS_DEPRECATED_WARNINGS+= \ 5104PKG_OPTIONS_DEPRECATED_WARNINGS+= \
5096 "Deprecated variable PKG_OPTIONS.wibble2 used, use ${PKG_OPTIONS_VAR} instead." 5105 "Deprecated variable PKG_OPTIONS.wibble2 used, use ${PKG_OPTIONS_VAR} instead."
5097.endif 5106.endif
5098 5107
5099.include "../../mk/bsd.options.mk" 5108.include "../../mk/bsd.options.mk"
5100 5109
5101# Package-specific option-handling 5110# Package-specific option-handling
5102 5111
5103### 5112###
5104### FOO support 5113### FOO support
5105### 5114###
5106.if !empty(PKG_OPTIONS:Mwibble-foo) 5115.if !empty(PKG_OPTIONS:Mwibble-foo)
5107CONFIGURE_ARGS+= --enable-foo 5116CONFIGURE_ARGS+= --enable-foo
5108.endif 5117.endif
5109 5118
5110### 5119###
5111### LDAP support 5120### LDAP support
5112### 5121###
5113.if !empty(PKG_OPTIONS:Mldap) 5122.if !empty(PKG_OPTIONS:Mldap)
5114. include "../../databases/openldap-client/buildlink3.mk" 5123. include "../../databases/openldap-client/buildlink3.mk"
5115CONFIGURE_ARGS+= --enable-ldap=${BUILDLINK_PREFIX.openldap-client} 5124CONFIGURE_ARGS+= --enable-ldap=${BUILDLINK_PREFIX.openldap-client}
5116.endif 5125.endif
5117 5126
5118### 5127###
5119### database support 5128### database support
5120### 5129###
5121.if !empty(PKG_OPTIONS:Mmysql) 5130.if !empty(PKG_OPTIONS:Mmysql)
5122. include "../../mk/mysql.buildlink3.mk" 5131. include "../../mk/mysql.buildlink3.mk"
5123.endif 5132.endif
5124.if !empty(PKG_OPTIONS:Mpgsql) 5133.if !empty(PKG_OPTIONS:Mpgsql)
5125. include "../../mk/pgsql.buildlink3.mk" 5134. include "../../mk/pgsql.buildlink3.mk"
5126.endif 5135.endif
5127 5136
5128The first section contains the information about which build options are 5137The first section contains the information about which build options are
5129supported by the package, and any default options settings if needed. 5138supported by the package, and any default options settings if needed.
5130 5139
5131 1. PKG_OPTIONS_VAR is the name of the make(1) variable that the user can set 5140 1. PKG_OPTIONS_VAR is the name of the make(1) variable that the user can set
5132 to override the default options. It should be set to PKG_OPTIONS.pkgbase. 5141 to override the default options. It should be set to PKG_OPTIONS.pkgbase.
5133 Do not set it to PKG_OPTIONS.${PKGBASE}, since PKGBASE is not defined at 5142 Do not set it to PKG_OPTIONS.${PKGBASE}, since PKGBASE is not defined at
5134 the point where the options are processed. 5143 the point where the options are processed.
5135 5144
5136 2. PKG_SUPPORTED_OPTIONS is a list of build options supported by the package. 5145 2. PKG_SUPPORTED_OPTIONS is a list of build options supported by the package.
5137 5146
5138 3. PKG_OPTIONS_OPTIONAL_GROUPS is a list of names of groups of mutually 5147 3. PKG_OPTIONS_OPTIONAL_GROUPS is a list of names of groups of mutually
5139 exclusive options. The options in each group are listed in 5148 exclusive options. The options in each group are listed in
5140 PKG_OPTIONS_GROUP.groupname. The most specific setting of any option from 5149 PKG_OPTIONS_GROUP.groupname. The most specific setting of any option from
5141 the group takes precedence over all other options in the group. Options 5150 the group takes precedence over all other options in the group. Options
5142 from the groups will be automatically added to PKG_SUPPORTED_OPTIONS. 5151 from the groups will be automatically added to PKG_SUPPORTED_OPTIONS.
5143 5152
5144 4. PKG_OPTIONS_REQUIRED_GROUPS is like PKG_OPTIONS_OPTIONAL_GROUPS, but 5153 4. PKG_OPTIONS_REQUIRED_GROUPS is like PKG_OPTIONS_OPTIONAL_GROUPS, but
5145 building the packages will fail if no option from the group is selected. 5154 building the packages will fail if no option from the group is selected.
5146 5155
5147 5. PKG_OPTIONS_NONEMPTY_SETS is a list of names of sets of options. At least 5156 5. PKG_OPTIONS_NONEMPTY_SETS is a list of names of sets of options. At least
5148 one option from each set must be selected. The options in each set are 5157 one option from each set must be selected. The options in each set are
5149 listed in PKG_OPTIONS_SET.setname. Options from the sets will be 5158 listed in PKG_OPTIONS_SET.setname. Options from the sets will be
5150 automatically added to PKG_SUPPORTED_OPTIONS. Building the package will 5159 automatically added to PKG_SUPPORTED_OPTIONS. Building the package will
5151 fail if no option from the set is selected. 5160 fail if no option from the set is selected.
5152 5161
5153 6. PKG_SUGGESTED_OPTIONS is a list of build options which are enabled by 5162 6. PKG_SUGGESTED_OPTIONS is a list of build options which are enabled by
5154 default. 5163 default.
5155 5164
5156 7. PKG_OPTIONS_LEGACY_VARS is a list of "USE_VARIABLE:option" pairs that map 5165 7. PKG_OPTIONS_LEGACY_VARS is a list of "USE_VARIABLE:option" pairs that map
5157 legacy mk.conf variables to their option counterparts. Pairs should be 5166 legacy mk.conf variables to their option counterparts. Pairs should be
5158 added with "+=" to keep the listing of global legacy variables. A warning 5167 added with "+=" to keep the listing of global legacy variables. A warning
5159 will be issued if the user uses a legacy variable. 5168 will be issued if the user uses a legacy variable.
5160 5169
5161 8. PKG_OPTIONS_LEGACY_OPTS is a list of "old-option:new-option" pairs that map 5170 8. PKG_OPTIONS_LEGACY_OPTS is a list of "old-option:new-option" pairs that map
5162 options that have been renamed to their new counterparts. Pairs should be 5171 options that have been renamed to their new counterparts. Pairs should be
5163 added with "+=" to keep the listing of global legacy options. A warning 5172 added with "+=" to keep the listing of global legacy options. A warning
5164 will be issued if the user uses a legacy option. 5173 will be issued if the user uses a legacy option.
5165 5174
5166 9. PKG_LEGACY_OPTIONS is a list of options implied by deprecated variables 5175 9. PKG_LEGACY_OPTIONS is a list of options implied by deprecated variables
5167 used. This can be used for cases that neither PKG_OPTIONS_LEGACY_VARS nor 5176 used. This can be used for cases that neither PKG_OPTIONS_LEGACY_VARS nor
5168 PKG_OPTIONS_LEGACY_OPTS can handle, e. g. when PKG_OPTIONS_VAR is renamed. 5177 PKG_OPTIONS_LEGACY_OPTS can handle, e. g. when PKG_OPTIONS_VAR is renamed.
5169 5178
517010. PKG_OPTIONS_DEPRECATED_WARNINGS is a list of warnings about deprecated 517910. PKG_OPTIONS_DEPRECATED_WARNINGS is a list of warnings about deprecated
5171 variables or options used, and what to use instead. 5180 variables or options used, and what to use instead.
5172 5181
5173A package should never modify PKG_DEFAULT_OPTIONS or the variable named in 5182A package should never modify PKG_DEFAULT_OPTIONS or the variable named in
5174PKG_OPTIONS_VAR. These are strictly user-settable. To suggest a default set of 5183PKG_OPTIONS_VAR. These are strictly user-settable. To suggest a default set of
5175options, use PKG_SUGGESTED_OPTIONS. 5184options, use PKG_SUGGESTED_OPTIONS.
5176 5185
5177PKG_OPTIONS_VAR must be defined before including bsd.options.mk. If none of 5186PKG_OPTIONS_VAR must be defined before including bsd.options.mk. If none of
5178PKG_SUPPORTED_OPTIONS, PKG_OPTIONS_OPTIONAL_GROUPS, and 5187PKG_SUPPORTED_OPTIONS, PKG_OPTIONS_OPTIONAL_GROUPS, and
5179PKG_OPTIONS_REQUIRED_GROUPS are defined (as can happen with platform-specific 5188PKG_OPTIONS_REQUIRED_GROUPS are defined (as can happen with platform-specific
5180options if none of them is supported on the current platform), PKG_OPTIONS is 5189options if none of them is supported on the current platform), PKG_OPTIONS is
5181set to the empty list and the package is otherwise treated as not using the 5190set to the empty list and the package is otherwise treated as not using the
5182options framework. 5191options framework.
5183 5192
5184After the inclusion of bsd.options.mk, the variable PKG_OPTIONS contains the 5193After the inclusion of bsd.options.mk, the variable PKG_OPTIONS contains the
5185list of selected build options, properly filtered to remove unsupported and 5194list of selected build options, properly filtered to remove unsupported and
5186duplicate options. 5195duplicate options.
5187 5196
5188The remaining sections contain the logic that is specific to each option. The 5197The remaining sections contain the logic that is specific to each option. The
5189correct way to check for an option is to check whether it is listed in 5198correct way to check for an option is to check whether it is listed in
5190PKG_OPTIONS: 5199PKG_OPTIONS:
5191 5200
5192.if !empty(PKG_OPTIONS:Moption) 5201.if !empty(PKG_OPTIONS:Moption)
5193 5202
519416.3. Option Names 520316.3. Option Names
5195 5204
5196Options that enable similar features in different packages (like optional 5205Options that enable similar features in different packages (like optional
5197support for a library) should use a common name in all packages that support it 5206support for a library) should use a common name in all packages that support it
5198(like the name of the library). If another package already has an option with 5207(like the name of the library). If another package already has an option with
5199the same meaning, use the same name. 5208the same meaning, use the same name.
5200 5209
5201Options that enable features specific to one package, where it's unlikely that 5210Options that enable features specific to one package, where it's unlikely that
5202another (unrelated) package has the same (or a similar) optional feature, 5211another (unrelated) package has the same (or a similar) optional feature,
5203should use a name prefixed with pkgname-. 5212should use a name prefixed with pkgname-.
5204 5213
5205If a group of related packages share an optional feature specific to that 5214If a group of related packages share an optional feature specific to that
5206group, prefix it with the name of the "main" package (e. g. 5215group, prefix it with the name of the "main" package (e. g.
5207djbware-errno-hack). 5216djbware-errno-hack).
5208 5217
5209For new options, add a line to mk/defaults/options.description. Lines have two 5218For new options, add a line to mk/defaults/options.description. Lines have two
5210fields, separated by tab. The first field is the option name, the second its 5219fields, separated by tab. The first field is the option name, the second its
5211description. The description should be a whole sentence (starting with an 5220description. The description should be a whole sentence (starting with an
5212uppercase letter and ending with a period) that describes what enabling the 5221uppercase letter and ending with a period) that describes what enabling the
5213option does. E. g. "Enable ispell support." The file is sorted by option names. 5222option does. E. g. "Enable ispell support." The file is sorted by option names.
5214 5223
521516.4. Determining the options of dependencies 522416.4. Determining the options of dependencies
5216 5225
5217When writing buildlink3.mk files, it is often necessary to list different 5226When writing buildlink3.mk files, it is often necessary to list different
5218dependencies based on the options with which the package was built. For 5227dependencies based on the options with which the package was built. For
5219querying these options, the file pkgsrc/mk/pkg-build-options.mk should be used. 5228querying these options, the file pkgsrc/mk/pkg-build-options.mk should be used.
5220A typical example looks like this: 5229A typical example looks like this:
5221 5230
5222pkgbase := libpurple 5231pkgbase := libpurple
5223.include "../../mk/pkg-build-options.mk" 5232.include "../../mk/pkg-build-options.mk"
5224 5233
5225.if !empty(PKG_BUILD_OPTIONS.libpurple:Mdbus) 5234.if !empty(PKG_BUILD_OPTIONS.libpurple:Mdbus)
5226... 5235...
5227.endif 5236.endif
5228 5237
5229Including pkg-build-options.mk here will set the variable 5238Including pkg-build-options.mk here will set the variable
5230PKG_BUILD_OPTIONS.libpurple to the build options of the libpurple package, 5239PKG_BUILD_OPTIONS.libpurple to the build options of the libpurple package,
5231which can then be queried like PKG_OPTIONS in the options.mk file. See the file 5240which can then be queried like PKG_OPTIONS in the options.mk file. See the file
5232pkg-build-options.mk for more details. 5241pkg-build-options.mk for more details.
5233 5242
5234Chapter 17. The build process 5243Chapter 17. The build process
5235 5244
5236Table of Contents 5245Table of Contents
5237 5246
523817.1. Introduction 524717.1. Introduction
523917.2. Program location 524817.2. Program location
524017.3. Directories used during the build process 524917.3. Directories used during the build process
524117.4. Running a phase 525017.4. Running a phase
524217.5. The fetch phase 525117.5. The fetch phase
5243 5252
5244 17.5.1. What to fetch and where to get it from 5253 17.5.1. What to fetch and where to get it from
5245 17.5.2. How are the files fetched? 5254 17.5.2. How are the files fetched?
5246 5255
524717.6. The checksum phase 525617.6. The checksum phase
524817.7. The extract phase 525717.7. The extract phase
524917.8. The patch phase 525817.8. The patch phase
525017.9. The tools phase 525917.9. The tools phase
525117.10. The wrapper phase 526017.10. The wrapper phase
525217.11. The configure phase 526117.11. The configure phase
525317.12. The build phase 526217.12. The build phase
525417.13. The test phase 526317.13. The test phase
525517.14. The install phase 526417.14. The install phase
525617.15. The package phase 526517.15. The package phase
525717.16. Cleaning up 526617.16. Cleaning up
525817.17. Other helpful targets 526717.17. Other helpful targets
5259 5268
526017.1. Introduction 526917.1. Introduction
5261 5270
5262This chapter gives a detailed description on how a package is built. Building a 5271This chapter gives a detailed description on how a package is built. Building a
5263package is separated into different phases (for example fetch, build, install), 5272package is separated into different phases (for example fetch, build, install),
5264all of which are described in the following sections. Each phase is split into 5273all of which are described in the following sections. Each phase is split into
5265so-called stages, which take the name of the containing phase, prefixed by one 5274so-called stages, which take the name of the containing phase, prefixed by one
5266of pre-, do- or post-. (Examples are pre-configure, post-build.) Most of the 5275of pre-, do- or post-. (Examples are pre-configure, post-build.) Most of the
5267actual work is done in the do-* stages. 5276actual work is done in the do-* stages.
5268 5277
5269Never override the regular targets (like fetch), if you have to, override the 5278Never override the regular targets (like fetch), if you have to, override the
5270do-* ones instead. 5279do-* ones instead.
5271 5280
5272The basic steps for building a program are always the same. First the program's 5281The basic steps for building a program are always the same. First the program's
5273source (distfile) must be brought to the local system and then extracted. After 5282source (distfile) must be brought to the local system and then extracted. After
5274any pkgsrc-specific patches to compile properly are applied, the software can 5283any pkgsrc-specific patches to compile properly are applied, the software can
5275be configured, then built (usually by compiling), and finally the generated 5284be configured, then built (usually by compiling), and finally the generated
5276binaries, etc. can be put into place on the system. 5285binaries, etc. can be put into place on the system.
5277 5286
5278To get more details about what is happening at each step, you can set the 5287To get more details about what is happening at each step, you can set the
5279PKG_VERBOSE variable, or the PATCH_DEBUG variable if you are just interested in 5288PKG_VERBOSE variable, or the PATCH_DEBUG variable if you are just interested in
5280more details about the patch step. 5289more details about the patch step.
5281 5290
528217.2. Program location 529117.2. Program location
5283 5292
5284Before outlining the process performed by the NetBSD package system in the next 5293Before outlining the process performed by the NetBSD package system in the next
5285section, here's a brief discussion on where programs are installed, and which 5294section, here's a brief discussion on where programs are installed, and which
5286variables influence this. 5295variables influence this.
5287 5296
5288The automatic variable PREFIX indicates where all files of the final program 5297The automatic variable PREFIX indicates where all files of the final program
5289shall be installed. It is usually set to LOCALBASE (/usr/pkg), or CROSSBASE for 5298shall be installed. It is usually set to LOCALBASE (/usr/pkg), or CROSSBASE for
5290pkgs in the cross category. The value of PREFIX needs to be put into the 5299pkgs in the cross category. The value of PREFIX needs to be put into the
5291various places in the program's source where paths to these files are encoded. 5300various places in the program's source where paths to these files are encoded.
5292See Section 11.3, "patches/*" and Section 19.3.1, "Shared libraries - libtool" 5301See Section 11.3, "patches/*" and Section 19.3.1, "Shared libraries - libtool"
5293for more details. 5302for more details.
5294 5303
5295When choosing which of these variables to use, follow the following rules: 5304When choosing which of these variables to use, follow the following rules:
5296 5305
5297 * PREFIX always points to the location where the current pkg will be 5306 * PREFIX always points to the location where the current pkg will be
5298 installed. When referring to a pkg's own installation path, use "${PREFIX}" 5307 installed. When referring to a pkg's own installation path, use "${PREFIX}"
5299 . 5308 .
5300 5309
5301 * LOCALBASE is where all non-X11 pkgs are installed. If you need to construct 5310 * LOCALBASE is where all non-X11 pkgs are installed. If you need to construct
5302 a -I or -L argument to the compiler to find includes and libraries 5311 a -I or -L argument to the compiler to find includes and libraries
5303 installed by another non-X11 pkg, use "${LOCALBASE}". The name LOCALBASE 5312 installed by another non-X11 pkg, use "${LOCALBASE}". The name LOCALBASE
5304 stems from FreeBSD, which installed all packages in /usr/local. As pkgsrc 5313 stems from FreeBSD, which installed all packages in /usr/local. As pkgsrc
5305 leaves /usr/local for the system administrator, this variable is a 5314 leaves /usr/local for the system administrator, this variable is a
5306 misnomer. 5315 misnomer.
5307 5316
5308 * X11BASE is where the actual X11 distribution (from xsrc, etc.) is 5317 * X11BASE is where the actual X11 distribution (from xsrc, etc.) is
5309 installed. When looking for standard X11 includes (not those installed by a 5318 installed. When looking for standard X11 includes (not those installed by a
5310 package), use "${X11BASE}". 5319 package), use "${X11BASE}".
5311 5320
5312 * X11-based packages are special in that they may be installed in either 5321 * X11-based packages are special in that they may be installed in either
5313 X11BASE or LOCALBASE. 5322 X11BASE or LOCALBASE.
5314 5323
5315 Usually, X11 packages should be installed under LOCALBASE whenever 5324 Usually, X11 packages should be installed under LOCALBASE whenever
5316 possible. Note that you will need to include ../../mk/x11.buildlink3.mk in 5325 possible. Note that you will need to include ../../mk/x11.buildlink3.mk in
5317 them to request the presence of X11 and to get the right compilation flags. 5326 them to request the presence of X11 and to get the right compilation flags.
5318 5327
5319 Even though, there are some packages that cannot be installed under 5328 Even though, there are some packages that cannot be installed under
5320 LOCALBASE: those that come with app-defaults files. These packages are 5329 LOCALBASE: those that come with app-defaults files. These packages are
5321 special and they must be placed under X11BASE. To accomplish this, set 5330 special and they must be placed under X11BASE. To accomplish this, set
5322 either USE_X11BASE or USE_IMAKE in your package. 5331 either USE_X11BASE or USE_IMAKE in your package.
5323 5332
5324 Some notes: If you need to find includes or libraries installed by a pkg 5333 Some notes: If you need to find includes or libraries installed by a pkg
5325 that has USE_IMAKE or USE_X11BASE in its pkg Makefile, you need to look in  5334 that has USE_IMAKE or USE_X11BASE in its pkg Makefile, you need to look in
5326 both ${X11BASE} and ${LOCALBASE}. To force installation of all X11 packages 5335 both ${X11BASE} and ${LOCALBASE}. To force installation of all X11 packages
5327 in LOCALBASE, the pkgtools/xpkgwedge package is enabled by default. 5336 in LOCALBASE, the pkgtools/xpkgwedge package is enabled by default.
5328 5337
5329 * X11PREFIX should be used to refer to the installed location of an X11 5338 * X11PREFIX should be used to refer to the installed location of an X11
5330 package. X11PREFIX will be set to X11BASE if xpkgwedge is not installed, 5339 package. X11PREFIX will be set to X11BASE if xpkgwedge is not installed,
5331 and to LOCALBASE if xpkgwedge is installed. 5340 and to LOCALBASE if xpkgwedge is installed.
5332 5341
5333 * If xpkgwedge is installed, it is possible to have some packages installed 5342 * If xpkgwedge is installed, it is possible to have some packages installed
5334 in X11BASE and some in LOCALBASE. To determine the prefix of an installed 5343 in X11BASE and some in LOCALBASE. To determine the prefix of an installed
5335 package, the EVAL_PREFIX definition can be used. It takes pairs in the 5344 package, the EVAL_PREFIX definition can be used. It takes pairs in the
5336 format "DIRNAME=<package>", and the make(1) variable DIRNAME will be set to 5345 format "DIRNAME=<package>", and the make(1) variable DIRNAME will be set to
5337 the prefix of the installed package <package>, or "${X11PREFIX}" if the 5346 the prefix of the installed package <package>, or "${X11PREFIX}" if the
5338 package is not installed. 5347 package is not installed.
5339 5348
5340 This is best illustrated by example. 5349 This is best illustrated by example.
5341 5350
5342 The following lines are taken from pkgsrc/wm/scwm/Makefile: 5351 The following lines are taken from pkgsrc/wm/scwm/Makefile:
5343 5352
5344 EVAL_PREFIX+= GTKDIR=gtk+ 5353 EVAL_PREFIX+= GTKDIR=gtk+
5345 CONFIGURE_ARGS+= --with-guile-prefix=${LOCALBASE:Q} 5354 CONFIGURE_ARGS+= --with-guile-prefix=${LOCALBASE:Q}
5346 CONFIGURE_ARGS+= --with-gtk-prefix=${GTKDIR:Q} 5355 CONFIGURE_ARGS+= --with-gtk-prefix=${GTKDIR:Q}
5347 CONFIGURE_ARGS+= --enable-multibyte 5356 CONFIGURE_ARGS+= --enable-multibyte
5348 5357
5349 Specific defaults can be defined for the packages evaluated using 5358 Specific defaults can be defined for the packages evaluated using
5350 EVAL_PREFIX, by using a definition of the form: 5359 EVAL_PREFIX, by using a definition of the form:
5351 5360
5352 GTKDIR_DEFAULT= ${LOCALBASE} 5361 GTKDIR_DEFAULT= ${LOCALBASE}
5353 5362
5354 where GTKDIR corresponds to the first definition in the EVAL_PREFIX pair. 5363 where GTKDIR corresponds to the first definition in the EVAL_PREFIX pair.
5355 5364
5356 * Within ${PREFIX}, packages should install files according to hier(7), with 5365 * Within ${PREFIX}, packages should install files according to hier(7), with
5357 the exception that manual pages go into ${PREFIX}/man, not ${PREFIX}/share/ 5366 the exception that manual pages go into ${PREFIX}/man, not ${PREFIX}/share/
5358 man. 5367 man.
5359 5368
536017.3. Directories used during the build process 536917.3. Directories used during the build process
5361 5370
5362When building a package, various directories are used to store source files, 5371When building a package, various directories are used to store source files,
5363temporary files, pkgsrc-internal files, and so on. These directories are 5372temporary files, pkgsrc-internal files, and so on. These directories are
5364explained here. 5373explained here.
5365 5374
5366Some of the directory variables contain relative pathnames. There are two 5375Some of the directory variables contain relative pathnames. There are two
5367common base directories for these relative directories: PKGSRCDIR/PKGPATH is 5376common base directories for these relative directories: PKGSRCDIR/PKGPATH is
5368used for directories that are pkgsrc-specific. WRKSRC is used for directories 5377used for directories that are pkgsrc-specific. WRKSRC is used for directories
5369inside the package itself. 5378inside the package itself.
5370 5379
5371PKGSRCDIR 5380PKGSRCDIR
5372 5381
5373 This is an absolute pathname that points to the pkgsrc root directory. 5382 This is an absolute pathname that points to the pkgsrc root directory.
5374 Generally, you don't need it. 5383 Generally, you don't need it.
5375 5384
5376PKGDIR 5385PKGDIR
5377 5386
5378 This is an absolute pathname that points to the current package. 5387 This is an absolute pathname that points to the current package.
5379 5388
5380PKGPATH 5389PKGPATH
5381 5390
5382 This is a pathname relative to PKGSRCDIR that points to the current 5391 This is a pathname relative to PKGSRCDIR that points to the current
5383 package. 5392 package.
5384 5393
5385WRKDIR 5394WRKDIR
5386 5395
5387 This is an absolute pathname pointing to the directory where all work takes 5396 This is an absolute pathname pointing to the directory where all work takes
5388 place. The distfiles are extracted to this directory. It also contains 5397 place. The distfiles are extracted to this directory. It also contains
5389 temporary directories and log files used by the various pkgsrc frameworks, 5398 temporary directories and log files used by the various pkgsrc frameworks,
5390 like buildlink or the wrappers. 5399 like buildlink or the wrappers.
5391 5400
5392WRKSRC 5401WRKSRC
5393 5402
5394 This is an absolute pathname pointing to the directory where the distfiles 5403 This is an absolute pathname pointing to the directory where the distfiles
5395 are extracted. It is usually a direct subdirectory of WRKDIR, and often 5404 are extracted. It is usually a direct subdirectory of WRKDIR, and often
5396 it's the only directory entry that isn't hidden. This variable may be 5405 it's the only directory entry that isn't hidden. This variable may be
5397 changed by a package Makefile. 5406 changed by a package Makefile.
5398 5407
5399The CREATE_WRKDIR_SYMLINK definition takes either the value yes or no and 5408The CREATE_WRKDIR_SYMLINK definition takes either the value yes or no and
5400defaults to no. It indicates whether a symbolic link to the WRKDIR is to be 5409defaults to no. It indicates whether a symbolic link to the WRKDIR is to be
5401created in the pkgsrc entry's directory. If users would like to have their 5410created in the pkgsrc entry's directory. If users would like to have their
5402pkgsrc trees behave in a read-only manner, then the value of 5411pkgsrc trees behave in a read-only manner, then the value of
5403CREATE_WRKDIR_SYMLINK should be set to no. 5412CREATE_WRKDIR_SYMLINK should be set to no.
5404 5413
540517.4. Running a phase 541417.4. Running a phase
5406 5415
5407You can run a particular phase by typing make phase, where phase is the name of 5416You can run a particular phase by typing make phase, where phase is the name of
5408the phase. This will automatically run all phases that are required for this 5417the phase. This will automatically run all phases that are required for this
5409phase. The default phase is build, that is, when you run make without 5418phase. The default phase is build, that is, when you run make without
5410parameters in a package directory, the package will be built, but not 5419parameters in a package directory, the package will be built, but not
5411installed. 5420installed.
5412 5421
541317.5. The fetch phase 542217.5. The fetch phase
5414 5423
5415The first step in building a package is to fetch the distribution files 5424The first step in building a package is to fetch the distribution files
5416(distfiles) from the sites that are providing them. This is the task of the  5425(distfiles) from the sites that are providing them. This is the task of the
5417fetch phase. 5426fetch phase.
5418 5427
541917.5.1. What to fetch and where to get it from 542817.5.1. What to fetch and where to get it from
5420 5429
5421In simple cases, MASTER_SITES defines all URLs from where the distfile, whose 5430In simple cases, MASTER_SITES defines all URLs from where the distfile, whose
5422name is derived from the DISTNAME variable, is fetched. The more complicated 5431name is derived from the DISTNAME variable, is fetched. The more complicated
5423cases are described below. 5432cases are described below.
5424 5433
5425The variable DISTFILES specifies the list of distfiles that have to be fetched. 5434The variable DISTFILES specifies the list of distfiles that have to be fetched.
5426Its value defaults to ${DEFAULT_DISTFILES} and its value is ${DISTNAME}$ 5435Its value defaults to ${DEFAULT_DISTFILES} and its value is ${DISTNAME}$
5427{EXTRACT_SUFX}, so that most packages don't need to define it at all. 5436{EXTRACT_SUFX}, so that most packages don't need to define it at all.
5428EXTRACT_SUFX is .tar.gz by default, but can be changed freely. Note that if 5437EXTRACT_SUFX is .tar.gz by default, but can be changed freely. Note that if
5429your package requires additional distfiles to the default one, you cannot just 5438your package requires additional distfiles to the default one, you cannot just
5430append the additional filenames using the += operator, but you have write for 5439append the additional filenames using the += operator, but you have write for
5431example: 5440example:
5432 5441
5433DISTFILES= ${DEFAULT_DISTFILES} additional-files.tar.gz 5442DISTFILES= ${DEFAULT_DISTFILES} additional-files.tar.gz
5434 5443
5435Each distfile is fetched from a list of sites, usually MASTER_SITES. If the 5444Each distfile is fetched from a list of sites, usually MASTER_SITES. If the
5436package has multiple DISTFILES or multiple PATCHFILES from different sites, you 5445package has multiple DISTFILES or multiple PATCHFILES from different sites, you
5437can set SITES.distfile to the list of URLs where the file distfile (including 5446can set SITES.distfile to the list of URLs where the file distfile (including
5438the suffix) can be found. 5447the suffix) can be found.
5439 5448
5440DISTFILES= ${DISTNAME}${EXTRACT_SUFX} 5449DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
5441DISTFILES+= foo-file.tar.gz 5450DISTFILES+= foo-file.tar.gz
5442SITES.foo-file.tar.gz= \ 5451SITES.foo-file.tar.gz= \
5443http://www.somewhere.com/somehow/ \ 5452http://www.somewhere.com/somehow/ \
5444http://www.somewhereelse.com/mirror/somehow/ 5453http://www.somewhereelse.com/mirror/somehow/
5445 5454
5446When actually fetching the distfiles, each item from MASTER_SITES or SITES.* 5455When actually fetching the distfiles, each item from MASTER_SITES or SITES.*
5447gets the name of each distfile appended to it, without an intermediate slash. 5456gets the name of each distfile appended to it, without an intermediate slash.
5448Therefore, all site values have to end with a slash or other separator 5457Therefore, all site values have to end with a slash or other separator
5449character. This allows for example to set MASTER_SITES to a URL of a CGI script 5458character. This allows for example to set MASTER_SITES to a URL of a CGI script
5450that gets the name of the distfile as a parameter. In this case, the definition 5459that gets the name of the distfile as a parameter. In this case, the definition
5451would look like: 5460would look like:
5452 5461
5453MASTER_SITES= http://www.example.com/download.cgi?file= 5462MASTER_SITES= http://www.example.com/download.cgi?file=
5454 5463
5455The exception to this rule are URLs starting with a dash. In that case the URL 5464The exception to this rule are URLs starting with a dash. In that case the URL
5456is taken as is, fetched and the result stored under the name of the distfile. 5465is taken as is, fetched and the result stored under the name of the distfile.
5457You can use this style for the case when the download URL style does not match 5466You can use this style for the case when the download URL style does not match
5458the above common case. For example, if permanent download URL is a redirector 5467the above common case. For example, if permanent download URL is a redirector
5459to the real download URL, or the download file name is offered by an HTTP 5468to the real download URL, or the download file name is offered by an HTTP
5460Content-Disposition header. In the following example, foo-1.0.0.tar.gz will be 5469Content-Disposition header. In the following example, foo-1.0.0.tar.gz will be
5461created instead of the default v1.0.0.tar.gz. 5470created instead of the default v1.0.0.tar.gz.
5462 5471
5463DISTNAME= foo-1.0.0 5472DISTNAME= foo-1.0.0
5464MASTER_SITES= -http://www.example.com/archive/v1.0.0.tar.gz 5473MASTER_SITES= -http://www.example.com/archive/v1.0.0.tar.gz
5465 5474
5466There are some predefined values for MASTER_SITES, which can be used in 5475There are some predefined values for MASTER_SITES, which can be used in
5467packages. The names of the variables should speak for themselves. 5476packages. The names of the variables should speak for themselves.
5468 5477
5469${MASTER_SITE_APACHE} 5478${MASTER_SITE_APACHE}
5470${MASTER_SITE_BACKUP} 5479${MASTER_SITE_BACKUP}
5471${MASTER_SITE_CYGWIN} 5480${MASTER_SITE_CYGWIN}
5472${MASTER_SITE_DEBIAN} 5481${MASTER_SITE_DEBIAN}
5473${MASTER_SITE_FREEBSD} 5482${MASTER_SITE_FREEBSD}
5474${MASTER_SITE_FREEBSD_LOCAL} 5483${MASTER_SITE_FREEBSD_LOCAL}
5475${MASTER_SITE_GENTOO} 5484${MASTER_SITE_GENTOO}
5476${MASTER_SITE_GNOME} 5485${MASTER_SITE_GNOME}
5477${MASTER_SITE_GNU} 5486${MASTER_SITE_GNU}
5478${MASTER_SITE_GNUSTEP} 5487${MASTER_SITE_GNUSTEP}
5479${MASTER_SITE_HASKELL_HACKAGE} 5488${MASTER_SITE_HASKELL_HACKAGE}
5480${MASTER_SITE_IFARCHIVE} 5489${MASTER_SITE_IFARCHIVE}
5481${MASTER_SITE_KDE} 5490${MASTER_SITE_KDE}
5482${MASTER_SITE_MOZILLA} 5491${MASTER_SITE_MOZILLA}
5483${MASTER_SITE_MOZILLA_ALL} 5492${MASTER_SITE_MOZILLA_ALL}
5484${MASTER_SITE_MOZILLA_ESR} 5493${MASTER_SITE_MOZILLA_ESR}
5485${MASTER_SITE_MYSQL} 5494${MASTER_SITE_MYSQL}
5486${MASTER_SITE_NETLIB} 5495${MASTER_SITE_NETLIB}
5487${MASTER_SITE_OPENOFFICE} 5496${MASTER_SITE_OPENOFFICE}
5488${MASTER_SITE_PERL_CPAN} 5497${MASTER_SITE_PERL_CPAN}
5489${MASTER_SITE_PGSQL} 5498${MASTER_SITE_PGSQL}
5490${MASTER_SITE_RUBYGEMS} 5499${MASTER_SITE_RUBYGEMS}
5491${MASTER_SITE_R_CRAN} 5500${MASTER_SITE_R_CRAN}
5492${MASTER_SITE_SOURCEFORGE} 5501${MASTER_SITE_SOURCEFORGE}
5493${MASTER_SITE_SOURCEFORGE_JP} 5502${MASTER_SITE_SOURCEFORGE_JP}
5494${MASTER_SITE_SUNSITE} 5503${MASTER_SITE_SUNSITE}
5495${MASTER_SITE_SUSE} 5504${MASTER_SITE_SUSE}
5496${MASTER_SITE_TEX_CTAN} 5505${MASTER_SITE_TEX_CTAN}
5497${MASTER_SITE_XCONTRIB} 5506${MASTER_SITE_XCONTRIB}
5498${MASTER_SITE_XEMACS} 5507${MASTER_SITE_XEMACS}
5499${MASTER_SITE_XORG} 5508${MASTER_SITE_XORG}
5500 5509
5501Some explanations for the less self-explaining ones: MASTER_SITE_BACKUP 5510Some explanations for the less self-explaining ones: MASTER_SITE_BACKUP
5502contains backup sites for packages that are maintained in ftp://ftp.NetBSD.org/ 5511contains backup sites for packages that are maintained in ftp://ftp.NetBSD.org/
5503pub/pkgsrc/distfiles/${DIST_SUBDIR}. MASTER_SITE_LOCAL contains local package 5512pub/pkgsrc/distfiles/${DIST_SUBDIR}. MASTER_SITE_LOCAL contains local package
5504source distributions that are maintained in ftp://ftp.NetBSD.org/pub/pkgsrc/ 5513source distributions that are maintained in ftp://ftp.NetBSD.org/pub/pkgsrc/
5505distfiles/LOCAL_PORTS/. 5514distfiles/LOCAL_PORTS/.
5506 5515
5507If you choose one of these predefined sites, you may want to specify a 5516If you choose one of these predefined sites, you may want to specify a
5508subdirectory of that site. Since these macros may expand to more than one 5517subdirectory of that site. Since these macros may expand to more than one
5509actual site, you must use the following construct to specify a subdirectory: 5518actual site, you must use the following construct to specify a subdirectory:
5510 5519
5511MASTER_SITES= ${MASTER_SITE_GNU:=subdirectory/name/} 5520MASTER_SITES= ${MASTER_SITE_GNU:=subdirectory/name/}
5512MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=project_name/} 5521MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=project_name/}
5513 5522
5514Note the trailing slash after the subdirectory name. 5523Note the trailing slash after the subdirectory name.
@@ -5619,2761 +5628,2770 @@ WRAPPER_UPDATE_CACHE @@ -5619,2761 +5628,2770 @@ WRAPPER_UPDATE_CACHE
5619 5628
5620WRAPPER_REORDER_CMDS 5629WRAPPER_REORDER_CMDS
5621 5630
5622 A list of reordering commands. A reordering command has the form reorder:l: 5631 A list of reordering commands. A reordering command has the form reorder:l:
5623 lib1:lib2. It ensures that that -llib1 occurs before -llib2. 5632 lib1:lib2. It ensures that that -llib1 occurs before -llib2.
5624 5633
5625WRAPPER_TRANSFORM_CMDS 5634WRAPPER_TRANSFORM_CMDS
5626 5635
5627 A list of transformation commands. [TODO: investigate further] 5636 A list of transformation commands. [TODO: investigate further]
5628 5637
562917.11. The configure phase 563817.11. The configure phase
5630 5639
5631Most pieces of software need information on the header files, system calls, and 5640Most pieces of software need information on the header files, system calls, and
5632library routines which are available on the platform they run on. The process 5641library routines which are available on the platform they run on. The process
5633of determining this information is known as configuration, and is usually 5642of determining this information is known as configuration, and is usually
5634automated. In most cases, a script is supplied with the distfiles, and its 5643automated. In most cases, a script is supplied with the distfiles, and its
5635invocation results in generation of header files, Makefiles, etc. 5644invocation results in generation of header files, Makefiles, etc.
5636 5645
5637If the package contains a configure script, this can be invoked by setting 5646If the package contains a configure script, this can be invoked by setting
5638HAS_CONFIGURE to "yes". If the configure script is a GNU autoconf script, you 5647HAS_CONFIGURE to "yes". If the configure script is a GNU autoconf script, you
5639should set GNU_CONFIGURE to "yes" instead. What happens in the configure phase 5648should set GNU_CONFIGURE to "yes" instead. What happens in the configure phase
5640is roughly: 5649is roughly:
5641 5650
5642.for d in ${CONFIGURE_DIRS} 5651.for d in ${CONFIGURE_DIRS}
5643 cd ${WRKSRC} \ 5652 cd ${WRKSRC} \
5644 && cd ${d} \ 5653 && cd ${d} \
5645 && env ${CONFIGURE_ENV} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS} 5654 && env ${CONFIGURE_ENV} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}
5646.endfor 5655.endfor
5647 5656
5648CONFIGURE_DIRS (default: ".") is a list of pathnames relative to WRKSRC. In 5657CONFIGURE_DIRS (default: ".") is a list of pathnames relative to WRKSRC. In
5649each of these directories, the configure script is run with the environment 5658each of these directories, the configure script is run with the environment
5650CONFIGURE_ENV and arguments CONFIGURE_ARGS. The variables CONFIGURE_ENV, 5659CONFIGURE_ENV and arguments CONFIGURE_ARGS. The variables CONFIGURE_ENV,
5651CONFIGURE_SCRIPT (default: "./configure") and CONFIGURE_ARGS may all be changed 5660CONFIGURE_SCRIPT (default: "./configure") and CONFIGURE_ARGS may all be changed
5652by the package. 5661by the package.
5653 5662
5654If the program uses the Perl way of configuration (mainly Perl modules, but not 5663If the program uses the Perl way of configuration (mainly Perl modules, but not
5655only), i.e. a file called Makefile.PL, it should include ../../lang/perl5/ 5664only), i.e. a file called Makefile.PL, it should include ../../lang/perl5/
5656module.mk. To set any parameter for Makefile.PL use the MAKE_PARAMS variable 5665module.mk. To set any parameter for Makefile.PL use the MAKE_PARAMS variable
5657(e.g., MAKE_PARAMS+=foo=bar 5666(e.g., MAKE_PARAMS+=foo=bar
5658 5667
5659If the program uses an Imakefile for configuration, the appropriate steps can 5668If the program uses an Imakefile for configuration, the appropriate steps can
5660be invoked by setting USE_IMAKE to "yes". (If you only want the package 5669be invoked by setting USE_IMAKE to "yes". (If you only want the package
5661installed in ${X11PREFIX} but xmkmf not being run, set USE_X11BASE instead.) 5670installed in ${X11PREFIX} but xmkmf not being run, set USE_X11BASE instead.)
5662You can add variables to xmkmf's environment by adding them to the SCRIPTS_ENV 5671You can add variables to xmkmf's environment by adding them to the SCRIPTS_ENV
5663variable. 5672variable.
5664 5673
5665If the program uses cmake for configuration, the appropriate steps can be 5674If the program uses cmake for configuration, the appropriate steps can be
5666invoked by setting USE_CMAKE to "yes". You can add variables to cmake's 5675invoked by setting USE_CMAKE to "yes". You can add variables to cmake's
5667environment by adding them to the CONFIGURE_ENV variable and arguments to cmake 5676environment by adding them to the CONFIGURE_ENV variable and arguments to cmake
5668by adding them to the CMAKE_ARGS variable. The top directory argument is given 5677by adding them to the CMAKE_ARGS variable. The top directory argument is given
5669by the CMAKE_ARG_PATH variable, that defaults to "." (relative to 5678by the CMAKE_ARG_PATH variable, that defaults to "." (relative to
5670CONFIGURE_DIRS) 5679CONFIGURE_DIRS)
5671 5680
5672If there is no configure step at all, set NO_CONFIGURE to "yes". 5681If there is no configure step at all, set NO_CONFIGURE to "yes".
5673 5682
567417.12. The build phase 568317.12. The build phase
5675 5684
5676For building a package, a rough equivalent of the following code is executed. 5685For building a package, a rough equivalent of the following code is executed.
5677 5686
5678.for d in ${BUILD_DIRS} 5687.for d in ${BUILD_DIRS}
5679 cd ${WRKSRC} \ 5688 cd ${WRKSRC} \
5680 && cd ${d} \ 5689 && cd ${d} \
5681 && env ${MAKE_ENV} \ 5690 && env ${MAKE_ENV} \
5682 ${MAKE_PROGRAM} ${BUILD_MAKE_FLAGS} \ 5691 ${MAKE_PROGRAM} ${BUILD_MAKE_FLAGS} \
5683 -f ${MAKE_FILE} \ 5692 -f ${MAKE_FILE} \
5684 ${BUILD_TARGET} 5693 ${BUILD_TARGET}
5685.endfor 5694.endfor
5686 5695
5687BUILD_DIRS (default: ".") is a list of pathnames relative to WRKSRC. In each of 5696BUILD_DIRS (default: ".") is a list of pathnames relative to WRKSRC. In each of
5688these directories, MAKE_PROGRAM is run with the environment MAKE_ENV and 5697these directories, MAKE_PROGRAM is run with the environment MAKE_ENV and
5689arguments BUILD_MAKE_FLAGS. The variables MAKE_ENV, BUILD_MAKE_FLAGS, MAKE_FILE 5698arguments BUILD_MAKE_FLAGS. The variables MAKE_ENV, BUILD_MAKE_FLAGS, MAKE_FILE
5690and BUILD_TARGET may all be changed by the package. 5699and BUILD_TARGET may all be changed by the package.
5691 5700
5692The default value of MAKE_PROGRAM is "gmake" if USE_TOOLS contains "gmake", " 5701The default value of MAKE_PROGRAM is "gmake" if USE_TOOLS contains "gmake", "
5693make" otherwise. The default value of MAKE_FILE is "Makefile", and BUILD_TARGET 5702make" otherwise. The default value of MAKE_FILE is "Makefile", and BUILD_TARGET
5694defaults to "all". 5703defaults to "all".
5695 5704
5696If there is no build step at all, set NO_BUILD to "yes". 5705If there is no build step at all, set NO_BUILD to "yes".
5697 5706
569817.13. The test phase 570717.13. The test phase
5699 5708
5700[TODO] 5709[TODO]
5701 5710
570217.14. The install phase 571117.14. The install phase
5703 5712
5704Once the build stage has completed, the final step is to install the software 5713Once the build stage has completed, the final step is to install the software
5705in public directories, so users can access the programs and files. 5714in public directories, so users can access the programs and files.
5706 5715
5707In the install phase, a rough equivalent of the following code is executed. 5716In the install phase, a rough equivalent of the following code is executed.
5708Additionally, before and after this code, much magic is performed to do 5717Additionally, before and after this code, much magic is performed to do
5709consistency checks, registering the package, and so on. 5718consistency checks, registering the package, and so on.
5710 5719
5711.for d in ${INSTALL_DIRS} 5720.for d in ${INSTALL_DIRS}
5712 cd ${WRKSRC} \ 5721 cd ${WRKSRC} \
5713 && cd ${d} \ 5722 && cd ${d} \
5714 && env ${MAKE_ENV} \ 5723 && env ${MAKE_ENV} \
5715 ${MAKE_PROGRAM} ${INSTALL_MAKE_FLAGS} \ 5724 ${MAKE_PROGRAM} ${INSTALL_MAKE_FLAGS} \
5716 -f ${MAKE_FILE} \ 5725 -f ${MAKE_FILE} \
5717 ${INSTALL_TARGET} 5726 ${INSTALL_TARGET}
5718.endfor 5727.endfor
5719 5728
5720The variable's meanings are analogous to the ones in the build phase. 5729The variable's meanings are analogous to the ones in the build phase.
5721INSTALL_DIRS defaults to BUILD_DIRS. INSTALL_TARGET is "install" by default, 5730INSTALL_DIRS defaults to BUILD_DIRS. INSTALL_TARGET is "install" by default,
5722plus "install.man" if USE_IMAKE is defined and NO_INSTALL_MANPAGES is not 5731plus "install.man" if USE_IMAKE is defined and NO_INSTALL_MANPAGES is not
5723defined. 5732defined.
5724 5733
5725In the install phase, the following variables are useful. They are all 5734In the install phase, the following variables are useful. They are all
5726variations of the install(1) command that have the owner, group and permissions 5735variations of the install(1) command that have the owner, group and permissions
5727preset. INSTALL is the plain install command. The specialized variants, 5736preset. INSTALL is the plain install command. The specialized variants,
5728together with their intended use, are: 5737together with their intended use, are:
5729 5738
5730INSTALL_PROGRAM_DIR 5739INSTALL_PROGRAM_DIR
5731 5740
5732 directories that contain binaries 5741 directories that contain binaries
5733 5742
5734INSTALL_SCRIPT_DIR 5743INSTALL_SCRIPT_DIR
5735 5744
5736 directories that contain scripts 5745 directories that contain scripts
5737 5746
5738INSTALL_LIB_DIR 5747INSTALL_LIB_DIR
5739 5748
5740 directories that contain shared and static libraries 5749 directories that contain shared and static libraries
5741 5750
5742INSTALL_DATA_DIR 5751INSTALL_DATA_DIR
5743 5752
5744 directories that contain data files 5753 directories that contain data files
5745 5754
5746INSTALL_MAN_DIR 5755INSTALL_MAN_DIR
5747 5756
5748 directories that contain man pages 5757 directories that contain man pages
5749 5758
5750INSTALL_PROGRAM 5759INSTALL_PROGRAM
5751 5760
5752 binaries that can be stripped from debugging symbols 5761 binaries that can be stripped from debugging symbols
5753 5762
5754INSTALL_SCRIPT 5763INSTALL_SCRIPT
5755 5764
5756 binaries that cannot be stripped 5765 binaries that cannot be stripped
5757 5766
5758INSTALL_GAME 5767INSTALL_GAME
5759 5768
5760 game binaries 5769 game binaries
5761 5770
5762INSTALL_LIB 5771INSTALL_LIB
5763 5772
5764 shared and static libraries 5773 shared and static libraries
5765 5774
5766INSTALL_DATA 5775INSTALL_DATA
5767 5776
5768 data files 5777 data files
5769 5778
5770INSTALL_GAME_DATA 5779INSTALL_GAME_DATA
5771 5780
5772 data files for games 5781 data files for games
5773 5782
5774INSTALL_MAN 5783INSTALL_MAN
5775 5784
5776 man pages 5785 man pages
5777 5786
5778Some other variables are: 5787Some other variables are:
5779 5788
5780INSTALLATION_DIRS 5789INSTALLATION_DIRS
5781 5790
5782 A list of directories relative to PREFIX that are created by pkgsrc at the 5791 A list of directories relative to PREFIX that are created by pkgsrc at the
5783 beginning of the install phase. The package is supposed to create all 5792 beginning of the install phase. The package is supposed to create all
5784 needed directories itself before installing files to it and list all other 5793 needed directories itself before installing files to it and list all other
5785 directories here. 5794 directories here.
5786 5795
5787In the rare cases that a package shouldn't install anything, set NO_INSTALL to  5796In the rare cases that a package shouldn't install anything, set NO_INSTALL to
5788"yes". This is mostly relevant for packages in the regress category. 5797"yes". This is mostly relevant for packages in the regress category.
5789 5798
579017.15. The package phase 579917.15. The package phase
5791 5800
5792Once the install stage has completed, a binary package of the installed files 5801Once the install stage has completed, a binary package of the installed files
5793can be built. These binary packages can be used for quick installation without 5802can be built. These binary packages can be used for quick installation without
5794previous compilation, e.g. by the make bin-install or by using pkg_add. 5803previous compilation, e.g. by the make bin-install or by using pkg_add.
5795 5804
5796By default, the binary packages are created in ${PACKAGES}/All and symlinks are 5805By default, the binary packages are created in ${PACKAGES}/All and symlinks are
5797created in ${PACKAGES}/category, one for each category in the CATEGORIES 5806created in ${PACKAGES}/category, one for each category in the CATEGORIES
5798variable. PACKAGES defaults to pkgsrc/packages. 5807variable. PACKAGES defaults to pkgsrc/packages.
5799 5808
580017.16. Cleaning up 580917.16. Cleaning up
5801 5810
5802Once you're finished with a package, you can clean the work directory by 5811Once you're finished with a package, you can clean the work directory by
5803running make clean. If you want to clean the work directories of all 5812running make clean. If you want to clean the work directories of all
5804dependencies too, use make clean-depends. 5813dependencies too, use make clean-depends.
5805 5814
580617.17. Other helpful targets 581517.17. Other helpful targets
5807 5816
5808pre/post-* 5817pre/post-*
5809 5818
5810 For any of the main targets described in the previous section, two 5819 For any of the main targets described in the previous section, two
5811 auxiliary targets exist with "pre-" and "post-" used as a prefix for the 5820 auxiliary targets exist with "pre-" and "post-" used as a prefix for the
5812 main target's name. These targets are invoked before and after the main 5821 main target's name. These targets are invoked before and after the main
5813 target is called, allowing extra configuration or installation steps be 5822 target is called, allowing extra configuration or installation steps be
5814 performed from a package's Makefile, for example, which a program's 5823 performed from a package's Makefile, for example, which a program's
5815 configure script or install target omitted. 5824 configure script or install target omitted.
5816 5825
5817do-* 5826do-*
5818 5827
5819 Should one of the main targets do the wrong thing, and should there be no 5828 Should one of the main targets do the wrong thing, and should there be no
5820 variable to fix this, you can redefine it with the do-* target. (Note that 5829 variable to fix this, you can redefine it with the do-* target. (Note that
5821 redefining the target itself instead of the do-* target is a bad idea, as 5830 redefining the target itself instead of the do-* target is a bad idea, as
5822 the pre-* and post-* targets won't be called anymore, etc.) You will not 5831 the pre-* and post-* targets won't be called anymore, etc.) You will not
5823 usually need to do this. 5832 usually need to do this.
5824 5833
5825reinstall 5834reinstall
5826 5835
5827 If you did a make install and you noticed some file was not installed 5836 If you did a make install and you noticed some file was not installed
5828 properly, you can repeat the installation with this target, which will 5837 properly, you can repeat the installation with this target, which will
5829 ignore the "already installed" flag. 5838 ignore the "already installed" flag.
5830 5839
5831 This is the default value of DEPENDS_TARGET except in the case of make 5840 This is the default value of DEPENDS_TARGET except in the case of make
5832 update and make package, where the defaults are "package" and "update", 5841 update and make package, where the defaults are "package" and "update",
5833 respectively. 5842 respectively.
5834 5843
5835deinstall 5844deinstall
5836 5845
5837 This target does a pkg_delete(1) in the current directory, effectively 5846 This target does a pkg_delete(1) in the current directory, effectively
5838 de-installing the package. The following variables can be used to tune the 5847 de-installing the package. The following variables can be used to tune the
5839 behaviour: 5848 behaviour:
5840 5849
5841 PKG_VERBOSE 5850 PKG_VERBOSE
5842 5851
5843 Add a "-v" to the pkg_delete(1) command. 5852 Add a "-v" to the pkg_delete(1) command.
5844 5853
5845 DEINSTALLDEPENDS 5854 DEINSTALLDEPENDS
5846 5855
5847 Remove all packages that require (depend on) the given package. This 5856 Remove all packages that require (depend on) the given package. This
5848 can be used to remove any packages that may have been pulled in by a 5857 can be used to remove any packages that may have been pulled in by a
5849 given package, e.g. if make deinstall DEINSTALLDEPENDS=1 is done in 5858 given package, e.g. if make deinstall DEINSTALLDEPENDS=1 is done in
5850 pkgsrc/x11/kde, this is likely to remove whole KDE. Works by adding "-R 5859 pkgsrc/x11/kde, this is likely to remove whole KDE. Works by adding "-R
5851 " to the pkg_delete(1) command line. 5860 " to the pkg_delete(1) command line.
5852 5861
5853bin-install 5862bin-install
5854 5863
5855 Install a binary package from local disk and via FTP from a list of sites 5864 Install a binary package from local disk and via FTP from a list of sites
5856 (see the BINPKG_SITES variable), and do a make package if no binary package 5865 (see the BINPKG_SITES variable), and do a make package if no binary package
5857 is available anywhere. The arguments given to pkg_add can be set via 5866 is available anywhere. The arguments given to pkg_add can be set via
5858 BIN_INSTALL_FLAGS e.g., to do verbose operation, etc. 5867 BIN_INSTALL_FLAGS e.g., to do verbose operation, etc.
5859 5868
5860update 5869update
5861 5870
5862 This target causes the current package to be updated to the latest version. 5871 This target causes the current package to be updated to the latest version.
5863 The package and all depending packages first get de-installed, then current 5872 The package and all depending packages first get de-installed, then current
5864 versions of the corresponding packages get compiled and installed. This is 5873 versions of the corresponding packages get compiled and installed. This is
5865 similar to manually noting which packages are currently installed, then 5874 similar to manually noting which packages are currently installed, then
5866 performing a series of make deinstall and make install (or whatever 5875 performing a series of make deinstall and make install (or whatever
5867 UPDATE_TARGET is set to) for these packages. 5876 UPDATE_TARGET is set to) for these packages.
5868 5877
5869 You can use the "update" target to resume package updating in case a 5878 You can use the "update" target to resume package updating in case a
5870 previous make update was interrupted for some reason. However, in this 5879 previous make update was interrupted for some reason. However, in this
5871 case, make sure you don't call make clean or otherwise remove the list of 5880 case, make sure you don't call make clean or otherwise remove the list of
5872 dependent packages in WRKDIR. Otherwise, you lose the ability to 5881 dependent packages in WRKDIR. Otherwise, you lose the ability to
5873 automatically update the current package along with the dependent packages 5882 automatically update the current package along with the dependent packages
5874 you have installed. 5883 you have installed.
5875 5884
5876 Resuming an interrupted make update will only work as long as the package 5885 Resuming an interrupted make update will only work as long as the package
5877 tree remains unchanged. If the source code for one of the packages to be 5886 tree remains unchanged. If the source code for one of the packages to be
5878 updated has been changed, resuming make update will most certainly fail! 5887 updated has been changed, resuming make update will most certainly fail!
5879 5888
5880 The following variables can be used either on the command line or in 5889 The following variables can be used either on the command line or in
5881 mk.conf to alter the behaviour of make update: 5890 mk.conf to alter the behaviour of make update:
5882 5891
5883 UPDATE_TARGET 5892 UPDATE_TARGET
5884 5893
5885 Install target to recursively use for the updated package and the 5894 Install target to recursively use for the updated package and the
5886 dependent packages. Defaults to DEPENDS_TARGET if set, "install" 5895 dependent packages. Defaults to DEPENDS_TARGET if set, "install"
5887 otherwise for make update. Other good targets are "package" or " 5896 otherwise for make update. Other good targets are "package" or "
5888 bin-install". Do not set this to "update" or you will get stuck in an 5897 bin-install". Do not set this to "update" or you will get stuck in an
5889 endless loop! 5898 endless loop!
5890 5899
5891 NOCLEAN 5900 NOCLEAN
5892 5901
5893 Don't clean up after updating. Useful if you want to leave the work 5902 Don't clean up after updating. Useful if you want to leave the work
5894 sources of the updated packages around for inspection or other 5903 sources of the updated packages around for inspection or other
5895 purposes. Be sure you eventually clean up the source tree (see the " 5904 purposes. Be sure you eventually clean up the source tree (see the "
5896 clean-update" target below) or you may run into troubles with old 5905 clean-update" target below) or you may run into troubles with old
5897 source code still lying around on your next make or make update. 5906 source code still lying around on your next make or make update.
5898 5907
5899 REINSTALL 5908 REINSTALL
5900 5909
5901 Deinstall each package before installing (making DEPENDS_TARGET). This 5910 Deinstall each package before installing (making DEPENDS_TARGET). This
5902 may be necessary if the "clean-update" target (see below) was called 5911 may be necessary if the "clean-update" target (see below) was called
5903 after interrupting a running make update. 5912 after interrupting a running make update.
5904 5913
5905 DEPENDS_TARGET 5914 DEPENDS_TARGET
5906 5915
5907 Allows you to disable recursion and hardcode the target for packages. 5916 Allows you to disable recursion and hardcode the target for packages.
5908 The default is "update" for the update target, facilitating a recursive 5917 The default is "update" for the update target, facilitating a recursive
5909 update of prerequisite packages. Only set DEPENDS_TARGET if you want to 5918 update of prerequisite packages. Only set DEPENDS_TARGET if you want to
5910 disable recursive updates. Use UPDATE_TARGET instead to just set a 5919 disable recursive updates. Use UPDATE_TARGET instead to just set a
5911 specific target for each package to be installed during make update 5920 specific target for each package to be installed during make update
5912 (see above). 5921 (see above).
5913 5922
5914clean-update 5923clean-update
5915 5924
5916 Clean the source tree for all packages that would get updated if make 5925 Clean the source tree for all packages that would get updated if make
5917 update was called from the current directory. This target should not be 5926 update was called from the current directory. This target should not be
5918 used if the current package (or any of its depending packages) have already 5927 used if the current package (or any of its depending packages) have already
5919 been de-installed (e.g., after calling make update) or you may lose some 5928 been de-installed (e.g., after calling make update) or you may lose some
5920 packages you intended to update. As a rule of thumb: only use this target  5929 packages you intended to update. As a rule of thumb: only use this target
5921 before the first time you run make update and only if you have a dirty 5930 before the first time you run make update and only if you have a dirty
5922 package tree (e.g., if you used NOCLEAN). 5931 package tree (e.g., if you used NOCLEAN).
5923 5932
5924 If you are unsure about whether your tree is clean, you can either perform 5933 If you are unsure about whether your tree is clean, you can either perform
5925 a make clean at the top of the tree, or use the following sequence of 5934 a make clean at the top of the tree, or use the following sequence of
5926 commands from the directory of the package you want to update (before 5935 commands from the directory of the package you want to update (before
5927 running make update for the first time, otherwise you lose all the packages 5936 running make update for the first time, otherwise you lose all the packages
5928 you wanted to update!): 5937 you wanted to update!):
5929 5938
5930 # make clean-update 5939 # make clean-update
5931 # make clean CLEANDEPENDS=YES 5940 # make clean CLEANDEPENDS=YES
5932 # make update 5941 # make update
5933 5942
5934 5943
5935 The following variables can be used either on the command line or in 5944 The following variables can be used either on the command line or in
5936 mk.conf to alter the behaviour of make clean-update: 5945 mk.conf to alter the behaviour of make clean-update:
5937 5946
5938 CLEAR_DIRLIST 5947 CLEAR_DIRLIST
5939 5948
5940 After make clean, do not reconstruct the list of directories to update 5949 After make clean, do not reconstruct the list of directories to update
5941 for this package. Only use this if make update successfully installed 5950 for this package. Only use this if make update successfully installed
5942 all packages you wanted to update. Normally, this is done automatically 5951 all packages you wanted to update. Normally, this is done automatically
5943 on make update, but may have been suppressed by the NOCLEAN variable 5952 on make update, but may have been suppressed by the NOCLEAN variable
5944 (see above). 5953 (see above).
5945 5954
5946replace 5955replace
5947 5956
5948 Update the installation of the current package. This differs from update in 5957 Update the installation of the current package. This differs from update in
5949 that it does not replace dependent packages. You will need to install 5958 that it does not replace dependent packages. You will need to install
5950 pkgtools/pkg_tarup for this target to work. 5959 pkgtools/pkg_tarup for this target to work.
5951 5960
5952 Be careful when using this target! There are no guarantees that dependent 5961 Be careful when using this target! There are no guarantees that dependent
5953 packages will still work, in particular they will most certainly break if 5962 packages will still work, in particular they will most certainly break if
5954 you make replace a library package whose shared library major version 5963 you make replace a library package whose shared library major version
5955 changed between your installed version and the new one. For this reason, 5964 changed between your installed version and the new one. For this reason,
5956 this target is not officially supported and only recommended for advanced 5965 this target is not officially supported and only recommended for advanced
5957 users. 5966 users.
5958 5967
5959info 5968info
5960 5969
5961 This target invokes pkg_info(1) for the current package. You can use this 5970 This target invokes pkg_info(1) for the current package. You can use this
5962 to check which version of a package is installed. 5971 to check which version of a package is installed.
5963 5972
5964index 5973index
5965 5974
5966 This is a top-level command, i.e. it should be used in the pkgsrc 5975 This is a top-level command, i.e. it should be used in the pkgsrc
5967 directory. It creates a database of all packages in the local pkgsrc tree, 5976 directory. It creates a database of all packages in the local pkgsrc tree,
5968 including dependencies, comment, maintainer, and some other useful 5977 including dependencies, comment, maintainer, and some other useful
5969 information. Individual entries are created by running make describe in the 5978 information. Individual entries are created by running make describe in the
5970 packages' directories. This index file is saved as pkgsrc/INDEX. It can be 5979 packages' directories. This index file is saved as pkgsrc/INDEX. It can be
5971 displayed in verbose format by running make print-index. You can search in 5980 displayed in verbose format by running make print-index. You can search in
5972 it with make search key=something. You can extract a list of all packages 5981 it with make search key=something. You can extract a list of all packages
5973 that depend on a particular one by running make show-deps PKG=somepackage. 5982 that depend on a particular one by running make show-deps PKG=somepackage.
5974 5983
5975 Running this command takes a very long time, some hours even on fast 5984 Running this command takes a very long time, some hours even on fast
5976 machines! 5985 machines!
5977 5986
5978readme 5987readme
5979 5988
5980 This target generates a README.html file, which can be viewed using a 5989 This target generates a README.html file, which can be viewed using a
5981 browser such as www/firefox or www/links. The generated files contain 5990 browser such as www/firefox or www/links. The generated files contain
5982 references to any packages which are in the PACKAGES directory on the local 5991 references to any packages which are in the PACKAGES directory on the local
5983 host. The generated files can be made to refer to URLs based on 5992 host. The generated files can be made to refer to URLs based on
5984 FTP_PKG_URL_HOST and FTP_PKG_URL_DIR. For example, if I wanted to generate 5993 FTP_PKG_URL_HOST and FTP_PKG_URL_DIR. For example, if I wanted to generate
5985 README.html files which pointed to binary packages on the local machine, in 5994 README.html files which pointed to binary packages on the local machine, in
5986 the directory /usr/packages, set FTP_PKG_URL_HOST=file://localhost and 5995 the directory /usr/packages, set FTP_PKG_URL_HOST=file://localhost and
5987 FTP_PKG_URL_DIR=/usr/packages. The ${PACKAGES} directory and its 5996 FTP_PKG_URL_DIR=/usr/packages. The ${PACKAGES} directory and its
5988 subdirectories will be searched for all the binary packages. 5997 subdirectories will be searched for all the binary packages.
5989 5998
5990 The target can be run at the toplevel or in category directories, in which 5999 The target can be run at the toplevel or in category directories, in which
5991 case it descends recursively. 6000 case it descends recursively.
5992 6001
5993readme-all 6002readme-all
5994 6003
5995 This is a top-level command, run it in pkgsrc. Use this target to create a 6004 This is a top-level command, run it in pkgsrc. Use this target to create a
5996 file README-all.html which contains a list of all packages currently 6005 file README-all.html which contains a list of all packages currently
5997 available in the NetBSD Packages Collection, together with the category 6006 available in the NetBSD Packages Collection, together with the category
5998 they belong to and a short description. This file is compiled from the 6007 they belong to and a short description. This file is compiled from the
5999 pkgsrc/*/README.html files, so be sure to run this after a make readme. 6008 pkgsrc/*/README.html files, so be sure to run this after a make readme.
6000 6009
6001cdrom-readme 6010cdrom-readme
6002 6011
6003 This is very much the same as the "readme" target (see above), but is to be 6012 This is very much the same as the "readme" target (see above), but is to be
6004 used when generating a pkgsrc tree to be written to a CD-ROM. This target 6013 used when generating a pkgsrc tree to be written to a CD-ROM. This target
6005 also produces README.html files, and can be made to refer to URLs based on 6014 also produces README.html files, and can be made to refer to URLs based on
6006 CDROM_PKG_URL_HOST and CDROM_PKG_URL_DIR. 6015 CDROM_PKG_URL_HOST and CDROM_PKG_URL_DIR.
6007 6016
6008show-distfiles 6017show-distfiles
6009 6018
6010 This target shows which distfiles and patchfiles are needed to build the 6019 This target shows which distfiles and patchfiles are needed to build the
6011 package (ALLFILES, which contains all DISTFILES and PATCHFILES, but not 6020 package (ALLFILES, which contains all DISTFILES and PATCHFILES, but not
6012 patches/*). 6021 patches/*).
6013 6022
6014show-downlevel 6023show-downlevel
6015 6024
6016 This target shows nothing if the package is not installed. If a version of 6025 This target shows nothing if the package is not installed. If a version of
6017 this package is installed, but is not the version provided in this version 6026 this package is installed, but is not the version provided in this version
6018 of pkgsrc, then a warning message is displayed. This target can be used to 6027 of pkgsrc, then a warning message is displayed. This target can be used to
6019 show which of your installed packages are downlevel, and so the old 6028 show which of your installed packages are downlevel, and so the old
6020 versions can be deleted, and the current ones added. 6029 versions can be deleted, and the current ones added.
6021 6030
6022show-pkgsrc-dir 6031show-pkgsrc-dir
6023 6032
6024 This target shows the directory in the pkgsrc hierarchy from which the 6033 This target shows the directory in the pkgsrc hierarchy from which the
6025 package can be built and installed. This may not be the same directory as 6034 package can be built and installed. This may not be the same directory as
6026 the one from which the package was installed. This target is intended to be 6035 the one from which the package was installed. This target is intended to be
6027 used by people who may wish to upgrade many packages on a single host, and 6036 used by people who may wish to upgrade many packages on a single host, and
6028 can be invoked from the top-level pkgsrc Makefile by using the " 6037 can be invoked from the top-level pkgsrc Makefile by using the "
6029 show-host-specific-pkgs" target. 6038 show-host-specific-pkgs" target.
6030 6039
6031show-installed-depends 6040show-installed-depends
6032 6041
6033 This target shows which installed packages match the current package's 6042 This target shows which installed packages match the current package's
6034 DEPENDS. Useful if out of date dependencies are causing build problems. 6043 DEPENDS. Useful if out of date dependencies are causing build problems.
6035 6044
6036check-shlibs 6045check-shlibs
6037 6046
6038 After a package is installed, check all its binaries and (on ELF platforms) 6047 After a package is installed, check all its binaries and (on ELF platforms)
6039 shared libraries to see if they find the shared libs they need. Run by 6048 shared libraries to see if they find the shared libs they need. Run by
6040 default if PKG_DEVELOPER is set in mk.conf. 6049 default if PKG_DEVELOPER is set in mk.conf.
6041 6050
6042print-PLIST 6051print-PLIST
6043 6052
6044 After a "make install" from a new or upgraded pkg, this prints out an 6053 After a "make install" from a new or upgraded pkg, this prints out an
6045 attempt to generate a new PLIST from a find -newer work/.extract_done. An 6054 attempt to generate a new PLIST from a find -newer work/.extract_done. An
6046 attempt is made to care for shared libs etc., but it is strongly 6055 attempt is made to care for shared libs etc., but it is strongly
6047 recommended to review the result before putting it into PLIST. On upgrades, 6056 recommended to review the result before putting it into PLIST. On upgrades,
6048 it's useful to diff the output of this command against an already existing 6057 it's useful to diff the output of this command against an already existing
6049 PLIST file. 6058 PLIST file.
6050 6059
6051 If the package installs files via tar(1) or other methods that don't update 6060 If the package installs files via tar(1) or other methods that don't update
6052 file access times, be sure to add these files manually to your PLIST, as 6061 file access times, be sure to add these files manually to your PLIST, as
6053 the "find -newer" command used by this target won't catch them! 6062 the "find -newer" command used by this target won't catch them!
6054 6063
6055 See Section 13.3, "Tweaking output of make print-PLIST" for more 6064 See Section 13.3, "Tweaking output of make print-PLIST" for more
6056 information on this target. 6065 information on this target.
6057 6066
6058bulk-package 6067bulk-package
6059 6068
6060 Used to do bulk builds. If an appropriate binary package already exists, no 6069 Used to do bulk builds. If an appropriate binary package already exists, no
6061 action is taken. If not, this target will compile, install and package it 6070 action is taken. If not, this target will compile, install and package it
6062 (and its depends, if PKG_DEPENDS is set properly. See Chapter 7, Creating 6071 (and its depends, if PKG_DEPENDS is set properly. See Chapter 7, Creating
6063 binary packages for everything in pkgsrc (bulk builds)). After creating the 6072 binary packages for everything in pkgsrc (bulk builds)). After creating the
6064 binary package, the sources, the just-installed package and its required 6073 binary package, the sources, the just-installed package and its required
6065 packages are removed, preserving free disk space. 6074 packages are removed, preserving free disk space.
6066 6075
6067 Beware that this target may deinstall all packages installed on a system! 6076 Beware that this target may deinstall all packages installed on a system!
6068 6077
6069bulk-install 6078bulk-install
6070 6079
6071 Used during bulk-installs to install required packages. If an up-to-date 6080 Used during bulk-installs to install required packages. If an up-to-date
6072 binary package is available, it will be installed via pkg_add(1). If not,  6081 binary package is available, it will be installed via pkg_add(1). If not,
6073 make bulk-package will be executed, but the installed binary won't be 6082 make bulk-package will be executed, but the installed binary won't be
6074 removed. 6083 removed.
6075 6084
6076 A binary package is considered "up-to-date" to be installed via pkg_add(1) 6085 A binary package is considered "up-to-date" to be installed via pkg_add(1)
6077 if: 6086 if:
6078 6087
6079 + None of the package's files (Makefile, ...) were modified since it was 6088 + None of the package's files (Makefile, ...) were modified since it was
6080 built. 6089 built.
6081 6090
6082 + None of the package's required (binary) packages were modified since it 6091 + None of the package's required (binary) packages were modified since it
6083 was built. 6092 was built.
6084 6093
6085 Beware that this target may deinstall all packages installed on a system! 6094 Beware that this target may deinstall all packages installed on a system!
6086 6095
6087Chapter 18. Tools needed for building or running 6096Chapter 18. Tools needed for building or running
6088 6097
6089Table of Contents 6098Table of Contents
6090 6099
609118.1. Tools for pkgsrc builds 610018.1. Tools for pkgsrc builds
609218.2. Tools needed by packages 610118.2. Tools needed by packages
609318.3. Tools provided by platforms 610218.3. Tools provided by platforms
609418.4. Questions regarding the tools 610318.4. Questions regarding the tools
6095 6104
6096The USE_TOOLS definition is used both internally by pkgsrc and also for 6105The USE_TOOLS definition is used both internally by pkgsrc and also for
6097individual packages to define what commands are needed for building a package 6106individual packages to define what commands are needed for building a package
6098(like BUILD_DEPENDS) or for later run-time of an installed packaged (such as 6107(like BUILD_DEPENDS) or for later run-time of an installed packaged (such as
6099DEPENDS). If the native system provides an adequate tool, then in many cases, a 6108DEPENDS). If the native system provides an adequate tool, then in many cases, a
6100pkgsrc package will not be used. 6109pkgsrc package will not be used.
6101 6110
6102When building a package, the replacement tools are made available in a 6111When building a package, the replacement tools are made available in a
6103directory (as symlinks or wrapper scripts) that is early in the executable 6112directory (as symlinks or wrapper scripts) that is early in the executable
6104search path. Just like the buildlink system, this helps with consistent builds. 6113search path. Just like the buildlink system, this helps with consistent builds.
6105 6114
6106A tool may be needed to help build a specific package. For example, perl, GNU 6115A tool may be needed to help build a specific package. For example, perl, GNU
6107make (gmake) or yacc may be needed. 6116make (gmake) or yacc may be needed.
6108 6117
6109Also a tool may be needed, for example, because the native system's supplied 6118Also a tool may be needed, for example, because the native system's supplied
6110tool may be inefficient for building a package with pkgsrc. For example, a 6119tool may be inefficient for building a package with pkgsrc. For example, a
6111package may need GNU awk, bison (instead of yacc) or a better sed. 6120package may need GNU awk, bison (instead of yacc) or a better sed.
6112 6121
6113The tools used by a package can be listed by running make show-tools. 6122The tools used by a package can be listed by running make show-tools.
6114 6123
611518.1. Tools for pkgsrc builds 612418.1. Tools for pkgsrc builds
6116 6125
6117The default set of tools used by pkgsrc is defined in bsd.pkg.mk. This includes 6126The default set of tools used by pkgsrc is defined in bsd.pkg.mk. This includes
6118standard Unix tools, such as: cat, awk, chmod, test, and so on. These can be 6127standard Unix tools, such as: cat, awk, chmod, test, and so on. These can be
6119seen by running: make show-var VARNAME=USE_TOOLS. 6128seen by running: make show-var VARNAME=USE_TOOLS.
6120 6129
6121If a package needs a specific program to build then the USE_TOOLS variable can 6130If a package needs a specific program to build then the USE_TOOLS variable can
6122be used to define the tools needed. 6131be used to define the tools needed.
6123 6132
612418.2. Tools needed by packages 613318.2. Tools needed by packages
6125 6134
6126In the following examples, the :run means that it is needed at run-time (and 6135In the following examples, the :run means that it is needed at run-time (and
6127becomes a DEPENDS). The default is a build dependency which can be set with 6136becomes a DEPENDS). The default is a build dependency which can be set with
6128:build. (So in this example, it is the same as gmake:build and 6137:build. (So in this example, it is the same as gmake:build and
6129pkg-config:build.) 6138pkg-config:build.)
6130 6139
6131USE_TOOLS+= gmake perl:run pkg-config 6140USE_TOOLS+= gmake perl:run pkg-config
6132 6141
6133When using the tools framework, a TOOLS_PATH.foo variable is defined which 6142When using the tools framework, a TOOLS_PATH.foo variable is defined which
6134contains the full path to the appropriate tool. For example, TOOLS_PATH.bash 6143contains the full path to the appropriate tool. For example, TOOLS_PATH.bash
6135could be "/bin/bash" on Linux systems. 6144could be "/bin/bash" on Linux systems.
6136 6145
6137If you always need a pkgsrc version of the tool at run-time, then just use 6146If you always need a pkgsrc version of the tool at run-time, then just use
6138DEPENDS instead. 6147DEPENDS instead.
6139 6148
614018.3. Tools provided by platforms 614918.3. Tools provided by platforms
6141 6150
6142When improving or porting pkgsrc to a new platform, have a look at (or create) 6151When improving or porting pkgsrc to a new platform, have a look at (or create)
6143the corresponding platform specific make file fragment under pkgsrc/mk/tools/ 6152the corresponding platform specific make file fragment under pkgsrc/mk/tools/
6144tools.${OPSYS}.mk which defines the name of the common tools. For example: 6153tools.${OPSYS}.mk which defines the name of the common tools. For example:
6145 6154
6146.if exists(/usr/bin/bzcat) 6155.if exists(/usr/bin/bzcat)
6147TOOLS_PLATFORM.bzcat?= /usr/bin/bzcat 6156TOOLS_PLATFORM.bzcat?= /usr/bin/bzcat
6148.elif exists(/usr/bin/bzip2) 6157.elif exists(/usr/bin/bzip2)
6149TOOLS_PLATFORM.bzcat?= /usr/bin/bzip2 -cd 6158TOOLS_PLATFORM.bzcat?= /usr/bin/bzip2 -cd
6150.endif 6159.endif
6151 6160
6152TOOLS_PLATFORM.true?= true # shell builtin 6161TOOLS_PLATFORM.true?= true # shell builtin
6153 6162
615418.4. Questions regarding the tools 616318.4. Questions regarding the tools
6155 6164
615618.4.1. How do I add a new tool? 616518.4.1. How do I add a new tool?
615718.4.2. How do I get a list of all available tools? 616618.4.2. How do I get a list of all available tools?
615818.4.3. How can I get a list of all the tools that a package is using while 616718.4.3. How can I get a list of all the tools that a package is using while
6159 being built? I want to know whether it uses sed or not. 6168 being built? I want to know whether it uses sed or not.
6160 6169
616118.4.1. How do I add a new tool? 617018.4.1. How do I add a new tool?
6162 6171
6163 TODO 6172 TODO
6164 6173
616518.4.2. How do I get a list of all available tools? 617418.4.2. How do I get a list of all available tools?
6166 6175
6167 TODO 6176 TODO
6168 6177
616918.4.3. How can I get a list of all the tools that a package is using while 617818.4.3. How can I get a list of all the tools that a package is using while
6170 being built? I want to know whether it uses sed or not. 6179 being built? I want to know whether it uses sed or not.
6171 6180
6172 Currently, you can't. (TODO: But I want to be able to do it.) 6181 Currently, you can't. (TODO: But I want to be able to do it.)
6173 6182
6174Chapter 19. Making your package work 6183Chapter 19. Making your package work
6175 6184
6176Table of Contents 6185Table of Contents
6177 6186
617819.1. General operation 618719.1. General operation
6179 6188
6180 19.1.1. Portability of packages 6189 19.1.1. Portability of packages
6181 19.1.2. How to pull in user-settable variables from mk.conf 6190 19.1.2. How to pull in user-settable variables from mk.conf
6182 19.1.3. User interaction 6191 19.1.3. User interaction
6183 19.1.4. Handling licenses 6192 19.1.4. Handling licenses
6184 19.1.5. Restricted packages 6193 19.1.5. Restricted packages
6185 19.1.6. Handling dependencies 6194 19.1.6. Handling dependencies
6186 19.1.7. Handling conflicts with other packages 6195 19.1.7. Handling conflicts with other packages
6187 19.1.8. Packages that cannot or should not be built 6196 19.1.8. Packages that cannot or should not be built
6188 19.1.9. Packages which should not be deleted, once installed 6197 19.1.9. Packages which should not be deleted, once installed
6189 19.1.10. Handling packages with security problems 6198 19.1.10. Handling packages with security problems
6190 19.1.11. How to handle incrementing versions when fixing an existing 6199 19.1.11. How to handle incrementing versions when fixing an existing
6191 package 6200 package
6192 19.1.12. Substituting variable text in the package files (the SUBST 6201 19.1.12. Substituting variable text in the package files (the SUBST
6193 framework) 6202 framework)
6194 6203
619519.2. Fixing problems in the fetch phase 620419.2. Fixing problems in the fetch phase
6196 6205
6197 19.2.1. Packages whose distfiles aren't available for plain downloading 6206 19.2.1. Packages whose distfiles aren't available for plain downloading
6198 19.2.2. How to handle modified distfiles with the 'old' name 6207 19.2.2. How to handle modified distfiles with the 'old' name
6199 6208
620019.3. Fixing problems in the configure phase 620919.3. Fixing problems in the configure phase
6201 6210
6202 19.3.1. Shared libraries - libtool 6211 19.3.1. Shared libraries - libtool
6203 19.3.2. Using libtool on GNU packages that already support libtool 6212 19.3.2. Using libtool on GNU packages that already support libtool
6204 19.3.3. GNU Autoconf/Automake 6213 19.3.3. GNU Autoconf/Automake
6205 6214
620619.4. Programming languages 621519.4. Programming languages
6207 6216
6208 19.4.1. C, C++, and Fortran 6217 19.4.1. C, C++, and Fortran
6209 19.4.2. Java 6218 19.4.2. Java
6210 19.4.3. Packages containing perl scripts 6219 19.4.3. Packages containing perl scripts
6211 19.4.4. Packages containing shell scripts 6220 19.4.4. Packages containing shell scripts
6212 19.4.5. Other programming languages 6221 19.4.5. Other programming languages
6213 6222
621419.5. Fixing problems in the build phase 622319.5. Fixing problems in the build phase
6215 6224
6216 19.5.1. Compiling C and C++ code conditionally 6225 19.5.1. Compiling C and C++ code conditionally
6217 19.5.2. How to handle compiler bugs 6226 19.5.2. How to handle compiler bugs
6218 19.5.3. Undefined reference to "..." 6227 19.5.3. Undefined reference to "..."
6219 19.5.4. Running out of memory 6228 19.5.4. Running out of memory
6220 6229
622119.6. Fixing problems in the install phase 623019.6. Fixing problems in the install phase
6222 6231
6223 19.6.1. Creating needed directories 6232 19.6.1. Creating needed directories
6224 19.6.2. Where to install documentation 6233 19.6.2. Where to install documentation
6225 19.6.3. Installing highscore files 6234 19.6.3. Installing highscore files
6226 19.6.4. Adding DESTDIR support to packages 6235 19.6.4. Adding DESTDIR support to packages
6227 19.6.5. Packages with hardcoded paths to other interpreters 6236 19.6.5. Packages with hardcoded paths to other interpreters
6228 19.6.6. Packages installing perl modules 6237 19.6.6. Packages installing perl modules
6229 19.6.7. Packages installing info files 6238 19.6.7. Packages installing info files
6230 19.6.8. Packages installing man pages 6239 19.6.8. Packages installing man pages
6231 19.6.9. Packages installing GConf data files 6240 19.6.9. Packages installing GConf data files
6232 19.6.10. Packages installing scrollkeeper/rarian data files 6241 19.6.10. Packages installing scrollkeeper/rarian data files
6233 19.6.11. Packages installing X11 fonts 6242 19.6.11. Packages installing X11 fonts
6234 19.6.12. Packages installing GTK2 modules 6243 19.6.12. Packages installing GTK2 modules
6235 19.6.13. Packages installing SGML or XML data 6244 19.6.13. Packages installing SGML or XML data
6236 19.6.14. Packages installing extensions to the MIME database 6245 19.6.14. Packages installing extensions to the MIME database
6237 19.6.15. Packages using intltool 6246 19.6.15. Packages using intltool
6238 19.6.16. Packages installing startup scripts 6247 19.6.16. Packages installing startup scripts
6239 19.6.17. Packages installing TeX modules 6248 19.6.17. Packages installing TeX modules
6240 19.6.18. Packages supporting running binaries in emulation 6249 19.6.18. Packages supporting running binaries in emulation
6241 19.6.19. Packages installing hicolor theme icons 6250 19.6.19. Packages installing hicolor theme icons
6242 19.6.20. Packages installing desktop files 6251 19.6.20. Packages installing desktop files
6243 6252
624419.7. Marking packages as having problems 625319.7. Marking packages as having problems
6245 6254
624619.1. General operation 625519.1. General operation
6247 6256
624819.1.1. Portability of packages 625719.1.1. Portability of packages
6249 6258
6250One appealing feature of pkgsrc is that it runs on many different platforms. As 6259One appealing feature of pkgsrc is that it runs on many different platforms. As
6251a result, it is important to ensure, where possible, that packages in pkgsrc 6260a result, it is important to ensure, where possible, that packages in pkgsrc
6252are portable. This chapter mentions some particular details you should pay 6261are portable. This chapter mentions some particular details you should pay
6253attention to while working on pkgsrc. 6262attention to while working on pkgsrc.
6254 6263
625519.1.2. How to pull in user-settable variables from mk.conf 626419.1.2. How to pull in user-settable variables from mk.conf
6256 6265
6257The pkgsrc user can configure pkgsrc by overriding several variables in the 6266The pkgsrc user can configure pkgsrc by overriding several variables in the
6258file pointed to by MAKECONF, which is mk.conf by default. When you want to use 6267file pointed to by MAKECONF, which is mk.conf by default. When you want to use
6259those variables in the preprocessor directives of make(1) (for example .if or 6268those variables in the preprocessor directives of make(1) (for example .if or
6260.for), you need to include the file ../../mk/bsd.prefs.mk before, which in turn 6269.for), you need to include the file ../../mk/bsd.prefs.mk before, which in turn
6261loads the user preferences. 6270loads the user preferences.
6262 6271
6263But note that some variables may not be completely defined after ../../mk/ 6272But note that some variables may not be completely defined after ../../mk/
6264bsd.prefs.mk has been included, as they may contain references to variables 6273bsd.prefs.mk has been included, as they may contain references to variables
6265that are not yet defined. In shell commands this is no problem, since variables 6274that are not yet defined. In shell commands this is no problem, since variables
6266are actually macros, which are only expanded when they are used. But in the 6275are actually macros, which are only expanded when they are used. But in the
6267preprocessor directives mentioned above and in dependency lines (of the form 6276preprocessor directives mentioned above and in dependency lines (of the form
6268target: dependencies) the variables are expanded at load time. 6277target: dependencies) the variables are expanded at load time.
6269 6278
6270Note 6279Note
6271 6280
6272Currently there is no exhaustive list of all variables that tells you whether 6281Currently there is no exhaustive list of all variables that tells you whether
6273they can be used at load time or only at run time, but it is in preparation. 6282they can be used at load time or only at run time, but it is in preparation.
6274 6283
627519.1.3. User interaction 628419.1.3. User interaction
6276 6285
6277Occasionally, packages require interaction from the user, and this can be in a 6286Occasionally, packages require interaction from the user, and this can be in a
6278number of ways: 6287number of ways:
6279 6288
6280 * When fetching the distfiles, some packages require user interaction such as 6289 * When fetching the distfiles, some packages require user interaction such as
6281 entering username/password or accepting a license on a web page. 6290 entering username/password or accepting a license on a web page.
6282 6291
6283 * When extracting the distfiles, some packages may ask for passwords. 6292 * When extracting the distfiles, some packages may ask for passwords.
6284 6293
6285 * help to configure the package before it is built 6294 * help to configure the package before it is built
6286 6295
6287 * help during the build process 6296 * help during the build process
6288 6297
6289 * help during the installation of a package 6298 * help during the installation of a package
6290 6299
6291The INTERACTIVE_STAGE definition is provided to notify the pkgsrc mechanism of 6300The INTERACTIVE_STAGE definition is provided to notify the pkgsrc mechanism of
6292an interactive stage which will be needed, and this should be set in the 6301an interactive stage which will be needed, and this should be set in the
6293package's Makefile, e.g.: 6302package's Makefile, e.g.:
6294 6303
6295INTERACTIVE_STAGE= build 6304INTERACTIVE_STAGE= build
6296 6305
6297 6306
6298Multiple interactive stages can be specified: 6307Multiple interactive stages can be specified:
6299 6308
6300INTERACTIVE_STAGE= configure install 6309INTERACTIVE_STAGE= configure install
6301 6310
6302 6311
6303The user can then decide to skip this package by setting the BATCH variable. 6312The user can then decide to skip this package by setting the BATCH variable.
6304 6313
630519.1.4. Handling licenses 631419.1.4. Handling licenses
6306 6315
6307Authors of software can choose the licence under which software can be copied. 6316Authors of software can choose the licence under which software can be copied.
6308This is due to copyright law, and reasons for license choices are outside the 6317This is due to copyright law, and reasons for license choices are outside the
6309scope of pkgsrc. The pkgsrc system recognizes that there are a number of 6318scope of pkgsrc. The pkgsrc system recognizes that there are a number of
6310licenses which some users may find objectionable or difficult or impossible to 6319licenses which some users may find objectionable or difficult or impossible to
6311comply with. The Free Software Foundation has declared some licenses "Free", 6320comply with. The Free Software Foundation has declared some licenses "Free",
6312and the Open Source Initiative has a definition of "Open Source". The pkgsrc 6321and the Open Source Initiative has a definition of "Open Source". The pkgsrc
6313system, as a policy choice, does not label packages which have licenses that 6322system, as a policy choice, does not label packages which have licenses that
6314are Free or Open Source. However, packages without a license meeting either of 6323are Free or Open Source. However, packages without a license meeting either of
6315those tests are labeled with a license tag denoting the license. Note that a 6324those tests are labeled with a license tag denoting the license. Note that a
6316package with no license to copy trivially does not meet either the Free or Open 6325package with no license to copy trivially does not meet either the Free or Open
6317Source test. 6326Source test.
6318 6327
6319For packages which are not Free or Open Source, pkgsrc will not build the 6328For packages which are not Free or Open Source, pkgsrc will not build the
6320package unless the user has indicated to pkgsrc that packages with that 6329package unless the user has indicated to pkgsrc that packages with that
6321particular license may be built. Note that this documentation avoids the term 6330particular license may be built. Note that this documentation avoids the term
6322"accepted the license". The pkgsrc system is merely providing a mechanism to 6331"accepted the license". The pkgsrc system is merely providing a mechanism to
6323avoid accidentally building a package with a non-free license; judgement and 6332avoid accidentally building a package with a non-free license; judgement and
6324responsibility remain with the user. (Installation of binary packages are not 6333responsibility remain with the user. (Installation of binary packages are not
6325currently subject to this mechanism; this is a bug.) 6334currently subject to this mechanism; this is a bug.)
6326 6335
6327One might want to only install packages with a BSD license, or the GPL, and not 6336One might want to only install packages with a BSD license, or the GPL, and not
6328the other. The free licenses are added to the default ACCEPTABLE_LICENSES 6337the other. The free licenses are added to the default ACCEPTABLE_LICENSES
6329variable. The user can override the default by setting the ACCEPTABLE_LICENSES 6338variable. The user can override the default by setting the ACCEPTABLE_LICENSES
6330variable with "=" instead of "+=". The licenses accepted by default are: 6339variable with "=" instead of "+=". The licenses accepted by default are:
6331 6340
6332 apache-1.1 apache-2.0 6341 apache-1.1 apache-2.0
6333 arphic-public 6342 arphic-public
6334 artistic artistic-2.0 6343 artistic artistic-2.0
6335 boost-license 6344 boost-license
6336 cc-by-sa-v3.0 6345 cc-by-sa-v3.0
6337 cc0-1.0-universal 6346 cc0-1.0-universal
6338 cddl-1.0 6347 cddl-1.0
6339 cpl-1.0 6348 cpl-1.0
6340 epl-v1.0 6349 epl-v1.0
6341 gnu-fdl-v1.1 gnu-fdl-v1.2 gnu-fdl-v1.3 6350 gnu-fdl-v1.1 gnu-fdl-v1.2 gnu-fdl-v1.3
6342 gnu-gpl-v1 6351 gnu-gpl-v1
6343 gnu-gpl-v2 gnu-lgpl-v2 gnu-lgpl-v2.1 6352 gnu-gpl-v2 gnu-lgpl-v2 gnu-lgpl-v2.1
6344 gnu-gpl-v3 gnu-lgpl-v3 6353 gnu-gpl-v3 gnu-lgpl-v3
6345 ibm-public-license-1.0 6354 ibm-public-license-1.0
6346 ipafont 6355 ipafont
6347 isc 6356 isc
6348 lppl-1.3c 6357 lppl-1.3c
6349 lucent 6358 lucent
6350 miros 6359 miros
6351 mit 6360 mit
6352 mpl-1.0 mpl-1.1 mpl-2.0 6361 mpl-1.0 mpl-1.1 mpl-2.0
6353 mplusfont 6362 mplusfont
6354 ofl-v1.0 ofl-v1.1 6363 ofl-v1.0 ofl-v1.1
6355 original-bsd modified-bsd 2-clause-bsd 6364 original-bsd modified-bsd 2-clause-bsd
6356 php 6365 php
6357 png-license 6366 png-license
6358 postgresql-license 6367 postgresql-license
6359 public-domain 6368 public-domain
6360 python-software-foundation 6369 python-software-foundation
6361 qpl-v1.0 6370 qpl-v1.0
6362 sgi-free-software-b-v2.0 6371 sgi-free-software-b-v2.0
6363 sleepycat-public 6372 sleepycat-public
6364 unlicense 6373 unlicense
6365 x11 6374 x11
6366 zlib 6375 zlib
6367 zpl 6376 zpl
6368 6377
6369 6378
6370The license tag mechanism is intended to address copyright-related issues 6379The license tag mechanism is intended to address copyright-related issues
6371surrounding building, installing and using a package, and not to address 6380surrounding building, installing and using a package, and not to address
6372redistribution issues (see RESTRICTED and NO_SRC_ON_FTP, etc.). Packages with 6381redistribution issues (see RESTRICTED and NO_SRC_ON_FTP, etc.). Packages with
6373redistribution restrictions should set these tags. 6382redistribution restrictions should set these tags.
6374 6383
6375Denoting that a package may be copied according to a particular license is done 6384Denoting that a package may be copied according to a particular license is done
6376by placing the license in pkgsrc/licenses and setting the LICENSE variable to a 6385by placing the license in pkgsrc/licenses and setting the LICENSE variable to a
6377string identifying the license, e.g. in graphics/xv: 6386string identifying the license, e.g. in graphics/xv:
6378 6387
6379LICENSE= xv-license 6388LICENSE= xv-license
6380 6389
6381 6390
6382When trying to build, the user will get a notice that the package is covered by 6391When trying to build, the user will get a notice that the package is covered by
6383a license which has not been placed in the ACCEPTABLE_LICENSES variable: 6392a license which has not been placed in the ACCEPTABLE_LICENSES variable:
6384 6393
6385% make 6394% make
6386===> xv-3.10anb9 has an unacceptable license: xv-license. 6395===> xv-3.10anb9 has an unacceptable license: xv-license.
6387===> To view the license, enter "/usr/bin/make show-license". 6396===> To view the license, enter "/usr/bin/make show-license".
6388===> To indicate acceptance, add this line to your /etc/mk.conf: 6397===> To indicate acceptance, add this line to your /etc/mk.conf:
6389===> ACCEPTABLE_LICENSES+=xv-license 6398===> ACCEPTABLE_LICENSES+=xv-license
6390*** Error code 1 6399*** Error code 1
6391 6400
6392 6401
6393The license can be viewed with make show-license, and if the user so chooses, 6402The license can be viewed with make show-license, and if the user so chooses,
6394the line printed above can be added to mk.conf to convey to pkgsrc that it 6403the line printed above can be added to mk.conf to convey to pkgsrc that it
6395should not in the future fail because of that license: 6404should not in the future fail because of that license:
6396 6405
6397ACCEPTABLE_LICENSES+=xv-license 6406ACCEPTABLE_LICENSES+=xv-license
6398 6407
6399 6408
6400When adding a package with a new license, the following steps are required: 6409When adding a package with a new license, the following steps are required:
6401 6410
6402 1. Check if the file can avoid the -license filename tag as described above by 6411 1. Check if the file can avoid the -license filename tag as described above by
6403 referencing Various Licenses and Comments about Them and Licenses by Name | 6412 referencing Various Licenses and Comments about Them and Licenses by Name |
6404 Open Source Initiative. If this is the case, additionally add the license 6413 Open Source Initiative. If this is the case, additionally add the license
6405 filename to: 6414 filename to:
6406 6415
6407 + DEFAULT_ACCEPTABLE_LICENSES in pkgsrc/mk/license.mk 6416 + DEFAULT_ACCEPTABLE_LICENSES in pkgsrc/mk/license.mk
6408 6417
6409 + default_acceptable_licenses in pkgsrc/pkgtools/pkg_install/files/lib/ 6418 + default_acceptable_licenses in pkgsrc/pkgtools/pkg_install/files/lib/
6410 license.c 6419 license.c
6411 6420
6412 + the ACCEPTABLE_LICENSES list in pkgsrc/doc/guide/files/fixes.xml 6421 + the ACCEPTABLE_LICENSES list in pkgsrc/doc/guide/files/fixes.xml
6413 6422
6414 with the proper syntax as demonstrated in those files, respectively. 6423 with the proper syntax as demonstrated in those files, respectively.
6415 6424
6416 2. The license text should be added to pkgsrc/licenses for displaying. A list 6425 2. The license text should be added to pkgsrc/licenses for displaying. A list
6417 of known licenses can be seen in this directory. 6426 of known licenses can be seen in this directory.
6418 6427
6419When the license changes (in a way other than formatting), please make sure 6428When the license changes (in a way other than formatting), please make sure
6420that the new license has a different name (e.g., append the version number if 6429that the new license has a different name (e.g., append the version number if
6421it exists, or the date). Just because a user told pkgsrc to build programs 6430it exists, or the date). Just because a user told pkgsrc to build programs
6422under a previous version of a license does not mean that pkgsrc should build 6431under a previous version of a license does not mean that pkgsrc should build
6423programs under the new licenses. The higher-level point is that pkgsrc does not 6432programs under the new licenses. The higher-level point is that pkgsrc does not
6424evaluate licenses for reasonableness; the only test is a mechanistic test of 6433evaluate licenses for reasonableness; the only test is a mechanistic test of
6425whether a particular text has been approved by either of two bodies. 6434whether a particular text has been approved by either of two bodies.
6426 6435
6427The use of LICENSE=shareware, LICENSE=no-commercial-use, and similar language 6436The use of LICENSE=shareware, LICENSE=no-commercial-use, and similar language
6428is deprecated because it does not crisply refer to a particular license text. 6437is deprecated because it does not crisply refer to a particular license text.
6429Another problem with such usage is that it does not enable a user to tell 6438Another problem with such usage is that it does not enable a user to tell
6430pkgsrc to proceed for a single package without also telling pkgsrc to proceed 6439pkgsrc to proceed for a single package without also telling pkgsrc to proceed
6431for all packages with that tag. 6440for all packages with that tag.
6432 6441
643319.1.5. Restricted packages 644219.1.5. Restricted packages
6434 6443
6435Some licenses restrict how software may be re-distributed. Because a license 6444Some licenses restrict how software may be re-distributed. Because a license
6436tag is required unless the package is Free or Open Source, all packages with 6445tag is required unless the package is Free or Open Source, all packages with
6437restrictions should have license tags. By declaring the restrictions, package 6446restrictions should have license tags. By declaring the restrictions, package
6438tools can automatically refrain from e.g. placing binary packages on FTP sites. 6447tools can automatically refrain from e.g. placing binary packages on FTP sites.
6439 6448
6440There are four restrictions that may be encoded, which are the cross product of 6449There are four restrictions that may be encoded, which are the cross product of
6441sources (distfiles) and binaries not being placed on FTP sites and CD-ROMs. 6450sources (distfiles) and binaries not being placed on FTP sites and CD-ROMs.
6442Because this is rarely the exact language in any license, and because non-Free 6451Because this is rarely the exact language in any license, and because non-Free
6443licenses tend to be different from each other, pkgsrc adopts a definition of 6452licenses tend to be different from each other, pkgsrc adopts a definition of
6444FTP and CD-ROM. Pkgsrc uses "FTP" to mean that the source or binary file should 6453FTP and CD-ROM. Pkgsrc uses "FTP" to mean that the source or binary file should
6445not be made available over the Internet at no charge. Pkgsrc uses "CD-ROM" to 6454not be made available over the Internet at no charge. Pkgsrc uses "CD-ROM" to
6446mean that the source or binary may not be made available on some kind of media, 6455mean that the source or binary may not be made available on some kind of media,
6447together with other source and binary packages, and which is sold for a 6456together with other source and binary packages, and which is sold for a
6448distribution charge. 6457distribution charge.
6449 6458
6450In order to encode these restrictions, the package system defines five make 6459In order to encode these restrictions, the package system defines five make
6451variables that can be set to note these restrictions: 6460variables that can be set to note these restrictions:
6452 6461
6453 * RESTRICTED 6462 * RESTRICTED
6454 6463
6455 This variable should be set whenever a restriction exists (regardless of 6464 This variable should be set whenever a restriction exists (regardless of
6456 its kind). Set this variable to a string containing the reason for the 6465 its kind). Set this variable to a string containing the reason for the
6457 restriction. It should be understood that those wanting to understand the 6466 restriction. It should be understood that those wanting to understand the
6458 restriction will have to read the license, and perhaps seek advice of 6467 restriction will have to read the license, and perhaps seek advice of
6459 counsel. 6468 counsel.
6460 6469
6461 * NO_BIN_ON_CDROM 6470 * NO_BIN_ON_CDROM
6462 6471
6463 Binaries may not be placed on CD-ROM containing other binary packages, for 6472 Binaries may not be placed on CD-ROM containing other binary packages, for
6464 which a distribution charge may be made. In this case, set this variable to 6473 which a distribution charge may be made. In this case, set this variable to
6465 ${RESTRICTED}. 6474 ${RESTRICTED}.
6466 6475
6467 * NO_BIN_ON_FTP 6476 * NO_BIN_ON_FTP
6468 6477
6469 Binaries may not made available on the Internet without charge. In this 6478 Binaries may not made available on the Internet without charge. In this
6470 case, set this variable to ${RESTRICTED}. If this variable is set, binary 6479 case, set this variable to ${RESTRICTED}. If this variable is set, binary
6471 packages will not be included on ftp.NetBSD.org. 6480 packages will not be included on ftp.NetBSD.org.
6472 6481
6473 * NO_SRC_ON_CDROM 6482 * NO_SRC_ON_CDROM
6474 6483
6475 Distfiles may not be placed on CD-ROM, together with other distfiles, for 6484 Distfiles may not be placed on CD-ROM, together with other distfiles, for
6476 which a fee may be charged. In this case, set this variable to $ 6485 which a fee may be charged. In this case, set this variable to $
6477 {RESTRICTED}. 6486 {RESTRICTED}.
6478 6487
6479 * NO_SRC_ON_FTP 6488 * NO_SRC_ON_FTP
6480 6489
6481 Distfiles may not made available via FTP at no charge. In this case, set 6490 Distfiles may not made available via FTP at no charge. In this case, set
6482 this variable to ${RESTRICTED}. If this variable is set, the distfile(s) 6491 this variable to ${RESTRICTED}. If this variable is set, the distfile(s)
6483 will not be mirrored on ftp.NetBSD.org. 6492 will not be mirrored on ftp.NetBSD.org.
6484 6493
6485Please note that packages will to be removed from pkgsrc when the distfiles are 6494Please note that packages will to be removed from pkgsrc when the distfiles are
6486not distributable and cannot be obtained for a period of one full quarter 6495not distributable and cannot be obtained for a period of one full quarter
6487branch. Packages with manual / interactive fetch must have a maintainer and it 6496branch. Packages with manual / interactive fetch must have a maintainer and it
6488is his/her responsibility to ensure this. 6497is his/her responsibility to ensure this.
6489 6498
649019.1.6. Handling dependencies 649919.1.6. Handling dependencies
6491 6500
6492Your package may depend on some other package being present - and there are 6501Your package may depend on some other package being present - and there are
6493various ways of expressing this dependency. pkgsrc supports the BUILD_DEPENDS 6502various ways of expressing this dependency. pkgsrc supports the BUILD_DEPENDS
6494and DEPENDS definitions, the USE_TOOLS definition, as well as dependencies via 6503and DEPENDS definitions, the USE_TOOLS definition, as well as dependencies via
6495buildlink3.mk, which is the preferred way to handle dependencies, and which 6504buildlink3.mk, which is the preferred way to handle dependencies, and which
6496uses the variables named above. See Chapter 14, Buildlink methodology for more 6505uses the variables named above. See Chapter 14, Buildlink methodology for more
6497information. 6506information.
6498 6507
6499The basic difference between the two variables is as follows: The DEPENDS 6508The basic difference between the two variables is as follows: The DEPENDS
6500definition registers that pre-requisite in the binary package so it will be 6509definition registers that pre-requisite in the binary package so it will be
6501pulled in when the binary package is later installed, whilst the BUILD_DEPENDS 6510pulled in when the binary package is later installed, whilst the BUILD_DEPENDS
6502definition does not, marking a dependency that is only needed for building the 6511definition does not, marking a dependency that is only needed for building the
6503package. 6512package.
6504 6513
6505This means that if you only need a package present whilst you are building, it 6514This means that if you only need a package present whilst you are building, it
6506should be noted as a BUILD_DEPENDS. 6515should be noted as a BUILD_DEPENDS.
6507 6516
6508The format for a BUILD_DEPENDS and a DEPENDS definition is: 6517The format for a BUILD_DEPENDS and a DEPENDS definition is:
6509 6518
6510<pre-req-package-name>:../../<category>/<pre-req-package> 6519<pre-req-package-name>:../../<category>/<pre-req-package>
6511 6520
6512 6521
6513Please note that the "pre-req-package-name" may include any of the wildcard 6522Please note that the "pre-req-package-name" may include any of the wildcard
6514version numbers recognized by pkg_info(1). 6523version numbers recognized by pkg_info(1).
6515 6524
6516 1. If your package needs another package's binaries or libraries to build and 6525 1. If your package needs another package's binaries or libraries to build and
6517 run, and if that package has a buildlink3.mk file available, use it: 6526 run, and if that package has a buildlink3.mk file available, use it:
6518 6527
6519 .include "../../graphics/jpeg/buildlink3.mk" 6528 .include "../../graphics/jpeg/buildlink3.mk"
6520 6529
6521 6530
6522 2. If your package needs another package's binaries or libraries only for 6531 2. If your package needs another package's binaries or libraries only for
6523 building, and if that package has a buildlink3.mk file available, use it: 6532 building, and if that package has a buildlink3.mk file available, use it:
6524 6533
6525 .include "../../graphics/jpeg/buildlink3.mk" 6534 .include "../../graphics/jpeg/buildlink3.mk"
6526 6535
6527 6536
6528 but set BUILDLINK_DEPMETHOD.jpeg?=build to make it a build dependency only. 6537 but set BUILDLINK_DEPMETHOD.jpeg?=build to make it a build dependency only.
6529 This case is rather rare. 6538 This case is rather rare.
6530 6539
6531 3. If your package needs binaries from another package to build, use the 6540 3. If your package needs binaries from another package to build, use the
6532 BUILD_DEPENDS definition: 6541 BUILD_DEPENDS definition:
6533 6542
6534 BUILD_DEPENDS+= scons-[0-9]*:../../devel/scons 6543 BUILD_DEPENDS+= scons-[0-9]*:../../devel/scons
6535 6544
6536 6545
6537 4. If your package needs a library with which to link and there is no 6546 4. If your package needs a library with which to link and there is no
6538 buildlink3.mk file available, create one. Using DEPENDS won't be sufficient 6547 buildlink3.mk file available, create one. Using DEPENDS won't be sufficient
6539 because the include files and libraries will be hidden from the compiler. 6548 because the include files and libraries will be hidden from the compiler.
6540 6549
6541 5. If your package needs some executable to be able to run correctly and if 6550 5. If your package needs some executable to be able to run correctly and if
6542 there's no buildlink3.mk file, this is specified using the DEPENDS 6551 there's no buildlink3.mk file, this is specified using the DEPENDS
6543 variable. The print/lyx package needs to be able to execute the latex 6552 variable. The print/lyx package needs to be able to execute the latex
6544 binary from the teTeX package when it runs, and that is specified: 6553 binary from the teTeX package when it runs, and that is specified:
6545 6554
6546 DEPENDS+= teTeX-[0-9]*:../../print/teTeX 6555 DEPENDS+= teTeX-[0-9]*:../../print/teTeX
6547 6556
6548 6557
6549 6. You can use wildcards in package dependencies. Note that such wildcard 6558 6. You can use wildcards in package dependencies. Note that such wildcard
6550 dependencies are retained when creating binary packages. The dependency is 6559 dependencies are retained when creating binary packages. The dependency is
6551 checked when installing the binary package and any package which matches 6560 checked when installing the binary package and any package which matches
6552 the pattern will be used. Wildcard dependencies should be used with care. 6561 the pattern will be used. Wildcard dependencies should be used with care.
6553 6562
6554 The "-[0-9]*" should be used instead of "-*" to avoid potentially ambiguous 6563 The "-[0-9]*" should be used instead of "-*" to avoid potentially ambiguous
6555 matches such as "tk-postgresql" matching a "tk-*" DEPENDS. 6564 matches such as "tk-postgresql" matching a "tk-*" DEPENDS.
6556 6565
6557 Wildcards can also be used to specify that a package will only build 6566 Wildcards can also be used to specify that a package will only build
6558 against a certain minimum version of a pre-requisite: 6567 against a certain minimum version of a pre-requisite:
6559 6568
6560 DEPENDS+= ImageMagick>=6.0:../../graphics/ImageMagick 6569 DEPENDS+= ImageMagick>=6.0:../../graphics/ImageMagick
6561 6570
6562 6571
6563 This means that the package will build using version 6.0 of ImageMagick or 6572 This means that the package will build using version 6.0 of ImageMagick or
6564 newer. Such a dependency may be warranted if, for example, the command line 6573 newer. Such a dependency may be warranted if, for example, the command line
6565 options of an executable have changed. 6574 options of an executable have changed.
6566 6575
6567 If you need to depend on minimum versions of libraries, see the buildlink 6576 If you need to depend on minimum versions of libraries, see the buildlink
6568 section of the pkgsrc guide. 6577 section of the pkgsrc guide.
6569 6578
6570 For security fixes, please update the package vulnerabilities file. See 6579 For security fixes, please update the package vulnerabilities file. See
6571 Section 19.1.10, "Handling packages with security problems" for more 6580 Section 19.1.10, "Handling packages with security problems" for more
6572 information. 6581 information.
6573 6582
6574 7. If the package depends on either one of two (or more) packages, specify the 6583 7. If the package depends on either one of two (or more) packages, specify the
6575 "pre-req-package-name" as a comma-separated list between curly braces. 6584 "pre-req-package-name" as a comma-separated list between curly braces.
6576 6585
6577 As an example, take a package that depends on the Perl "version" module, 6586 As an example, take a package that depends on the Perl "version" module,
6578 which has been part of Perl itself since version 5.10.0. This either/or 6587 which has been part of Perl itself since version 5.10.0. This either/or
6579 dependency is expressed as: 6588 dependency is expressed as:
6580 6589
6581 DEPENDS+= {perl>=5.10.0,p5-version-[0-9]*}:../../devel/p5-version 6590 DEPENDS+= {perl>=5.10.0,p5-version-[0-9]*}:../../devel/p5-version
6582 6591
6583 6592
6584If your package needs files from another package to build, add the relevant 6593If your package needs files from another package to build, add the relevant
6585distribution files to DISTFILES, so they will be extracted automatically. See 6594distribution files to DISTFILES, so they will be extracted automatically. See
6586the print/ghostscript package for an example. (It relies on the jpeg sources 6595the print/ghostscript package for an example. (It relies on the jpeg sources
6587being present in source form during the build.) 6596being present in source form during the build.)
6588 6597
658919.1.7. Handling conflicts with other packages 659819.1.7. Handling conflicts with other packages
6590 6599
6591Your package may conflict with other packages a user might already have 6600Your package may conflict with other packages a user might already have
6592installed on his system, e.g. if your package installs the same set of files as 6601installed on his system, e.g. if your package installs the same set of files as
6593another package in the pkgsrc tree or has the same PKGNAME. 6602another package in the pkgsrc tree or has the same PKGNAME.
6594 6603
6595These cases are handled automatically by the packaging tools at package 6604These cases are handled automatically by the packaging tools at package
6596installation time and do not need to be handled manually. 6605installation time and do not need to be handled manually.
6597 6606
6598In case the conflicts can not be recognized automatically (e.g., packages using 6607In case the conflicts can not be recognized automatically (e.g., packages using
6599the same config file location but no other shared files), you can set CONFLICTS 6608the same config file location but no other shared files), you can set CONFLICTS
6600to a space-separated list of packages (including version string) your package 6609to a space-separated list of packages (including version string) your package
6601conflicts with. 6610conflicts with.
6602 6611
6603For example, if both foo/bar and foo/baz use the same config file, you would 6612For example, if both foo/bar and foo/baz use the same config file, you would
6604set in foo/bar/Makefile: 6613set in foo/bar/Makefile:
6605 6614
6606CONFLICTS= baz-[0-9]* 6615CONFLICTS= baz-[0-9]*
6607 6616
6608 6617
6609and in pkgsrc/foo/baz/Makefile: 6618and in pkgsrc/foo/baz/Makefile:
6610 6619
6611CONFLICTS= bar-[0-9]* 6620CONFLICTS= bar-[0-9]*
6612 6621
6613 6622
661419.1.8. Packages that cannot or should not be built 662319.1.8. Packages that cannot or should not be built
6615 6624
6616There are several reasons why a package might be instructed to not build under 6625There are several reasons why a package might be instructed to not build under
6617certain circumstances. If the package builds and runs on most platforms, the 6626certain circumstances. If the package builds and runs on most platforms, the
6618exceptions should be noted with NOT_FOR_PLATFORM. If the package builds and 6627exceptions should be noted with BROKEN_ON_PLATFORM. If the package builds and
6619runs on a small handful of platforms, set ONLY_FOR_PLATFORM instead. Both 6628runs on a small handful of platforms, set BROKEN_EXCEPT_ON_PLATFORM instead.
6620ONLY_FOR_PLATFORM and NOT_FOR_PLATFORM are OS triples (OS-version-platform) 6629Both BROKEN_ON_PLATFORM and BROKEN_EXCEPT_ON_PLATFORM are OS triples
6621that can use glob-style wildcards. 6630(OS-version-platform) that can use glob-style wildcards.
 6631
 6632If a package is not appropriate for some platforms (as oopposed to merely
 6633broken), a different set of variables should be used as this affects failure
 6634reporting and statistics. If the package is appropriate for most platforms, the
 6635exceptions should be noted with NOT_FOR_PLATFORM. If the package is appropriate
 6636for only a small handful of platforms (often exactly one), set
 6637ONLY_FOR_PLATFORM instead. Both ONLY_FOR_PLATFORM and NOT_FOR_PLATFORM are OS
 6638triples (OS-version-platform) that can use glob-style wildcards.
6622 6639
6623Some packages are tightly bound to a specific version of an operating system, 6640Some packages are tightly bound to a specific version of an operating system,
6624e.g. LKMs or sysutils/lsof. Such binary packages are not backwards compatible 6641e.g. LKMs or sysutils/lsof. Such binary packages are not backwards compatible
6625with other versions of the OS, and should be uploaded to a version specific 6642with other versions of the OS, and should be uploaded to a version specific
6626directory on the FTP server. Mark these packages by setting OSVERSION_SPECIFIC 6643directory on the FTP server. Mark these packages by setting OSVERSION_SPECIFIC
6627to "yes". This variable is not currently used by any of the package system 6644to "yes". This variable is not currently used by any of the package system
6628internals, but may be used in the future. 6645internals, but may be used in the future.
6629 6646
6630If the package should be skipped (for example, because it provides 6647If the package should be skipped (for example, because it provides
6631functionality already provided by the system), set PKG_SKIP_REASON to a 6648functionality already provided by the system), set PKG_SKIP_REASON to a
6632descriptive message. If the package should fail because some preconditions are 6649descriptive message. If the package should fail because some preconditions are
6633not met, set PKG_FAIL_REASON to a descriptive message. 6650not met, set PKG_FAIL_REASON to a descriptive message.
6634 6651
663519.1.9. Packages which should not be deleted, once installed 665219.1.9. Packages which should not be deleted, once installed
6636 6653
6637To ensure that a package may not be deleted, once it has been installed, the 6654To ensure that a package may not be deleted, once it has been installed, the
6638PKG_PRESERVE definition should be set in the package Makefile. This will be 6655PKG_PRESERVE definition should be set in the package Makefile. This will be
6639carried into any binary package that is made from this pkgsrc entry. A " 6656carried into any binary package that is made from this pkgsrc entry. A "
6640preserved" package will not be deleted using pkg_delete(1) unless the "-f" 6657preserved" package will not be deleted using pkg_delete(1) unless the "-f"
6641option is used. 6658option is used.
6642 6659
664319.1.10. Handling packages with security problems 666019.1.10. Handling packages with security problems
6644 6661
6645When a vulnerability is found, this should be noted in localsrc/security/ 6662When a vulnerability is found, this should be noted in localsrc/security/
6646advisories/pkg-vulnerabilities, and after committing that file, ask 6663advisories/pkg-vulnerabilities, and after committing that file, ask
6647pkgsrc-security@NetBSD.org to update the file on ftp.NetBSD.org. 6664pkgsrc-security@NetBSD.org to update the file on ftp.NetBSD.org.
6648 6665
6649After fixing the vulnerability by a patch, its PKGREVISION should be increased 6666After fixing the vulnerability by a patch, its PKGREVISION should be increased
6650(this is of course not necessary if the problem is fixed by using a newer 6667(this is of course not necessary if the problem is fixed by using a newer
6651release of the software), and the pattern in the pkg-vulnerabilities file must 6668release of the software), and the pattern in the pkg-vulnerabilities file must
6652be updated. 6669be updated.
6653 6670
6654Also, if the fix should be applied to the stable pkgsrc branch, be sure to 6671Also, if the fix should be applied to the stable pkgsrc branch, be sure to
6655submit a pullup request! 6672submit a pullup request!
6656 6673
6657Binary packages already on ftp.NetBSD.org will be handled semi-automatically by 6674Binary packages already on ftp.NetBSD.org will be handled semi-automatically by
6658a weekly cron job. 6675a weekly cron job.
6659 6676
666019.1.11. How to handle incrementing versions when fixing an existing package 667719.1.11. How to handle incrementing versions when fixing an existing package
6661 6678
6662When making fixes to an existing package it can be useful to change the version 6679When making fixes to an existing package it can be useful to change the version
6663number in PKGNAME. To avoid conflicting with future versions by the original 6680number in PKGNAME. To avoid conflicting with future versions by the original
6664author, a "nb1", "nb2", ... suffix can be used on package versions by setting 6681author, a "nb1", "nb2", ... suffix can be used on package versions by setting
6665PKGREVISION=1 (2, ...). The "nb" is treated like a "." by the package tools. 6682PKGREVISION=1 (2, ...). The "nb" is treated like a "." by the package tools.
6666e.g. 6683e.g.
6667 6684
6668DISTNAME= foo-17.42 6685DISTNAME= foo-17.42
6669PKGREVISION= 9 6686PKGREVISION= 9
6670 6687
6671 6688
6672will result in a PKGNAME of "foo-17.42nb9". If you want to use the original 6689will result in a PKGNAME of "foo-17.42nb9". If you want to use the original
6673value of PKGNAME without the "nbX" suffix, e.g. for setting DIST_SUBDIR, use 6690value of PKGNAME without the "nbX" suffix, e.g. for setting DIST_SUBDIR, use
6674PKGNAME_NOREV. 6691PKGNAME_NOREV.
6675 6692
6676When a new release of the package is released, the PKGREVISION should be 6693When a new release of the package is released, the PKGREVISION should be
6677removed, e.g. on a new minor release of the above package, things should be 6694removed, e.g. on a new minor release of the above package, things should be
6678like: 6695like:
6679 6696
6680DISTNAME= foo-17.43 6697DISTNAME= foo-17.43
6681 6698
6682 6699
6683PKGREVISION should be incremented for any non-trivial change in the resulting 6700PKGREVISION should be incremented for any non-trivial change in the resulting
6684binary package. Without a PKGREVISION bump, someone with the previous version 6701binary package. Without a PKGREVISION bump, someone with the previous version
6685installed has no way of knowing that their package is out of date. Thus, 6702installed has no way of knowing that their package is out of date. Thus,
6686changes without increasing PKGREVISION are essentially labeled "this is so 6703changes without increasing PKGREVISION are essentially labeled "this is so
6687trivial that no reasonable person would want to upgrade", and this is the rough 6704trivial that no reasonable person would want to upgrade", and this is the rough
6688test for when increasing PKGREVISION is appropriate. Examples of changes that 6705test for when increasing PKGREVISION is appropriate. Examples of changes that
6689do not merit increasing PKGREVISION are: 6706do not merit increasing PKGREVISION are:
6690 6707
6691 * Changing HOMEPAGE, MAINTAINER, OWNER, or comments in Makefile. 6708 * Changing HOMEPAGE, MAINTAINER, OWNER, or comments in Makefile.
6692 6709
6693 * Changing build variables if the resulting binary package is the same. 6710 * Changing build variables if the resulting binary package is the same.
6694 6711
6695 * Changing DESCR. 6712 * Changing DESCR.
6696 6713
6697 * Adding PKG_OPTIONS if the default options don't change. 6714 * Adding PKG_OPTIONS if the default options don't change.
6698 6715
6699Examples of changes that do merit an increase to PKGREVISION include: 6716Examples of changes that do merit an increase to PKGREVISION include:
6700 6717
6701 * Security fixes 6718 * Security fixes
6702 6719
6703 * Changes or additions to a patch file 6720 * Changes or additions to a patch file
6704 6721
6705 * Changes to the PLIST 6722 * Changes to the PLIST
6706 6723
6707 * A dependency is changed or renamed. 6724 * A dependency is changed or renamed.
6708 6725
6709PKGREVISION must also be incremented when dependencies have ABI changes. 6726PKGREVISION must also be incremented when dependencies have ABI changes.
6710 6727
671119.1.12. Substituting variable text in the package files (the SUBST framework) 672819.1.12. Substituting variable text in the package files (the SUBST framework)
6712 6729
6713When you want to replace the same text in multiple files or when the 6730When you want to replace the same text in multiple files or when the
6714replacement text varies, patches alone cannot help. This is where the SUBST 6731replacement text varies, patches alone cannot help. This is where the SUBST
6715framework comes in. It provides an easy-to-use interface for replacing text in 6732framework comes in. It provides an easy-to-use interface for replacing text in
6716files. Example: 6733files. Example:
6717 6734
6718SUBST_CLASSES+= fix-paths 6735SUBST_CLASSES+= fix-paths
6719SUBST_STAGE.fix-paths= pre-configure 6736SUBST_STAGE.fix-paths= pre-configure
6720SUBST_MESSAGE.fix-paths= Fixing absolute paths. 6737SUBST_MESSAGE.fix-paths= Fixing absolute paths.
6721SUBST_FILES.fix-paths= src/*.c 6738SUBST_FILES.fix-paths= src/*.c
6722SUBST_FILES.fix-paths+= scripts/*.sh 6739SUBST_FILES.fix-paths+= scripts/*.sh
6723SUBST_SED.fix-paths= -e 's,"/usr/local,"${PREFIX},g' 6740SUBST_SED.fix-paths= -e 's,"/usr/local,"${PREFIX},g'
6724SUBST_SED.fix-paths+= -e 's,"/var/log,"${VARBASE}/log,g' 6741SUBST_SED.fix-paths+= -e 's,"/var/log,"${VARBASE}/log,g'
6725 6742
6726 6743
6727SUBST_CLASSES is a list of identifiers that are used to identify the different 6744SUBST_CLASSES is a list of identifiers that are used to identify the different
6728SUBST blocks that are defined. The SUBST framework is heavily used by pkgsrc, 6745SUBST blocks that are defined. The SUBST framework is heavily used by pkgsrc,
6729so it is important to always use the += operator with this variable. Otherwise 6746so it is important to always use the += operator with this variable. Otherwise
6730some substitutions may be skipped. 6747some substitutions may be skipped.
6731 6748
6732The remaining variables of each SUBST block are parameterized with the 6749The remaining variables of each SUBST block are parameterized with the
6733identifier from the first line (fix-paths in this case.) They can be seen as 6750identifier from the first line (fix-paths in this case.) They can be seen as
6734parameters to a function call. 6751parameters to a function call.
6735 6752
6736SUBST_STAGE.* specifies the stage at which the replacement will take place. All 6753SUBST_STAGE.* specifies the stage at which the replacement will take place. All
6737combinations of pre-, do- and post- together with a phase name are possible, 6754combinations of pre-, do- and post- together with a phase name are possible,
6738though only few are actually used. Most commonly used are post-patch and 6755though only few are actually used. Most commonly used are post-patch and
6739pre-configure. Of these two, pre-configure should be preferred because then it 6756pre-configure. Of these two, pre-configure should be preferred because then it
6740is possible to run bmake patch and have the state after applying the patches 6757is possible to run bmake patch and have the state after applying the patches
6741but before making any other changes. This is especially useful when you are 6758but before making any other changes. This is especially useful when you are
6742debugging a package in order to create new patches for it. Similarly, 6759debugging a package in order to create new patches for it. Similarly,
6743post-build is preferred over pre-install, because the install phase should 6760post-build is preferred over pre-install, because the install phase should
6744generally be kept as simple as possible. When you use post-build, you have the 6761generally be kept as simple as possible. When you use post-build, you have the
6745same files in the working directory that will be installed later, so you can 6762same files in the working directory that will be installed later, so you can
6746check if the substitution has succeeded. 6763check if the substitution has succeeded.
6747 6764
6748SUBST_MESSAGE.* is an optional text that is printed just before the 6765SUBST_MESSAGE.* is an optional text that is printed just before the
6749substitution is done. 6766substitution is done.
6750 6767
6751SUBST_FILES.* is the list of shell globbing patterns that specifies the files 6768SUBST_FILES.* is the list of shell globbing patterns that specifies the files
6752in which the substitution will take place. The patterns are interpreted 6769in which the substitution will take place. The patterns are interpreted
6753relatively to the WRKSRC directory. 6770relatively to the WRKSRC directory.
6754 6771
6755SUBST_SED.* is a list of arguments to sed(1) that specify the actual 6772SUBST_SED.* is a list of arguments to sed(1) that specify the actual
6756substitution. Every sed command should be prefixed with -e, so that all SUBST 6773substitution. Every sed command should be prefixed with -e, so that all SUBST
6757blocks look uniform. 6774blocks look uniform.
6758 6775
6759There are some more variables, but they are so seldomly used that they are only 6776There are some more variables, but they are so seldomly used that they are only
6760documented in the mk/subst.mk file. 6777documented in the mk/subst.mk file.
6761 6778
676219.2. Fixing problems in the fetch phase 677919.2. Fixing problems in the fetch phase
6763 6780
676419.2.1. Packages whose distfiles aren't available for plain downloading 678119.2.1. Packages whose distfiles aren't available for plain downloading
6765 6782
6766If you need to download from a dynamic URL you can set DYNAMIC_MASTER_SITES and 6783If you need to download from a dynamic URL you can set DYNAMIC_MASTER_SITES and
6767a make fetch will call files/getsite.sh with the name of each file to download 6784a make fetch will call files/getsite.sh with the name of each file to download
6768as an argument, expecting it to output the URL of the directory from which to 6785as an argument, expecting it to output the URL of the directory from which to
6769download it. graphics/ns-cult3d is an example of this usage. 6786download it. graphics/ns-cult3d is an example of this usage.
6770 6787
6771If the download can't be automated, because the user must submit personal 6788If the download can't be automated, because the user must submit personal
6772information to apply for a password, or must pay for the source, or whatever, 6789information to apply for a password, or must pay for the source, or whatever,
6773you can set FETCH_MESSAGE to a list of lines that are displayed to the user 6790you can set FETCH_MESSAGE to a list of lines that are displayed to the user
6774before aborting the build. Example: 6791before aborting the build. Example:
6775 6792
6776FETCH_MESSAGE= "Please download the files" 6793FETCH_MESSAGE= "Please download the files"
6777FETCH_MESSAGE+= " "${DISTFILES:Q} 6794FETCH_MESSAGE+= " "${DISTFILES:Q}
6778FETCH_MESSAGE+= "manually from "${MASTER_SITES:Q}"." 6795FETCH_MESSAGE+= "manually from "${MASTER_SITES:Q}"."
6779 6796
6780 6797
678119.2.2. How to handle modified distfiles with the 'old' name 679819.2.2. How to handle modified distfiles with the 'old' name
6782 6799
6783Sometimes authors of a software package make some modifications after the 6800Sometimes authors of a software package make some modifications after the
6784software was released, and they put up a new distfile without changing the 6801software was released, and they put up a new distfile without changing the
6785package's version number. If a package is already in pkgsrc at that time, the 6802package's version number. If a package is already in pkgsrc at that time, the
6786checksum will no longer match. The contents of the new distfile should be 6803checksum will no longer match. The contents of the new distfile should be
6787compared against the old one before changing anything, to make sure the 6804compared against the old one before changing anything, to make sure the
6788distfile was really updated on purpose, and that no trojan horse or so crept 6805distfile was really updated on purpose, and that no trojan horse or so crept
6789in. Please mention that the distfiles were compared and what was found in your 6806in. Please mention that the distfiles were compared and what was found in your
6790commit message. 6807commit message.
6791 6808
6792Then, the correct way to work around this is to set DIST_SUBDIR to a unique 6809Then, the correct way to work around this is to set DIST_SUBDIR to a unique
6793directory name, usually based on PKGNAME_NOREV. All DISTFILES and PATCHFILES 6810directory name, usually based on PKGNAME_NOREV. All DISTFILES and PATCHFILES
6794for this package will be put in that subdirectory of the local distfiles 6811for this package will be put in that subdirectory of the local distfiles
6795directory. (See Section 19.1.11, "How to handle incrementing versions when 6812directory. (See Section 19.1.11, "How to handle incrementing versions when
6796fixing an existing package" for more details.) In case this happens more often, 6813fixing an existing package" for more details.) In case this happens more often,
6797PKGNAME can be used (thus including the nbX suffix) or a date stamp can be 6814PKGNAME can be used (thus including the nbX suffix) or a date stamp can be
6798appended, like ${PKGNAME_NOREV}-YYYYMMDD. 6815appended, like ${PKGNAME_NOREV}-YYYYMMDD.
6799 6816
6800DIST_SUBDIR is also used when a distfile's name does not contain a version and 6817DIST_SUBDIR is also used when a distfile's name does not contain a version and
6801the distfile is apt to change. In cases where the likelihood of this is very 6818the distfile is apt to change. In cases where the likelihood of this is very
6802small, DIST_SUBDIR might not be required. Additionally, DIST_SUBDIR must not be 6819small, DIST_SUBDIR might not be required. Additionally, DIST_SUBDIR must not be
6803removed unless the distfile name changes, even if a package is being moved or 6820removed unless the distfile name changes, even if a package is being moved or
6804renamed. 6821renamed.
6805 6822
6806Do not forget regenerating the distinfo file after that, since it contains the 6823Do not forget regenerating the distinfo file after that, since it contains the
6807DIST_SUBDIR path in the filenames. Also, increase the PKGREVISION if the 6824DIST_SUBDIR path in the filenames. Also, increase the PKGREVISION if the
6808installed package is different. Furthermore, a mail to the package's authors 6825installed package is different. Furthermore, a mail to the package's authors
6809seems appropriate telling them that changing distfiles after releases without 6826seems appropriate telling them that changing distfiles after releases without
6810changing the file names is not good practice. 6827changing the file names is not good practice.
6811 6828
681219.3. Fixing problems in the configure phase 682919.3. Fixing problems in the configure phase
6813 6830
681419.3.1. Shared libraries - libtool 683119.3.1. Shared libraries - libtool
6815 6832
6816pkgsrc supports many different machines, with different object formats like 6833pkgsrc supports many different machines, with different object formats like
6817a.out and ELF, and varying abilities to do shared library and dynamic loading 6834a.out and ELF, and varying abilities to do shared library and dynamic loading
6818at all. To accompany this, varying commands and options have to be passed to 6835at all. To accompany this, varying commands and options have to be passed to
6819the compiler, linker, etc. to get the Right Thing, which can be pretty annoying 6836the compiler, linker, etc. to get the Right Thing, which can be pretty annoying
6820especially if you don't have all the machines at your hand to test things. The 6837especially if you don't have all the machines at your hand to test things. The
6821devel/libtool pkg can help here, as it just "knows" how to build both static 6838devel/libtool pkg can help here, as it just "knows" how to build both static
6822and dynamic libraries from a set of source files, thus being 6839and dynamic libraries from a set of source files, thus being
6823platform-independent. 6840platform-independent.
6824 6841
6825Here's how to use libtool in a package in seven simple steps: 6842Here's how to use libtool in a package in seven simple steps:
6826 6843
6827 1. Add USE_LIBTOOL=yes to the package Makefile. 6844 1. Add USE_LIBTOOL=yes to the package Makefile.
6828 6845
6829 2. For library objects, use "${LIBTOOL} --mode=compile ${CC}" in place of "$ 6846 2. For library objects, use "${LIBTOOL} --mode=compile ${CC}" in place of "$
6830 {CC}". You could even add it to the definition of CC, if only libraries are 6847 {CC}". You could even add it to the definition of CC, if only libraries are
6831 being built in a given Makefile. This one command will build both PIC and 6848 being built in a given Makefile. This one command will build both PIC and
6832 non-PIC library objects, so you need not have separate shared and 6849 non-PIC library objects, so you need not have separate shared and
6833 non-shared library rules. 6850 non-shared library rules.
6834 6851
6835 3. For the linking of the library, remove any "ar", "ranlib", and "ld 6852 3. For the linking of the library, remove any "ar", "ranlib", and "ld
6836 -Bshareable" commands, and instead use: 6853 -Bshareable" commands, and instead use:
6837 6854
6838 ${LIBTOOL} --mode=link \ 6855 ${LIBTOOL} --mode=link \
6839 ${CC} -o ${.TARGET:.a=.la} \ 6856 ${CC} -o ${.TARGET:.a=.la} \
6840 ${OBJS:.o=.lo} \ 6857 ${OBJS:.o=.lo} \
6841 -rpath ${PREFIX}/lib \ 6858 -rpath ${PREFIX}/lib \
6842 -version-info major:minor 6859 -version-info major:minor
6843 6860
6844 6861
6845 Note that the library is changed to have a .la extension, and the objects 6862 Note that the library is changed to have a .la extension, and the objects
6846 are changed to have a .lo extension. Change OBJS as necessary. This 6863 are changed to have a .lo extension. Change OBJS as necessary. This
6847 automatically creates all of the .a, .so.major.minor, and ELF symlinks (if 6864 automatically creates all of the .a, .so.major.minor, and ELF symlinks (if
6848 necessary) in the build directory. Be sure to include "-version-info", 6865 necessary) in the build directory. Be sure to include "-version-info",
6849 especially when major and minor are zero, as libtool will otherwise strip 6866 especially when major and minor are zero, as libtool will otherwise strip
6850 off the shared library version. 6867 off the shared library version.
6851 6868
6852 From the libtool manual: 6869 From the libtool manual:
6853 6870
6854 So, libtool library versions are described by three integers: 6871 So, libtool library versions are described by three integers:
6855 6872
6856 CURRENT 6873 CURRENT
6857 The most recent interface number that this library implements. 6874 The most recent interface number that this library implements.
6858 6875
6859 REVISION 6876 REVISION
6860 The implementation number of the CURRENT interface. 6877 The implementation number of the CURRENT interface.
6861 6878
6862 AGE 6879 AGE
6863 The difference between the newest and oldest interfaces that 6880 The difference between the newest and oldest interfaces that
6864 this library implements. In other words, the library implements 6881 this library implements. In other words, the library implements
6865 all the interface numbers in the range from number `CURRENT - 6882 all the interface numbers in the range from number `CURRENT -
6866 AGE' to `CURRENT'. 6883 AGE' to `CURRENT'.
6867 6884
6868 If two libraries have identical CURRENT and AGE numbers, then the 6885 If two libraries have identical CURRENT and AGE numbers, then the
6869 dynamic linker chooses the library with the greater REVISION number. 6886 dynamic linker chooses the library with the greater REVISION number.
6870 6887
6871 6888
6872 The "-release" option will produce different results for a.out and ELF 6889 The "-release" option will produce different results for a.out and ELF
6873 (excluding symlinks) in only one case. An ELF library of the form " 6890 (excluding symlinks) in only one case. An ELF library of the form "
6874 libfoo-release.so.x.y" will have a symlink of "libfoo.so.x.y" on an a.out 6891 libfoo-release.so.x.y" will have a symlink of "libfoo.so.x.y" on an a.out
6875 platform. This is handled automatically. 6892 platform. This is handled automatically.
6876 6893
6877 The "-rpath argument" is the install directory of the library being built. 6894 The "-rpath argument" is the install directory of the library being built.
6878 6895
6879 In the PLIST, include only the .la file, the other files will be added 6896 In the PLIST, include only the .la file, the other files will be added
6880 automatically. 6897 automatically.
6881 6898
6882 4. When linking shared object (.so) files, i.e. files that are loaded via 6899 4. When linking shared object (.so) files, i.e. files that are loaded via
6883 dlopen(3), NOT shared libraries, use "-module -avoid-version" to prevent 6900 dlopen(3), NOT shared libraries, use "-module -avoid-version" to prevent
6884 them getting version tacked on. 6901 them getting version tacked on.
6885 6902
6886 The PLIST file gets the foo.so entry. 6903 The PLIST file gets the foo.so entry.
6887 6904
6888 5. When linking programs that depend on these libraries before they are 6905 5. When linking programs that depend on these libraries before they are
6889 installed, preface the cc(1) or ld(1) line with "${LIBTOOL} --mode=link", 6906 installed, preface the cc(1) or ld(1) line with "${LIBTOOL} --mode=link",
6890 and it will find the correct libraries (static or shared), but please be 6907 and it will find the correct libraries (static or shared), but please be
6891 aware that libtool will not allow you to specify a relative path in -L 6908 aware that libtool will not allow you to specify a relative path in -L
6892 (such as "-L../somelib"), because it expects you to change that argument to 6909 (such as "-L../somelib"), because it expects you to change that argument to
6893 be the .la file. e.g. 6910 be the .la file. e.g.
6894 6911
6895 ${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib 6912 ${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib
6896 6913
6897 6914
6898 should be changed to: 6915 should be changed to:
6899 6916
6900 ${LIBTOOL} --mode=link ${CC} -o someprog ../somelib/somelib.la 6917 ${LIBTOOL} --mode=link ${CC} -o someprog ../somelib/somelib.la
6901 6918
6902 6919
6903 and it will do the right thing with the libraries. 6920 and it will do the right thing with the libraries.
6904 6921
6905 6. When installing libraries, preface the install(1) or cp(1) command with "$ 6922 6. When installing libraries, preface the install(1) or cp(1) command with "$
6906 {LIBTOOL} --mode=install", and change the library name to .la. e.g. 6923 {LIBTOOL} --mode=install", and change the library name to .la. e.g.
6907 6924
6908 ${LIBTOOL} --mode=install ${BSD_INSTALL_LIB} ${SOMELIB:.a=.la} ${PREFIX}/lib 6925 ${LIBTOOL} --mode=install ${BSD_INSTALL_LIB} ${SOMELIB:.a=.la} ${PREFIX}/lib
6909 6926
6910 6927
6911 This will install the static .a, shared library, any needed symlinks, and 6928 This will install the static .a, shared library, any needed symlinks, and
6912 run ldconfig(8). 6929 run ldconfig(8).
6913 6930
6914 7. In your PLIST, include only the .la file (this is a change from previous 6931 7. In your PLIST, include only the .la file (this is a change from previous
6915 behaviour). 6932 behaviour).
6916 6933
691719.3.2. Using libtool on GNU packages that already support libtool 693419.3.2. Using libtool on GNU packages that already support libtool
6918 6935
6919Add USE_LIBTOOL=yes to the package Makefile. This will override the package's 6936Add USE_LIBTOOL=yes to the package Makefile. This will override the package's
6920own libtool in most cases. For older libtool using packages, libtool is made by 6937own libtool in most cases. For older libtool using packages, libtool is made by
6921ltconfig script during the do-configure step; you can check the libtool script 6938ltconfig script during the do-configure step; you can check the libtool script
6922location by doing make configure; find work*/ -name libtool. 6939location by doing make configure; find work*/ -name libtool.
6923 6940
6924LIBTOOL_OVERRIDE specifies which libtool scripts, relative to WRKSRC, to 6941LIBTOOL_OVERRIDE specifies which libtool scripts, relative to WRKSRC, to
6925override. By default, it is set to "libtool */libtool */*/libtool". If this 6942override. By default, it is set to "libtool */libtool */*/libtool". If this
6926does not match the location of the package's libtool script(s), set it as 6943does not match the location of the package's libtool script(s), set it as
6927appropriate. 6944appropriate.
6928 6945
6929If you do not need *.a static libraries built and installed, then use 6946If you do not need *.a static libraries built and installed, then use
6930SHLIBTOOL_OVERRIDE instead. 6947SHLIBTOOL_OVERRIDE instead.
6931 6948
6932If your package makes use of the platform-independent library for loading 6949If your package makes use of the platform-independent library for loading
6933dynamic shared objects, that comes with libtool (libltdl), you should include 6950dynamic shared objects, that comes with libtool (libltdl), you should include
6934devel/libltdl/buildlink3.mk. 6951devel/libltdl/buildlink3.mk.
6935 6952
6936Some packages use libtool incorrectly so that the package may not work or build 6953Some packages use libtool incorrectly so that the package may not work or build
6937in some circumstances. Some of the more common errors are: 6954in some circumstances. Some of the more common errors are:
6938 6955
6939 * The inclusion of a shared object (-module) as a dependent library in an 6956 * The inclusion of a shared object (-module) as a dependent library in an
6940 executable or library. This in itself isn't a problem if one of two things 6957 executable or library. This in itself isn't a problem if one of two things
6941 has been done: 6958 has been done:
6942 6959
6943 1. The shared object is named correctly, i.e. libfoo.la, not foo.la 6960 1. The shared object is named correctly, i.e. libfoo.la, not foo.la
6944 6961
6945 2. The -dlopen option is used when linking an executable. 6962 2. The -dlopen option is used when linking an executable.
6946 6963
6947 * The use of libltdl without the correct calls to initialisation routines. 6964 * The use of libltdl without the correct calls to initialisation routines.
6948 The function lt_dlinit() should be called and the macro 6965 The function lt_dlinit() should be called and the macro
6949 LTDL_SET_PRELOADED_SYMBOLS included in executables. 6966 LTDL_SET_PRELOADED_SYMBOLS included in executables.
6950 6967
695119.3.3. GNU Autoconf/Automake 696819.3.3. GNU Autoconf/Automake
6952 6969
6953If a package needs GNU autoconf or automake to be executed to regenerate the 6970If a package needs GNU autoconf or automake to be executed to regenerate the
6954configure script and Makefile.in makefile templates, then they should be 6971configure script and Makefile.in makefile templates, then they should be
6955executed in a pre-configure target. 6972executed in a pre-configure target.
6956 6973
6957For packages that need only autoconf: 6974For packages that need only autoconf:
6958 6975
6959AUTOCONF_REQD= 2.50 # if default version is not good enough 6976AUTOCONF_REQD= 2.50 # if default version is not good enough
6960USE_TOOLS+= autoconf # use "autoconf213" for autoconf-2.13 6977USE_TOOLS+= autoconf # use "autoconf213" for autoconf-2.13
6961... 6978...
6962 6979
6963pre-configure: 6980pre-configure:
6964 cd ${WRKSRC} && autoconf 6981 cd ${WRKSRC} && autoconf
6965 6982
6966... 6983...
6967 6984
6968 6985
6969and for packages that need automake and autoconf: 6986and for packages that need automake and autoconf:
6970 6987
6971AUTOMAKE_REQD= 1.7.1 # if default version is not good enough 6988AUTOMAKE_REQD= 1.7.1 # if default version is not good enough
6972USE_TOOLS+= automake # use "automake14" for automake-1.4 6989USE_TOOLS+= automake # use "automake14" for automake-1.4
6973... 6990...
6974 6991
6975pre-configure: 6992pre-configure:
6976 set -e; cd ${WRKSRC}; \ 6993 set -e; cd ${WRKSRC}; \
6977 aclocal; autoheader; automake -a --foreign -i; autoconf 6994 aclocal; autoheader; automake -a --foreign -i; autoconf
6978 6995
6979... 6996...
6980 6997
6981 6998
6982Packages which use GNU Automake will almost certainly require GNU Make. 6999Packages which use GNU Automake will almost certainly require GNU Make.
6983 7000
6984There are times when the configure process makes additional changes to the 7001There are times when the configure process makes additional changes to the
6985generated files, which then causes the build process to try to re-execute the 7002generated files, which then causes the build process to try to re-execute the
6986automake sequence. This is prevented by touching various files in the configure 7003automake sequence. This is prevented by touching various files in the configure
6987stage. If this causes problems with your package you can set AUTOMAKE_OVERRIDE= 7004stage. If this causes problems with your package you can set AUTOMAKE_OVERRIDE=
6988NO in the package Makefile. 7005NO in the package Makefile.
6989 7006
699019.4. Programming languages 700719.4. Programming languages
6991 7008
699219.4.1. C, C++, and Fortran 700919.4.1. C, C++, and Fortran
6993 7010
6994Compilers for the C, C++, and Fortran languages comes with the NetBSD base 7011Compilers for the C, C++, and Fortran languages comes with the NetBSD base
6995system. By default, pkgsrc assumes that a package is written in C and will hide 7012system. By default, pkgsrc assumes that a package is written in C and will hide
6996all other compilers (via the wrapper framework, see Chapter 14, Buildlink 7013all other compilers (via the wrapper framework, see Chapter 14, Buildlink
6997methodology). 7014methodology).
6998 7015
6999To declare which language's compiler a package needs, set the USE_LANGUAGES 7016To declare which language's compiler a package needs, set the USE_LANGUAGES
7000variable. Allowed values currently are "c", "c++", and "fortran" (and any 7017variable. Allowed values currently are "c", "c++", and "fortran" (and any
7001combination). The default is "c". Packages using GNU configure scripts, even if 7018combination). The default is "c". Packages using GNU configure scripts, even if
7002written in C++, usually need a C compiler for the configure phase. 7019written in C++, usually need a C compiler for the configure phase.
7003 7020
700419.4.2. Java 702119.4.2. Java
7005 7022
7006If a program is written in Java, use the Java framework in pkgsrc. The package 7023If a program is written in Java, use the Java framework in pkgsrc. The package
7007must include ../../mk/java-vm.mk. This Makefile fragment provides the following 7024must include ../../mk/java-vm.mk. This Makefile fragment provides the following
7008variables: 7025variables:
7009 7026
7010 * USE_JAVA defines if a build dependency on the JDK is added. If USE_JAVA is 7027 * USE_JAVA defines if a build dependency on the JDK is added. If USE_JAVA is
7011 set to "run", then there is only a runtime dependency on the JDK. The 7028 set to "run", then there is only a runtime dependency on the JDK. The
7012 default is "yes", which also adds a build dependency on the JDK. 7029 default is "yes", which also adds a build dependency on the JDK.
7013 7030
7014 * Set USE_JAVA2 to declare that a package needs a Java2 implementation. The 7031 * Set USE_JAVA2 to declare that a package needs a Java2 implementation. The
7015 supported values are "yes", "1.4", and "1.5". "yes" accepts any Java2 7032 supported values are "yes", "1.4", and "1.5". "yes" accepts any Java2
7016 implementation, "1.4" insists on versions 1.4 or above, and "1.5" only 7033 implementation, "1.4" insists on versions 1.4 or above, and "1.5" only
7017 accepts versions 1.5 or above. This variable is not set by default. 7034 accepts versions 1.5 or above. This variable is not set by default.
7018 7035
7019 * PKG_JAVA_HOME is automatically set to the runtime location of the used Java 7036 * PKG_JAVA_HOME is automatically set to the runtime location of the used Java
7020 implementation dependency. It may be used to set JAVA_HOME to a good value 7037 implementation dependency. It may be used to set JAVA_HOME to a good value
7021 if the program needs this variable to be defined. 7038 if the program needs this variable to be defined.
7022 7039
702319.4.3. Packages containing perl scripts 704019.4.3. Packages containing perl scripts
7024 7041
7025If your package contains interpreted perl scripts, add "perl" to the USE_TOOLS 7042If your package contains interpreted perl scripts, add "perl" to the USE_TOOLS
7026variable and set REPLACE_PERL to ensure that the proper interpreter path is 7043variable and set REPLACE_PERL to ensure that the proper interpreter path is
7027set. REPLACE_PERL should contain a list of scripts, relative to WRKSRC, that 7044set. REPLACE_PERL should contain a list of scripts, relative to WRKSRC, that
7028you want adjusted. Every occurrence of */bin/perl in a she-bang line will be 7045you want adjusted. Every occurrence of */bin/perl in a she-bang line will be
7029replaced with the full path to the perl executable. 7046replaced with the full path to the perl executable.
7030 7047
7031If a particular version of perl is needed, set the PERL5_REQD variable to the 7048If a particular version of perl is needed, set the PERL5_REQD variable to the
7032version number. The default is "5.0". 7049version number. The default is "5.0".
7033 7050
7034See Section 19.6.6, "Packages installing perl modules" for information about 7051See Section 19.6.6, "Packages installing perl modules" for information about
7035handling perl modules. 7052handling perl modules.
7036 7053
703719.4.4. Packages containing shell scripts 705419.4.4. Packages containing shell scripts
7038 7055
7039REPLACE_SH, REPLACE_BASH, REPLACE_CSH, and REPLACE_KSH can be used to replace 7056REPLACE_SH, REPLACE_BASH, REPLACE_CSH, and REPLACE_KSH can be used to replace
7040shell hash bangs in files. Please use the appropriate one, prefering REPLACE_SH 7057shell hash bangs in files. Please use the appropriate one, prefering REPLACE_SH
7041in case this shell is sufficient. Each should contain a list of scripts, 7058in case this shell is sufficient. Each should contain a list of scripts,
7042relative to WRKSRC, that you want adjusted. Every occurrence of the matching 7059relative to WRKSRC, that you want adjusted. Every occurrence of the matching
7043shell in a she-bang line will be replaced with the full path to the shell 7060shell in a she-bang line will be replaced with the full path to the shell
7044executable. When using REPLACE_BASH, don't forget to add bash to USE_TOOLS. 7061executable. When using REPLACE_BASH, don't forget to add bash to USE_TOOLS.
7045 7062
704619.4.5. Other programming languages 706319.4.5. Other programming languages
7047 7064
7048Currently, there is no special handling for other languages in pkgsrc. If a 7065Currently, there is no special handling for other languages in pkgsrc. If a
7049compiler package provides a buildlink3.mk file, include that, otherwise just 7066compiler package provides a buildlink3.mk file, include that, otherwise just
7050add a (build) dependency on the appropriate compiler package. 7067add a (build) dependency on the appropriate compiler package.
7051 7068
705219.5. Fixing problems in the build phase 706919.5. Fixing problems in the build phase
7053 7070
7054The most common failures when building a package are that some platforms do not 7071The most common failures when building a package are that some platforms do not
7055provide certain header files, functions or libraries, or they provide the 7072provide certain header files, functions or libraries, or they provide the
7056functions in a library that the original package author didn't know. To work 7073functions in a library that the original package author didn't know. To work
7057around this, you can rewrite the source code in most cases so that it does not 7074around this, you can rewrite the source code in most cases so that it does not
7058use the missing functions or provides a replacement function. 7075use the missing functions or provides a replacement function.
7059 7076
706019.5.1. Compiling C and C++ code conditionally 707719.5.1. Compiling C and C++ code conditionally
7061 7078
7062If a package already comes with a GNU configure script, the preferred way to 7079If a package already comes with a GNU configure script, the preferred way to
7063fix the build failure is to change the configure script, not the code. In the 7080fix the build failure is to change the configure script, not the code. In the
7064other cases, you can utilize the C preprocessor, which defines certain macros 7081other cases, you can utilize the C preprocessor, which defines certain macros
7065depending on the operating system and hardware architecture it compiles for. 7082depending on the operating system and hardware architecture it compiles for.
7066These macros can be queried using for example #if defined(__i386). Almost every 7083These macros can be queried using for example #if defined(__i386). Almost every
7067operating system, hardware architecture and compiler has its own macro. For 7084operating system, hardware architecture and compiler has its own macro. For
7068example, if the macros __GNUC__, __i386__ and __NetBSD__ are all defined, you 7085example, if the macros __GNUC__, __i386__ and __NetBSD__ are all defined, you
7069know that you are using NetBSD on an i386 compatible CPU, and your compiler is 7086know that you are using NetBSD on an i386 compatible CPU, and your compiler is
7070GCC. 7087GCC.
7071 7088
7072The list of the following macros for hardware and operating system depends on 7089The list of the following macros for hardware and operating system depends on
7073the compiler that is used. For example, if you want to conditionally compile 7090the compiler that is used. For example, if you want to conditionally compile
7074code on Solaris, don't use __sun__, as the SunPro compiler does not define it. 7091code on Solaris, don't use __sun__, as the SunPro compiler does not define it.
7075Use __sun instead. 7092Use __sun instead.
7076 7093
707719.5.1.1. C preprocessor macros to identify the operating system 709419.5.1.1. C preprocessor macros to identify the operating system
7078 7095
7079To distinguish between 4.4 BSD-derived systems and the rest of the world, you 7096To distinguish between 4.4 BSD-derived systems and the rest of the world, you
7080should use the following code. 7097should use the following code.
7081 7098
7082#include <sys/param.h> 7099#include <sys/param.h>
7083#if (defined(BSD) && BSD >= 199306) 7100#if (defined(BSD) && BSD >= 199306)
7084/* BSD-specific code goes here */ 7101/* BSD-specific code goes here */
7085#else 7102#else
7086/* non-BSD-specific code goes here */ 7103/* non-BSD-specific code goes here */
7087#endif 7104#endif
7088 7105
7089If this distinction is not fine enough, you can also test for the following 7106If this distinction is not fine enough, you can also test for the following
7090macros. 7107macros.
7091 7108
7092Cygwin __CYGWIN__ 7109Cygwin __CYGWIN__
7093DragonFly __DragonFly__ 7110DragonFly __DragonFly__
7094FreeBSD __FreeBSD__ 7111FreeBSD __FreeBSD__
7095Haiku __HAIKU__ 7112Haiku __HAIKU__
7096Interix __INTERIX 7113Interix __INTERIX
7097IRIX __sgi (TODO: get a definite source for this) 7114IRIX __sgi (TODO: get a definite source for this)
7098Linux linux, __linux, __linux__ 7115Linux linux, __linux, __linux__
 7116Mac OS X __APPLE__
7099MirBSD __MirBSD__ (__OpenBSD__ is also defined) 7117MirBSD __MirBSD__ (__OpenBSD__ is also defined)
7100Minix3 __minix 7118Minix3 __minix
7101NetBSD __NetBSD__ 7119NetBSD __NetBSD__
7102OpenBSD __OpenBSD__ 7120OpenBSD __OpenBSD__
7103Solaris sun, __sun 7121Solaris sun, __sun
7104 7122
710519.5.1.2. C preprocessor macros to identify the hardware architecture 712319.5.1.2. C preprocessor macros to identify the hardware architecture
7106 7124
7107i386 i386, __i386, __i386__ 7125i386 i386, __i386, __i386__
7108MIPS __mips 7126MIPS __mips
7109SPARC sparc, __sparc 7127SPARC sparc, __sparc
7110 7128
711119.5.1.3. C preprocessor macros to identify the compiler 712919.5.1.3. C preprocessor macros to identify the compiler
7112 7130
7113GCC __GNUC__ (major version), __GNUC_MINOR__ 7131GCC __GNUC__ (major version), __GNUC_MINOR__
7114MIPSpro _COMPILER_VERSION (0x741 for MIPSpro 7.41) 7132MIPSpro _COMPILER_VERSION (0x741 for MIPSpro 7.41)
7115SunPro __SUNPRO_C (0x570 for Sun C 5.7) 7133SunPro __SUNPRO_C (0x570 for Sun C 5.7)
7116SunPro C++ __SUNPRO_CC (0x580 for Sun C++ 5.8) 7134SunPro C++ __SUNPRO_CC (0x580 for Sun C++ 5.8)
7117 7135
711819.5.2. How to handle compiler bugs 713619.5.2. How to handle compiler bugs
7119 7137
7120Some source files trigger bugs in the compiler, based on combinations of 7138Some source files trigger bugs in the compiler, based on combinations of
7121compiler version and architecture and almost always relation to optimisation 7139compiler version and architecture and almost always relation to optimisation
7122being enabled. Common symptoms are gcc internal errors or never finishing 7140being enabled. Common symptoms are gcc internal errors or never finishing
7123compiling a file. 7141compiling a file.
7124 7142
7125Typically, a workaround involves testing the MACHINE_ARCH and compiler version, 7143Typically, a workaround involves testing the MACHINE_ARCH and compiler version,
7126disabling optimisation for that combination of file, MACHINE_ARCH and compiler, 7144disabling optimisation for that combination of file, MACHINE_ARCH and compiler,
7127and documenting it in pkgsrc/doc/HACKS. See that file for a number of examples. 7145and documenting it in pkgsrc/doc/HACKS. See that file for a number of examples.
7128 7146
712919.5.3. Undefined reference to "..." 714719.5.3. Undefined reference to "..."
7130 7148
7131This error message often means that a package did not link to a shared library 7149This error message often means that a package did not link to a shared library
7132it needs. The following functions are known to cause this error message over 7150it needs. The following functions are known to cause this error message over
7133and over. 7151and over.
7134 7152
7135+-----------------------------------------------------+ 7153+-----------------------------------------------------+
7136| Function |Library |Affected platforms| 7154| Function |Library |Affected platforms|
7137|-------------------------+--------+------------------| 7155|-------------------------+--------+------------------|
7138|accept, bind, connect |-lsocket|Solaris | 7156|accept, bind, connect |-lsocket|Solaris |
7139|-------------------------+--------+------------------| 7157|-------------------------+--------+------------------|
7140|crypt |-lcrypt |DragonFly, NetBSD | 7158|crypt |-lcrypt |DragonFly, NetBSD |
7141|-------------------------+--------+------------------| 7159|-------------------------+--------+------------------|
7142|dlopen, dlsym |-ldl |Linux | 7160|dlopen, dlsym |-ldl |Linux |
7143|-------------------------+--------+------------------| 7161|-------------------------+--------+------------------|
7144|gethost* |-lnsl |Solaris | 7162|gethost* |-lnsl |Solaris |
7145|-------------------------+--------+------------------| 7163|-------------------------+--------+------------------|
7146|inet_aton |-lresolv|Solaris | 7164|inet_aton |-lresolv|Solaris |
7147|-------------------------+--------+------------------| 7165|-------------------------+--------+------------------|
7148|nanosleep, sem_*, timer_*|-lrt |Solaris | 7166|nanosleep, sem_*, timer_*|-lrt |Solaris |
7149|-------------------------+--------+------------------| 7167|-------------------------+--------+------------------|
7150|openpty |-lutil |Linux | 7168|openpty |-lutil |Linux |
7151+-----------------------------------------------------+ 7169+-----------------------------------------------------+
7152 7170
7153To fix these linker errors, it is often sufficient to say LIBS.OperatingSystem+ 7171To fix these linker errors, it is often sufficient to say LIBS.OperatingSystem+
7154= -lfoo to the package Makefile and then say bmake clean; bmake. 7172= -lfoo to the package Makefile and then say bmake clean; bmake.
7155 7173
715619.5.3.1. Special issue: The SunPro compiler 717419.5.3.1. Special issue: The SunPro compiler
7157 7175
7158When you are using the SunPro compiler, there is another possibility. That 7176When you are using the SunPro compiler, there is another possibility. That
7159compiler cannot handle the following code: 7177compiler cannot handle the following code:
7160 7178
7161extern int extern_func(int); 7179extern int extern_func(int);
7162 7180
7163static inline int 7181static inline int
7164inline_func(int x) 7182inline_func(int x)
7165{ 7183{
7166 return extern_func(x); 7184 return extern_func(x);
7167} 7185}
7168 7186
7169int main(void) 7187int main(void)
7170{ 7188{
7171 return 0; 7189 return 0;
7172} 7190}
7173 7191
7174It generates the code for inline_func even if that function is never used. This 7192It generates the code for inline_func even if that function is never used. This
7175code then refers to extern_func, which can usually not be resolved. To solve 7193code then refers to extern_func, which can usually not be resolved. To solve
7176this problem you can try to tell the package to disable inlining of functions. 7194this problem you can try to tell the package to disable inlining of functions.
7177 7195
717819.5.4. Running out of memory 719619.5.4. Running out of memory
7179 7197
7180Sometimes packages fail to build because the compiler runs into an operating 7198Sometimes packages fail to build because the compiler runs into an operating
7181system specific soft limit. With the UNLIMIT_RESOURCES variable pkgsrc can be 7199system specific soft limit. With the UNLIMIT_RESOURCES variable pkgsrc can be
7182told to unlimit the resources. Currently, the allowed values are "datasize" and 7200told to unlimit the resources. Currently, the allowed values are "datasize" and
7183"stacksize" (or both). Setting this variable is similar to running the shell 7201"stacksize" (or both). Setting this variable is similar to running the shell
7184builtin ulimit command to raise the maximum data segment size or maximum stack 7202builtin ulimit command to raise the maximum data segment size or maximum stack
7185size of a process, respectively, to their hard limits. 7203size of a process, respectively, to their hard limits.
7186 7204
718719.6. Fixing problems in the install phase 720519.6. Fixing problems in the install phase
7188 7206
718919.6.1. Creating needed directories 720719.6.1. Creating needed directories
7190 7208
7191The BSD-compatible install supplied with some operating systems cannot create 7209The BSD-compatible install supplied with some operating systems cannot create
7192more than one directory at a time. As such, you should call ${INSTALL_*_DIR} 7210more than one directory at a time. As such, you should call ${INSTALL_*_DIR}
7193like this: 7211like this:
7194 7212
7195${INSTALL_DATA_DIR} ${PREFIX}/dir1 7213${INSTALL_DATA_DIR} ${PREFIX}/dir1
7196${INSTALL_DATA_DIR} ${PREFIX}/dir2 7214${INSTALL_DATA_DIR} ${PREFIX}/dir2
7197 7215
7198 7216
7199You can also just append "dir1 dir2" to the INSTALLATION_DIRS variable, which 7217You can also just append "dir1 dir2" to the INSTALLATION_DIRS variable, which
7200will automatically do the right thing. 7218will automatically do the right thing.
7201 7219
720219.6.2. Where to install documentation 722019.6.2. Where to install documentation
7203 7221
7204In general, documentation should be installed into ${PREFIX}/share/doc/$ 7222In general, documentation should be installed into ${PREFIX}/share/doc/$
7205{PKGBASE} or ${PREFIX}/share/doc/${PKGNAME} (the latter includes the version 7223{PKGBASE} or ${PREFIX}/share/doc/${PKGNAME} (the latter includes the version
7206number of the package). 7224number of the package).
7207 7225
7208Many modern packages using GNU autoconf allow to set the directory where HTML 7226Many modern packages using GNU autoconf allow to set the directory where HTML
7209documentation is installed with the "--with-html-dir" option. Sometimes using 7227documentation is installed with the "--with-html-dir" option. Sometimes using
7210this flag is needed because otherwise the documentation ends up in ${PREFIX}/ 7228this flag is needed because otherwise the documentation ends up in ${PREFIX}/
7211share/doc/html or other places. 7229share/doc/html or other places.
7212 7230
7213An exception to the above is that library API documentation generated with the 7231An exception to the above is that library API documentation generated with the
7214textproc/gtk-doc tools, for use by special browsers (devhelp) should be left at 7232textproc/gtk-doc tools, for use by special browsers (devhelp) should be left at
7215their default location, which is ${PREFIX}/share/gtk-doc. Such documentation 7233their default location, which is ${PREFIX}/share/gtk-doc. Such documentation
7216can be recognized from files ending in .devhelp or .devhelp2. (It is also 7234can be recognized from files ending in .devhelp or .devhelp2. (It is also
7217acceptable to install such files in ${PREFIX}/share/doc/${PKGBASE} or ${PREFIX} 7235acceptable to install such files in ${PREFIX}/share/doc/${PKGBASE} or ${PREFIX}
7218/share/doc/${PKGNAME}; the .devhelp* file must be directly in that directory 7236/share/doc/${PKGNAME}; the .devhelp* file must be directly in that directory
7219then, no additional subdirectory level is allowed in this case. This is usually 7237then, no additional subdirectory level is allowed in this case. This is usually
7220achieved by using "--with-html-dir=${PREFIX}/share/doc". ${PREFIX}/share/ 7238achieved by using "--with-html-dir=${PREFIX}/share/doc". ${PREFIX}/share/
7221gtk-doc is preferred though.) 7239gtk-doc is preferred though.)
7222 7240
722319.6.3. Installing highscore files 724119.6.3. Installing highscore files
7224 7242
7225Certain packages, most of them in the games category, install a score file that 7243Certain packages, most of them in the games category, install a score file that
7226allows all users on the system to record their highscores. In order for this to 7244allows all users on the system to record their highscores. In order for this to
7227work, the binaries need to be installed setgid and the score files owned by the 7245work, the binaries need to be installed setgid and the score files owned by the
7228appropriate group and/or owner (traditionally the "games" user/group). Set 7246appropriate group and/or owner (traditionally the "games" user/group). Set
7229USE_GAMESGROUP to yes to support this. The following variables, documented in 7247USE_GAMESGROUP to yes to support this. The following variables, documented in
7230more detail in mk/defaults/mk.conf, control this behaviour: GAMEDATAMODE, 7248more detail in mk/defaults/mk.conf, control this behaviour: GAMEDATAMODE,
7231GAMEDIRMODE, GAMES_GROUP, GAMEMODE, GAME_USER. 7249GAMEDIRMODE, GAMES_GROUP, GAMEMODE, GAME_USER.
7232 7250
7233A package should therefore never hard code file ownership or access permissions 7251A package should therefore never hard code file ownership or access permissions
7234but rely on INSTALL_GAME and INSTALL_GAME_DATA to set these correctly. 7252but rely on INSTALL_GAME and INSTALL_GAME_DATA to set these correctly.
7235 7253
723619.6.4. Adding DESTDIR support to packages 725419.6.4. Adding DESTDIR support to packages
7237 7255
7238DESTDIR support means that a package installs into a staging directory, not the 7256DESTDIR support means that a package installs into a staging directory, not the
7239final location of the files. Then a binary package is created which can be used 7257final location of the files. Then a binary package is created which can be used
7240for installation as usual. There are two ways: Either the package must install 7258for installation as usual. There are two ways: Either the package must install
7241as root ("destdir") or the package can install as non-root user ("user-destdir" 7259as root ("destdir") or the package can install as non-root user ("user-destdir"
7242). 7260).
7243 7261
7244 * PKG_DESTDIR_SUPPORT has to be set to "none", "destdir", or "user-destdir". 7262 * PKG_DESTDIR_SUPPORT has to be set to "none", "destdir", or "user-destdir".
7245 By default PKG_DESTDIR_SUPPORT is set to "user-destdir" to help catching 7263 By default PKG_DESTDIR_SUPPORT is set to "user-destdir" to help catching
7246 more potential packaging problems. If bsd.prefs.mk is included in the 7264 more potential packaging problems. If bsd.prefs.mk is included in the
7247 Makefile, PKG_DESTDIR_SUPPORT needs to be set before the inclusion. 7265 Makefile, PKG_DESTDIR_SUPPORT needs to be set before the inclusion.
7248 7266
7249 * All installation operations have to be prefixed with ${DESTDIR}. 7267 * All installation operations have to be prefixed with ${DESTDIR}.
7250 7268
7251 * automake gets this DESTDIR mostly right automatically. Many manual rules 7269 * automake gets this DESTDIR mostly right automatically. Many manual rules
7252 and pre/post-install often are incorrect; fix them. 7270 and pre/post-install often are incorrect; fix them.
7253 7271
7254 * If files are installed with special owner/group use SPECIAL_PERMS. 7272 * If files are installed with special owner/group use SPECIAL_PERMS.
7255 7273
7256 * In general, packages should support UNPRIVILEGED to be able to use DESTDIR. 7274 * In general, packages should support UNPRIVILEGED to be able to use DESTDIR.
7257 7275
725819.6.5. Packages with hardcoded paths to other interpreters 727619.6.5. Packages with hardcoded paths to other interpreters
7259 7277
7260Your package may also contain scripts with hardcoded paths to other 7278Your package may also contain scripts with hardcoded paths to other
7261interpreters besides (or as well as) perl. To correct the full pathname to the 7279interpreters besides (or as well as) perl. To correct the full pathname to the
7262script interpreter, you need to set the following definitions in your Makefile 7280script interpreter, you need to set the following definitions in your Makefile
7263(we shall use tclsh in this example): 7281(we shall use tclsh in this example):
7264 7282
7265REPLACE_INTERPRETER+= tcl 7283REPLACE_INTERPRETER+= tcl
7266REPLACE.tcl.old= .*/bin/tclsh 7284REPLACE.tcl.old= .*/bin/tclsh
7267REPLACE.tcl.new= ${PREFIX}/bin/tclsh 7285REPLACE.tcl.new= ${PREFIX}/bin/tclsh
7268REPLACE_FILES.tcl= # list of tcl scripts which need to be fixed, 7286REPLACE_FILES.tcl= # list of tcl scripts which need to be fixed,
7269# relative to ${WRKSRC}, just as in REPLACE_PERL 7287# relative to ${WRKSRC}, just as in REPLACE_PERL
7270 7288
7271 7289
7272Note 7290Note
7273 7291
7274Before March 2006, these variables were called _REPLACE.* and _REPLACE_FILES.*. 7292Before March 2006, these variables were called _REPLACE.* and _REPLACE_FILES.*.
7275 7293
727619.6.6. Packages installing perl modules 729419.6.6. Packages installing perl modules
7277 7295
7278Makefiles of packages providing perl5 modules should include the Makefile 7296Makefiles of packages providing perl5 modules should include the Makefile
7279fragment ../../lang/perl5/module.mk. It provides a do-configure target for the 7297fragment ../../lang/perl5/module.mk. It provides a do-configure target for the
7280standard perl configuration for such modules as well as various hooks to tune 7298standard perl configuration for such modules as well as various hooks to tune
7281this configuration. See comments in this file for details. 7299this configuration. See comments in this file for details.
7282 7300
7283Perl5 modules will install into different places depending on the version of 7301Perl5 modules will install into different places depending on the version of
7284perl used during the build process. To address this, pkgsrc will append lines 7302perl used during the build process. To address this, pkgsrc will append lines
7285to the PLIST corresponding to the files listed in the installed .packlist file 7303to the PLIST corresponding to the files listed in the installed .packlist file
7286generated by most perl5 modules. This is invoked by defining PERL5_PACKLIST to 7304generated by most perl5 modules. This is invoked by defining PERL5_PACKLIST to
7287a space-separated list of packlist files relative to PERL5_PACKLIST_DIR 7305a space-separated list of packlist files relative to PERL5_PACKLIST_DIR
7288(PERL5_INSTALLVENDORARCH by default), e.g.: 7306(PERL5_INSTALLVENDORARCH by default), e.g.:
7289 7307
7290PERL5_PACKLIST= auto/Pg/.packlist 7308PERL5_PACKLIST= auto/Pg/.packlist
7291 7309
7292 7310
7293The perl5 config variables installarchlib, installscript, installvendorbin, 7311The perl5 config variables installarchlib, installscript, installvendorbin,
7294installvendorscript, installvendorarch, installvendorlib, installvendorman1dir, 7312installvendorscript, installvendorarch, installvendorlib, installvendorman1dir,
7295and installvendorman3dir represent those locations in which components of perl5 7313and installvendorman3dir represent those locations in which components of perl5
7296modules may be installed, provided as variable with uppercase and prefixed with 7314modules may be installed, provided as variable with uppercase and prefixed with
7297PERL5_, e.g. PERL5_INSTALLARCHLIB and may be used by perl5 packages that don't 7315PERL5_, e.g. PERL5_INSTALLARCHLIB and may be used by perl5 packages that don't
7298have a packlist. These variables are also substituted for in the PLIST as 7316have a packlist. These variables are also substituted for in the PLIST as
7299uppercase prefixed with PERL5_SUB_. 7317uppercase prefixed with PERL5_SUB_.
7300 7318
730119.6.7. Packages installing info files 731919.6.7. Packages installing info files
7302 7320
7303Some packages install info files or use the "makeinfo" or "install-info" 7321Some packages install info files or use the "makeinfo" or "install-info"
7304commands. INFO_FILES should be defined in the package Makefile so that INSTALL 7322commands. INFO_FILES should be defined in the package Makefile so that INSTALL
7305and DEINSTALL scripts will be generated to handle registration of the info 7323and DEINSTALL scripts will be generated to handle registration of the info
7306files in the Info directory file. The "install-info" command used for the info 7324files in the Info directory file. The "install-info" command used for the info
7307files registration is either provided by the system, or by a special purpose 7325files registration is either provided by the system, or by a special purpose
7308package automatically added as dependency if needed. 7326package automatically added as dependency if needed.
7309 7327
7310PKGINFODIR is the directory under ${PREFIX} where info files are primarily 7328PKGINFODIR is the directory under ${PREFIX} where info files are primarily
7311located. PKGINFODIR defaults to "info" and can be overridden by the user. 7329located. PKGINFODIR defaults to "info" and can be overridden by the user.
7312 7330
7313The info files for the package should be listed in the package PLIST; however 7331The info files for the package should be listed in the package PLIST; however
7314any split info files need not be listed. 7332any split info files need not be listed.
7315 7333
7316A package which needs the "makeinfo" command at build time must add "makeinfo" 7334A package which needs the "makeinfo" command at build time must add "makeinfo"
7317to USE_TOOLS in its Makefile. If a minimum version of the "makeinfo" command is 7335to USE_TOOLS in its Makefile. If a minimum version of the "makeinfo" command is
7318needed it should be noted with the TEXINFO_REQD variable in the package 7336needed it should be noted with the TEXINFO_REQD variable in the package
7319Makefile. By default, a minimum version of 3.12 is required. If the system does 7337Makefile. By default, a minimum version of 3.12 is required. If the system does
7320not provide a makeinfo command or if it does not match the required minimum, a 7338not provide a makeinfo command or if it does not match the required minimum, a
7321build dependency on the devel/gtexinfo package will be added automatically. 7339build dependency on the devel/gtexinfo package will be added automatically.
7322 7340
7323The build and installation process of the software provided by the package 7341The build and installation process of the software provided by the package
7324should not use the install-info command as the registration of info files is 7342should not use the install-info command as the registration of info files is
7325the task of the package INSTALL script, and it must use the appropriate  7343the task of the package INSTALL script, and it must use the appropriate
7326makeinfo command. 7344makeinfo command.
7327 7345
7328To achieve this goal, the pkgsrc infrastructure creates overriding scripts for 7346To achieve this goal, the pkgsrc infrastructure creates overriding scripts for
7329the install-info and makeinfo commands in a directory listed early in PATH. 7347the install-info and makeinfo commands in a directory listed early in PATH.
7330 7348
7331The script overriding install-info has no effect except the logging of a 7349The script overriding install-info has no effect except the logging of a
7332message. The script overriding makeinfo logs a message and according to the 7350message. The script overriding makeinfo logs a message and according to the
7333value of TEXINFO_REQD either runs the appropriate makeinfo command or exit on 7351value of TEXINFO_REQD either runs the appropriate makeinfo command or exit on
7334error. 7352error.
7335 7353
733619.6.8. Packages installing man pages 735419.6.8. Packages installing man pages
7337 7355
7338All packages that install manual pages should install them into the same 7356All packages that install manual pages should install them into the same
7339directory, so that there is one common place to look for them. In pkgsrc, this 7357directory, so that there is one common place to look for them. In pkgsrc, this
7340place is ${PREFIX}/${PKGMANDIR}, and this expression should be used in 7358place is ${PREFIX}/${PKGMANDIR}, and this expression should be used in
7341packages. The default for PKGMANDIR is "man". Another often-used value is " 7359packages. The default for PKGMANDIR is "man". Another often-used value is "
7342share/man". 7360share/man".
7343 7361
7344Note 7362Note
7345 7363
7346The support for a custom PKGMANDIR is far from complete. 7364The support for a custom PKGMANDIR is far from complete.
7347 7365
7348The PLIST files can just use man/ as the top level directory for the man page 7366The PLIST files can just use man/ as the top level directory for the man page
7349file entries, and the pkgsrc framework will convert as needed. In all other 7367file entries, and the pkgsrc framework will convert as needed. In all other
7350places, the correct PKGMANDIR must be used. 7368places, the correct PKGMANDIR must be used.
7351 7369
7352Packages that are configured with GNU_CONFIGURE set as "yes", by default will 7370Packages that are configured with GNU_CONFIGURE set as "yes", by default will
7353use the ./configure --mandir switch to set where the man pages should be 7371use the ./configure --mandir switch to set where the man pages should be
7354installed. The path is GNU_CONFIGURE_MANDIR which defaults to ${PREFIX}/$ 7372installed. The path is GNU_CONFIGURE_MANDIR which defaults to ${PREFIX}/$
7355{PKGMANDIR}. 7373{PKGMANDIR}.
7356 7374
7357Packages that use GNU_CONFIGURE but do not use --mandir, can set 7375Packages that use GNU_CONFIGURE but do not use --mandir, can set
7358CONFIGURE_HAS_MANDIR to "no". Or if the ./configure script uses a non-standard 7376CONFIGURE_HAS_MANDIR to "no". Or if the ./configure script uses a non-standard
7359use of --mandir, you can set GNU_CONFIGURE_MANDIR as needed. 7377use of --mandir, you can set GNU_CONFIGURE_MANDIR as needed.
7360 7378
7361See Section 13.5, "Man page compression" for information on installation of 7379See Section 13.5, "Man page compression" for information on installation of
7362compressed manual pages. 7380compressed manual pages.
7363 7381
736419.6.9. Packages installing GConf data files 738219.6.9. Packages installing GConf data files
7365 7383
7366If a package installs .schemas or .entries files, used by GConf, you need to 7384If a package installs .schemas or .entries files, used by GConf, you need to
7367take some extra steps to make sure they get registered in the database: 7385take some extra steps to make sure they get registered in the database:
7368 7386
7369 1. Include ../../devel/GConf/schemas.mk instead of its buildlink3.mk file. 7387 1. Include ../../devel/GConf/schemas.mk instead of its buildlink3.mk file.
7370 This takes care of rebuilding the GConf database at installation and 7388 This takes care of rebuilding the GConf database at installation and
7371 deinstallation time, and tells the package where to install GConf data 7389 deinstallation time, and tells the package where to install GConf data
7372 files using some standard configure arguments. It also disallows any access 7390 files using some standard configure arguments. It also disallows any access
7373 to the database directly from the package. 7391 to the database directly from the package.
7374 7392
7375 2. Ensure that the package installs its .schemas files under ${PREFIX}/share/ 7393 2. Ensure that the package installs its .schemas files under ${PREFIX}/share/
7376 gconf/schemas. If they get installed under ${PREFIX}/etc, you will need to 7394 gconf/schemas. If they get installed under ${PREFIX}/etc, you will need to
7377 manually patch the package. 7395 manually patch the package.
7378 7396
7379 3. Check the PLIST and remove any entries under the etc/gconf directory, as 7397 3. Check the PLIST and remove any entries under the etc/gconf directory, as
7380 they will be handled automatically. See Section 9.13, "How do I change the 7398 they will be handled automatically. See Section 9.14, "How do I change the
7381 location of configuration files?" for more information. 7399 location of configuration files?" for more information.
7382 7400
7383 4. Define the GCONF_SCHEMAS variable in your Makefile with a list of all 7401 4. Define the GCONF_SCHEMAS variable in your Makefile with a list of all
7384 .schemas files installed by the package, if any. Names must not contain any 7402 .schemas files installed by the package, if any. Names must not contain any
7385 directories in them. 7403 directories in them.
7386 7404
7387 5. Define the GCONF_ENTRIES variable in your Makefile with a list of all 7405 5. Define the GCONF_ENTRIES variable in your Makefile with a list of all
7388 .entries files installed by the package, if any. Names must not contain any 7406 .entries files installed by the package, if any. Names must not contain any
7389 directories in them. 7407 directories in them.
7390 7408
739119.6.10. Packages installing scrollkeeper/rarian data files 740919.6.10. Packages installing scrollkeeper/rarian data files
7392 7410
7393If a package installs .omf files, used by scrollkeeper/rarian, you need to take 7411If a package installs .omf files, used by scrollkeeper/rarian, you need to take
7394some extra steps to make sure they get registered in the database: 7412some extra steps to make sure they get registered in the database:
7395 7413
7396 1. Include ../../mk/omf-scrollkeeper.mk instead of rarian's buildlink3.mk 7414 1. Include ../../mk/omf-scrollkeeper.mk instead of rarian's buildlink3.mk
7397 file. This takes care of rebuilding the scrollkeeper database at 7415 file. This takes care of rebuilding the scrollkeeper database at
7398 installation and deinstallation time, and disallows any access to it 7416 installation and deinstallation time, and disallows any access to it
7399 directly from the package. 7417 directly from the package.
7400 7418
7401 2. Check the PLIST and remove any entries under the libdata/scrollkeeper 7419 2. Check the PLIST and remove any entries under the libdata/scrollkeeper
7402 directory, as they will be handled automatically. 7420 directory, as they will be handled automatically.
7403 7421
7404 3. Remove the share/omf directory from the PLIST. It will be handled by 7422 3. Remove the share/omf directory from the PLIST. It will be handled by
7405 rarian. (make print-PLIST does this automatically.) 7423 rarian. (make print-PLIST does this automatically.)
7406 7424
740719.6.11. Packages installing X11 fonts 742519.6.11. Packages installing X11 fonts
7408 7426
7409If a package installs font files, you will need to rebuild the fonts database 7427If a package installs font files, you will need to rebuild the fonts database
7410in the directory where they get installed at installation and deinstallation 7428in the directory where they get installed at installation and deinstallation
7411time. This can be automatically done by using the pkginstall framework. 7429time. This can be automatically done by using the pkginstall framework.
7412 7430
7413You can list the directories where fonts are installed in the FONTS_DIRS.type 7431You can list the directories where fonts are installed in the FONTS_DIRS.type
7414variables, where type can be one of "ttf", "type1" or "x11". Also make sure 7432variables, where type can be one of "ttf", "type1" or "x11". Also make sure
7415that the database file fonts.dir is not listed in the PLIST. 7433that the database file fonts.dir is not listed in the PLIST.
7416 7434
7417Note that you should not create new directories for fonts; instead use the 7435Note that you should not create new directories for fonts; instead use the
7418standard ones to avoid that the user needs to manually configure his X server 7436standard ones to avoid that the user needs to manually configure his X server
7419to find them. 7437to find them.
7420 7438
742119.6.12. Packages installing GTK2 modules 743919.6.12. Packages installing GTK2 modules
7422 7440
7423If a package installs GTK2 immodules or loaders, you need to take some extra 7441If a package installs GTK2 immodules or loaders, you need to take some extra
7424steps to get them registered in the GTK2 database properly: 7442steps to get them registered in the GTK2 database properly:
7425 7443
7426 1. Include ../../x11/gtk2/modules.mk instead of its buildlink3.mk file. This 7444 1. Include ../../x11/gtk2/modules.mk instead of its buildlink3.mk file. This
7427 takes care of rebuilding the database at installation and deinstallation 7445 takes care of rebuilding the database at installation and deinstallation
7428 time. 7446 time.
7429 7447
7430 2. Set GTK2_IMMODULES=YES if your package installs GTK2 immodules. 7448 2. Set GTK2_IMMODULES=YES if your package installs GTK2 immodules.
7431 7449
7432 3. Set GTK2_LOADERS=YES if your package installs GTK2 loaders. 7450 3. Set GTK2_LOADERS=YES if your package installs GTK2 loaders.
7433 7451
7434 4. Patch the package to not touch any of the GTK2 databases directly. These 7452 4. Patch the package to not touch any of the GTK2 databases directly. These
7435 are: 7453 are:
7436 7454
7437 + libdata/gtk-2.0/gdk-pixbuf.loaders 7455 + libdata/gtk-2.0/gdk-pixbuf.loaders
7438 7456
7439 + libdata/gtk-2.0/gtk.immodules 7457 + libdata/gtk-2.0/gtk.immodules
7440 7458
7441 5. Check the PLIST and remove any entries under the libdata/gtk-2.0 directory, 7459 5. Check the PLIST and remove any entries under the libdata/gtk-2.0 directory,
7442 as they will be handled automatically. 7460 as they will be handled automatically.
7443 7461
744419.6.13. Packages installing SGML or XML data 746219.6.13. Packages installing SGML or XML data
7445 7463
7446If a package installs SGML or XML data files that need to be registered in 7464If a package installs SGML or XML data files that need to be registered in
7447system-wide catalogs (like DTDs, sub-catalogs, etc.), you need to take some 7465system-wide catalogs (like DTDs, sub-catalogs, etc.), you need to take some
7448extra steps: 7466extra steps:
7449 7467
7450 1. Include ../../textproc/xmlcatmgr/catalogs.mk in your Makefile, which takes 7468 1. Include ../../textproc/xmlcatmgr/catalogs.mk in your Makefile, which takes
7451 care of registering those files in system-wide catalogs at installation and 7469 care of registering those files in system-wide catalogs at installation and
7452 deinstallation time. 7470 deinstallation time.
7453 7471
7454 2. Set SGML_CATALOGS to the full path of any SGML catalogs installed by the 7472 2. Set SGML_CATALOGS to the full path of any SGML catalogs installed by the
7455 package. 7473 package.
7456 7474
7457 3. Set XML_CATALOGS to the full path of any XML catalogs installed by the 7475 3. Set XML_CATALOGS to the full path of any XML catalogs installed by the
7458 package. 7476 package.
7459 7477
7460 4. Set SGML_ENTRIES to individual entries to be added to the SGML catalog. 7478 4. Set SGML_ENTRIES to individual entries to be added to the SGML catalog.
7461 These come in groups of three strings; see xmlcatmgr(1) for more 7479 These come in groups of three strings; see xmlcatmgr(1) for more
7462 information (specifically, arguments recognized by the 'add' action). Note 7480 information (specifically, arguments recognized by the 'add' action). Note
7463 that you will normally not use this variable. 7481 that you will normally not use this variable.
7464 7482
7465 5. Set XML_ENTRIES to individual entries to be added to the XML catalog. These 7483 5. Set XML_ENTRIES to individual entries to be added to the XML catalog. These
7466 come in groups of three strings; see xmlcatmgr(1) for more information 7484 come in groups of three strings; see xmlcatmgr(1) for more information
7467 (specifically, arguments recognized by the 'add' action). Note that you 7485 (specifically, arguments recognized by the 'add' action). Note that you
7468 will normally not use this variable. 7486 will normally not use this variable.
7469 7487
747019.6.14. Packages installing extensions to the MIME database 748819.6.14. Packages installing extensions to the MIME database
7471 7489
7472If a package provides extensions to the MIME database by installing .xml files 7490If a package provides extensions to the MIME database by installing .xml files
7473inside ${PREFIX}/share/mime/packages, you need to take some extra steps to 7491inside ${PREFIX}/share/mime/packages, you need to take some extra steps to
7474ensure that the database is kept consistent with respect to these new files: 7492ensure that the database is kept consistent with respect to these new files:
7475 7493
7476 1. Include ../../databases/shared-mime-info/mimedb.mk (avoid using the 7494 1. Include ../../databases/shared-mime-info/mimedb.mk (avoid using the
7477 buildlink3.mk file from this same directory, which is reserved for 7495 buildlink3.mk file from this same directory, which is reserved for
7478 inclusion from other buildlink3.mk files). It takes care of rebuilding the 7496 inclusion from other buildlink3.mk files). It takes care of rebuilding the
7479 MIME database at installation and deinstallation time, and disallows any 7497 MIME database at installation and deinstallation time, and disallows any
7480 access to it directly from the package. 7498 access to it directly from the package.
7481 7499
7482 2. Check the PLIST and remove any entries under the share/mime directory,  7500 2. Check the PLIST and remove any entries under the share/mime directory,
7483 except for files saved under share/mime/packages. The former are handled 7501 except for files saved under share/mime/packages. The former are handled
7484 automatically by the update-mime-database program, but the latter are 7502 automatically by the update-mime-database program, but the latter are
7485 package-dependent and must be removed by the package that installed them in 7503 package-dependent and must be removed by the package that installed them in
7486 the first place. 7504 the first place.
7487 7505
7488 3. Remove any share/mime/* directories from the PLIST. They will be handled by 7506 3. Remove any share/mime/* directories from the PLIST. They will be handled by
7489 the shared-mime-info package. 7507 the shared-mime-info package.
7490 7508
749119.6.15. Packages using intltool 750919.6.15. Packages using intltool
7492 7510
7493If a package uses intltool during its build, add intltool to the USE_TOOLS, 7511If a package uses intltool during its build, add intltool to the USE_TOOLS,
7494which forces it to use the intltool package provided by pkgsrc, instead of the 7512which forces it to use the intltool package provided by pkgsrc, instead of the
7495one bundled with the distribution file. 7513one bundled with the distribution file.
7496 7514
7497This tracks intltool's build-time dependencies and uses the latest available 7515This tracks intltool's build-time dependencies and uses the latest available
7498version; this way, the package benefits of any bug fixes that may have appeared 7516version; this way, the package benefits of any bug fixes that may have appeared
7499since it was released. 7517since it was released.
7500 7518
750119.6.16. Packages installing startup scripts 751919.6.16. Packages installing startup scripts
7502 7520
7503If a package contains a rc.d script, it won't be copied into the startup 7521If a package contains a rc.d script, it won't be copied into the startup
7504directory by default, but you can enable it, by adding the option 7522directory by default, but you can enable it, by adding the option
7505PKG_RCD_SCRIPTS=YES in mk.conf. This option will copy the scripts into /etc/ 7523PKG_RCD_SCRIPTS=YES in mk.conf. This option will copy the scripts into /etc/
7506rc.d when a package is installed, and it will automatically remove the scripts 7524rc.d when a package is installed, and it will automatically remove the scripts
7507when the package is deinstalled. 7525when the package is deinstalled.
7508 7526
750919.6.17. Packages installing TeX modules 752719.6.17. Packages installing TeX modules
7510 7528
7511If a package installs TeX packages into the texmf tree, the ls-R database of 7529If a package installs TeX packages into the texmf tree, the ls-R database of
7512the tree needs to be updated. 7530the tree needs to be updated.
7513 7531
7514Note 7532Note
7515 7533
7516Except the main TeX packages such as kpathsea, packages should install files 7534Except the main TeX packages such as kpathsea, packages should install files
7517into ${PREFIX}/share/texmf-dist, not ${PREFIX}/share/texmf. 7535into ${PREFIX}/share/texmf-dist, not ${PREFIX}/share/texmf.
7518 7536
7519 1. Include ../../print/kpathsea/texmf.mk. This takes care of rebuilding the 7537 1. Include ../../print/kpathsea/texmf.mk. This takes care of rebuilding the
7520 ls-R database at installation and deinstallation time. 7538 ls-R database at installation and deinstallation time.
7521 7539
7522 2. If your package installs files into a texmf tree other than the one at $ 7540 2. If your package installs files into a texmf tree other than the one at $
7523 {PREFIX}/share/texmf-dist, set TEX_TEXMF_DIRS to the list of all texmf 7541 {PREFIX}/share/texmf-dist, set TEX_TEXMF_DIRS to the list of all texmf
7524 trees that need database update. 7542 trees that need database update.
7525 7543
7526 If your package also installs font map files that need to be registered 7544 If your package also installs font map files that need to be registered
7527 using updmap, include ../../print/tex-tetex/map.mk and set TEX_MAP_FILES 7545 using updmap, include ../../print/tex-tetex/map.mk and set TEX_MAP_FILES
7528 and/or TEX_MIXEDMAP_FILES to the list of all such font map files. Then  7546 and/or TEX_MIXEDMAP_FILES to the list of all such font map files. Then
7529 updmap will be run automatically at installation/deinstallation to enable/ 7547 updmap will be run automatically at installation/deinstallation to enable/
7530 disable font map files for TeX output drivers. 7548 disable font map files for TeX output drivers.
7531 7549
7532 3. Make sure that none of ls-R databases are included in PLIST, as they will 7550 3. Make sure that none of ls-R databases are included in PLIST, as they will
7533 be removed only by the kpathsea package. 7551 be removed only by the kpathsea package.
7534 7552
753519.6.18. Packages supporting running binaries in emulation 755319.6.18. Packages supporting running binaries in emulation
7536 7554
7537There are some packages that provide libraries and executables for running 7555There are some packages that provide libraries and executables for running
7538binaries from a one operating system on a different one (if the latter supports 7556binaries from a one operating system on a different one (if the latter supports
7539it). One example is running Linux binaries on NetBSD. 7557it). One example is running Linux binaries on NetBSD.
7540 7558
7541The pkgtools/rpm2pkg helps in extracting and packaging Linux rpm packages. 7559The pkgtools/rpm2pkg helps in extracting and packaging Linux rpm packages.
7542 7560
7543The CHECK_SHLIBS can be set to no to avoid the check-shlibs target, which tests 7561The CHECK_SHLIBS can be set to no to avoid the check-shlibs target, which tests
7544if all libraries for each installed executable can be found by the dynamic 7562if all libraries for each installed executable can be found by the dynamic
7545linker. Since the standard dynamic linker is run, this fails for emulation 7563linker. Since the standard dynamic linker is run, this fails for emulation
7546packages, because the libraries used by the emulation are not in the standard 7564packages, because the libraries used by the emulation are not in the standard
7547directories. 7565directories.
7548 7566
754919.6.19. Packages installing hicolor theme icons 756719.6.19. Packages installing hicolor theme icons
7550 7568
7551If a package installs images under the share/icons/hicolor and/or updates the 7569If a package installs images under the share/icons/hicolor and/or updates the
7552share/icons/hicolor/icon-theme.cache database, you need to take some extra 7570share/icons/hicolor/icon-theme.cache database, you need to take some extra
7553steps to make sure that the shared theme directory is handled appropriately and 7571steps to make sure that the shared theme directory is handled appropriately and
7554that the cache database is rebuilt: 7572that the cache database is rebuilt:
7555 7573
7556 1. Include ../../graphics/hicolor-icon-theme/buildlink3.mk. 7574 1. Include ../../graphics/hicolor-icon-theme/buildlink3.mk.
7557 7575
7558 2. Check the PLIST and remove the entry that refers to the theme cache. 7576 2. Check the PLIST and remove the entry that refers to the theme cache.
7559 7577
7560 3. Ensure that the PLIST does not remove the shared icon directories from the 7578 3. Ensure that the PLIST does not remove the shared icon directories from the
7561 share/icons/hicolor hierarchy because they will be handled automatically. 7579 share/icons/hicolor hierarchy because they will be handled automatically.
7562 7580
7563The best way to verify that the PLIST is correct with respect to the last two 7581The best way to verify that the PLIST is correct with respect to the last two
7564points is to regenerate it using make print-PLIST. 7582points is to regenerate it using make print-PLIST.
7565 7583
756619.6.20. Packages installing desktop files 758419.6.20. Packages installing desktop files
7567 7585
7568If a package installs .desktop files under share/applications and these include 7586If a package installs .desktop files under share/applications and these include
7569MIME information (MimeType key), you need to take extra steps to ensure that 7587MIME information (MimeType key), you need to take extra steps to ensure that
7570they are registered into the MIME database: 7588they are registered into the MIME database:
7571 7589
7572 1. Include ../../sysutils/desktop-file-utils/desktopdb.mk. 7590 1. Include ../../sysutils/desktop-file-utils/desktopdb.mk.
7573 7591
7574 2. Check the PLIST and remove the entry that refers to the share/applications/ 7592 2. Check the PLIST and remove the entry that refers to the share/applications/
7575 mimeinfo.cache file. It will be handled automatically. 7593 mimeinfo.cache file. It will be handled automatically.
7576 7594
7577The best way to verify that the PLIST is correct with respect to the last point 7595The best way to verify that the PLIST is correct with respect to the last point
7578is to regenerate it using make print-PLIST. 7596is to regenerate it using make print-PLIST.
7579 7597
758019.7. Marking packages as having problems 759819.7. Marking packages as having problems
7581 7599
7582In some cases one does not have the time to solve a problem immediately. In 7600In some cases one does not have the time to solve a problem immediately. In
7583this case, one can plainly mark a package as broken. For this, one just sets 7601this case, one can plainly mark a package as broken. For this, one just sets
7584the variable BROKEN to the reason why the package is broken (similar to the 7602the variable BROKEN to the reason why the package is broken (similar to the
7585RESTRICTED variable). A user trying to build the package will immediately be 7603RESTRICTED variable). A user trying to build the package will immediately be
7586shown this message, and the build will not be even tried. 7604shown this message, and the build will not be even tried.
7587 7605
7588BROKEN packages are removed from pkgsrc in irregular intervals. 7606BROKEN packages are removed from pkgsrc in irregular intervals.
7589 7607
7590Chapter 20. Debugging 7608Chapter 20. Debugging
7591 7609
7592To check out all the gotchas when building a package, here are the steps that I 7610To check out all the gotchas when building a package, here are the steps that I
7593do in order to get a package working. Please note this is basically the same as 7611do in order to get a package working. Please note this is basically the same as
7594what was explained in the previous sections, only with some debugging aids. 7612what was explained in the previous sections, only with some debugging aids.
7595 7613
7596 * Be sure to set PKG_DEVELOPER=yes in mk.conf. 7614 * Be sure to set PKG_DEVELOPER=yes in mk.conf.
7597 7615
7598 * Install pkgtools/url2pkg, create a directory for a new package, change into 7616 * Install pkgtools/url2pkg, create a directory for a new package, change into
7599 it, then run url2pkg: 7617 it, then run url2pkg:
7600 7618
7601 % mkdir /usr/pkgsrc/category/examplepkg 7619 % mkdir /usr/pkgsrc/category/examplepkg
7602 % cd /usr/pkgsrc/category/examplepkg 7620 % cd /usr/pkgsrc/category/examplepkg
7603 % url2pkg http://www.example.com/path/to/distfile.tar.gz 7621 % url2pkg http://www.example.com/path/to/distfile.tar.gz
7604 7622
7605 * Edit the Makefile as requested. 7623 * Edit the Makefile as requested.
7606 7624
7607 * Fill in the DESCR file 7625 * Fill in the DESCR file
7608 7626
7609 * Run make configure 7627 * Run make configure
7610 7628
7611 * Add any dependencies glimpsed from documentation and the configure step to 7629 * Add any dependencies glimpsed from documentation and the configure step to
7612 the package's Makefile. 7630 the package's Makefile.
7613 7631
7614 * Make the package compile, doing multiple rounds of 7632 * Make the package compile, doing multiple rounds of
7615 7633
7616 % make 7634 % make
7617 % pkgvi ${WRKSRC}/some/file/that/does/not/compile 7635 % pkgvi ${WRKSRC}/some/file/that/does/not/compile
7618 % mkpatches 7636 % mkpatches
7619 % patchdiff 7637 % patchdiff
7620 % mv ${WRKDIR}/.newpatches/* patches 7638 % mv ${WRKDIR}/.newpatches/* patches
7621 % make mps 7639 % make mps
7622 % make clean 7640 % make clean
7623 7641
7624 Doing this step as non-root user will ensure that no files are modified 7642 Doing this step as non-root user will ensure that no files are modified
7625 that shouldn't be, especially during the build phase. mkpatches, patchdiff 7643 that shouldn't be, especially during the build phase. mkpatches, patchdiff
7626 and pkgvi are from the pkgtools/pkgdiff package. 7644 and pkgvi are from the pkgtools/pkgdiff package.
7627 7645
7628 * Look at the Makefile, fix if necessary; see Section 11.1, "Makefile". 7646 * Look at the Makefile, fix if necessary; see Section 11.1, "Makefile".
7629 7647
7630 * Generate a PLIST: 7648 * Generate a PLIST:
7631 7649
7632 # make install 7650 # make install
7633 # make print-PLIST >PLIST 7651 # make print-PLIST >PLIST
7634 # make deinstall 7652 # make deinstall
7635 # make install 7653 # make install
7636 # make deinstall 7654 # make deinstall
7637 7655
7638 You usually need to be root to do this. Look if there are any files left: 7656 You usually need to be root to do this. Look if there are any files left:
7639 7657
7640 # make print-PLIST 7658 # make print-PLIST
7641 7659
7642 If this reveals any files that are missing in PLIST, add them. 7660 If this reveals any files that are missing in PLIST, add them.
7643 7661
7644 * Now that the PLIST is OK, install the package again and make a binary 7662 * Now that the PLIST is OK, install the package again and make a binary
7645 package: 7663 package:
7646 7664
7647 # make reinstall 7665 # make reinstall
7648 # make package 7666 # make package
7649 7667
7650 * Delete the installed package: 7668 * Delete the installed package:
7651 7669
7652 # pkg_delete examplepkg 7670 # pkg_delete examplepkg
7653 7671
7654 * Repeat the above make print-PLIST command, which shouldn't find anything 7672 * Repeat the above make print-PLIST command, which shouldn't find anything
7655 now: 7673 now:
7656 7674
7657 # make print-PLIST 7675 # make print-PLIST
7658 7676
7659 * Reinstall the binary package: 7677 * Reinstall the binary package:
7660 7678
7661 # pkg_add .../examplepkg.tgz 7679 # pkg_add .../examplepkg.tgz
7662 7680
7663 * Play with it. Make sure everything works. 7681 * Play with it. Make sure everything works.
7664 7682
7665 * Run pkglint from pkgtools/pkglint, and fix the problems it reports: 7683 * Run pkglint from pkgtools/pkglint, and fix the problems it reports:
7666 7684
7667 # pkglint 7685 # pkglint
7668 7686
7669 * Submit (or commit, if you have cvs access); see Chapter 21, Submitting and 7687 * Submit (or commit, if you have cvs access); see Chapter 21, Submitting and
7670 Committing. 7688 Committing.
7671 7689
7672Chapter 21. Submitting and Committing 7690Chapter 21. Submitting and Committing
7673 7691
7674Table of Contents 7692Table of Contents
7675 7693
767621.1. Submitting binary packages 769421.1. Submitting binary packages
767721.2. Submitting source packages (for non-NetBSD-developers) 769521.2. Submitting source packages (for non-NetBSD-developers)
767821.3. General notes when adding, updating, or removing packages 769621.3. General notes when adding, updating, or removing packages
767921.4. Committing: Adding a package to CVS 769721.4. Committing: Adding a package to CVS
768021.5. Updating a package to a newer version 769821.5. Updating a package to a newer version
768121.6. Renaming a package in pkgsrc 769921.6. Renaming a package in pkgsrc
768221.7. Moving a package in pkgsrc 770021.7. Moving a package in pkgsrc
7683 7701
768421.1. Submitting binary packages 770221.1. Submitting binary packages
7685 7703
7686Our policy is that we accept binaries only from pkgsrc developers to guarantee 7704Our policy is that we accept binaries only from pkgsrc developers to guarantee
7687that the packages don't contain any trojan horses etc. This is not to annoy 7705that the packages don't contain any trojan horses etc. This is not to annoy
7688anyone but rather to protect our users! You're still free to put up your 7706anyone but rather to protect our users! You're still free to put up your
7689home-made binary packages and tell the world where to get them. NetBSD 7707home-made binary packages and tell the world where to get them. NetBSD
7690developers doing bulk builds and wanting to upload them please see Chapter 7,  7708developers doing bulk builds and wanting to upload them please see Chapter 7,
7691Creating binary packages for everything in pkgsrc (bulk builds). 7709Creating binary packages for everything in pkgsrc (bulk builds).
7692 7710
769321.2. Submitting source packages (for non-NetBSD-developers) 771121.2. Submitting source packages (for non-NetBSD-developers)
7694 7712
7695First, check that your package is complete, compiles and runs well; see 7713First, check that your package is complete, compiles and runs well; see
7696Chapter 20, Debugging and the rest of this document. Next, generate an 7714Chapter 20, Debugging and the rest of this document. Next, generate an
7697uuencoded gzipped tar(1) archive that contains all files that make up the 7715uuencoded gzipped tar(1) archive that contains all files that make up the
7698package. Finally, send this package to the pkgsrc bug tracking system, either 7716package. Finally, send this package to the pkgsrc bug tracking system, either
7699with the send-pr(1) command, or if you don't have that, go to the web page 7717with the send-pr(1) command, or if you don't have that, go to the web page
7700http://www.NetBSD.org/support/send-pr.html, which contains some instructions 7718http://www.NetBSD.org/support/send-pr.html, which contains some instructions
7701and a link to a form where you can submit packages. The sysutils/gtk-send-pr 7719and a link to a form where you can submit packages. The sysutils/gtk-send-pr
7702package is also available as a substitute for either of the above two tools. 7720package is also available as a substitute for either of the above two tools.
7703 7721
7704In the form of the problem report, the category should be "pkg", the synopsis 7722In the form of the problem report, the category should be "pkg", the synopsis
7705should include the package name and version number, and the description field 7723should include the package name and version number, and the description field
7706should contain a short description of your package (contents of the COMMENT 7724should contain a short description of your package (contents of the COMMENT
7707variable or DESCR file are OK). The uuencoded package data should go into the " 7725variable or DESCR file are OK). The uuencoded package data should go into the "
7708fix" field. 7726fix" field.
7709 7727
7710If you want to submit several packages, please send a separate PR for each one, 7728If you want to submit several packages, please send a separate PR for each one,
7711it's easier for us to track things that way. 7729it's easier for us to track things that way.
7712 7730
7713Alternatively, you can also import new packages into pkgsrc-wip ("pkgsrc 7731Alternatively, you can also import new packages into pkgsrc-wip ("pkgsrc
7714work-in-progress"); see the homepage at http://pkgsrc-wip.sourceforge.net/ for 7732work-in-progress"); see the homepage at http://pkgsrc-wip.sourceforge.net/ for
7715details. 7733details.
7716 7734
771721.3. General notes when adding, updating, or removing packages 773521.3. General notes when adding, updating, or removing packages
7718 7736
7719Please note all package additions, updates, moves, and removals in pkgsrc/doc/ 7737Please note all package additions, updates, moves, and removals in pkgsrc/doc/
7720CHANGES-YYYY. It's very important to keep this file up to date and conforming 7738CHANGES-YYYY. It's very important to keep this file up to date and conforming
7721to the existing format, because it will be used by scripts to automatically 7739to the existing format, because it will be used by scripts to automatically
7722update pages on www.NetBSD.org and other sites. Additionally, check the pkgsrc/ 7740update pages on www.NetBSD.org and other sites. Additionally, check the pkgsrc/
7723doc/TODO file and remove the entry for the package you updated or removed, in 7741doc/TODO file and remove the entry for the package you updated or removed, in
7724case it was mentioned there. 7742case it was mentioned there.
7725 7743
7726When the PKGREVISION of a package is bumped, the change should appear in pkgsrc 7744When the PKGREVISION of a package is bumped, the change should appear in pkgsrc
7727/doc/CHANGES-YYYY if it is security related or otherwise relevant. Mass bumps 7745/doc/CHANGES-YYYY if it is security related or otherwise relevant. Mass bumps
7728that result from a dependency being updated should not be mentioned. In all 7746that result from a dependency being updated should not be mentioned. In all
7729other cases it's the developer's decision. 7747other cases it's the developer's decision.
7730 7748
7731There is a make target that helps in creating proper CHANGES-YYYY entries: make 7749There is a make target that helps in creating proper CHANGES-YYYY entries: make
7732changes-entry. It uses the optional CTYPE and NETBSD_LOGIN_NAME variables. The 7750changes-entry. It uses the optional CTYPE and NETBSD_LOGIN_NAME variables. The
7733general usage is to first make sure that your CHANGES-YYYY file is up-to-date 7751general usage is to first make sure that your CHANGES-YYYY file is up-to-date
7734(to avoid having to resolve conflicts later-on) and then to cd to the package 7752(to avoid having to resolve conflicts later-on) and then to cd to the package
7735directory. For package updates, make changes-entry is enough. For new packages, 7753directory. For package updates, make changes-entry is enough. For new packages,
7736or package moves or removals, set the CTYPE variable on the command line to 7754or package moves or removals, set the CTYPE variable on the command line to
7737"Added", "Moved", or "Removed". You can set NETBSD_LOGIN_NAME in mk.conf if 7755"Added", "Moved", or "Removed". You can set NETBSD_LOGIN_NAME in mk.conf if
7738your local login name is not the same as your NetBSD login name. The target 7756your local login name is not the same as your NetBSD login name. The target
7739also automatically removes possibly existing entries for the package in the 7757also automatically removes possibly existing entries for the package in the
7740TODO file. Don't forget to commit the changes, e.g. by using make 7758TODO file. Don't forget to commit the changes, e.g. by using make
7741commit-changes-entry! If you are not using a checkout directly from 7759commit-changes-entry! If you are not using a checkout directly from
7742cvs.NetBSD.org, but e.g. a local copy of the repository, you can set 7760cvs.NetBSD.org, but e.g. a local copy of the repository, you can set
7743USE_NETBSD_REPO=yes. This makes the cvs commands use the main repository. 7761USE_NETBSD_REPO=yes. This makes the cvs commands use the main repository.
7744 7762
774521.4. Committing: Adding a package to CVS 776321.4. Committing: Adding a package to CVS
7746 7764
7747This section is only of interest for pkgsrc developers with write access to the 7765This section is only of interest for pkgsrc developers with write access to the
7748pkgsrc repository. 7766pkgsrc repository.
7749 7767
7750When the package is finished, "cvs add" the files. Start by adding the 7768When the package is finished, "cvs add" the files. Start by adding the
7751directory and then files in the directory. Don't forget to add the new package 7769directory and then files in the directory. Don't forget to add the new package
7752to the category's Makefile. Make sure you don't forget any files; you can check 7770to the category's Makefile. Make sure you don't forget any files; you can check
7753by running "cvs status". An example: 7771by running "cvs status". An example:
7754 7772
7755$ cd .../pkgsrc/category 7773$ cd .../pkgsrc/category
7756$ cvs add pkgname 7774$ cvs add pkgname
7757$ cd pkgname 7775$ cd pkgname
7758$ cvs add DESCR Makefile PLIST distinfo buildlink3.mk patches 7776$ cvs add DESCR Makefile PLIST distinfo buildlink3.mk patches
7759$ cvs add patches/p* 7777$ cvs add patches/p*
7760$ cvs status | less 7778$ cvs status | less
7761$ cvs commit 7779$ cvs commit
7762$ cd .. 7780$ cd ..
7763$ vi Makefile # add SUBDIRS+=pkgname line 7781$ vi Makefile # add SUBDIRS+=pkgname line
7764$ cvs commit Makefile 7782$ cvs commit Makefile
7765$ cd pkgname 7783$ cd pkgname
7766$ make CTYPE=Added commit-changes-entry 7784$ make CTYPE=Added commit-changes-entry
7767 7785
7768The commit message of the initial import should include part of the DESCR file, 7786The commit message of the initial import should include part of the DESCR file,
7769so people reading the mailing lists know what the package is/does. 7787so people reading the mailing lists know what the package is/does.
7770 7788
7771Also mention the new package in pkgsrc/doc/CHANGES-20xx. 7789Also mention the new package in pkgsrc/doc/CHANGES-20xx.
7772 7790
7773Previously, "cvs import" was suggested, but it was much easier to get wrong 7791Previously, "cvs import" was suggested, but it was much easier to get wrong
7774than "cvs add". 7792than "cvs add".
7775 7793
777621.5. Updating a package to a newer version 779421.5. Updating a package to a newer version
7777 7795
7778Please always put a concise, appropriate and relevant summary of the changes 7796Please always put a concise, appropriate and relevant summary of the changes
7779between old and new versions into the commit log when updating a package. There 7797between old and new versions into the commit log when updating a package. There
7780are various reasons for this: 7798are various reasons for this:
7781 7799
7782 * A URL is volatile, and can change over time. It may go away completely or 7800 * A URL is volatile, and can change over time. It may go away completely or
7783 its information may be overwritten by newer information. 7801 its information may be overwritten by newer information.
7784 7802
7785 * Having the change information between old and new versions in our CVS 7803 * Having the change information between old and new versions in our CVS
7786 repository is very useful for people who use either cvs or anoncvs. 7804 repository is very useful for people who use either cvs or anoncvs.
7787 7805
7788 * Having the change information between old and new versions in our CVS 7806 * Having the change information between old and new versions in our CVS
7789 repository is very useful for people who read the pkgsrc-changes mailing 7807 repository is very useful for people who read the pkgsrc-changes mailing
7790 list, so that they can make tactical decisions about when to upgrade the 7808 list, so that they can make tactical decisions about when to upgrade the
7791 package. 7809 package.
7792 7810
7793Please also recognize that, just because a new version of a package has been 7811Please also recognize that, just because a new version of a package has been
7794released, it should not automatically be upgraded in the CVS repository. We 7812released, it should not automatically be upgraded in the CVS repository. We
7795prefer to be conservative in the packages that are included in pkgsrc - 7813prefer to be conservative in the packages that are included in pkgsrc -
7796development or beta packages are not really the best thing for most places in 7814development or beta packages are not really the best thing for most places in
7797which pkgsrc is used. Please use your judgement about what should go into 7815which pkgsrc is used. Please use your judgement about what should go into
7798pkgsrc, and bear in mind that stability is to be preferred above new and 7816pkgsrc, and bear in mind that stability is to be preferred above new and
7799possibly untested features. 7817possibly untested features.
7800 7818
780121.6. Renaming a package in pkgsrc 781921.6. Renaming a package in pkgsrc
7802 7820
7803Renaming packages is not recommended. 7821Renaming packages is not recommended.
7804 7822
7805When renaming packages, be sure to fix any references to old name in other 7823When renaming packages, be sure to fix any references to old name in other
7806Makefiles, options, buildlink files, etc. 7824Makefiles, options, buildlink files, etc.
7807 7825
7808Also When renaming a package, please define SUPERSEDES to the package name and 7826Also When renaming a package, please define SUPERSEDES to the package name and
7809dewey version pattern(s) of the previous package name. This may be repeated for 7827dewey version pattern(s) of the previous package name. This may be repeated for
7810multiple renames. The new package would be an exact replacement. 7828multiple renames. The new package would be an exact replacement.
7811 7829
7812Note that "successor" in the CHANGES-YYYY file doesn't necessarily mean that it 7830Note that "successor" in the CHANGES-YYYY file doesn't necessarily mean that it
7813supersedes, as that successor may not be an exact replacement but is a 7831supersedes, as that successor may not be an exact replacement but is a
7814suggestion for the replaced functionality. 7832suggestion for the replaced functionality.
7815 7833
781621.7. Moving a package in pkgsrc 783421.7. Moving a package in pkgsrc
7817 7835
7818It is preferred that packages are not renamed or moved, but if needed please 7836It is preferred that packages are not renamed or moved, but if needed please
7819follow these steps. 7837follow these steps.
7820 7838
7821 1. Make a copy of the directory somewhere else. 7839 1. Make a copy of the directory somewhere else.
7822 7840
7823 2. Remove all CVS dirs. 7841 2. Remove all CVS dirs.
7824 7842
7825 Alternatively to the first two steps you can also do: 7843 Alternatively to the first two steps you can also do:
7826 7844
7827 % cvs -d user@cvs.NetBSD.org:/cvsroot export -D today pkgsrc/category/package 7845 % cvs -d user@cvs.NetBSD.org:/cvsroot export -D today pkgsrc/category/package
7828 7846
7829 and use that for further work. 7847 and use that for further work.
7830 7848
7831 3. Fix CATEGORIES and any DEPENDS paths that just did "../package" instead of  7849 3. Fix CATEGORIES and any DEPENDS paths that just did "../package" instead of
7832 "../../category/package". 7850 "../../category/package".
7833 7851
7834 4. In the modified package's Makefile, consider setting PREV_PKGPATH to the 7852 4. In the modified package's Makefile, consider setting PREV_PKGPATH to the
7835 previous category/package pathname. The PREV_PKGPATH can be used by tools 7853 previous category/package pathname. The PREV_PKGPATH can be used by tools
7836 for doing an update using pkgsrc building; for example, it can search the 7854 for doing an update using pkgsrc building; for example, it can search the
7837 pkg_summary(5) database for PREV_PKGPATH (if no SUPERSEDES) and then use 7855 pkg_summary(5) database for PREV_PKGPATH (if no SUPERSEDES) and then use
7838 the corresponding new PKGPATH for that moved package. Note that it may have 7856 the corresponding new PKGPATH for that moved package. Note that it may have
7839 multiple matches, so the tool should also check on the PKGBASE too. The 7857 multiple matches, so the tool should also check on the PKGBASE too. The
7840 PREV_PKGPATH probably has no value unless SUPERSEDES is not set, i.e. 7858 PREV_PKGPATH probably has no value unless SUPERSEDES is not set, i.e.
7841 PKGBASE stays the same. 7859 PKGBASE stays the same.
7842 7860
7843 5. cvs import the modified package in the new place. 7861 5. cvs import the modified package in the new place.
7844 7862
7845 6. Check if any package depends on it: 7863 6. Check if any package depends on it:
7846 7864
7847 % cd /usr/pkgsrc 7865 % cd /usr/pkgsrc
7848 % grep /package */*/Makefile* */*/buildlink* 7866 % grep /package */*/Makefile* */*/buildlink*
7849 7867
7850 7. Fix paths in packages from step 5 to point to new location. 7868 7. Fix paths in packages from step 5 to point to new location.
7851 7869
7852 8. cvs rm (-f) the package at the old location. 7870 8. cvs rm (-f) the package at the old location.
7853 7871
7854 9. Remove from oldcategory/Makefile. 7872 9. Remove from oldcategory/Makefile.
7855 7873
785610. Add to newcategory/Makefile. 787410. Add to newcategory/Makefile.
7857 7875
785811. Commit the changed and removed files: 787611. Commit the changed and removed files:
7859 7877
7860 % cvs commit oldcategory/package oldcategory/Makefile newcategory/Makefile 7878 % cvs commit oldcategory/package oldcategory/Makefile newcategory/Makefile
7861 7879
7862 (and any packages from step 5, of course). 7880 (and any packages from step 5, of course).
7863 7881
7864Chapter 22. Frequently Asked Questions 7882Chapter 22. Frequently Asked Questions
7865 7883
7866This section contains the answers to questions that may arise when you are 7884This section contains the answers to questions that may arise when you are
7867writing a package. If you don't find your question answered here, first have a 7885writing a package. If you don't find your question answered here, first have a
7868look in the other chapters, and if you still don't have the answer, ask on the 7886look in the other chapters, and if you still don't have the answer, ask on the
7869pkgsrc-users mailing list. 7887pkgsrc-users mailing list.
7870 7888
787122.1. What is the difference between MAKEFLAGS, .MAKEFLAGS and MAKE_FLAGS? 788922.1. What is the difference between MAKEFLAGS, .MAKEFLAGS and MAKE_FLAGS?
787222.2. What is the difference between MAKE, GMAKE and MAKE_PROGRAM? 789022.2. What is the difference between MAKE, GMAKE and MAKE_PROGRAM?
787322.3. What is the difference between CC, PKG_CC and PKGSRC_COMPILER? 789122.3. What is the difference between CC, PKG_CC and PKGSRC_COMPILER?
787422.4. What is the difference between BUILDLINK_LDFLAGS, BUILDLINK_LDADD and 789222.4. What is the difference between BUILDLINK_LDFLAGS, BUILDLINK_LDADD and
7875 BUILDLINK_LIBS? 7893 BUILDLINK_LIBS?
787622.5. Why does make show-var VARNAME=BUILDLINK_PREFIX.foo say it's empty? 789422.5. Why does make show-var VARNAME=BUILDLINK_PREFIX.foo say it's empty?
787722.6. What does ${MASTER_SITE_SOURCEFORGE:=package/} mean? I don't understand 789522.6. What does ${MASTER_SITE_SOURCEFORGE:=package/} mean? I don't understand
7878 the := inside it. 7896 the := inside it.
787922.7. Which mailing lists are there for package developers? 789722.7. Which mailing lists are there for package developers?
788022.8. Where is the pkgsrc documentation? 789822.8. Where is the pkgsrc documentation?
788122.9. I have a little time to kill. What shall I do? 789922.9. I have a little time to kill. What shall I do?
7882 7900
788322.1. What is the difference between MAKEFLAGS, .MAKEFLAGS and MAKE_FLAGS? 790122.1. What is the difference between MAKEFLAGS, .MAKEFLAGS and MAKE_FLAGS?
7884 7902
7885 MAKEFLAGS are the flags passed to the pkgsrc-internal invocations of make 7903 MAKEFLAGS are the flags passed to the pkgsrc-internal invocations of make
7886 (1), while MAKE_FLAGS are the flags that are passed to the MAKE_PROGRAM 7904 (1), while MAKE_FLAGS are the flags that are passed to the MAKE_PROGRAM
7887 when building the package. [FIXME: What is .MAKEFLAGS for?] 7905 when building the package. [FIXME: What is .MAKEFLAGS for?]
7888 7906
788922.2. What is the difference between MAKE, GMAKE and MAKE_PROGRAM? 790722.2. What is the difference between MAKE, GMAKE and MAKE_PROGRAM?
7890 7908
7891 MAKE is the path to the make(1) program that is used in the pkgsrc 7909 MAKE is the path to the make(1) program that is used in the pkgsrc
7892 infrastructure. GMAKE is the path to GNU Make, but you need to say 7910 infrastructure. GMAKE is the path to GNU Make, but you need to say
7893 USE_TOOLS+=gmake to use that. MAKE_PROGRAM is the path to the Make 7911 USE_TOOLS+=gmake to use that. MAKE_PROGRAM is the path to the Make
7894 program that is used for building the package. 7912 program that is used for building the package.
7895 7913
789622.3. What is the difference between CC, PKG_CC and PKGSRC_COMPILER? 791422.3. What is the difference between CC, PKG_CC and PKGSRC_COMPILER?
7897 7915
7898 CC is the path to the real C compiler, which can be configured by the 7916 CC is the path to the real C compiler, which can be configured by the
7899 pkgsrc user. PKG_CC is the path to the compiler wrapper. PKGSRC_COMPILER 7917 pkgsrc user. PKG_CC is the path to the compiler wrapper. PKGSRC_COMPILER
7900 is not a path to a compiler, but the type of compiler that should be 7918 is not a path to a compiler, but the type of compiler that should be
7901 used. See mk/compiler.mk for more information about the latter variable. 7919 used. See mk/compiler.mk for more information about the latter variable.
7902 7920
790322.4. What is the difference between BUILDLINK_LDFLAGS, BUILDLINK_LDADD and 792122.4. What is the difference between BUILDLINK_LDFLAGS, BUILDLINK_LDADD and
7904 BUILDLINK_LIBS? 7922 BUILDLINK_LIBS?
7905 7923
7906 [FIXME] 7924 [FIXME]
7907 7925
790822.5. Why does make show-var VARNAME=BUILDLINK_PREFIX.foo say it's empty? 792622.5. Why does make show-var VARNAME=BUILDLINK_PREFIX.foo say it's empty?
7909 7927
7910 For optimization reasons, some variables are only available in the " 7928 For optimization reasons, some variables are only available in the "
7911 wrapper" phase and later. To "simulate" the wrapper phase, append  7929 wrapper" phase and later. To "simulate" the wrapper phase, append
7912 PKG_PHASE=wrapper to the above command. 7930 PKG_PHASE=wrapper to the above command.
7913 7931
791422.6. What does ${MASTER_SITE_SOURCEFORGE:=package/} mean? I don't understand 793222.6. What does ${MASTER_SITE_SOURCEFORGE:=package/} mean? I don't understand
7915 the := inside it. 7933 the := inside it.
7916 7934
7917 The := is not really an assignment operator, like you might expect at 7935 The := is not really an assignment operator, like you might expect at
7918 first sight. Instead, it is a degenerate form of ${LIST:old_string= 7936 first sight. Instead, it is a degenerate form of ${LIST:old_string=
7919 new_string}, which is documented in the make(1) man page and which you 7937 new_string}, which is documented in the make(1) man page and which you
7920 may have seen as in ${SRCS:.c=.o}. In the case of MASTER_SITE_*, 7938 may have seen as in ${SRCS:.c=.o}. In the case of MASTER_SITE_*,
7921 old_string is the empty string and new_string is package/. That's where 7939 old_string is the empty string and new_string is package/. That's where
7922 the : and the = fall together. 7940 the : and the = fall together.
7923 7941
792422.7. Which mailing lists are there for package developers? 794222.7. Which mailing lists are there for package developers?
7925 7943
7926 tech-pkg 7944 tech-pkg
7927 7945
7928 This is a list for technical discussions related to pkgsrc 7946 This is a list for technical discussions related to pkgsrc
7929 development, e.g. soliciting feedback for changes to pkgsrc 7947 development, e.g. soliciting feedback for changes to pkgsrc
7930 infrastructure, proposed new features, questions related to porting 7948 infrastructure, proposed new features, questions related to porting
7931 pkgsrc to a new platform, advice for maintaining a package, patches 7949 pkgsrc to a new platform, advice for maintaining a package, patches
7932 that affect many packages, help requests moved from pkgsrc-users when 7950 that affect many packages, help requests moved from pkgsrc-users when
7933 an infrastructure bug is found, etc. 7951 an infrastructure bug is found, etc.
7934 7952
7935 pkgsrc-bugs 7953 pkgsrc-bugs
7936 7954
7937 All bug reports in category "pkg" sent with send-pr(1) appear here. 7955 All bug reports in category "pkg" sent with send-pr(1) appear here.
7938 Please do not report your bugs here directly; use one of the other 7956 Please do not report your bugs here directly; use one of the other
7939 mailing lists. 7957 mailing lists.
7940 7958
794122.8. Where is the pkgsrc documentation? 795922.8. Where is the pkgsrc documentation?
7942 7960
7943 There are many places where you can find documentation about pkgsrc: 7961 There are many places where you can find documentation about pkgsrc:
7944 7962
7945 * The pkgsrc guide (this document) is a collection of chapters that 7963 * The pkgsrc guide (this document) is a collection of chapters that
7946 explain large parts of pkgsrc, but some chapters tend to be outdated. 7964 explain large parts of pkgsrc, but some chapters tend to be outdated.
7947 Which ones they are is hard to say. 7965 Which ones they are is hard to say.
7948 7966
7949 * On the mailing list archives (see http://mail-index.NetBSD.org/), you 7967 * On the mailing list archives (see http://mail-index.NetBSD.org/), you
7950 can find discussions about certain features, announcements of new 7968 can find discussions about certain features, announcements of new
7951 parts of the pkgsrc infrastructure and sometimes even announcements 7969 parts of the pkgsrc infrastructure and sometimes even announcements
7952 that a certain feature has been marked as obsolete. The benefit here 7970 that a certain feature has been marked as obsolete. The benefit here
7953 is that each message has a date appended to it. 7971 is that each message has a date appended to it.
7954 7972
7955 * Many of the files in the mk/ directory start with a comment that 7973 * Many of the files in the mk/ directory start with a comment that
7956 describes the purpose of the file and how it can be used by the 7974 describes the purpose of the file and how it can be used by the
7957 pkgsrc user and package authors. An easy way to find this 7975 pkgsrc user and package authors. An easy way to find this
7958 documentation is to run bmake help. 7976 documentation is to run bmake help.
7959 7977
7960 * The CVS log messages are a rich source of information, but they tend 7978 * The CVS log messages are a rich source of information, but they tend
7961 to be highly abbreviated, especially for actions that occur often. 7979 to be highly abbreviated, especially for actions that occur often.
7962 Some contain a detailed description of what has changed, but they are 7980 Some contain a detailed description of what has changed, but they are
7963 geared towards the other pkgsrc developers, not towards an average 7981 geared towards the other pkgsrc developers, not towards an average
7964 pkgsrc user. They also only document changes, so if you don't know 7982 pkgsrc user. They also only document changes, so if you don't know
7965 what has been before, these messages may not be worth too much to 7983 what has been before, these messages may not be worth too much to
7966 you. 7984 you.
7967 7985
7968 * Some parts of pkgsrc are only "implicitly documented", that is the 7986 * Some parts of pkgsrc are only "implicitly documented", that is the
7969 documentation exists only in the mind of the developer who wrote the 7987 documentation exists only in the mind of the developer who wrote the
7970 code. To get this information, use the cvs annotate command to see 7988 code. To get this information, use the cvs annotate command to see
7971 who has written it and ask on the tech-pkg mailing list, so that 7989 who has written it and ask on the tech-pkg mailing list, so that
7972 others can find your questions later (see above). To be sure that the 7990 others can find your questions later (see above). To be sure that the
7973 developer in charge reads the mail, you may CC him or her. 7991 developer in charge reads the mail, you may CC him or her.
7974 7992
797522.9. I have a little time to kill. What shall I do? 799322.9. I have a little time to kill. What shall I do?
7976 7994
7977 This is not really an FAQ yet, but here's the answer anyway. 7995 This is not really an FAQ yet, but here's the answer anyway.
7978 7996
7979 * Run pkg_chk -N (from the pkgtools/pkg_chk package). It will tell you 7997 * Run pkg_chk -N (from the pkgtools/pkg_chk package). It will tell you
7980 about newer versions of installed packages that are available, but 7998 about newer versions of installed packages that are available, but
7981 not yet updated in pkgsrc. 7999 not yet updated in pkgsrc.
7982 8000
7983 * Browse pkgsrc/doc/TODO ? it contains a list of suggested new packages 8001 * Browse pkgsrc/doc/TODO ? it contains a list of suggested new packages
7984 and a list of cleanups and enhancements for pkgsrc that would be nice 8002 and a list of cleanups and enhancements for pkgsrc that would be nice
7985 to have. 8003 to have.
7986 8004
7987 * Review packages for which review was requested on the tech-pkg 8005 * Review packages for which review was requested on the tech-pkg
7988 mailing list. 8006 mailing list.
7989 8007
7990Chapter 23. GNOME packaging and porting 8008Chapter 23. GNOME packaging and porting
7991 8009
7992Table of Contents 8010Table of Contents
7993 8011
799423.1. Meta packages 801223.1. Meta packages
799523.2. Packaging a GNOME application 801323.2. Packaging a GNOME application
799623.3. Updating GNOME to a newer version 801423.3. Updating GNOME to a newer version
799723.4. Patching guidelines 801523.4. Patching guidelines
7998 8016
7999Quoting GNOME's web site: 8017Quoting GNOME's web site:
8000 8018
8001 The GNOME project provides two things: The GNOME desktop environment, an 8019 The GNOME project provides two things: The GNOME desktop environment, an
8002 intuitive and attractive desktop for users, and the GNOME development 8020 intuitive and attractive desktop for users, and the GNOME development
8003 platform, an extensive framework for building applications that integrate 8021 platform, an extensive framework for building applications that integrate
8004 into the rest of the desktop. 8022 into the rest of the desktop.
8005 8023
8006pkgsrc provides a seamless way to automatically build and install a complete 8024pkgsrc provides a seamless way to automatically build and install a complete
8007GNOME environment under many different platforms. We can say with confidence 8025GNOME environment under many different platforms. We can say with confidence
8008that pkgsrc is one of the most advanced build and packaging systems for GNOME 8026that pkgsrc is one of the most advanced build and packaging systems for GNOME
8009due to its included technologies buildlink3, the wrappers and tools framework 8027due to its included technologies buildlink3, the wrappers and tools framework
8010and automatic configuration file management. Lots of efforts are put into 8028and automatic configuration file management. Lots of efforts are put into
8011achieving a completely clean deinstallation of installed software components. 8029achieving a completely clean deinstallation of installed software components.
8012 8030
8013Given that pkgsrc is NetBSD's official packaging system, the above also means 8031Given that pkgsrc is NetBSD's official packaging system, the above also means
8014that great efforts are put into making GNOME work under this operating system. 8032that great efforts are put into making GNOME work under this operating system.
8015Recently, DragonFly BSD also adopted pkgsrc as its preferred packaging system, 8033Recently, DragonFly BSD also adopted pkgsrc as its preferred packaging system,
8016contributing lots of portability fixes to make GNOME build and install under 8034contributing lots of portability fixes to make GNOME build and install under
8017it. 8035it.
8018 8036
8019This chapter is aimed at pkgsrc developers and other people interested in 8037This chapter is aimed at pkgsrc developers and other people interested in
8020helping our GNOME porting and packaging efforts. It provides instructions on 8038helping our GNOME porting and packaging efforts. It provides instructions on
8021how to manage the existing packages and some important information regarding 8039how to manage the existing packages and some important information regarding
8022their internals. 8040their internals.
8023 8041
8024We need your help! 8042We need your help!
8025 8043
8026Should you have some spare cycles to devote to NetBSD, pkgsrc and GNOME and are 8044Should you have some spare cycles to devote to NetBSD, pkgsrc and GNOME and are
8027willing to learn new exciting stuff, please jump straight to the pending work 8045willing to learn new exciting stuff, please jump straight to the pending work
8028list! There is still a long way to go to get a fully-functional GNOME desktop 8046list! There is still a long way to go to get a fully-functional GNOME desktop
8029under NetBSD and we need your help to achieve it! 8047under NetBSD and we need your help to achieve it!
8030 8048
803123.1. Meta packages 804923.1. Meta packages
8032 8050
8033pkgsrc includes three GNOME-related meta packages: 8051pkgsrc includes three GNOME-related meta packages:
8034 8052
8035 * meta-pkgs/gnome-base: Provides the core GNOME desktop environment. It only 8053 * meta-pkgs/gnome-base: Provides the core GNOME desktop environment. It only
8036 includes the necessary bits to get it to boot correctly, although it may 8054 includes the necessary bits to get it to boot correctly, although it may
8037 lack important functionality for daily operation. The idea behind this 8055 lack important functionality for daily operation. The idea behind this
8038 package is to let end users build their own configurations on top of this 8056 package is to let end users build their own configurations on top of this
8039 one, first installing this meta package to achieve a functional setup and 8057 one, first installing this meta package to achieve a functional setup and
8040 then adding individual applications. 8058 then adding individual applications.
8041 8059
8042 * meta-pkgs/gnome: Provides a complete installation of the GNOME platform and 8060 * meta-pkgs/gnome: Provides a complete installation of the GNOME platform and
8043 desktop as defined by the GNOME project; this is based on the components 8061 desktop as defined by the GNOME project; this is based on the components
8044 distributed in the platform/x.y/x.y.z/sources and desktop/x.y/x.y.z/sources 8062 distributed in the platform/x.y/x.y.z/sources and desktop/x.y/x.y.z/sources
8045 directories of the official FTP server. Developer-only tools found in those 8063 directories of the official FTP server. Developer-only tools found in those
8046 directories are not installed unless required by some other component to 8064 directories are not installed unless required by some other component to
8047 work properly. Similarly, packages from the bindings set (bindings/x.y/ 8065 work properly. Similarly, packages from the bindings set (bindings/x.y/
8048 x.y.z/sources) are not pulled in unless required as a dependency for an 8066 x.y.z/sources) are not pulled in unless required as a dependency for an
8049 end-user component. This package "extends" meta-pkgs/gnome-base. 8067 end-user component. This package "extends" meta-pkgs/gnome-base.
8050 8068
8051 * meta-pkgs/gnome-devel: Installs all the tools required to build a GNOME 8069 * meta-pkgs/gnome-devel: Installs all the tools required to build a GNOME
8052 component when fetched from the CVS repository. These are required to let 8070 component when fetched from the CVS repository. These are required to let
8053 the autogen.sh scripts work appropriately. 8071 the autogen.sh scripts work appropriately.
8054 8072
8055In all these packages, the DEPENDS lines are sorted in a way that eases 8073In all these packages, the DEPENDS lines are sorted in a way that eases
8056updates: a package may depend on other packages listed before it but not on any 8074updates: a package may depend on other packages listed before it but not on any
8057listed after it. It is very important to keep this order to ease updates so...  8075listed after it. It is very important to keep this order to ease updates so...
8058do not change it to alphabetical sorting! 8076do not change it to alphabetical sorting!
8059 8077
806023.2. Packaging a GNOME application 807823.2. Packaging a GNOME application
8061 8079
8062Almost all GNOME applications are written in C and use a common set of tools as 8080Almost all GNOME applications are written in C and use a common set of tools as
8063their build system. Things get different with the new bindings to other 8081their build system. Things get different with the new bindings to other
8064languages (such as Python), but the following will give you a general idea on 8082languages (such as Python), but the following will give you a general idea on
8065the minimum required tools: 8083the minimum required tools:
8066 8084
8067 * Almost all GNOME applications use the GNU Autotools as their build system. 8085 * Almost all GNOME applications use the GNU Autotools as their build system.
8068 As a general rule you will need to tell this to your package: 8086 As a general rule you will need to tell this to your package:
8069 8087
8070 GNU_CONFIGURE=yes 8088 GNU_CONFIGURE=yes
8071 USE_LIBTOOL=yes 8089 USE_LIBTOOL=yes
8072 USE_TOOLS+=gmake 8090 USE_TOOLS+=gmake
8073 8091
8074 * If the package uses pkg-config to detect dependencies, add this tool to the 8092 * If the package uses pkg-config to detect dependencies, add this tool to the
8075 list of required utilities: 8093 list of required utilities:
8076 8094
8077 USE_TOOLS+=pkg-config 8095 USE_TOOLS+=pkg-config
8078 8096
8079 Also use pkgtools/verifypc at the end of the build process to ensure that 8097 Also use pkgtools/verifypc at the end of the build process to ensure that
8080 you did not miss to specify any dependency in your package and that the 8098 you did not miss to specify any dependency in your package and that the
8081 version requirements are all correct. 8099 version requirements are all correct.
8082 8100
8083 * If the package uses intltool, be sure to add intltool to the USE_TOOLS to 8101 * If the package uses intltool, be sure to add intltool to the USE_TOOLS to
8084 handle dependencies and to force the package to use the latest available 8102 handle dependencies and to force the package to use the latest available
8085 version. 8103 version.
8086 8104
8087 * If the package uses gtk-doc (a documentation generation utility), do not 8105 * If the package uses gtk-doc (a documentation generation utility), do not
8088 add a dependency on it. The tool is rather big and the distfile should come 8106 add a dependency on it. The tool is rather big and the distfile should come
8089 with pregenerated documentation anyway; if it does not, it is a bug that 8107 with pregenerated documentation anyway; if it does not, it is a bug that
8090 you ought to report. For such packages you should disable gtk-doc (unless 8108 you ought to report. For such packages you should disable gtk-doc (unless
8091 it is the default): 8109 it is the default):
8092 8110
8093 CONFIGURE_ARGS+=--disable-gtk-doc 8111 CONFIGURE_ARGS+=--disable-gtk-doc
8094 8112
8095 The default location of installed HTML files (share/gtk-doc/<package-name>) 8113 The default location of installed HTML files (share/gtk-doc/<package-name>)
8096 is correct and should not be changed unless the package insists on 8114 is correct and should not be changed unless the package insists on
8097 installing them somewhere else. Otherwise programs as devhelp will not be 8115 installing them somewhere else. Otherwise programs as devhelp will not be
8098 able to open them. You can do that with an entry similar to: 8116 able to open them. You can do that with an entry similar to:
8099 8117
8100 CONFIGURE_ARGS+=--with-html-dir=${PREFIX}/share/gtk-doc/... 8118 CONFIGURE_ARGS+=--with-html-dir=${PREFIX}/share/gtk-doc/...
8101 8119
8102GNOME uses multiple shared directories and files under the installation prefix 8120GNOME uses multiple shared directories and files under the installation prefix
8103to maintain databases. In this context, shared means that those exact same 8121to maintain databases. In this context, shared means that those exact same
8104directories and files are used among several different packages, leading to 8122directories and files are used among several different packages, leading to
8105conflicts in the PLIST. pkgsrc currently includes functionality to handle the 8123conflicts in the PLIST. pkgsrc currently includes functionality to handle the
8106most common cases, so you have to forget about using @unexec ${RMDIR} lines in 8124most common cases, so you have to forget about using @unexec ${RMDIR} lines in
8107your file lists and omitting shared files from them. If you find yourself doing 8125your file lists and omitting shared files from them. If you find yourself doing
8108those, your package is most likely incorrect. 8126those, your package is most likely incorrect.
8109 8127
8110The following table lists the common situations that result in using shared 8128The following table lists the common situations that result in using shared
8111directories or files. For each of them, the appropriate solution is given. 8129directories or files. For each of them, the appropriate solution is given.
8112After applying the solution be sure to regenerate the package's file list with  8130After applying the solution be sure to regenerate the package's file list with
8113make print-PLIST and ensure it is correct. 8131make print-PLIST and ensure it is correct.
8114 8132
8115Table 23.1. PLIST handling for GNOME packages 8133Table 23.1. PLIST handling for GNOME packages
8116 8134
8117+-----------------------------------------------------------------------------+ 8135+-----------------------------------------------------------------------------+
8118| If the package... | Then... | 8136| If the package... | Then... |
8119|-------------------------------------------+---------------------------------| 8137|-------------------------------------------+---------------------------------|
8120| |See Section 19.6.10, "Packages | 8138| |See Section 19.6.10, "Packages |
8121|Installs OMF files under share/omf. |installing scrollkeeper/rarian | 8139|Installs OMF files under share/omf. |installing scrollkeeper/rarian |
8122| |data files". | 8140| |data files". |
8123|-------------------------------------------+---------------------------------| 8141|-------------------------------------------+---------------------------------|
8124|Installs icons under the share/icons/ |See Section 19.6.19, "Packages | 8142|Installs icons under the share/icons/ |See Section 19.6.19, "Packages |
8125|hicolor hierarchy or updates share/icons/ |installing hicolor theme icons". | 8143|hicolor hierarchy or updates share/icons/ |installing hicolor theme icons". |
8126|hicolor/icon-theme.cache. | | 8144|hicolor/icon-theme.cache. | |
8127|-------------------------------------------+---------------------------------| 8145|-------------------------------------------+---------------------------------|
8128| |See Section 19.6.14, "Packages | 8146| |See Section 19.6.14, "Packages |
8129|Installs files under share/mime/packages. |installing extensions to the MIME| 8147|Installs files under share/mime/packages. |installing extensions to the MIME|
8130| |database". | 8148| |database". |
8131|-------------------------------------------+---------------------------------| 8149|-------------------------------------------+---------------------------------|
8132|Installs .desktop files under share/ |See Section 19.6.20, "Packages | 8150|Installs .desktop files under share/ |See Section 19.6.20, "Packages |
8133|applications and these include MIME |installing desktop files". | 8151|applications and these include MIME |installing desktop files". |
8134|information. | | 8152|information. | |
8135+-----------------------------------------------------------------------------+ 8153+-----------------------------------------------------------------------------+
8136 8154
8137 8155
813823.3. Updating GNOME to a newer version 815623.3. Updating GNOME to a newer version
8139 8157
8140When seeing GNOME as a whole, there are two kinds of updates: 8158When seeing GNOME as a whole, there are two kinds of updates:
8141 8159
8142Major update 8160Major update
8143 8161
8144 Given that there is still a very long way for GNOME 3 (if it ever appears), 8162 Given that there is still a very long way for GNOME 3 (if it ever appears),
8145 we consider a major update one that goes from a 2.X version to a 2.Y one, 8163 we consider a major update one that goes from a 2.X version to a 2.Y one,
8146 where Y is even and greater than X. These are hard to achieve because they 8164 where Y is even and greater than X. These are hard to achieve because they
8147 introduce lots of changes in the components' code and almost all GNOME 8165 introduce lots of changes in the components' code and almost all GNOME
8148 distfiles are updated to newer versions. Some of them can even break API 8166 distfiles are updated to newer versions. Some of them can even break API
8149 and ABI compatibility with the previous major version series. As a result, 8167 and ABI compatibility with the previous major version series. As a result,
8150 the update needs to be done all at once to minimize breakage. 8168 the update needs to be done all at once to minimize breakage.
8151 8169
8152 A major update typically consists of around 80 package updates and the 8170 A major update typically consists of around 80 package updates and the
8153 addition of some new ones. 8171 addition of some new ones.
8154 8172
8155Minor update 8173Minor update
8156 8174
8157 We consider a minor update one that goes from a 2.A.X version to a 2.A.Y 8175 We consider a minor update one that goes from a 2.A.X version to a 2.A.Y
8158 one where Y is greater than X. These are easy to achieve because they do 8176 one where Y is greater than X. These are easy to achieve because they do
8159 not update all GNOME components, can be done in an incremental way and do 8177 not update all GNOME components, can be done in an incremental way and do
8160 not break API nor ABI compatibility. 8178 not break API nor ABI compatibility.
8161 8179
8162 A minor update typically consists of around 50 package updates, although 8180 A minor update typically consists of around 50 package updates, although
8163 the numbers here may vary a lot. 8181 the numbers here may vary a lot.
8164 8182
8165In order to update the GNOME components in pkgsrc to a new stable release 8183In order to update the GNOME components in pkgsrc to a new stable release
8166(either major or minor), the following steps should be followed: 8184(either major or minor), the following steps should be followed:
8167 8185
8168 1. Get a list of all the tarballs that form the new release by using the 8186 1. Get a list of all the tarballs that form the new release by using the
8169 following commands. These will leave the full list of the components' 8187 following commands. These will leave the full list of the components'
8170 distfiles into the list.txt file: 8188 distfiles into the list.txt file:
8171 8189
8172 % echo ls "*.tar.bz2" | \ 8190 % echo ls "*.tar.bz2" | \
8173 ftp -V ftp://ftp.gnome.org/pub/gnome/platform/x.y/x.y.z/sources/ | \ 8191 ftp -V ftp://ftp.gnome.org/pub/gnome/platform/x.y/x.y.z/sources/ | \
8174 awk '{ print $9 }' >list.txt 8192 awk '{ print $9 }' >list.txt
8175 % echo ls "*.tar.bz2" | \ 8193 % echo ls "*.tar.bz2" | \
8176 ftp -V ftp://ftp.gnome.org/pub/gnome/desktop/x.y/x.y.z/sources/ | \ 8194 ftp -V ftp://ftp.gnome.org/pub/gnome/desktop/x.y/x.y.z/sources/ | \
8177 awk '{ print $9 }' >>list.txt 8195 awk '{ print $9 }' >>list.txt
8178 8196
8179 2. Open each meta package's Makefile and bump their version to the release you 8197 2. Open each meta package's Makefile and bump their version to the release you
8180 are updating them to. The three meta packages should be always consistent 8198 are updating them to. The three meta packages should be always consistent
8181 with versioning. Obviously remove any PKGREVISIONs that might be in them. 8199 with versioning. Obviously remove any PKGREVISIONs that might be in them.
8182 8200
8183 3. For each meta package, update all its DEPENDS lines to match the latest 8201 3. For each meta package, update all its DEPENDS lines to match the latest
8184 versions as shown by the above commands. Do not list any newer version 8202 versions as shown by the above commands. Do not list any newer version
8185 (even if found in the FTP) because the meta packages are supposed to list 8203 (even if found in the FTP) because the meta packages are supposed to list
8186 the exact versions that form a specific GNOME release. Exceptions are 8204 the exact versions that form a specific GNOME release. Exceptions are
8187 permitted here if a newer version solves a serious issue in the overall 8205 permitted here if a newer version solves a serious issue in the overall
8188 desktop experience; these typically come in the form of a revision bump in 8206 desktop experience; these typically come in the form of a revision bump in
8189 pkgsrc, not in newer versions from the developers. 8207 pkgsrc, not in newer versions from the developers.
8190 8208
8191 Packages not listed in the list.txt file should be updated to the latest 8209 Packages not listed in the list.txt file should be updated to the latest
8192 version available (if found in pkgsrc). This is the case, for example, of 8210 version available (if found in pkgsrc). This is the case, for example, of
8193 the dependencies on the GNU Autotools in the meta-pkgs/gnome-devel meta 8211 the dependencies on the GNU Autotools in the meta-pkgs/gnome-devel meta
8194 package. 8212 package.
8195 8213
8196 4. Generate a patch from the modified meta packages and extract the list of 8214 4. Generate a patch from the modified meta packages and extract the list of
8197 "new" lines. This will provide you an outline on what packages need to be 8215 "new" lines. This will provide you an outline on what packages need to be
8198 updated in pkgsrc and in what order: 8216 updated in pkgsrc and in what order:
8199 8217
8200 % cvs diff -u gnome-devel gnome-base gnome | grep '^+D' >todo.txt 8218 % cvs diff -u gnome-devel gnome-base gnome | grep '^+D' >todo.txt
8201 8219
8202 5. For major desktop updates it is recommended to zap all your installed 8220 5. For major desktop updates it is recommended to zap all your installed
8203 packages and start over from scratch at this point. 8221 packages and start over from scratch at this point.
8204 8222
8205 6. Now comes the longest step by far: iterate over the contents of todo.txt 8223 6. Now comes the longest step by far: iterate over the contents of todo.txt
8206 and update the packages listed in it in order. For major desktop updates 8224 and update the packages listed in it in order. For major desktop updates
8207 none of these should be committed until the entire set is completed because 8225 none of these should be committed until the entire set is completed because
8208 there are chances of breaking not-yet-updated packages. 8226 there are chances of breaking not-yet-updated packages.
8209 8227
8210 7. Once the packages are up to date and working, commit them to the tree one 8228 7. Once the packages are up to date and working, commit them to the tree one
8211 by one with appropriate log messages. At the end, commit the three meta 8229 by one with appropriate log messages. At the end, commit the three meta
8212 package updates and all the corresponding changes to the doc/CHANGES-<YEAR> 8230 package updates and all the corresponding changes to the doc/CHANGES-<YEAR>
8213 and pkgsrc/doc/TODO files. 8231 and pkgsrc/doc/TODO files.
8214 8232
821523.4. Patching guidelines 823323.4. Patching guidelines
8216 8234
8217GNOME is a very big component in pkgsrc which approaches 100 packages. Please, 8235GNOME is a very big component in pkgsrc which approaches 100 packages. Please,
8218it is very important that you always, always, always feed back any portability 8236it is very important that you always, always, always feed back any portability
8219fixes you do to a GNOME package to the mainstream developers (see 8237fixes you do to a GNOME package to the mainstream developers (see
8220Section 11.3.5, "Feedback to the author"). This is the only way to get their 8238Section 11.3.5, "Feedback to the author"). This is the only way to get their
8221attention on portability issues and to ensure that future versions can be built 8239attention on portability issues and to ensure that future versions can be built
8222out-of-the box on NetBSD. The less custom patches in pkgsrc, the easier further 8240out-of-the box on NetBSD. The less custom patches in pkgsrc, the easier further
8223updates are. Those developers in charge of issuing major GNOME updates will be 8241updates are. Those developers in charge of issuing major GNOME updates will be
8224grateful if you do that. 8242grateful if you do that.
8225 8243
8226The most common places to report bugs are the GNOME's Bugzilla and the 8244The most common places to report bugs are the GNOME's Bugzilla and the
8227freedesktop.org's Bugzilla. Not all components use these to track bugs, but 8245freedesktop.org's Bugzilla. Not all components use these to track bugs, but
8228most of them do. Do not be short on your reports: always provide detailed 8246most of them do. Do not be short on your reports: always provide detailed
8229explanations of the current failure, how it can be improved to achieve maximum 8247explanations of the current failure, how it can be improved to achieve maximum
8230portability and, if at all possible, provide a patch against CVS head. The more 8248portability and, if at all possible, provide a patch against CVS head. The more
8231verbose you are, the higher chances of your patch being accepted. 8249verbose you are, the higher chances of your patch being accepted.
8232 8250
8233Also, please avoid using preprocessor magic to fix portability issues. While 8251Also, please avoid using preprocessor magic to fix portability issues. While
8234the FreeBSD GNOME people are doing a great job in porting GNOME to their 8252the FreeBSD GNOME people are doing a great job in porting GNOME to their
8235operating system, the official GNOME sources are now plagued by conditionals 8253operating system, the official GNOME sources are now plagued by conditionals
8236that check for __FreeBSD__ and similar macros. This hurts portability. Please 8254that check for __FreeBSD__ and similar macros. This hurts portability. Please
8237see our patching guidelines (Section 11.3.4, "Patching guidelines") for more 8255see our patching guidelines (Section 11.3.4, "Patching guidelines") for more
8238details. 8256details.
8239 8257
8240Part III. The pkgsrc infrastructure internals 8258Part III. The pkgsrc infrastructure internals
8241 8259
8242This part of the guide deals with everything from the infrastructure that is 8260This part of the guide deals with everything from the infrastructure that is
8243behind the interfaces described in the developer's guide. A casual package 8261behind the interfaces described in the developer's guide. A casual package
8244maintainer should not need anything from this part. 8262maintainer should not need anything from this part.
8245 8263
8246Table of Contents 8264Table of Contents
8247 8265
824824. Design of the pkgsrc infrastructure 826624. Design of the pkgsrc infrastructure
8249 8267
8250 24.1. The meaning of variable definitions 8268 24.1. The meaning of variable definitions
8251 24.2. Avoiding problems before they arise 8269 24.2. Avoiding problems before they arise
8252 24.3. Variable evaluation 8270 24.3. Variable evaluation
8253 8271
8254 24.3.1. At load time 8272 24.3.1. At load time
8255 24.3.2. At runtime 8273 24.3.2. At runtime
8256 8274
8257 24.4. How can variables be specified? 8275 24.4. How can variables be specified?
8258 24.5. Designing interfaces for Makefile fragments 8276 24.5. Designing interfaces for Makefile fragments
8259 8277
8260 24.5.1. Procedures with parameters 8278 24.5.1. Procedures with parameters
8261 24.5.2. Actions taken on behalf of parameters 8279 24.5.2. Actions taken on behalf of parameters
8262 8280
8263 24.6. The order in which files are loaded 8281 24.6. The order in which files are loaded
8264 8282
8265 24.6.1. The order in bsd.prefs.mk 8283 24.6.1. The order in bsd.prefs.mk
8266 24.6.2. The order in bsd.pkg.mk 8284 24.6.2. The order in bsd.pkg.mk
8267 8285
826825. Regression tests 828625. Regression tests
8269 8287
8270 25.1. The regression tests framework 8288 25.1. The regression tests framework
8271 25.2. Running the regression tests 8289 25.2. Running the regression tests
8272 25.3. Adding a new regression test 8290 25.3. Adding a new regression test
8273 8291
8274 25.3.1. Overridable functions 8292 25.3.1. Overridable functions
8275 25.3.2. Helper functions 8293 25.3.2. Helper functions
8276 8294
827726. Porting pkgsrc 829526. Porting pkgsrc
8278 8296
8279 26.1. Porting pkgsrc to a new operating system 8297 26.1. Porting pkgsrc to a new operating system
8280 26.2. Adding support for a new compiler 8298 26.2. Adding support for a new compiler
8281 8299
8282Chapter 24. Design of the pkgsrc infrastructure 8300Chapter 24. Design of the pkgsrc infrastructure
8283 8301
8284Table of Contents 8302Table of Contents
8285 8303
828624.1. The meaning of variable definitions 830424.1. The meaning of variable definitions
828724.2. Avoiding problems before they arise 830524.2. Avoiding problems before they arise
828824.3. Variable evaluation 830624.3. Variable evaluation
8289 8307
8290 24.3.1. At load time 8308 24.3.1. At load time
8291 24.3.2. At runtime 8309 24.3.2. At runtime
8292 8310
829324.4. How can variables be specified? 831124.4. How can variables be specified?
829424.5. Designing interfaces for Makefile fragments 831224.5. Designing interfaces for Makefile fragments
8295 8313
8296 24.5.1. Procedures with parameters 8314 24.5.1. Procedures with parameters
8297 24.5.2. Actions taken on behalf of parameters 8315 24.5.2. Actions taken on behalf of parameters
8298 8316
829924.6. The order in which files are loaded 831724.6. The order in which files are loaded
8300 8318
8301 24.6.1. The order in bsd.prefs.mk 8319 24.6.1. The order in bsd.prefs.mk
8302 24.6.2. The order in bsd.pkg.mk 8320 24.6.2. The order in bsd.pkg.mk
8303 8321
8304The pkgsrc infrastructure consists of many small Makefile fragments. Each such 8322The pkgsrc infrastructure consists of many small Makefile fragments. Each such
8305fragment needs a properly specified interface. This chapter explains how such 8323fragment needs a properly specified interface. This chapter explains how such
8306an interface looks like. 8324an interface looks like.
8307 8325
830824.1. The meaning of variable definitions 832624.1. The meaning of variable definitions
8309 8327
8310Whenever a variable is defined in the pkgsrc infrastructure, the location and 8328Whenever a variable is defined in the pkgsrc infrastructure, the location and
8311the way of definition provide much information about the intended use of that 8329the way of definition provide much information about the intended use of that
8312variable. Additionally, more documentation may be found in a header comment or 8330variable. Additionally, more documentation may be found in a header comment or
8313in this pkgsrc guide. 8331in this pkgsrc guide.
8314 8332
8315A special file is mk/defaults/mk.conf, which lists all variables that are 8333A special file is mk/defaults/mk.conf, which lists all variables that are
8316intended to be user-defined. They are either defined using the ?= operator or 8334intended to be user-defined. They are either defined using the ?= operator or
8317they are left undefined because defining them to anything would effectively 8335they are left undefined because defining them to anything would effectively
8318mean "yes". All these variables may be overridden by the pkgsrc user in the 8336mean "yes". All these variables may be overridden by the pkgsrc user in the
8319MAKECONF file. 8337MAKECONF file.
8320 8338
8321Outside this file, the following conventions apply: Variables that are defined 8339Outside this file, the following conventions apply: Variables that are defined
8322using the ?= operator may be overridden by a package. 8340using the ?= operator may be overridden by a package.
8323 8341
8324Variables that are defined using the = operator may be used read-only at 8342Variables that are defined using the = operator may be used read-only at
8325run-time. 8343run-time.
8326 8344
8327Variables whose name starts with an underscore must not be accessed outside the 8345Variables whose name starts with an underscore must not be accessed outside the
8328pkgsrc infrastructure at all. They may change without further notice. 8346pkgsrc infrastructure at all. They may change without further notice.
8329 8347
8330Note 8348Note
8331 8349
8332These conventions are currently not applied consistently to the complete pkgsrc 8350These conventions are currently not applied consistently to the complete pkgsrc
8333infrastructure. 8351infrastructure.
8334 8352
833524.2. Avoiding problems before they arise 835324.2. Avoiding problems before they arise
8336 8354
8337All variables that contain lists of things should default to being empty. Two 8355All variables that contain lists of things should default to being empty. Two
8338examples that do not follow this rule are USE_LANGUAGES and DISTFILES. These 8356examples that do not follow this rule are USE_LANGUAGES and DISTFILES. These
8339variables cannot simply be modified using the += operator in package Makefiles 8357variables cannot simply be modified using the += operator in package Makefiles
8340(or other files included by them), since there is no guarantee whether the 8358(or other files included by them), since there is no guarantee whether the
8341variable is already set or not, and what its value is. In the case of 8359variable is already set or not, and what its value is. In the case of
8342DISTFILES, the packages "know" the default value and just define it as in the 8360DISTFILES, the packages "know" the default value and just define it as in the
8343following example. 8361following example.
8344 8362
8345DISTFILES= ${DISTNAME}${EXTRACT_SUFX} additional-files.tar.gz 8363DISTFILES= ${DISTNAME}${EXTRACT_SUFX} additional-files.tar.gz
8346 8364
8347Because of the selection of this default value, the same value appears in many 8365Because of the selection of this default value, the same value appears in many
8348package Makefiles. Similarly for USE_LANGUAGES, but in this case the default 8366package Makefiles. Similarly for USE_LANGUAGES, but in this case the default
8349value ("c") is so short that it doesn't stand out. Nevertheless it is mentioned 8367value ("c") is so short that it doesn't stand out. Nevertheless it is mentioned
8350in many files. 8368in many files.
8351 8369
835224.3. Variable evaluation 837024.3. Variable evaluation
8353 8371
835424.3.1. At load time 837224.3.1. At load time
8355 8373
8356Variable evaluation takes place either at load time or at runtime, depending on 8374Variable evaluation takes place either at load time or at runtime, depending on
8357the context in which they occur. The contexts where variables are evaluated at 8375the context in which they occur. The contexts where variables are evaluated at
8358load time are: 8376load time are:
8359 8377
8360 * The right hand side of the := and != operators, 8378 * The right hand side of the := and != operators,
8361 8379
8362 * Make directives like .if or .for, 8380 * Make directives like .if or .for,
8363 8381
8364 * Dependency lines. 8382 * Dependency lines.
8365 8383
8366A special exception are references to the iteration variables of .for loops, 8384A special exception are references to the iteration variables of .for loops,
8367which are expanded inline, no matter in which context they appear. 8385which are expanded inline, no matter in which context they appear.
8368 8386
8369As the values of variables may change during load time, care must be taken not 8387As the values of variables may change during load time, care must be taken not
8370to evaluate them by accident. Typical examples for variables that should not be 8388to evaluate them by accident. Typical examples for variables that should not be
8371evaluated at load time are DEPENDS and CONFIGURE_ARGS. To make the effect more 8389evaluated at load time are DEPENDS and CONFIGURE_ARGS. To make the effect more
8372clear, here is an example: 8390clear, here is an example:
8373 8391
8374CONFIGURE_ARGS= # none 8392CONFIGURE_ARGS= # none
8375CFLAGS= -O 8393CFLAGS= -O
8376CONFIGURE_ARGS+= CFLAGS=${CFLAGS:Q} 8394CONFIGURE_ARGS+= CFLAGS=${CFLAGS:Q}
8377 8395
8378CONFIGURE_ARGS:= ${CONFIGURE_ARGS} 8396CONFIGURE_ARGS:= ${CONFIGURE_ARGS}
8379 8397