Thu Jun 2 21:24:51 2022 UTC ()
doc/pkgsrc.*: regen


(gutteridge)
diff -r1.339 -r1.340 pkgsrc/doc/pkgsrc.html
diff -r1.337 -r1.338 pkgsrc/doc/pkgsrc.txt

cvs diff -r1.339 -r1.340 pkgsrc/doc/pkgsrc.html (switch to unified diff)

--- pkgsrc/doc/pkgsrc.html 2022/05/21 15:41:23 1.339
+++ pkgsrc/doc/pkgsrc.html 2022/06/02 21:24:51 1.340
@@ -3299,2047 +3299,2051 @@ anymore, you can remove that file and ru @@ -3299,2047 +3299,2051 @@ anymore, you can remove that file and ru
3299<dt><span class="sect2"><a href="#modified-distfiles-same-name">21.2.2. How to handle modified distfiles with the 'old' name</a></span></dt> 3299<dt><span class="sect2"><a href="#modified-distfiles-same-name">21.2.2. How to handle modified distfiles with the 'old' name</a></span></dt>
3300<dt><span class="sect2"><a href="#build.fetch.github">21.2.3. Packages hosted on github.com</a></span></dt> 3300<dt><span class="sect2"><a href="#build.fetch.github">21.2.3. Packages hosted on github.com</a></span></dt>
3301</dl></dd> 3301</dl></dd>
3302<dt><span class="sect1"><a href="#fixes.configure">21.3. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 3302<dt><span class="sect1"><a href="#fixes.configure">21.3. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
3303<dd><dl> 3303<dd><dl>
3304<dt><span class="sect2"><a href="#fixes.libtool">21.3.1. Shared libraries - libtool</a></span></dt> 3304<dt><span class="sect2"><a href="#fixes.libtool">21.3.1. Shared libraries - libtool</a></span></dt>
3305<dt><span class="sect2"><a href="#using-libtool">21.3.2. Using libtool on GNU packages that already support libtool</a></span></dt> 3305<dt><span class="sect2"><a href="#using-libtool">21.3.2. Using libtool on GNU packages that already support libtool</a></span></dt>
3306<dt><span class="sect2"><a href="#autoconf-automake">21.3.3. GNU Autoconf/Automake</a></span></dt> 3306<dt><span class="sect2"><a href="#autoconf-automake">21.3.3. GNU Autoconf/Automake</a></span></dt>
3307<dt><span class="sect2"><a href="#meson">21.3.4. Meson / ninja</a></span></dt> 3307<dt><span class="sect2"><a href="#meson">21.3.4. Meson / ninja</a></span></dt>
3308</dl></dd> 3308</dl></dd>
3309<dt><span class="sect1"><a href="#programming-languages">21.4. Programming languages</a></span></dt> 3309<dt><span class="sect1"><a href="#programming-languages">21.4. Programming languages</a></span></dt>
3310<dd><dl> 3310<dd><dl>
3311<dt><span class="sect2"><a href="#basic-programming-languages">21.4.1. C, C++, and Fortran</a></span></dt> 3311<dt><span class="sect2"><a href="#basic-programming-languages">21.4.1. C, C++, and Fortran</a></span></dt>
3312<dt><span class="sect2"><a href="#java-programming-language">21.4.2. Java</a></span></dt> 3312<dt><span class="sect2"><a href="#java-programming-language">21.4.2. Java</a></span></dt>
3313<dt><span class="sect2"><a href="#go-programming-language">21.4.3. Go</a></span></dt> 3313<dt><span class="sect2"><a href="#go-programming-language">21.4.3. Go</a></span></dt>
3314<dt><span class="sect2"><a href="#rust-programming-language">21.4.4. Rust</a></span></dt> 3314<dt><span class="sect2"><a href="#rust-programming-language">21.4.4. Rust</a></span></dt>
3315<dt><span class="sect2"><a href="#perl-scripts">21.4.5. Packages containing Perl scripts</a></span></dt> 3315<dt><span class="sect2"><a href="#perl-scripts">21.4.5. Packages containing Perl scripts</a></span></dt>
3316<dt><span class="sect2"><a href="#shell-scripts">21.4.6. Packages containing shell scripts</a></span></dt> 3316<dt><span class="sect2"><a href="#shell-scripts">21.4.6. Packages containing shell scripts</a></span></dt>
3317<dt><span class="sect2"><a href="#other-programming-languages">21.4.7. Other programming languages</a></span></dt> 3317<dt><span class="sect2"><a href="#other-programming-languages">21.4.7. Other programming languages</a></span></dt>
3318</dl></dd> 3318</dl></dd>
3319<dt><span class="sect1"><a href="#fixes.build">21.5. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 3319<dt><span class="sect1"><a href="#fixes.build">21.5. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
3320<dd><dl> 3320<dd><dl>
3321<dt><span class="sect2"><a href="#fixes.build.cpp">21.5.1. Compiling C and C++ code conditionally</a></span></dt> 3321<dt><span class="sect2"><a href="#fixes.build.cpp">21.5.1. Compiling C and C++ code conditionally</a></span></dt>
3322<dt><span class="sect2"><a href="#compiler-bugs">21.5.2. How to handle compiler bugs</a></span></dt> 3322<dt><span class="sect2"><a href="#compiler-bugs">21.5.2. How to handle compiler bugs</a></span></dt>
3323<dt><span class="sect2"><a href="#fixes.build.header">21.5.3. No such file or directory</a></span></dt> 3323<dt><span class="sect2"><a href="#fixes.build.header">21.5.3. No such file or directory</a></span></dt>
3324<dt><span class="sect2"><a href="#undefined-reference">21.5.4. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span></a></span></dt> 3324<dt><span class="sect2"><a href="#undefined-reference">21.5.4. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span></a></span></dt>
3325<dt><span class="sect2"><a href="#out-of-memory">21.5.5. Running out of memory</a></span></dt> 3325<dt><span class="sect2"><a href="#out-of-memory">21.5.5. Running out of memory</a></span></dt>
3326</dl></dd> 3326</dl></dd>
3327<dt><span class="sect1"><a href="#fixes.install">21.6. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 3327<dt><span class="sect1"><a href="#fixes.install">21.6. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
3328<dd><dl> 3328<dd><dl>
3329<dt><span class="sect2"><a href="#install-scripts">21.6.1. Creating needed directories</a></span></dt> 3329<dt><span class="sect2"><a href="#install-scripts">21.6.1. Creating needed directories</a></span></dt>
3330<dt><span class="sect2"><a href="#where-to-install-documentation">21.6.2. Where to install documentation</a></span></dt> 3330<dt><span class="sect2"><a href="#where-to-install-documentation">21.6.2. Where to install documentation</a></span></dt>
3331<dt><span class="sect2"><a href="#installing-score-files">21.6.3. Installing highscore files</a></span></dt> 3331<dt><span class="sect2"><a href="#installing-score-files">21.6.3. Installing highscore files</a></span></dt>
3332<dt><span class="sect2"><a href="#destdir-support">21.6.4. Adding DESTDIR support to packages</a></span></dt> 3332<dt><span class="sect2"><a href="#destdir-support">21.6.4. Adding DESTDIR support to packages</a></span></dt>
3333<dt><span class="sect2"><a href="#hardcoded-paths">21.6.5. Packages with hardcoded paths to other interpreters</a></span></dt> 3333<dt><span class="sect2"><a href="#hardcoded-paths">21.6.5. Packages with hardcoded paths to other interpreters</a></span></dt>
3334<dt><span class="sect2"><a href="#perl-modules">21.6.6. Packages installing Perl modules</a></span></dt> 3334<dt><span class="sect2"><a href="#perl-modules">21.6.6. Packages installing Perl modules</a></span></dt>
3335<dt><span class="sect2"><a href="#faq.info-files">21.6.7. Packages installing info files</a></span></dt> 3335<dt><span class="sect2"><a href="#faq.info-files">21.6.7. Packages installing info files</a></span></dt>
3336<dt><span class="sect2"><a href="#manpages">21.6.8. Packages installing man pages</a></span></dt> 3336<dt><span class="sect2"><a href="#manpages">21.6.8. Packages installing man pages</a></span></dt>
3337<dt><span class="sect2"><a href="#x11-fonts">21.6.9. Packages installing X11 fonts</a></span></dt> 3337<dt><span class="sect2"><a href="#x11-fonts">21.6.9. Packages installing X11 fonts</a></span></dt>
3338<dt><span class="sect2"><a href="#sgml-xml-data">21.6.10. Packages installing SGML or XML data</a></span></dt> 3338<dt><span class="sect2"><a href="#sgml-xml-data">21.6.10. Packages installing SGML or XML data</a></span></dt>
3339<dt><span class="sect2"><a href="#mime-database">21.6.11. Packages installing extensions to the MIME database</a></span></dt> 3339<dt><span class="sect2"><a href="#mime-database">21.6.11. Packages installing extensions to the MIME database</a></span></dt>
3340<dt><span class="sect2"><a href="#intltool">21.6.12. Packages using intltool</a></span></dt> 3340<dt><span class="sect2"><a href="#intltool">21.6.12. Packages using intltool</a></span></dt>
3341<dt><span class="sect2"><a href="#startup-scripts">21.6.13. Packages installing startup scripts</a></span></dt> 3341<dt><span class="sect2"><a href="#startup-scripts">21.6.13. Packages installing startup scripts</a></span></dt>
3342<dt><span class="sect2"><a href="#tex-packages">21.6.14. Packages installing TeX modules</a></span></dt> 3342<dt><span class="sect2"><a href="#tex-packages">21.6.14. Packages installing TeX modules</a></span></dt>
3343<dt><span class="sect2"><a href="#emulation-packages">21.6.15. Packages supporting running binaries in 3343<dt><span class="sect2"><a href="#emulation-packages">21.6.15. Packages supporting running binaries in
3344 emulation</a></span></dt> 3344 emulation</a></span></dt>
3345<dt><span class="sect2"><a href="#hicolor-theme">21.6.16. Packages installing hicolor icons</a></span></dt> 3345<dt><span class="sect2"><a href="#hicolor-theme">21.6.16. Packages installing hicolor icons</a></span></dt>
3346<dt><span class="sect2"><a href="#desktop-files">21.6.17. Packages installing desktop files</a></span></dt> 3346<dt><span class="sect2"><a href="#desktop-files">21.6.17. Packages installing desktop files</a></span></dt>
3347</dl></dd> 3347</dl></dd>
3348<dt><span class="sect1"><a href="#punting">21.7. Marking packages as having problems</a></span></dt> 3348<dt><span class="sect1"><a href="#punting">21.7. Marking packages as having problems</a></span></dt>
3349</dl></dd> 3349</dl></dd>
3350<dt><span class="chapter"><a href="#gnome">22. GNOME packaging and porting</a></span></dt> 3350<dt><span class="chapter"><a href="#gnome">22. GNOME packaging and porting</a></span></dt>
3351<dd><dl> 3351<dd><dl>
3352<dt><span class="sect1"><a href="#meta-packages">22.1. Meta packages</a></span></dt> 3352<dt><span class="sect1"><a href="#meta-packages">22.1. Meta packages</a></span></dt>
3353<dt><span class="sect1"><a href="#new-package">22.2. Packaging a GNOME application</a></span></dt> 3353<dt><span class="sect1"><a href="#new-package">22.2. Packaging a GNOME application</a></span></dt>
3354<dt><span class="sect1"><a href="#full-update">22.3. Updating GNOME to a newer version</a></span></dt> 3354<dt><span class="sect1"><a href="#full-update">22.3. Updating GNOME to a newer version</a></span></dt>
3355<dt><span class="sect1"><a href="#patching">22.4. Patching guidelines</a></span></dt> 3355<dt><span class="sect1"><a href="#patching">22.4. Patching guidelines</a></span></dt>
3356</dl></dd> 3356</dl></dd>
3357<dt><span class="chapter"><a href="#submit">23. Submitting and Committing</a></span></dt> 3357<dt><span class="chapter"><a href="#submit">23. Submitting and Committing</a></span></dt>
3358<dd><dl> 3358<dd><dl>
3359<dt><span class="sect1"><a href="#submitting-binary-packages">23.1. Submitting binary packages</a></span></dt> 3359<dt><span class="sect1"><a href="#submitting-binary-packages">23.1. Submitting binary packages</a></span></dt>
3360<dt><span class="sect1"><a href="#submitting-your-package">23.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt> 3360<dt><span class="sect1"><a href="#submitting-your-package">23.2. Submitting source packages (for non-NetBSD-developers)</a></span></dt>
3361<dt><span class="sect1"><a href="#general-notes-for-changes">23.3. General notes when adding, updating, or removing packages</a></span></dt> 3361<dt><span class="sect1"><a href="#general-notes-for-changes">23.3. General notes when adding, updating, or removing packages</a></span></dt>
3362<dt><span class="sect1"><a href="#commit-messages">23.4. Commit Messages</a></span></dt> 3362<dt><span class="sect1"><a href="#commit-messages">23.4. Commit Messages</a></span></dt>
3363<dt><span class="sect1"><a href="#committing-importing">23.5. Committing: Adding a package to CVS</a></span></dt> 3363<dt><span class="sect1"><a href="#committing-importing">23.5. Committing: Adding a package to CVS</a></span></dt>
3364<dt><span class="sect1"><a href="#updating-package">23.6. Updating a package to a newer version</a></span></dt> 3364<dt><span class="sect1"><a href="#updating-package">23.6. Updating a package to a newer version</a></span></dt>
3365<dt><span class="sect1"><a href="#renaming-package">23.7. Renaming a package in pkgsrc</a></span></dt> 3365<dt><span class="sect1"><a href="#renaming-package">23.7. Renaming a package in pkgsrc</a></span></dt>
3366<dt><span class="sect1"><a href="#moving-package">23.8. Moving a package in pkgsrc</a></span></dt> 3366<dt><span class="sect1"><a href="#moving-package">23.8. Moving a package in pkgsrc</a></span></dt>
3367</dl></dd> 3367</dl></dd>
3368<dt><span class="chapter"><a href="#devfaq">24. Frequently Asked Questions</a></span></dt> 3368<dt><span class="chapter"><a href="#devfaq">24. Frequently Asked Questions</a></span></dt>
3369</dl> 3369</dl>
3370</div> 3370</div>
3371</div> 3371</div>
3372<div class="chapter"> 3372<div class="chapter">
3373<div class="titlepage"><div><div><h2 class="title"> 3373<div class="titlepage"><div><div><h2 class="title">
3374<a name="help-devel"></a>Chapter 11. Getting help</h2></div></div></div> 3374<a name="help-devel"></a>Chapter 11. Getting help</h2></div></div></div>
3375<p> 3375<p>
3376 To get help when developing pkgsrc, the definitive source is this 3376 To get help when developing pkgsrc, the definitive source is this
3377 document, the pkgsrc guide. If you don't find anything here, 3377 document, the pkgsrc guide. If you don't find anything here,
3378 there are alternatives: 3378 there are alternatives:
3379</p> 3379</p>
3380<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3380<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3381<li class="listitem"> 3381<li class="listitem">
3382<p> 3382<p>
3383 The built-in pkgsrc help, which is available after bootstrapping 3383 The built-in pkgsrc help, which is available after bootstrapping
3384 pkgsrc. Run <span class="command"><strong>bmake help topic=&#8230;</strong></span> to get 3384 pkgsrc. Run <span class="command"><strong>bmake help topic=&#8230;</strong></span> to get
3385 help for any topic, such as a variable name like 3385 help for any topic, such as a variable name like
3386 <code class="varname">BUILD_DEFS</code>, a make target like 3386 <code class="varname">BUILD_DEFS</code>, a make target like
3387 <span class="command"><strong>do-build</strong></span>, a missing C or C++ function like 3387 <span class="command"><strong>do-build</strong></span>, a missing C or C++ function like
3388 <span class="command"><strong>strcasecmp</strong></span> or any other topic.</p> 3388 <span class="command"><strong>strcasecmp</strong></span> or any other topic.</p>
3389<p>The available help topics are listed in <a class="xref" href="#help-topics" title="Appendix E. Help topics">Appendix E, <i>Help topics</i></a>.</p> 3389<p>The available help topics are listed in <a class="xref" href="#help-topics" title="Appendix E. Help topics">Appendix E, <i>Help topics</i></a>.</p>
3390</li> 3390</li>
3391<li class="listitem"><p> 3391<li class="listitem"><p>
3392 To see the value of a single variable, run <span class="command"><strong>bmake 3392 To see the value of a single variable, run <span class="command"><strong>bmake
3393 show-var VARNAME=<em class="replaceable"><code>X</code></em></strong></span>. 3393 show-var VARNAME=<em class="replaceable"><code>X</code></em></strong></span>.
3394</p></li> 3394</p></li>
3395<li class="listitem"><p> 3395<li class="listitem"><p>
3396 To see the values of the most common variables, run 3396 To see the values of the most common variables, run
3397 <span class="command"><strong>bmake show-all</strong></span>. These variables are grouped by 3397 <span class="command"><strong>bmake show-all</strong></span>. These variables are grouped by
3398 topic. To see the variables for a single topic, run 3398 topic. To see the variables for a single topic, run
3399 <span class="command"><strong>bmake 3399 <span class="command"><strong>bmake
3400 show-all-<em class="replaceable"><code>topic</code></em></strong></span>, for example 3400 show-all-<em class="replaceable"><code>topic</code></em></strong></span>, for example
3401 <span class="command"><strong>bmake show-all-fetch</strong></span>. 3401 <span class="command"><strong>bmake show-all-fetch</strong></span>.
3402</p></li> 3402</p></li>
3403<li class="listitem"><p> 3403<li class="listitem"><p>
3404 The tech-pkg mailing list, to which 3404 The tech-pkg mailing list, to which
3405 <a class="ulink" href="https://www.NetBSD.org/mailinglists/#tech-pkg" target="_top">you 3405 <a class="ulink" href="https://www.NetBSD.org/mailinglists/#tech-pkg" target="_top">you
3406 can subscribe</a> and then <a class="ulink" href="mailto:tech-pkg@NetBSD.org" target="_top">ask your 3406 can subscribe</a> and then <a class="ulink" href="mailto:tech-pkg@NetBSD.org" target="_top">ask your
3407 questions</a>.</p></li> 3407 questions</a>.</p></li>
3408<li class="listitem"><p>The #pkgsrc IRC channel, which is accessible 3408<li class="listitem"><p>The #pkgsrc IRC channel, which is accessible
3409 <a class="ulink" href="https://webchat.freenode.net/" target="_top">via a web browser</a> 3409 <a class="ulink" href="https://webchat.freenode.net/" target="_top">via a web browser</a>
3410 or by using a specialized chat program such as 3410 or by using a specialized chat program such as
3411 <a class="ulink" href="http://xchat.org/" target="_top">XChat</a>. 3411 <a class="ulink" href="http://xchat.org/" target="_top">XChat</a>.
3412 Pick any user name and join the channel #pkgsrc.</p></li> 3412 Pick any user name and join the channel #pkgsrc.</p></li>
3413</ul></div> 3413</ul></div>
3414</div> 3414</div>
3415<div class="chapter"> 3415<div class="chapter">
3416<div class="titlepage"><div><div><h2 class="title"> 3416<div class="titlepage"><div><div><h2 class="title">
3417<a name="components"></a>Chapter 12. Package components - files, directories and contents</h2></div></div></div> 3417<a name="components"></a>Chapter 12. Package components - files, directories and contents</h2></div></div></div>
3418<div class="toc"> 3418<div class="toc">
3419<p><b>Table of Contents</b></p> 3419<p><b>Table of Contents</b></p>
3420<dl class="toc"> 3420<dl class="toc">
3421<dt><span class="sect1"><a href="#components.Makefile">12.1. <code class="filename">Makefile</code></a></span></dt> 3421<dt><span class="sect1"><a href="#components.Makefile">12.1. <code class="filename">Makefile</code></a></span></dt>
3422<dt><span class="sect1"><a href="#components.distinfo">12.2. <code class="filename">distinfo</code></a></span></dt> 3422<dt><span class="sect1"><a href="#components.distinfo">12.2. <code class="filename">distinfo</code></a></span></dt>
3423<dt><span class="sect1"><a href="#components.patches">12.3. <code class="filename">patches/*</code></a></span></dt> 3423<dt><span class="sect1"><a href="#components.patches">12.3. <code class="filename">patches/*</code></a></span></dt>
3424<dd><dl> 3424<dd><dl>
3425<dt><span class="sect2"><a href="#components.patch.structure">12.3.1. Structure of a single patch file</a></span></dt> 3425<dt><span class="sect2"><a href="#components.patch.structure">12.3.1. Structure of a single patch file</a></span></dt>
3426<dt><span class="sect2"><a href="#components.patches.caveats">12.3.2. Creating patch files</a></span></dt> 3426<dt><span class="sect2"><a href="#components.patches.caveats">12.3.2. Creating patch files</a></span></dt>
3427<dt><span class="sect2"><a href="#components.patches.sources">12.3.3. Sources where the patch files come from</a></span></dt> 3427<dt><span class="sect2"><a href="#components.patches.sources">12.3.3. Sources where the patch files come from</a></span></dt>
3428<dt><span class="sect2"><a href="#components.patches.guidelines">12.3.4. Patching guidelines</a></span></dt> 3428<dt><span class="sect2"><a href="#components.patches.guidelines">12.3.4. Patching guidelines</a></span></dt>
3429<dt><span class="sect2"><a href="#components.patches.feedback">12.3.5. Feedback to the author</a></span></dt> 3429<dt><span class="sect2"><a href="#components.patches.feedback">12.3.5. Feedback to the author</a></span></dt>
3430</dl></dd> 3430</dl></dd>
3431<dt><span class="sect1"><a href="#other-mandatory-files">12.4. Other mandatory files</a></span></dt> 3431<dt><span class="sect1"><a href="#other-mandatory-files">12.4. Other mandatory files</a></span></dt>
3432<dt><span class="sect1"><a href="#components.optional">12.5. Optional files</a></span></dt> 3432<dt><span class="sect1"><a href="#components.optional">12.5. Optional files</a></span></dt>
3433<dd><dl> 3433<dd><dl>
3434<dt><span class="sect2"><a href="#components.optional.bin">12.5.1. Files affecting the binary package</a></span></dt> 3434<dt><span class="sect2"><a href="#components.optional.bin">12.5.1. Files affecting the binary package</a></span></dt>
3435<dt><span class="sect2"><a href="#components.optional.build">12.5.2. Files affecting the build process</a></span></dt> 3435<dt><span class="sect2"><a href="#components.optional.build">12.5.2. Files affecting the build process</a></span></dt>
3436<dt><span class="sect2"><a href="#components.optional.none">12.5.3. Files affecting nothing at all</a></span></dt> 3436<dt><span class="sect2"><a href="#components.optional.none">12.5.3. Files affecting nothing at all</a></span></dt>
3437</dl></dd> 3437</dl></dd>
3438<dt><span class="sect1"><a href="#work-dir">12.6. <code class="filename">work*</code></a></span></dt> 3438<dt><span class="sect1"><a href="#work-dir">12.6. <code class="filename">work*</code></a></span></dt>
3439<dt><span class="sect1"><a href="#files-dir">12.7. <code class="filename">files/*</code></a></span></dt> 3439<dt><span class="sect1"><a href="#files-dir">12.7. <code class="filename">files/*</code></a></span></dt>
3440</dl> 3440</dl>
3441</div> 3441</div>
3442<p>Whenever you're preparing a package, there are a number of 3442<p>Whenever you're preparing a package, there are a number of
3443files involved which are described in the following 3443files involved which are described in the following
3444sections.</p> 3444sections.</p>
3445<div class="sect1"> 3445<div class="sect1">
3446<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3446<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3447<a name="components.Makefile"></a>12.1. <code class="filename">Makefile</code> 3447<a name="components.Makefile"></a>12.1. <code class="filename">Makefile</code>
3448</h2></div></div></div> 3448</h2></div></div></div>
3449<p>Building, installation and creation of a binary package are all 3449<p>Building, installation and creation of a binary package are all
3450 controlled by the package's <code class="filename">Makefile</code>. 3450 controlled by the package's <code class="filename">Makefile</code>.
3451 The <code class="filename">Makefile</code> describes various things about 3451 The <code class="filename">Makefile</code> describes various things about
3452 a package, for example from where to get it, how to configure, 3452 a package, for example from where to get it, how to configure,
3453 build, and install it.</p> 3453 build, and install it.</p>
3454<p>A package <code class="filename">Makefile</code> contains several 3454<p>A package <code class="filename">Makefile</code> contains several
3455 sections that describe the package.</p> 3455 sections that describe the package.</p>
3456<p>In the first section there are the following variables, which 3456<p>In the first section there are the following variables, which
3457 should appear exactly in the order given here. The order and 3457 should appear exactly in the order given here. The order and
3458 grouping of the variables is mostly historical and has no further 3458 grouping of the variables is mostly historical and has no further
3459 meaning.</p> 3459 meaning.</p>
3460<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3460<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3461<li class="listitem"><p><code class="varname">DISTNAME</code> is the basename of the 3461<li class="listitem"><p><code class="varname">DISTNAME</code> is the basename of the
3462 distribution file to be downloaded from the package's 3462 distribution file to be downloaded from the package's
3463 website.</p></li> 3463 website.</p></li>
3464<li class="listitem"><p><code class="varname">PKGNAME</code> is the name of the 3464<li class="listitem"><p><code class="varname">PKGNAME</code> is the name of the
3465 package, as used by pkgsrc. You need to provide it if 3465 package, as used by pkgsrc. You need to provide it if
3466 <code class="varname">DISTNAME</code> (which is the default) is not a good 3466 <code class="varname">DISTNAME</code> (which is the default) is not a good
3467 name for the package in pkgsrc or <code class="varname">DISTNAME</code> is not 3467 name for the package in pkgsrc or <code class="varname">DISTNAME</code> is not
3468 provided (no distribution file is required). Usually it is the pkgsrc 3468 provided (no distribution file is required). Usually it is the pkgsrc
3469 directory name together with the version number. It must match the 3469 directory name together with the version number. It must match the
3470 regular expression 3470 regular expression
3471 <code class="varname">^[A-Za-z0-9][A-Za-z0-9-_.+]*$</code>, that is, it 3471 <code class="varname">^[A-Za-z0-9][A-Za-z0-9-_.+]*$</code>, that is, it
3472 starts with a letter or digit, and contains only letters, digits, 3472 starts with a letter or digit, and contains only letters, digits,
3473 dashes, underscores, dots and plus signs. 3473 dashes, underscores, dots and plus signs.
3474 New packages should have entirely lower-case names, with the exception 3474 New packages should have entirely lower-case names, with the exception
3475 of some that must follow pre-existing conventions 3475 of some that must follow pre-existing conventions
3476 (e.g. R packages begin with <code class="varname">R-</code>). 3476 (e.g. R packages begin with <code class="varname">R-</code>).
3477 You can use the <code class="code">:tl</code> variable modifier to lower-case 3477 You can use the <code class="code">:tl</code> variable modifier to lower-case
3478 the package name.</p></li> 3478 the package name.</p></li>
3479<li class="listitem"> 3479<li class="listitem">
3480<p><code class="varname">CATEGORIES</code> is a list of categories 3480<p><code class="varname">CATEGORIES</code> is a list of categories
3481 which the package fits in. You can choose any of the top-level 3481 which the package fits in. You can choose any of the top-level
3482 directories of pkgsrc for it.</p> 3482 directories of pkgsrc for it.</p>
3483<p>Currently the following values are available for 3483<p>Currently the following values are available for
3484 <code class="varname">CATEGORIES</code>. If more than 3484 <code class="varname">CATEGORIES</code>. If more than
3485 one is used, they need to be separated by spaces:</p> 3485 one is used, they need to be separated by spaces:</p>
3486<pre class="programlisting"> 3486<pre class="programlisting">
3487archivers cross geography meta-pkgs security 3487archivers cross geography meta-pkgs security
3488audio databases graphics misc shells 3488audio databases graphics misc shells
3489benchmarks devel ham multimedia sysutils 3489benchmarks devel ham multimedia sysutils
3490biology editors inputmethod net textproc 3490biology editors inputmethod net textproc
3491cad emulators lang news time 3491cad emulators lang news time
3492chat finance mail parallel wm 3492chat finance mail parallel wm
3493comms fonts math pkgtools www 3493comms fonts math pkgtools www
3494converters games mbone print x11 3494converters games mbone print x11
3495</pre> 3495</pre>
3496</li> 3496</li>
3497<li class="listitem"><p><code class="varname">MASTER_SITES</code>, 3497<li class="listitem"><p><code class="varname">MASTER_SITES</code>,
3498 <code class="varname">DYNAMIC_MASTER_SITES</code>, 3498 <code class="varname">DYNAMIC_MASTER_SITES</code>,
3499 <code class="varname">DIST_SUBDIR</code>, <code class="varname">EXTRACT_SUFX</code> 3499 <code class="varname">DIST_SUBDIR</code>, <code class="varname">EXTRACT_SUFX</code>
3500 and <code class="varname">DISTFILES</code> are discussed in detail in 3500 and <code class="varname">DISTFILES</code> are discussed in detail in
3501 <a class="xref" href="#build.fetch" title="13.5. The fetch phase">Section 13.5, &#8220;The <span class="emphasis"><em>fetch</em></span> phase&#8221;</a>.</p></li> 3501 <a class="xref" href="#build.fetch" title="13.5. The fetch phase">Section 13.5, &#8220;The <span class="emphasis"><em>fetch</em></span> phase&#8221;</a>.</p></li>
3502</ul></div> 3502</ul></div>
3503<p>The second section contains information about separately 3503<p>The second section contains information about separately
3504 downloaded patches, if any. 3504 downloaded patches, if any.
3505 </p> 3505 </p>
3506<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3506<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3507<li class="listitem"><p><code class="varname">PATCHFILES</code>: 3507<li class="listitem"><p><code class="varname">PATCHFILES</code>:
3508 Name(s) of additional files that contain distribution patches. 3508 Name(s) of additional files that contain distribution patches.
3509 There is no default. pkgsrc will look for them at 3509 There is no default. pkgsrc will look for them at
3510 <code class="varname">PATCH_SITES</code>. 3510 <code class="varname">PATCH_SITES</code>.
3511 They will automatically be uncompressed before patching if 3511 They will automatically be uncompressed before patching if
3512 the names end with <code class="filename">.gz</code> or 3512 the names end with <code class="filename">.gz</code> or
3513 <code class="filename">.Z</code>.</p></li> 3513 <code class="filename">.Z</code>.</p></li>
3514<li class="listitem"><p><code class="varname">PATCH_SITES</code>: 3514<li class="listitem"><p><code class="varname">PATCH_SITES</code>:
3515 Primary location(s) for distribution patch files (see 3515 Primary location(s) for distribution patch files (see
3516 <code class="varname">PATCHFILES</code> above) if not found locally.</p></li> 3516 <code class="varname">PATCHFILES</code> above) if not found locally.</p></li>
3517<li class="listitem"><p><code class="varname">PATCH_DIST_STRIP</code>: 3517<li class="listitem"><p><code class="varname">PATCH_DIST_STRIP</code>:
3518 an argument to <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/patch.1"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> that sets the pathname strip count to 3518 an argument to <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/patch.1"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> that sets the pathname strip count to
3519 help find the correct files to patch. It defaults to 3519 help find the correct files to patch. It defaults to
3520 <span class="command"><strong>-p0</strong></span>.</p></li> 3520 <span class="command"><strong>-p0</strong></span>.</p></li>
3521</ul></div> 3521</ul></div>
3522<p>The third section contains the following variables. 3522<p>The third section contains the following variables.
3523 </p> 3523 </p>
3524<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3524<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3525<li class="listitem"><p><code class="varname">MAINTAINER</code> is the email 3525<li class="listitem"><p><code class="varname">MAINTAINER</code> is the email
3526 address of the person who feels responsible for this package, 3526 address of the person who feels responsible for this package,
3527 and who is most likely to look at problems or questions regarding 3527 and who is most likely to look at problems or questions regarding
3528 this package which have been reported with <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/send-pr.1"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a>. 3528 this package which have been reported with <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/send-pr.1"><span class="citerefentry"><span class="refentrytitle">send-pr</span>(1)</span></a>.
3529 Other developers may contact the <code class="varname">MAINTAINER</code> 3529 Other developers may contact the <code class="varname">MAINTAINER</code>
3530 before making changes to the package, but are not required to 3530 before making changes to the package, but are not required to
3531 do so. When packaging a new program, set <code class="varname">MAINTAINER</code> 3531 do so. When packaging a new program, set <code class="varname">MAINTAINER</code>
3532 to yourself. If you really can't maintain the package for future 3532 to yourself. If you really can't maintain the package for future
3533 updates, set it to 3533 updates, set it to
3534 <code class="email">&lt;<a class="email" href="mailto:pkgsrc-users@NetBSD.org">pkgsrc-users@NetBSD.org</a>&gt;</code>.</p></li> 3534 <code class="email">&lt;<a class="email" href="mailto:pkgsrc-users@NetBSD.org">pkgsrc-users@NetBSD.org</a>&gt;</code>.</p></li>
3535<li class="listitem"><p><code class="varname">OWNER</code> should be used instead 3535<li class="listitem"><p><code class="varname">OWNER</code> should be used instead
3536 of <code class="varname">MAINTAINER</code> when you do not want other 3536 of <code class="varname">MAINTAINER</code> when you do not want other
3537 developers to update or change the package without contacting 3537 developers to update or change the package without contacting
3538 you first. A package Makefile should contain one of 3538 you first. A package Makefile should contain one of
3539 <code class="varname">MAINTAINER</code> or <code class="varname">OWNER</code>, but 3539 <code class="varname">MAINTAINER</code> or <code class="varname">OWNER</code>, but
3540 not both. </p></li> 3540 not both. </p></li>
3541<li class="listitem"><p><code class="varname">HOMEPAGE</code> is a URL where users can 3541<li class="listitem"><p><code class="varname">HOMEPAGE</code> is a URL where users can
3542 find more information about the package.</p></li> 3542 find more information about the package.</p></li>
3543<li class="listitem"><p><code class="varname">COMMENT</code> is a one-line 3543<li class="listitem"><p><code class="varname">COMMENT</code> is a one-line
3544 description of the package (should not include the package 3544 description of the package (should not include the package
3545 name).</p></li> 3545 name).</p></li>
3546<li class="listitem"><p><code class="varname">LICENSE</code> indicates the license(s) 3546<li class="listitem"><p><code class="varname">LICENSE</code> indicates the license(s)
3547 applicable for the package. See <a class="xref" href="#handling-licenses" title="21.1.3. Handling licenses">Section 21.1.3, &#8220;Handling licenses&#8221;</a> for further details.</p></li> 3547 applicable for the package. See <a class="xref" href="#handling-licenses" title="21.1.3. Handling licenses">Section 21.1.3, &#8220;Handling licenses&#8221;</a> for further details.</p></li>
3548</ul></div> 3548</ul></div>
3549<p>Other variables that affect the build: 3549<p>Other variables that affect the build:
3550 </p> 3550 </p>
3551<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 3551<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
3552<p><code class="varname">WRKSRC</code>: The directory where the 3552<p><code class="varname">WRKSRC</code>: The directory where the
3553 interesting distribution files of the package are found. The 3553 interesting distribution files of the package are found. The
3554 default is <code class="filename">${WRKDIR}/${DISTNAME}</code>, which 3554 default is <code class="filename">${WRKDIR}/${DISTNAME}</code>, which
3555 works for most packages.</p> 3555 works for most packages.</p>
3556<p>If a package doesn't create a subdirectory for itself 3556<p>If a package doesn't create a subdirectory for itself
3557 (most GNU software does, for instance), but extracts itself in 3557 (most GNU software does, for instance), but extracts itself in
3558 the current directory, you should set 3558 the current directory, you should set
3559 <code class="varname">WRKSRC=${WRKDIR}</code>.</p> 3559 <code class="varname">WRKSRC=${WRKDIR}</code>.</p>
3560<p>If a package doesn't create a subdirectory with the 3560<p>If a package doesn't create a subdirectory with the
3561 name of <code class="varname">DISTNAME</code> but some different name, 3561 name of <code class="varname">DISTNAME</code> but some different name,
3562 set <code class="varname">WRKSRC</code> to point to the proper name in 3562 set <code class="varname">WRKSRC</code> to point to the proper name in
3563 <code class="filename">${WRKDIR}</code>, for example 3563 <code class="filename">${WRKDIR}</code>, for example
3564 <code class="varname">WRKSRC=${WRKDIR}/${DISTNAME}/unix</code>. See 3564 <code class="varname">WRKSRC=${WRKDIR}/${DISTNAME}/unix</code>. See
3565 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/tcl/index.html" target="_top"><code class="filename">lang/tcl</code></a> and <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/tk/index.html" target="_top"><code class="filename">x11/tk</code></a> for other examples.</p> 3565 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/tcl/index.html" target="_top"><code class="filename">lang/tcl</code></a> and <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/tk/index.html" target="_top"><code class="filename">x11/tk</code></a> for other examples.</p>
3566<p>The name of the working directory created by pkgsrc is 3566<p>The name of the working directory created by pkgsrc is
3567 taken from the <code class="varname">WRKDIR_BASENAME</code> 3567 taken from the <code class="varname">WRKDIR_BASENAME</code>
3568 variable. By default, its value is 3568 variable. By default, its value is
3569 <code class="filename">work</code>. If you want to use the same 3569 <code class="filename">work</code>. If you want to use the same
3570 pkgsrc tree for building different kinds of binary packages, 3570 pkgsrc tree for building different kinds of binary packages,
3571 you can change the variable according to your needs. Two 3571 you can change the variable according to your needs. Two
3572 other variables handle common cases of setting 3572 other variables handle common cases of setting
3573 <code class="varname">WRKDIR_BASENAME</code> individually. If 3573 <code class="varname">WRKDIR_BASENAME</code> individually. If
3574 <code class="varname">OBJHOSTNAME</code> is defined in 3574 <code class="varname">OBJHOSTNAME</code> is defined in
3575 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, the first component of 3575 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, the first component of
3576 the host's name is attached to the directory name. If 3576 the host's name is attached to the directory name. If
3577 <code class="varname">OBJMACHINE</code> is defined, the platform name 3577 <code class="varname">OBJMACHINE</code> is defined, the platform name
3578 is attached, which might look like 3578 is attached, which might look like
3579 <code class="filename">work.i386</code> or 3579 <code class="filename">work.i386</code> or
3580 <code class="filename">work.sparc</code>.</p> 3580 <code class="filename">work.sparc</code>.</p>
3581</li></ul></div> 3581</li></ul></div>
3582<p>Please pay attention to the following gotchas:</p> 3582<p>Please pay attention to the following gotchas:</p>
3583<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3583<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3584<li class="listitem"><p>Add <code class="varname">MANCOMPRESSED</code> if man pages are 3584<li class="listitem"><p>Add <code class="varname">MANCOMPRESSED</code> if man pages are
3585 installed in compressed form by the package. For packages using 3585 installed in compressed form by the package. For packages using
3586 BSD-style makefiles which honor MANZ, there is 3586 BSD-style makefiles which honor MANZ, there is
3587 <code class="varname">MANCOMPRESSED_IF_MANZ</code>.</p></li> 3587 <code class="varname">MANCOMPRESSED_IF_MANZ</code>.</p></li>
3588<li class="listitem"><p>Replace <code class="filename">/usr/local</code> with 3588<li class="listitem"><p>Replace <code class="filename">/usr/local</code> with
3589 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span> in all files (see patches, 3589 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span> in all files (see patches,
3590 below).</p></li> 3590 below).</p></li>
3591<li class="listitem"><p>If the package installs any info files, see <a class="xref" href="#faq.info-files" title="21.6.7. Packages installing info files">Section 21.6.7, &#8220;Packages installing info files&#8221;</a>.</p></li> 3591<li class="listitem"><p>If the package installs any info files, see <a class="xref" href="#faq.info-files" title="21.6.7. Packages installing info files">Section 21.6.7, &#8220;Packages installing info files&#8221;</a>.</p></li>
3592</ul></div> 3592</ul></div>
3593</div> 3593</div>
3594<div class="sect1"> 3594<div class="sect1">
3595<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3595<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3596<a name="components.distinfo"></a>12.2. <code class="filename">distinfo</code> 3596<a name="components.distinfo"></a>12.2. <code class="filename">distinfo</code>
3597</h2></div></div></div> 3597</h2></div></div></div>
3598<p>The <code class="filename">distinfo</code> file contains the message 3598<p>The <code class="filename">distinfo</code> file contains the message
3599 digest, or checksum, of each distfile needed for the package. This 3599 digest, or checksum, of each distfile needed for the package. This
3600 ensures that the distfiles retrieved from the Internet have not been 3600 ensures that the distfiles retrieved from the Internet have not been
3601 corrupted during transfer or altered by a malign force to introduce 3601 corrupted during transfer or altered by a malign force to introduce
3602 a security hole. To provide maximum security, all distfiles are 3602 a security hole. To provide maximum security, all distfiles are
3603 protected using three different message digest algorithms (SHA1, 3603 protected using three different message digest algorithms (SHA1,
3604 RMD160, SHA512), as well as the file size.</p> 3604 RMD160, SHA512), as well as the file size.</p>
3605<p>The <code class="filename">distinfo</code> file also contains the 3605<p>The <code class="filename">distinfo</code> file also contains the
3606 checksums for all the patches found in the 3606 checksums for all the patches found in the
3607 <code class="filename">patches</code> directory (see <a class="xref" href="#components.patches" title="12.3. patches/*">Section 12.3, &#8220;<code class="filename">patches/*</code>&#8221;</a>). These checksums ensure that patches 3607 <code class="filename">patches</code> directory (see <a class="xref" href="#components.patches" title="12.3. patches/*">Section 12.3, &#8220;<code class="filename">patches/*</code>&#8221;</a>). These checksums ensure that patches
3608 are only applied intentionally and that they don't accidentally change, 3608 are only applied intentionally and that they don't accidentally change,
3609 e.g. when merging different changes together. They also make sure that 3609 e.g. when merging different changes together. They also make sure that
3610 new patches are actually added to CVS and old ones are removed. 3610 new patches are actually added to CVS and old ones are removed.
3611 Too see whether the patches and the <code class="filename">distinfo</code> file 3611 Too see whether the patches and the <code class="filename">distinfo</code> file
3612 match, run <span class="command"><strong>pkglint</strong></span> after changing the patches.</p> 3612 match, run <span class="command"><strong>pkglint</strong></span> after changing the patches.</p>
3613<p>To regenerate the <code class="filename">distinfo</code> file, use the 3613<p>To regenerate the <code class="filename">distinfo</code> file, use the
3614 <span class="command"><strong>make distinfo</strong></span> command.</p> 3614 <span class="command"><strong>make distinfo</strong></span> command.</p>
3615<p>Some packages have different sets of distfiles depending on 3615<p>Some packages have different sets of distfiles depending on
3616 the platform, for example <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/openjdk8/index.html" target="_top"><code class="filename">lang/openjdk8</code></a>. These are kept in the same 3616 the platform, for example <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/lang/openjdk8/index.html" target="_top"><code class="filename">lang/openjdk8</code></a>. These are kept in the same
3617 <code class="filename">distinfo</code> file and care should be taken when 3617 <code class="filename">distinfo</code> file and care should be taken when
3618 upgrading such a package to ensure distfile information is not 3618 upgrading such a package to ensure distfile information is not
3619 lost.</p> 3619 lost.</p>
3620</div> 3620</div>
3621<div class="sect1"> 3621<div class="sect1">
3622<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3622<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3623<a name="components.patches"></a>12.3. <code class="filename">patches/*</code> 3623<a name="components.patches"></a>12.3. <code class="filename">patches/*</code>
3624</h2></div></div></div> 3624</h2></div></div></div>
3625<p>Some packages don't work out-of-the box on the various 3625<p>Some packages don't work out-of-the box on the various
3626 platforms that are supported by pkgsrc. These packages need 3626 platforms that are supported by pkgsrc. These packages need
3627 to be patched to make them work. The patch files can be 3627 to be patched to make them work. The patch files can be
3628 found in the <code class="filename">patches/</code> directory.</p> 3628 found in the <code class="filename">patches/</code> directory.</p>
3629<p>In the <span class="emphasis"><em>patch</em></span> phase, these patches are 3629<p>In the <span class="emphasis"><em>patch</em></span> phase, these patches are
3630 applied to the files in <code class="varname">WRKSRC</code> directory after 3630 applied to the files in <code class="varname">WRKSRC</code> directory after
3631 extracting them, in alphabetic order.</p> 3631 extracting them, in alphabetic order.</p>
3632<div class="sect2"> 3632<div class="sect2">
3633<div class="titlepage"><div><div><h3 class="title"> 3633<div class="titlepage"><div><div><h3 class="title">
3634<a name="components.patch.structure"></a>12.3.1. Structure of a single patch file</h3></div></div></div> 3634<a name="components.patch.structure"></a>12.3.1. Structure of a single patch file</h3></div></div></div>
3635<p>The <code class="filename">patch-*</code> files should be in 3635<p>The <code class="filename">patch-*</code> files should be in
3636 <span class="command"><strong>diff -bu</strong></span> format, and apply without a fuzz to avoid 3636 <span class="command"><strong>diff -bu</strong></span> format, and apply without a fuzz to avoid
3637 problems. (To force patches to apply with fuzz you can set 3637 problems. (To force patches to apply with fuzz you can set
3638 <code class="varname">PATCH_FUZZ_FACTOR=-F2</code>). Furthermore, each patch 3638 <code class="varname">PATCH_FUZZ_FACTOR=-F2</code>). Furthermore, each patch
3639 should contain only changes for a single file, and no file should be 3639 should contain only changes for a single file, and no file should be
3640 patched by more than one patch file. This helps to keep future 3640 patched by more than one patch file. This helps to keep future
3641 modifications simple.</p> 3641 modifications simple.</p>
3642<p>Each patch file is structured as follows: In the first line, 3642<p>Each patch file is structured as follows: In the first line,
3643 there is the RCS Id of the patch itself. The second line should be 3643 there is the RCS Id of the patch itself. The second line should be
3644 empty for aesthetic reasons. After that, there should be a comment for 3644 empty for aesthetic reasons. After that, there should be a comment for
3645 each change that the patch does. There are a number of standard 3645 each change that the patch does. There are a number of standard
3646 cases:</p> 3646 cases:</p>
3647<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3647<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3648<li class="listitem"><p>Patches for commonly known vulnerabilities should 3648<li class="listitem"><p>Patches for commonly known vulnerabilities should
3649 mention the vulnerability ID (CAN, CVE).</p></li> 3649 mention the vulnerability ID (CAN, CVE).</p></li>
3650<li class="listitem"><p>Patches that change source code should mention the 3650<li class="listitem"><p>Patches that change source code should mention the
3651 platform and other environment (for example, the compiler) that the 3651 platform and other environment (for example, the compiler) that the
3652 patch is needed for.</p></li> 3652 patch is needed for.</p></li>
3653</ul></div> 3653</ul></div>
3654<p>The patch should be commented so that any 3654<p>The patch should be commented so that any
3655 developer who knows the code of the application can make some use of 3655 developer who knows the code of the application can make some use of
3656 the patch. Special care should be taken for the upstream developers, 3656 the patch. Special care should be taken for the upstream developers,
3657 since we generally want that they accept our patches, so we have less 3657 since we generally want that they accept our patches, so we have less
3658 work in the future.</p> 3658 work in the future.</p>
3659</div> 3659</div>
3660<div class="sect2"> 3660<div class="sect2">
3661<div class="titlepage"><div><div><h3 class="title"> 3661<div class="titlepage"><div><div><h3 class="title">
3662<a name="components.patches.caveats"></a>12.3.2. Creating patch files</h3></div></div></div> 3662<a name="components.patches.caveats"></a>12.3.2. Creating patch files</h3></div></div></div>
3663<p>One important thing to mention is to pay attention that no RCS 3663<p>One important thing to mention is to pay attention that no RCS
3664 IDs get stored in the patch files, as these will cause problems when 3664 IDs get stored in the patch files, as these will cause problems when
3665 later checked into the NetBSD CVS tree. Use the 3665 later checked into the NetBSD CVS tree. Use the
3666 <span class="command"><strong>pkgdiff</strong></span> command from the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/index.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> package to avoid these 3666 <span class="command"><strong>pkgdiff</strong></span> command from the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/index.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> package to avoid these
3667 problems.</p> 3667 problems.</p>
3668<p>For even more automation, we recommend using 3668<p>For even more automation, we recommend using
3669 <span class="command"><strong>mkpatches</strong></span> from the same package to make a 3669 <span class="command"><strong>mkpatches</strong></span> from the same package to make a
3670 whole set of patches. You just have to back up files before you 3670 whole set of patches. You just have to back up files before you
3671 edit them to <code class="filename">filename.orig</code>, e.g., with 3671 edit them to <code class="filename">filename.orig</code>, e.g., with
3672 <span class="command"><strong>cp -p filename filename.orig</strong></span> or, easier, by 3672 <span class="command"><strong>cp -p filename filename.orig</strong></span> or, easier, by
3673 using <span class="command"><strong>pkgvi</strong></span> again from the same package. If 3673 using <span class="command"><strong>pkgvi</strong></span> again from the same package. If
3674 you upgrade a package this way, you can easily compare the new 3674 you upgrade a package this way, you can easily compare the new
3675 set of patches with the previously existing one with 3675 set of patches with the previously existing one with
3676 <span class="command"><strong>patchdiff</strong></span>. The files in <code class="filename">patches</code> 3676 <span class="command"><strong>patchdiff</strong></span>. The files in <code class="filename">patches</code>
3677 are replaced by new files, so carefully check if you want to take all 3677 are replaced by new files, so carefully check if you want to take all
3678 the changes.</p> 3678 the changes.</p>
3679<p>When you have finished a package, remember to generate 3679<p>When you have finished a package, remember to generate
3680 the checksums for the patch files by using the <span class="command"><strong>make 3680 the checksums for the patch files by using the <span class="command"><strong>make
3681 makepatchsum</strong></span> command, see <a class="xref" href="#components.distinfo" title="12.2. distinfo">Section 12.2, &#8220;<code class="filename">distinfo</code>&#8221;</a>.</p> 3681 makepatchsum</strong></span> command, see <a class="xref" href="#components.distinfo" title="12.2. distinfo">Section 12.2, &#8220;<code class="filename">distinfo</code>&#8221;</a>.</p>
3682<p>When adding a patch that corrects a problem in the 3682<p>When adding a patch that corrects a problem in the
3683 distfile (rather than e.g. enforcing pkgsrc's view of where 3683 distfile (rather than e.g. enforcing pkgsrc's view of where
3684 man pages should go), send the patch as a bug report to the 3684 man pages should go), send the patch as a bug report to the
3685 maintainer. This benefits non-pkgsrc users of the package, 3685 maintainer. This benefits non-pkgsrc users of the package,
3686 and usually makes it possible to remove the patch in future 3686 and usually makes it possible to remove the patch in future
3687 version.</p> 3687 version.</p>
3688<p>The file names of the patch files are usually of the form 3688<p>The file names of the patch files are usually of the form
3689 <code class="filename">patch-<em class="replaceable"><code>path_to_file__with__underscores.c</code></em></code>. 3689 <code class="filename">patch-<em class="replaceable"><code>path_to_file__with__underscores.c</code></em></code>.
3690 Many packages still use the previous convention 3690 Many packages still use the previous convention
3691 <code class="filename">patch-<em class="replaceable"><code>[a-z][a-z]</code></em></code>, 3691 <code class="filename">patch-<em class="replaceable"><code>[a-z][a-z]</code></em></code>,
3692 but new patches should be of the form containing the filename. 3692 but new patches should be of the form containing the filename.
3693 <span class="command"><strong>mkpatches</strong></span> included in <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/index.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> takes care of the name 3693 <span class="command"><strong>mkpatches</strong></span> included in <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/index.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> takes care of the name
3694 automatically.</p> 3694 automatically.</p>
3695<p>When updating pre-existing patch files, if a file uses the old 3695<p>When updating pre-existing patch files, if a file uses the old
3696 <code class="filename">patch-<em class="replaceable"><code>[a-z][a-z]</code></em></code> 3696 <code class="filename">patch-<em class="replaceable"><code>[a-z][a-z]</code></em></code>
3697 convention, it's best not to change it to the new form, as that will 3697 convention, it's best not to change it to the new form, as that will
3698 just cause churn that makes it harder to track changes to patching 3698 just cause churn that makes it harder to track changes to patching
3699 over time. Similarly, if a patch now applies at different line offsets, 3699 over time. Similarly, if a patch now applies at different line offsets,
3700 but still applies cleanly as-is, there's no need to update it, as that 3700 but still applies cleanly as-is, there's no need to update it, as that
3701 also unnecessarily complicates the patch history.</p> 3701 also unnecessarily complicates the patch history.</p>
3702</div> 3702</div>
3703<div class="sect2"> 3703<div class="sect2">
3704<div class="titlepage"><div><div><h3 class="title"> 3704<div class="titlepage"><div><div><h3 class="title">
3705<a name="components.patches.sources"></a>12.3.3. Sources where the patch files come from</h3></div></div></div> 3705<a name="components.patches.sources"></a>12.3.3. Sources where the patch files come from</h3></div></div></div>
3706<p>If you want to share patches between multiple packages 3706<p>If you want to share patches between multiple packages
3707 in pkgsrc, e.g. because they use the same distfiles, set 3707 in pkgsrc, e.g. because they use the same distfiles, set
3708 <code class="varname">PATCHDIR</code> to the path where the patch files 3708 <code class="varname">PATCHDIR</code> to the path where the patch files
3709 can be found, e.g.:</p> 3709 can be found, e.g.:</p>
3710<pre class="programlisting"> 3710<pre class="programlisting">
3711PATCHDIR= ../../editors/xemacs/patches 3711PATCHDIR= ../../editors/xemacs/patches
3712</pre> 3712</pre>
3713<p>Patch files that are distributed by the author or other 3713<p>Patch files that are distributed by the author or other
3714 maintainers can be listed in 3714 maintainers can be listed in
3715 <code class="varname">PATCHFILES</code>.</p> 3715 <code class="varname">PATCHFILES</code>.</p>
3716<p>If it is desired to store any patches that should not be 3716<p>If it is desired to store any patches that should not be
3717 committed into pkgsrc, they can be kept outside the pkgsrc 3717 committed into pkgsrc, they can be kept outside the pkgsrc
3718 tree in the <code class="filename">$LOCALPATCHES</code> directory. The 3718 tree in the <code class="filename">$LOCALPATCHES</code> directory. The
3719 directory tree there is expected to have the same 3719 directory tree there is expected to have the same
3720 <span class="quote">&#8220;<span class="quote">category/package</span>&#8221;</span> structure as pkgsrc, and 3720 <span class="quote">&#8220;<span class="quote">category/package</span>&#8221;</span> structure as pkgsrc, and
3721 patches are expected to be stored inside these dirs (also 3721 patches are expected to be stored inside these dirs (also
3722 known as <code class="filename">$LOCALPATCHES/$PKGPATH</code>). For 3722 known as <code class="filename">$LOCALPATCHES/$PKGPATH</code>). For
3723 example, if you want to keep a private patch for 3723 example, if you want to keep a private patch for
3724 <code class="filename">pkgsrc/graphics/png</code>, keep it in 3724 <code class="filename">pkgsrc/graphics/png</code>, keep it in
3725 <code class="filename">$LOCALPATCHES/graphics/png/mypatch</code>. All 3725 <code class="filename">$LOCALPATCHES/graphics/png/mypatch</code>. All
3726 files in the named directory are expected to be patch files, 3726 files in the named directory are expected to be patch files,
3727 and <span class="emphasis"><em>they are applied after pkgsrc patches are 3727 and <span class="emphasis"><em>they are applied after pkgsrc patches are
3728 applied</em></span>.</p> 3728 applied</em></span>.</p>
3729</div> 3729</div>
3730<div class="sect2"> 3730<div class="sect2">
3731<div class="titlepage"><div><div><h3 class="title"> 3731<div class="titlepage"><div><div><h3 class="title">
3732<a name="components.patches.guidelines"></a>12.3.4. Patching guidelines</h3></div></div></div> 3732<a name="components.patches.guidelines"></a>12.3.4. Patching guidelines</h3></div></div></div>
3733<p>When fixing a portability issue in the code do not use 3733<p>When fixing a portability issue in the code do not use
3734 preprocessor magic to check for the current operating system nor 3734 preprocessor magic to check for the current operating system nor
3735 platform. Doing so hurts portability to other platforms because 3735 platform. Doing so hurts portability to other platforms because
3736 the OS-specific details are not abstracted appropriately.</p> 3736 the OS-specific details are not abstracted appropriately.</p>
3737<p>The general rule to follow is: instead of checking for the 3737<p>The general rule to follow is: instead of checking for the
3738 operating system the application is being built on, check for the 3738 operating system the application is being built on, check for the
3739 specific <span class="emphasis"><em>features</em></span> you need. For example, 3739 specific <span class="emphasis"><em>features</em></span> you need. For example,
3740 instead of assuming that kqueue is available under NetBSD and 3740 instead of assuming that kqueue is available under NetBSD and
3741 using the <code class="varname">__NetBSD__</code> macro to conditionalize 3741 using the <code class="varname">__NetBSD__</code> macro to conditionalize
3742 kqueue support, add a check that detects kqueue itself &mdash; 3742 kqueue support, add a check that detects kqueue itself &mdash;
3743 yes, this generally involves patching the 3743 yes, this generally involves patching the
3744 <span class="command"><strong>configure</strong></span> script. There is absolutely nothing 3744 <span class="command"><strong>configure</strong></span> script. There is absolutely nothing
3745 that prevents some OSes from adopting interfaces from other OSes 3745 that prevents some OSes from adopting interfaces from other OSes
3746 (e.g. Linux implementing kqueue), something that the above checks 3746 (e.g. Linux implementing kqueue), something that the above checks
3747 cannot take into account.</p> 3747 cannot take into account.</p>
3748<p>Of course, checking for features generally involves more 3748<p>Of course, checking for features generally involves more
3749 work on the developer's side, but the resulting changes are 3749 work on the developer's side, but the resulting changes are
3750 cleaner and there are chances they will work on many other 3750 cleaner and there are chances they will work on many other
3751 platforms. Not to mention that there are higher chances of being 3751 platforms. Not to mention that there are higher chances of being
3752 later integrated into the mainstream sources. Remember: 3752 later integrated into the mainstream sources. Remember:
3753 <span class="emphasis"><em>It doesn't work unless it is right!</em></span></p> 3753 <span class="emphasis"><em>It doesn't work unless it is right!</em></span></p>
3754<p>Some typical examples:</p> 3754<p>Some typical examples:</p>
3755<div class="table"> 3755<div class="table">
3756<a name="patch-examples"></a><p class="title"><b>Table 12.1. Patching examples</b></p> 3756<a name="patch-examples"></a><p class="title"><b>Table 12.1. Patching examples</b></p>
3757<div class="table-contents"><table class="table" summary="Patching examples" border="1"> 3757<div class="table-contents"><table class="table" summary="Patching examples" border="1">
3758<colgroup> 3758<colgroup>
3759<col> 3759<col>
3760<col> 3760<col>
3761<col> 3761<col>
3762</colgroup> 3762</colgroup>
3763<thead><tr> 3763<thead><tr>
3764<th>Where</th> 3764<th>Where</th>
3765<th>Incorrect</th> 3765<th>Incorrect</th>
3766<th>Correct</th> 3766<th>Correct</th>
3767</tr></thead> 3767</tr></thead>
3768<tbody> 3768<tbody>
3769<tr> 3769<tr>
3770<td>configure script</td> 3770<td>configure script</td>
3771<td> 3771<td>
3772<pre class="programlisting"> 3772<pre class="programlisting">
3773case ${target_os} in 3773case ${target_os} in
3774netbsd*) have_kvm=yes ;; 3774netbsd*) have_kvm=yes ;;
3775*) have_kvm=no ;; 3775*) have_kvm=no ;;
3776esac 3776esac
3777</pre> 3777</pre>
3778 </td> 3778 </td>
3779<td> 3779<td>
3780<pre class="programlisting"> 3780<pre class="programlisting">
3781AC_CHECK_LIB(kvm, kvm_open, have_kvm=yes, have_kvm=no) 3781AC_CHECK_LIB(kvm, kvm_open, have_kvm=yes, have_kvm=no)
3782</pre> 3782</pre>
3783 </td> 3783 </td>
3784</tr> 3784</tr>
3785<tr> 3785<tr>
3786<td>C source file</td> 3786<td>C source file</td>
3787<td> 3787<td>
3788<pre class="programlisting"> 3788<pre class="programlisting">
3789#if defined(__NetBSD__) 3789#if defined(__NetBSD__)
3790# include &lt;sys/event.h&gt; 3790# include &lt;sys/event.h&gt;
3791#endif 3791#endif
3792</pre> 3792</pre>
3793 </td> 3793 </td>
3794<td> 3794<td>
3795<pre class="programlisting"> 3795<pre class="programlisting">
3796#if defined(HAVE_SYS_EVENT_H) 3796#if defined(HAVE_SYS_EVENT_H)
3797# include &lt;sys/event.h&gt; 3797# include &lt;sys/event.h&gt;
3798#endif 3798#endif
3799</pre> 3799</pre>
3800 </td> 3800 </td>
3801</tr> 3801</tr>
3802<tr> 3802<tr>
3803<td>C source file</td> 3803<td>C source file</td>
3804<td> 3804<td>
3805<pre class="programlisting"> 3805<pre class="programlisting">
3806int 3806int
3807monitor_file(...) 3807monitor_file(...)
3808{ 3808{
3809#if defined(__NetBSD__) 3809#if defined(__NetBSD__)
3810 int fd = kqueue(); 3810 int fd = kqueue();
3811 ... 3811 ...
3812#else 3812#else
3813 ... 3813 ...
3814#endif 3814#endif
3815} 3815}
3816</pre> 3816</pre>
3817 </td> 3817 </td>
3818<td> 3818<td>
3819<pre class="programlisting"> 3819<pre class="programlisting">
3820int 3820int
3821monitor_file(...) 3821monitor_file(...)
3822{ 3822{
3823#if defined(HAVE_KQUEUE) 3823#if defined(HAVE_KQUEUE)
3824 int fd = kqueue(); 3824 int fd = kqueue();
3825 ... 3825 ...
3826#else 3826#else
3827 ... 3827 ...
3828#endif 3828#endif
3829} 3829}
3830</pre> 3830</pre>
3831 </td> 3831 </td>
3832</tr> 3832</tr>
3833</tbody> 3833</tbody>
3834</table></div> 3834</table></div>
3835</div> 3835</div>
3836<br class="table-break"> 3836<br class="table-break">
3837</div> 3837</div>
3838<div class="sect2"> 3838<div class="sect2">
3839<div class="titlepage"><div><div><h3 class="title"> 3839<div class="titlepage"><div><div><h3 class="title">
3840<a name="components.patches.feedback"></a>12.3.5. Feedback to the author</h3></div></div></div> 3840<a name="components.patches.feedback"></a>12.3.5. Feedback to the author</h3></div></div></div>
3841<p>Always, always, <span class="strong"><strong>always</strong></span> 3841<p>Always, always, <span class="strong"><strong>always</strong></span>
3842 feed back any <span class="emphasis"><em>portability fixes</em></span> or 3842 feed back any <span class="emphasis"><em>portability fixes</em></span> or
3843 improvements you do to a package to the mainstream developers. 3843 improvements you do to a package to the mainstream developers.
3844 This is the only way to get their attention on portability issues 3844 This is the only way to get their attention on portability issues
3845 and to ensure that future versions can be built out-of-the box on 3845 and to ensure that future versions can be built out-of-the box on
3846 NetBSD. Furthermore, any user that gets newer distfiles will get 3846 NetBSD. Furthermore, any user that gets newer distfiles will get
3847 the fixes straight from the packaged code.</p> 3847 the fixes straight from the packaged code.</p>
3848<p>This generally involves cleaning up the patches 3848<p>This generally involves cleaning up the patches
3849 (because sometimes the patches that are 3849 (because sometimes the patches that are
3850 added to pkgsrc are quick hacks), filing bug reports in the 3850 added to pkgsrc are quick hacks), filing bug reports in the
3851 appropriate trackers for the projects and working with the 3851 appropriate trackers for the projects and working with the
3852 mainstream authors to accept your changes. It is 3852 mainstream authors to accept your changes. It is
3853 <span class="emphasis"><em>extremely important</em></span> that you do it so that 3853 <span class="emphasis"><em>extremely important</em></span> that you do it so that
3854 the packages in pkgsrc are kept simple and thus further changes 3854 the packages in pkgsrc are kept simple and thus further changes
3855 can be done without much hassle.</p> 3855 can be done without much hassle.</p>
3856<p>When you have done this, please add a URL to the upstream 3856<p>When you have done this, please add a URL to the upstream
3857 bug report to the patch comment.</p> 3857 bug report to the patch comment.</p>
3858<p>Support the idea of free software!</p> 3858<p>Support the idea of free software!</p>
3859</div> 3859</div>
3860</div> 3860</div>
3861<div class="sect1"> 3861<div class="sect1">
3862<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3862<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3863<a name="other-mandatory-files"></a>12.4. Other mandatory files</h2></div></div></div> 3863<a name="other-mandatory-files"></a>12.4. Other mandatory files</h2></div></div></div>
3864<div class="variablelist"><dl class="variablelist"> 3864<div class="variablelist"><dl class="variablelist">
3865<dt><span class="term"><code class="filename">DESCR</code></span></dt> 3865<dt><span class="term"><code class="filename">DESCR</code></span></dt>
3866<dd><p>A multi-line description of the piece of software. This should include 3866<dd><p>A multi-line description of the piece of software. This should include
3867 any credits where they are due. Please bear in mind that others do not 3867 any credits where they are due. Please bear in mind that others do not
3868 share your sense of humour (or spelling idiosyncrasies), and that others 3868 share your sense of humour (or spelling idiosyncrasies), and that others
3869 will read everything that you write here.</p></dd> 3869 will read everything that you write here.</p></dd>
3870<dt><span class="term"><code class="filename">PLIST</code></span></dt> 3870<dt><span class="term"><code class="filename">PLIST</code></span></dt>
3871<dd><p>This file governs the files that are installed on your 3871<dd><p>This file governs the files that are installed on your
3872 system: all the binaries, manual pages, etc. There are other 3872 system: all the binaries, manual pages, etc. There are other
3873 directives which may be entered in this file, to control the 3873 directives which may be entered in this file, to control the
3874 creation and deletion of directories, and the location of 3874 creation and deletion of directories, and the location of
3875 inserted files. See <a class="xref" href="#plist" title="Chapter 19. PLIST issues">Chapter 19, <i>PLIST issues</i></a> for more 3875 inserted files. See <a class="xref" href="#plist" title="Chapter 19. PLIST issues">Chapter 19, <i>PLIST issues</i></a> for more
3876 information.</p></dd> 3876 information.</p></dd>
3877</dl></div> 3877</dl></div>
3878</div> 3878</div>
3879<div class="sect1"> 3879<div class="sect1">
3880<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 3880<div class="titlepage"><div><div><h2 class="title" style="clear: both">
3881<a name="components.optional"></a>12.5. Optional files</h2></div></div></div> 3881<a name="components.optional"></a>12.5. Optional files</h2></div></div></div>
3882<div class="sect2"> 3882<div class="sect2">
3883<div class="titlepage"><div><div><h3 class="title"> 3883<div class="titlepage"><div><div><h3 class="title">
3884<a name="components.optional.bin"></a>12.5.1. Files affecting the binary package</h3></div></div></div> 3884<a name="components.optional.bin"></a>12.5.1. Files affecting the binary package</h3></div></div></div>
3885<div class="variablelist"><dl class="variablelist"> 3885<div class="variablelist"><dl class="variablelist">
3886<dt><span class="term"><code class="filename">INSTALL</code></span></dt> 3886<dt><span class="term"><code class="filename">INSTALL</code></span></dt>
3887<dd> 3887<dd>
3888<p>This shell script is invoked twice by <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_add.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>. 3888<p>This shell script is invoked twice by <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_add.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a>.
3889 First time after package extraction and before files are 3889 First time after package extraction and before files are
3890 moved in place, the second time after the files to install 3890 moved in place, the second time after the files to install
3891 are moved in place. This can be used to do any custom 3891 are moved in place. This can be used to do any custom
3892 procedures not possible with @exec commands in 3892 procedures not possible with @exec commands in
3893 <code class="filename">PLIST</code>. See <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_add.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> and 3893 <code class="filename">PLIST</code>. See <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_add.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> and
3894 <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_create.1"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> for more information. See also <a class="xref" href="#files-and-dirs-outside-prefix" title="20.1. Files and directories outside the installation prefix">Section 20.1, &#8220;Files and directories outside the installation prefix&#8221;</a>. 3894 <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_create.1"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> for more information. See also <a class="xref" href="#files-and-dirs-outside-prefix" title="20.1. Files and directories outside the installation prefix">Section 20.1, &#8220;Files and directories outside the installation prefix&#8221;</a>.
3895 Please note that you can modify variables in it easily by using 3895 Please note that you can modify variables in it easily by using
3896 <code class="varname">FILES_SUBST</code> in the package's 3896 <code class="varname">FILES_SUBST</code> in the package's
3897 <code class="filename">Makefile</code>:</p> 3897 <code class="filename">Makefile</code>:</p>
3898<pre class="programlisting"> 3898<pre class="programlisting">
3899FILES_SUBST+= SOMEVAR="somevalue" 3899FILES_SUBST+= SOMEVAR="somevalue"
3900</pre> 3900</pre>
3901<p>replaces "@SOMEVAR@" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in the 3901<p>replaces "@SOMEVAR@" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in the
3902 <code class="filename">INSTALL</code>. By default, substitution is 3902 <code class="filename">INSTALL</code>. By default, substitution is
3903 performed for <code class="varname">PREFIX</code>, 3903 performed for <code class="varname">PREFIX</code>,
3904 <code class="varname">LOCALBASE</code>, <code class="varname">X11BASE</code>, 3904 <code class="varname">LOCALBASE</code>, <code class="varname">X11BASE</code>,
3905 <code class="varname">VARBASE</code>, and a few others, type 3905 <code class="varname">VARBASE</code>, and a few others, type
3906 <span class="command"><strong>make help topic=FILES_SUBST</strong></span> for a 3906 <span class="command"><strong>make help topic=FILES_SUBST</strong></span> for a
3907 complete list.</p> 3907 complete list.</p>
3908</dd> 3908</dd>
3909<dt><span class="term"><code class="filename">DEINSTALL</code></span></dt> 3909<dt><span class="term"><code class="filename">DEINSTALL</code></span></dt>
3910<dd><p>This script is executed before and after any files are removed. It is 3910<dd><p>This script is executed before and after any files are removed. It is
3911 this script's responsibility to clean up any additional messy details 3911 this script's responsibility to clean up any additional messy details
3912 around the package's installation, since all pkg_delete knows is how to 3912 around the package's installation, since all pkg_delete knows is how to
3913 delete the files created in the original distribution. 3913 delete the files created in the original distribution.
3914 See <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_delete.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> 3914 See <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_delete.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a>
3915 and <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_create.1"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> for more information. 3915 and <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_create.1"><span class="citerefentry"><span class="refentrytitle">pkg_create</span>(1)</span></a> for more information.
3916 The same methods to replace variables can be used as for 3916 The same methods to replace variables can be used as for
3917 the <code class="filename">INSTALL</code> file.</p></dd> 3917 the <code class="filename">INSTALL</code> file.</p></dd>
3918<dt><span class="term"><code class="filename">MESSAGE</code></span></dt> 3918<dt><span class="term"><code class="filename">MESSAGE</code></span></dt>
3919<dd> 3919<dd>
3920<p>This file is displayed after installation of the package. 3920<p>This file is displayed after installation of the package.
3921 While this was used often in the past, it has two 3921 While this was used often in the past, it has two
3922 problems: the display will be missed if many packages are 3922 problems: the display will be missed if many packages are
3923 intalled at once, and the person installing the package 3923 intalled at once, and the person installing the package
3924 and the one using or configuring it may be different. It 3924 and the one using or configuring it may be different. It
3925 should therefore be used only in exceptional circumstances 3925 should therefore be used only in exceptional circumstances
3926 where lasting negative consequences would result from 3926 where lasting negative consequences would result from
3927 someone not reading it.</p> 3927 someone not reading it.</p>
3928<p>MESSAGE should not be used for:</p> 3928<p>MESSAGE should not be used for:</p>
3929<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 3929<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
3930<li class="listitem"><p>exhortations to read the documentation</p></li> 3930<li class="listitem"><p>exhortations to read the documentation</p></li>
3931<li class="listitem"><p>reminders to install rc.d files and set variables</p></li> 3931<li class="listitem"><p>reminders to install rc.d files and set variables</p></li>
3932<li class="listitem"><p>anything that should be explained in the 3932<li class="listitem"><p>anything that should be explained in the
3933 installation/configuration documentation that should 3933 installation/configuration documentation that should
3934 come with the package</p></li> 3934 come with the package</p></li>
3935</ul></div> 3935</ul></div>
3936<p>If the documentation provided by upstream needs 3936<p>If the documentation provided by upstream needs
3937 enhancing, create e.g. files/README.pkgsrc and install it 3937 enhancing, create e.g. files/README.pkgsrc and install it
3938 in the package's documentation directory. 3938 in the package's documentation directory.
3939 </p> 3939 </p>
3940<p>Note that MESSAGE is shown for all operating 3940<p>Note that MESSAGE is shown for all operating
3941 systems and all init systems. If a MESSAGE is necessary, 3941 systems and all init systems. If a MESSAGE is necessary,
3942 it should be narrowed to only those operating systems and 3942 it should be narrowed to only those operating systems and
3943 init systems to which it applies.</p> 3943 init systems to which it applies.</p>
3944<p>Note that you can modify variables in it easily by using 3944<p>Note that you can modify variables in it easily by using
3945 <code class="varname">MESSAGE_SUBST</code> in the package's 3945 <code class="varname">MESSAGE_SUBST</code> in the package's
3946 <code class="filename">Makefile</code>:</p> 3946 <code class="filename">Makefile</code>:</p>
3947<pre class="programlisting"> 3947<pre class="programlisting">
3948MESSAGE_SUBST+= SOMEVAR="somevalue" 3948MESSAGE_SUBST+= SOMEVAR="somevalue"
3949</pre> 3949</pre>
3950<p>replaces "${SOMEVAR}" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in 3950<p>replaces "${SOMEVAR}" with <span class="quote">&#8220;<span class="quote">somevalue</span>&#8221;</span> in
3951 <code class="filename">MESSAGE</code>. By default, substitution is 3951 <code class="filename">MESSAGE</code>. By default, substitution is
3952 performed for <code class="varname">PKGNAME</code>, 3952 performed for <code class="varname">PKGNAME</code>,
3953 <code class="varname">PKGBASE</code>, <code class="varname">PREFIX</code>, 3953 <code class="varname">PKGBASE</code>, <code class="varname">PREFIX</code>,
3954 <code class="varname">LOCALBASE</code>, <code class="varname">X11BASE</code>, 3954 <code class="varname">LOCALBASE</code>, <code class="varname">X11BASE</code>,
3955 <code class="varname">PKG_SYSCONFDIR</code>, 3955 <code class="varname">PKG_SYSCONFDIR</code>,
3956 <code class="varname">ROOT_GROUP</code>, and 3956 <code class="varname">ROOT_GROUP</code>, and
3957 <code class="varname">ROOT_USER</code>.</p> 3957 <code class="varname">ROOT_USER</code>.</p>
3958<p>You can display a different or additional files by 3958<p>You can display a different or additional files by
3959 setting the <code class="varname">MESSAGE_SRC</code> variable. Its 3959 setting the <code class="varname">MESSAGE_SRC</code> variable. Its
3960 default is <code class="filename">MESSAGE</code>, if the file 3960 default is <code class="filename">MESSAGE</code>, if the file
3961 exists.</p> 3961 exists.</p>
3962</dd> 3962</dd>
3963<dt><span class="term"><code class="filename">ALTERNATIVES</code></span></dt> 3963<dt><span class="term"><code class="filename">ALTERNATIVES</code></span></dt>
3964<dd> 3964<dd>
3965<p>This file is used by the alternatives framework. 3965<p>This file is used by the alternatives framework.
3966 It creates, configures, and destroys generic wrappers used to 3966 It creates, configures, and destroys generic wrappers used to
3967 run programs with similar interfaces. 3967 run programs with similar interfaces.
3968 See pkg_alternatives(8) from pkgtools/pkg_alternatives 3968 See pkg_alternatives(8) from pkgtools/pkg_alternatives
3969 for more information.</p> 3969 for more information.</p>
3970<p>Each line of the file contains two filenames, first 3970<p>Each line of the file contains two filenames, first
3971 the wrapper and then the alternative provided by the package. 3971 the wrapper and then the alternative provided by the package.
3972 Both paths are relative to <code class="varname">PREFIX</code>.</p> 3972 Both paths are relative to <code class="varname">PREFIX</code>.</p>
3973</dd> 3973</dd>
3974</dl></div> 3974</dl></div>
3975</div> 3975</div>
3976<div class="sect2"> 3976<div class="sect2">
3977<div class="titlepage"><div><div><h3 class="title"> 3977<div class="titlepage"><div><div><h3 class="title">
3978<a name="components.optional.build"></a>12.5.2. Files affecting the build process</h3></div></div></div> 3978<a name="components.optional.build"></a>12.5.2. Files affecting the build process</h3></div></div></div>
3979<div class="variablelist"><dl class="variablelist"> 3979<div class="variablelist"><dl class="variablelist">
3980<dt><span class="term"><code class="filename">Makefile.common</code></span></dt> 3980<dt><span class="term"><code class="filename">Makefile.common</code></span></dt>
3981<dd><p>This file contains arbitrary things that could 3981<dd><p>This file contains arbitrary things that could
3982 also go into a <code class="filename">Makefile</code>, but its purpose is 3982 also go into a <code class="filename">Makefile</code>, but its purpose is
3983 to be used by more than one package. This file should only be 3983 to be used by more than one package. This file should only be
3984 used when the packages that will use the file are known in 3984 used when the packages that will use the file are known in
3985 advance. For other purposes it is often better to write a 3985 advance. For other purposes it is often better to write a
3986 <code class="filename">*.mk</code> file and give it a good name that 3986 <code class="filename">*.mk</code> file and give it a good name that
3987 describes what it does.</p></dd> 3987 describes what it does.</p></dd>
3988<dt><span class="term"><code class="filename">buildlink3.mk</code></span></dt> 3988<dt><span class="term"><code class="filename">buildlink3.mk</code></span></dt>
3989<dd><p>This file contains the dependency information 3989<dd><p>This file contains the dependency information
3990 for the buildlink3 framework (see <a class="xref" href="#buildlink" title="Chapter 18. Buildlink methodology">Chapter 18, <i>Buildlink methodology</i></a>).</p></dd> 3990 for the buildlink3 framework (see <a class="xref" href="#buildlink" title="Chapter 18. Buildlink methodology">Chapter 18, <i>Buildlink methodology</i></a>).</p></dd>
3991<dt><span class="term"><code class="filename">hacks.mk</code></span></dt> 3991<dt><span class="term"><code class="filename">hacks.mk</code></span></dt>
3992<dd><p>This file contains workarounds for compiler bugs 3992<dd><p>This file contains workarounds for compiler bugs
3993 and similar things. It is included automatically by the pkgsrc 3993 and similar things. It is included automatically by the pkgsrc
3994 infrastructure, so you don't need an extra 3994 infrastructure, so you don't need an extra
3995 <code class="literal">.include</code> line for 3995 <code class="literal">.include</code> line for
3996 it.</p></dd> 3996 it.</p></dd>
3997<dt><span class="term"><code class="filename">options.mk</code></span></dt> 3997<dt><span class="term"><code class="filename">options.mk</code></span></dt>
3998<dd><p>This file contains the code for the 3998<dd><p>This file contains the code for the
3999 package-specific options (see <a class="xref" href="#options" title="Chapter 16. Options handling">Chapter 16, <i>Options handling</i></a>) that can be 3999 package-specific options (see <a class="xref" href="#options" title="Chapter 16. Options handling">Chapter 16, <i>Options handling</i></a>) that can be
4000 selected by the user. If a package has only one or two options, 4000 selected by the user. If a package has only one or two options,
4001 it is equally acceptable to put the code directly into the 4001 it is equally acceptable to put the code directly into the
4002 <code class="filename">Makefile</code>.</p></dd> 4002 <code class="filename">Makefile</code>.</p></dd>
4003</dl></div> 4003</dl></div>
4004</div> 4004</div>
4005<div class="sect2"> 4005<div class="sect2">
4006<div class="titlepage"><div><div><h3 class="title"> 4006<div class="titlepage"><div><div><h3 class="title">
4007<a name="components.optional.none"></a>12.5.3. Files affecting nothing at all</h3></div></div></div> 4007<a name="components.optional.none"></a>12.5.3. Files affecting nothing at all</h3></div></div></div>
4008<div class="variablelist"><dl class="variablelist"> 4008<div class="variablelist"><dl class="variablelist">
4009<dt><span class="term"><code class="filename">README*</code></span></dt> 4009<dt><span class="term"><code class="filename">README*</code></span></dt>
4010<dd><p>These files do not take place in the creation of 4010<dd><p>These files do not take place in the creation of
4011 a package and thus are purely informative to the package 4011 a package and thus are purely informative to the package
4012 developer.</p></dd> 4012 developer.</p></dd>
4013<dt><span class="term"><code class="filename">TODO</code></span></dt> 4013<dt><span class="term"><code class="filename">TODO</code></span></dt>
4014<dd><p>This file contains things that need to be done 4014<dd><p>This file contains things that need to be done
4015 to make the package even 4015 to make the package even
4016 better.</p></dd> 4016 better.</p></dd>
4017</dl></div> 4017</dl></div>
4018</div> 4018</div>
4019</div> 4019</div>
4020<div class="sect1"> 4020<div class="sect1">
4021<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4021<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4022<a name="work-dir"></a>12.6. <code class="filename">work*</code> 4022<a name="work-dir"></a>12.6. <code class="filename">work*</code>
4023</h2></div></div></div> 4023</h2></div></div></div>
4024<p>When you type <span class="command"><strong>make</strong></span>, the distribution files are 4024<p>When you type <span class="command"><strong>make</strong></span>, the distribution files are
4025 unpacked into the directory denoted by 4025 unpacked into the directory denoted by
4026 <code class="varname">WRKDIR</code>. It can be removed by running 4026 <code class="varname">WRKDIR</code>. It can be removed by running
4027 <span class="command"><strong>make clean</strong></span>. Besides the sources, this 4027 <span class="command"><strong>make clean</strong></span>. Besides the sources, this
4028 directory is also used to keep various timestamp files. 4028 directory is also used to keep various timestamp files.
4029 The directory gets <span class="emphasis"><em>removed completely</em></span> on clean. 4029 The directory gets <span class="emphasis"><em>removed completely</em></span> on clean.
4030 The default is <code class="filename">${.CURDIR}/work</code> 4030 The default is <code class="filename">${.CURDIR}/work</code>
4031 or <code class="filename">${.CURDIR}/work.${MACHINE_ARCH}</code> 4031 or <code class="filename">${.CURDIR}/work.${MACHINE_ARCH}</code>
4032 if <code class="varname">OBJMACHINE</code> is set.</p> 4032 if <code class="varname">OBJMACHINE</code> is set.</p>
4033</div> 4033</div>
4034<div class="sect1"> 4034<div class="sect1">
4035<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4035<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4036<a name="files-dir"></a>12.7. <code class="filename">files/*</code> 4036<a name="files-dir"></a>12.7. <code class="filename">files/*</code>
4037</h2></div></div></div> 4037</h2></div></div></div>
4038<p>If you have any files that you wish to be placed in the package 4038<p>If you have any files that you wish to be placed in the package
4039 prior to configuration or building, you can place these files here 4039 prior to configuration or building, you can place these files here
4040 and use a <span class="command"><strong>${CP}</strong></span> command in the 4040 and use a <span class="command"><strong>${CP}</strong></span> command in the
4041 <span class="quote">&#8220;<span class="quote">post-extract</span>&#8221;</span> target to achieve this.</p> 4041 <span class="quote">&#8220;<span class="quote">post-extract</span>&#8221;</span> target to achieve this.</p>
4042<p>If you want to share files in this way with other 4042<p>If you want to share files in this way with other
4043 packages, set the <code class="varname">FILESDIR</code> variable to point 4043 packages, set the <code class="varname">FILESDIR</code> variable to point
4044 to the other package's <code class="filename">files</code> directory, 4044 to the other package's <code class="filename">files</code> directory,
4045 e.g.:</p> 4045 e.g.:</p>
4046<pre class="programlisting"> 4046<pre class="programlisting">
4047FILESDIR= ../../editors/xemacs/files 4047FILESDIR= ../../editors/xemacs/files
4048</pre> 4048</pre>
4049</div> 4049</div>
4050</div> 4050</div>
4051<div class="chapter"> 4051<div class="chapter">
4052<div class="titlepage"><div><div><h2 class="title"> 4052<div class="titlepage"><div><div><h2 class="title">
4053<a name="build"></a>Chapter 13. The build process</h2></div></div></div> 4053<a name="build"></a>Chapter 13. The build process</h2></div></div></div>
4054<div class="toc"> 4054<div class="toc">
4055<p><b>Table of Contents</b></p> 4055<p><b>Table of Contents</b></p>
4056<dl class="toc"> 4056<dl class="toc">
4057<dt><span class="sect1"><a href="#build.intro">13.1. Introduction</a></span></dt> 4057<dt><span class="sect1"><a href="#build.intro">13.1. Introduction</a></span></dt>
4058<dt><span class="sect1"><a href="#build.prefix">13.2. Program location</a></span></dt> 4058<dt><span class="sect1"><a href="#build.prefix">13.2. Program location</a></span></dt>
4059<dt><span class="sect1"><a href="#build.builddirs">13.3. Directories used during the build process</a></span></dt> 4059<dt><span class="sect1"><a href="#build.builddirs">13.3. Directories used during the build process</a></span></dt>
4060<dt><span class="sect1"><a href="#build.running">13.4. Running a phase</a></span></dt> 4060<dt><span class="sect1"><a href="#build.running">13.4. Running a phase</a></span></dt>
4061<dt><span class="sect1"><a href="#build.fetch">13.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt> 4061<dt><span class="sect1"><a href="#build.fetch">13.5. The <span class="emphasis"><em>fetch</em></span> phase</a></span></dt>
4062<dd><dl> 4062<dd><dl>
4063<dt><span class="sect2"><a href="#build.fetch.what">13.5.1. What to fetch and where to get it from</a></span></dt> 4063<dt><span class="sect2"><a href="#build.fetch.what">13.5.1. What to fetch and where to get it from</a></span></dt>
4064<dt><span class="sect2"><a href="#build.fetch.how">13.5.2. How are the files fetched?</a></span></dt> 4064<dt><span class="sect2"><a href="#build.fetch.how">13.5.2. How are the files fetched?</a></span></dt>
4065</dl></dd> 4065</dl></dd>
4066<dt><span class="sect1"><a href="#build.checksum">13.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt> 4066<dt><span class="sect1"><a href="#build.checksum">13.6. The <span class="emphasis"><em>checksum</em></span> phase</a></span></dt>
4067<dt><span class="sect1"><a href="#build.extract">13.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt> 4067<dt><span class="sect1"><a href="#build.extract">13.7. The <span class="emphasis"><em>extract</em></span> phase</a></span></dt>
4068<dt><span class="sect1"><a href="#build.patch">13.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt> 4068<dt><span class="sect1"><a href="#build.patch">13.8. The <span class="emphasis"><em>patch</em></span> phase</a></span></dt>
4069<dt><span class="sect1"><a href="#build.tools">13.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt> 4069<dt><span class="sect1"><a href="#build.tools">13.9. The <span class="emphasis"><em>tools</em></span> phase</a></span></dt>
4070<dt><span class="sect1"><a href="#build.wrapper">13.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt> 4070<dt><span class="sect1"><a href="#build.wrapper">13.10. The <span class="emphasis"><em>wrapper</em></span> phase</a></span></dt>
4071<dt><span class="sect1"><a href="#build.configure">13.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt> 4071<dt><span class="sect1"><a href="#build.configure">13.11. The <span class="emphasis"><em>configure</em></span> phase</a></span></dt>
4072<dt><span class="sect1"><a href="#build.build">13.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt> 4072<dt><span class="sect1"><a href="#build.build">13.12. The <span class="emphasis"><em>build</em></span> phase</a></span></dt>
4073<dt><span class="sect1"><a href="#build.test">13.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt> 4073<dt><span class="sect1"><a href="#build.test">13.13. The <span class="emphasis"><em>test</em></span> phase</a></span></dt>
4074<dt><span class="sect1"><a href="#build.install">13.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt> 4074<dt><span class="sect1"><a href="#build.install">13.14. The <span class="emphasis"><em>install</em></span> phase</a></span></dt>
4075<dt><span class="sect1"><a href="#build.package">13.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt> 4075<dt><span class="sect1"><a href="#build.package">13.15. The <span class="emphasis"><em>package</em></span> phase</a></span></dt>
4076<dt><span class="sect1"><a href="#build.clean">13.16. Cleaning up</a></span></dt> 4076<dt><span class="sect1"><a href="#build.clean">13.16. Cleaning up</a></span></dt>
4077<dt><span class="sect1"><a href="#build.helpful-targets">13.17. Other helpful targets</a></span></dt> 4077<dt><span class="sect1"><a href="#build.helpful-targets">13.17. Other helpful targets</a></span></dt>
4078</dl> 4078</dl>
4079</div> 4079</div>
4080<div class="sect1"> 4080<div class="sect1">
4081<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4081<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4082<a name="build.intro"></a>13.1. Introduction</h2></div></div></div> 4082<a name="build.intro"></a>13.1. Introduction</h2></div></div></div>
4083<p>This chapter gives a detailed description on how a package is 4083<p>This chapter gives a detailed description on how a package is
4084 built. Building a package is separated into different 4084 built. Building a package is separated into different
4085 <span class="emphasis"><em>phases</em></span> (for example <code class="varname">fetch</code>, 4085 <span class="emphasis"><em>phases</em></span> (for example <code class="varname">fetch</code>,
4086 <code class="varname">build</code>, <code class="varname">install</code>), all of which are 4086 <code class="varname">build</code>, <code class="varname">install</code>), all of which are
4087 described in the following sections. Each phase is split into 4087 described in the following sections. Each phase is split into
4088 so-called <span class="emphasis"><em>stages</em></span>, which take the name of the 4088 so-called <span class="emphasis"><em>stages</em></span>, which take the name of the
4089 containing phase, prefixed by one of <code class="varname">pre-</code>, 4089 containing phase, prefixed by one of <code class="varname">pre-</code>,
4090 <code class="varname">do-</code> or <code class="varname">post-</code>. (Examples are 4090 <code class="varname">do-</code> or <code class="varname">post-</code>. (Examples are
4091 <code class="varname">pre-configure</code>, <code class="varname">post-build</code>.) Most 4091 <code class="varname">pre-configure</code>, <code class="varname">post-build</code>.) Most
4092 of the actual work is done in the <code class="varname">do-*</code> stages.</p> 4092 of the actual work is done in the <code class="varname">do-*</code> stages.</p>
4093<p>Never override the regular targets (like 4093<p>Never override the regular targets (like
4094 <code class="varname">fetch</code>), if you have to, override the 4094 <code class="varname">fetch</code>), if you have to, override the
4095 <code class="varname">do-*</code> ones instead.</p> 4095 <code class="varname">do-*</code> ones instead.</p>
4096<p>The basic steps for building a program are always the same. First 4096<p>The basic steps for building a program are always the same. First
4097 the program's source (<span class="emphasis"><em>distfile</em></span>) must be brought to 4097 the program's source (<span class="emphasis"><em>distfile</em></span>) must be brought to
4098 the local system and then extracted. After any pkgsrc-specific patches 4098 the local system and then extracted. After any pkgsrc-specific patches
4099 to compile properly are applied, the software can be configured, then 4099 to compile properly are applied, the software can be configured, then
4100 built (usually by compiling), and finally the generated binaries, etc. 4100 built (usually by compiling), and finally the generated binaries, etc.
4101 can be put into place on the system.</p> 4101 can be put into place on the system.</p>
4102<p>To get more details about what is happening at each step, 4102<p>To get more details about what is happening at each step,
4103 you can set the <code class="varname">PKG_VERBOSE</code> variable, or the 4103 you can set the <code class="varname">PKG_VERBOSE</code> variable, or the
4104 <code class="varname">PATCH_DEBUG</code> variable if you are just interested 4104 <code class="varname">PATCH_DEBUG</code> variable if you are just interested
4105 in more details about the <span class="emphasis"><em>patch</em></span> step.</p> 4105 in more details about the <span class="emphasis"><em>patch</em></span> step.</p>
4106</div> 4106</div>
4107<div class="sect1"> 4107<div class="sect1">
4108<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4108<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4109<a name="build.prefix"></a>13.2. Program location</h2></div></div></div> 4109<a name="build.prefix"></a>13.2. Program location</h2></div></div></div>
4110<p>Before outlining the process performed by the NetBSD package system in 4110<p>Before outlining the process performed by the NetBSD package system in
4111 the next section, here's a brief discussion on where programs are 4111 the next section, here's a brief discussion on where programs are
4112 installed, and which variables influence this.</p> 4112 installed, and which variables influence this.</p>
4113<p>The automatic variable <code class="varname">PREFIX</code> indicates 4113<p>The automatic variable <code class="varname">PREFIX</code> indicates
4114 where all files of the final program shall be installed. It is 4114 where all files of the final program shall be installed. It is
4115 usually set to <code class="varname">LOCALBASE</code> 4115 usually set to <code class="varname">LOCALBASE</code>
4116 (<code class="filename">/usr/pkg</code>), or <code class="varname">CROSSBASE</code> 4116 (<code class="filename">/usr/pkg</code>), or <code class="varname">CROSSBASE</code>
4117 for pkgs in the <code class="filename">cross</code> category. The value of 4117 for pkgs in the <code class="filename">cross</code> category. The value of
4118 <code class="varname">PREFIX</code> needs to be put 4118 <code class="varname">PREFIX</code> needs to be put
4119 into the various places in the program's source where paths to 4119 into the various places in the program's source where paths to
4120 these files are encoded. See <a class="xref" href="#components.patches" title="12.3. patches/*">Section 12.3, &#8220;<code class="filename">patches/*</code>&#8221;</a> and <a class="xref" href="#fixes.libtool" title="21.3.1. Shared libraries - libtool">Section 21.3.1, &#8220;Shared libraries - libtool&#8221;</a> for more details.</p> 4120 these files are encoded. See <a class="xref" href="#components.patches" title="12.3. patches/*">Section 12.3, &#8220;<code class="filename">patches/*</code>&#8221;</a> and <a class="xref" href="#fixes.libtool" title="21.3.1. Shared libraries - libtool">Section 21.3.1, &#8220;Shared libraries - libtool&#8221;</a> for more details.</p>
4121<p>When choosing which of these variables to use, 4121<p>When choosing which of these variables to use,
4122 follow the following rules:</p> 4122 follow the following rules:</p>
4123<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 4123<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
4124<li class="listitem"><p><code class="varname">PREFIX</code> always points to the location 4124<li class="listitem"><p><code class="varname">PREFIX</code> always points to the location
4125 where the current pkg will be installed. When referring to a 4125 where the current pkg will be installed. When referring to a
4126 pkg's own installation path, use 4126 pkg's own installation path, use
4127 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span>.</p></li> 4127 <span class="quote">&#8220;<span class="quote">${PREFIX}</span>&#8221;</span>.</p></li>
4128<li class="listitem"><p><code class="varname">LOCALBASE</code> is where all pkgs 4128<li class="listitem"><p><code class="varname">LOCALBASE</code> is where all pkgs
4129 are installed. If you need to construct a -I or -L argument 4129 are installed. If you need to construct a -I or -L argument
4130 to the compiler to find includes and libraries installed by 4130 to the compiler to find includes and libraries installed by
4131 another pkg, use <span class="quote">&#8220;<span class="quote">${LOCALBASE}</span>&#8221;</span>. The name 4131 another pkg, use <span class="quote">&#8220;<span class="quote">${LOCALBASE}</span>&#8221;</span>. The name
4132 <code class="varname">LOCALBASE</code> stems from FreeBSD, which 4132 <code class="varname">LOCALBASE</code> stems from FreeBSD, which
4133 installed all packages in <code class="filename">/usr/local</code>. As 4133 installed all packages in <code class="filename">/usr/local</code>. As
4134 pkgsrc leaves <code class="filename">/usr/local</code> for the system 4134 pkgsrc leaves <code class="filename">/usr/local</code> for the system
4135 administrator, this variable is a misnomer.</p></li> 4135 administrator, this variable is a misnomer.</p></li>
4136<li class="listitem"><p><code class="varname">X11BASE</code> is where the actual X11 4136<li class="listitem"><p><code class="varname">X11BASE</code> is where the actual X11
4137 distribution (from xsrc, etc.) is installed. When looking for 4137 distribution (from xsrc, etc.) is installed. When looking for
4138 <span class="emphasis"><em>standard</em></span> X11 includes (not those 4138 <span class="emphasis"><em>standard</em></span> X11 includes (not those
4139 installed by a package), use <span class="quote">&#8220;<span class="quote">${X11BASE}</span>&#8221;</span>.</p></li> 4139 installed by a package), use <span class="quote">&#8220;<span class="quote">${X11BASE}</span>&#8221;</span>.</p></li>
4140<li class="listitem"><p>X11-based packages using imake must set 4140<li class="listitem"><p>X11-based packages using imake must set
4141 <code class="varname">USE_IMAKE</code> to be installed correctly under 4141 <code class="varname">USE_IMAKE</code> to be installed correctly under
4142 <code class="varname">LOCALBASE</code>.</p></li> 4142 <code class="varname">LOCALBASE</code>.</p></li>
4143<li class="listitem"><p>Within <code class="filename">${PREFIX}</code>, packages should 4143<li class="listitem"><p>Within <code class="filename">${PREFIX}</code>, packages should
4144 install files according to <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/hier.7"><span class="citerefentry"><span class="refentrytitle">hier</span>(7)</span></a>, with the exception that 4144 install files according to <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/hier.7"><span class="citerefentry"><span class="refentrytitle">hier</span>(7)</span></a>, with the exception that
4145 manual pages go into <code class="filename">${PREFIX}/man</code>, not 4145 manual pages go into <code class="filename">${PREFIX}/man</code>, not
4146 <code class="filename">${PREFIX}/share/man</code>.</p></li> 4146 <code class="filename">${PREFIX}/share/man</code>.</p></li>
4147</ul></div> 4147</ul></div>
4148</div> 4148</div>
4149<div class="sect1"> 4149<div class="sect1">
4150<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4150<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4151<a name="build.builddirs"></a>13.3. Directories used during the build process</h2></div></div></div> 4151<a name="build.builddirs"></a>13.3. Directories used during the build process</h2></div></div></div>
4152<p>When building a package, various directories are used to store 4152<p>When building a package, various directories are used to store
4153 source files, temporary files, pkgsrc-internal files, and so on. These 4153 source files, temporary files, pkgsrc-internal files, and so on. These
4154 directories are explained here.</p> 4154 directories are explained here.</p>
4155<p>Some of the directory variables contain relative pathnames. There 4155<p>Some of the directory variables contain relative pathnames. There
4156 are two common base directories for these relative directories: 4156 are two common base directories for these relative directories:
4157 <code class="varname">PKGSRCDIR/PKGPATH</code> is used for directories that are 4157 <code class="varname">PKGSRCDIR/PKGPATH</code> is used for directories that are
4158 pkgsrc-specific. <code class="varname">WRKSRC</code> is used for directories 4158 pkgsrc-specific. <code class="varname">WRKSRC</code> is used for directories
4159 inside the package itself.</p> 4159 inside the package itself.</p>
4160<div class="variablelist"><dl class="variablelist"> 4160<div class="variablelist"><dl class="variablelist">
4161<dt><span class="term"><code class="varname">PKGSRCDIR</code></span></dt> 4161<dt><span class="term"><code class="varname">PKGSRCDIR</code></span></dt>
4162<dd><p>This is an absolute pathname that points to the pkgsrc 4162<dd><p>This is an absolute pathname that points to the pkgsrc
4163 root directory. Generally, you don't need 4163 root directory. Generally, you don't need
4164 it.</p></dd> 4164 it.</p></dd>
4165<dt><span class="term"><code class="varname">PKGDIR</code></span></dt> 4165<dt><span class="term"><code class="varname">PKGDIR</code></span></dt>
4166<dd><p>This is an absolute pathname that points to the 4166<dd><p>This is an absolute pathname that points to the
4167 current package.</p></dd> 4167 current package.</p></dd>
4168<dt><span class="term"><code class="varname">PKGPATH</code></span></dt> 4168<dt><span class="term"><code class="varname">PKGPATH</code></span></dt>
4169<dd><p>This is a pathname relative to 4169<dd><p>This is a pathname relative to
4170 <code class="varname">PKGSRCDIR</code> that points to the current 4170 <code class="varname">PKGSRCDIR</code> that points to the current
4171 package.</p></dd> 4171 package.</p></dd>
4172<dt><span class="term"><code class="varname">WRKDIR</code></span></dt> 4172<dt><span class="term"><code class="varname">WRKDIR</code></span></dt>
4173<dd><p>This is an absolute pathname pointing to the directory 4173<dd><p>This is an absolute pathname pointing to the directory
4174 where all work takes place. The distfiles are extracted to this 4174 where all work takes place. The distfiles are extracted to this
4175 directory. It also contains temporary directories and log files used by 4175 directory. It also contains temporary directories and log files used by
4176 the various pkgsrc frameworks, like <span class="emphasis"><em>buildlink</em></span> or 4176 the various pkgsrc frameworks, like <span class="emphasis"><em>buildlink</em></span> or
4177 the <span class="emphasis"><em>wrappers</em></span>.</p></dd> 4177 the <span class="emphasis"><em>wrappers</em></span>.</p></dd>
4178<dt><span class="term"><code class="varname">WRKSRC</code></span></dt> 4178<dt><span class="term"><code class="varname">WRKSRC</code></span></dt>
4179<dd><p>This is an absolute pathname pointing to the directory 4179<dd><p>This is an absolute pathname pointing to the directory
4180 where the distfiles are extracted. It is usually a direct subdirectory 4180 where the distfiles are extracted. It is usually a direct subdirectory
4181 of <code class="varname">WRKDIR</code>, and often it's the only directory entry 4181 of <code class="varname">WRKDIR</code>, and often it's the only directory entry
4182 that isn't hidden. This variable may be changed by a package 4182 that isn't hidden. This variable may be changed by a package
4183 <code class="filename">Makefile</code>.</p></dd> 4183 <code class="filename">Makefile</code>.</p></dd>
4184</dl></div> 4184</dl></div>
4185<p>The <code class="varname">CREATE_WRKDIR_SYMLINK</code> definition takes either 4185<p>The <code class="varname">CREATE_WRKDIR_SYMLINK</code> definition takes either
4186 the value <span class="emphasis"><em>yes</em></span> or <span class="emphasis"><em>no</em></span> and defaults 4186 the value <span class="emphasis"><em>yes</em></span> or <span class="emphasis"><em>no</em></span> and defaults
4187 to <span class="emphasis"><em>no</em></span>. It indicates whether a symbolic link to the 4187 to <span class="emphasis"><em>no</em></span>. It indicates whether a symbolic link to the
4188 <code class="varname">WRKDIR</code> is to be created in the pkgsrc entry's directory. 4188 <code class="varname">WRKDIR</code> is to be created in the pkgsrc entry's directory.
4189 If users would like to have their pkgsrc trees behave in a 4189 If users would like to have their pkgsrc trees behave in a
4190 read-only manner, then the value of 4190 read-only manner, then the value of
4191 <code class="varname">CREATE_WRKDIR_SYMLINK</code> should be set to 4191 <code class="varname">CREATE_WRKDIR_SYMLINK</code> should be set to
4192 <span class="emphasis"><em>no</em></span>.</p> 4192 <span class="emphasis"><em>no</em></span>.</p>
4193</div> 4193</div>
4194<div class="sect1"> 4194<div class="sect1">
4195<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4195<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4196<a name="build.running"></a>13.4. Running a phase</h2></div></div></div> 4196<a name="build.running"></a>13.4. Running a phase</h2></div></div></div>
4197<p>You can run a particular phase by typing <span class="command"><strong>make 4197<p>You can run a particular phase by typing <span class="command"><strong>make
4198 phase</strong></span>, where <span class="emphasis"><em>phase</em></span> is the name of the 4198 phase</strong></span>, where <span class="emphasis"><em>phase</em></span> is the name of the
4199 phase. This will automatically run all phases that are required for this 4199 phase. This will automatically run all phases that are required for this
4200 phase. The default phase is <code class="varname">build</code>, that is, when you 4200 phase. The default phase is <code class="varname">build</code>, that is, when you
4201 run <span class="command"><strong>make</strong></span> without parameters in a package directory, 4201 run <span class="command"><strong>make</strong></span> without parameters in a package directory,
4202 the package will be built, but not installed.</p> 4202 the package will be built, but not installed.</p>
4203</div> 4203</div>
4204<div class="sect1"> 4204<div class="sect1">
4205<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4205<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4206<a name="build.fetch"></a>13.5. The <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div> 4206<a name="build.fetch"></a>13.5. The <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div>
4207<p>The first step in building a package is to fetch the 4207<p>The first step in building a package is to fetch the
4208 distribution files (distfiles) from the sites that are providing 4208 distribution files (distfiles) from the sites that are providing
4209 them. This is the task of the <span class="emphasis"><em>fetch</em></span> 4209 them. This is the task of the <span class="emphasis"><em>fetch</em></span>
4210 phase.</p> 4210 phase.</p>
4211<div class="sect2"> 4211<div class="sect2">
4212<div class="titlepage"><div><div><h3 class="title"> 4212<div class="titlepage"><div><div><h3 class="title">
4213<a name="build.fetch.what"></a>13.5.1. What to fetch and where to get it from</h3></div></div></div> 4213<a name="build.fetch.what"></a>13.5.1. What to fetch and where to get it from</h3></div></div></div>
4214<p>In simple cases, <code class="varname">MASTER_SITES</code> 4214<p>In simple cases, <code class="varname">MASTER_SITES</code>
4215 defines all URLs from where the distfile, whose name is 4215 defines all URLs from where the distfile, whose name is
4216 derived from the <code class="varname">DISTNAME</code> variable, is 4216 derived from the <code class="varname">DISTNAME</code> variable, is
4217 fetched. The more complicated cases are described 4217 fetched. The more complicated cases are described
4218 below.</p> 4218 below.</p>
4219<p>The variable <code class="varname">DISTFILES</code> specifies 4219<p>The variable <code class="varname">DISTFILES</code> specifies
4220 the list of distfiles that have to be fetched. Its value 4220 the list of distfiles that have to be fetched. Its value
4221 defaults to <code class="literal">${DEFAULT_DISTFILES}</code> and 4221 defaults to <code class="literal">${DEFAULT_DISTFILES}</code> and
4222 its value is <code class="literal">${DISTNAME}${EXTRACT_SUFX}</code>, 4222 its value is <code class="literal">${DISTNAME}${EXTRACT_SUFX}</code>,
4223 so that most packages don't need to define it at all. 4223 so that most packages don't need to define it at all.
4224 <code class="varname">EXTRACT_SUFX</code> is 4224 <code class="varname">EXTRACT_SUFX</code> is
4225 <code class="literal">.tar.gz</code> by default, but can be changed 4225 <code class="literal">.tar.gz</code> by default, but can be changed
4226 freely. Note that if your package requires additional 4226 freely. Note that if your package requires additional
4227 distfiles to the default one, you cannot just append the 4227 distfiles to the default one, you cannot just append the
4228 additional filenames using the <code class="literal">+=</code> 4228 additional filenames using the <code class="literal">+=</code>
4229 operator, but you have write for example:</p> 4229 operator, but you have write for example:</p>
4230<pre class="programlisting"> 4230<pre class="programlisting">
4231DISTFILES= ${DEFAULT_DISTFILES} additional-files.tar.gz 4231DISTFILES= ${DEFAULT_DISTFILES} additional-files.tar.gz
4232</pre> 4232</pre>
4233<p>Each distfile is fetched from a list of sites, usually 4233<p>Each distfile is fetched from a list of sites, usually
4234 <code class="varname">MASTER_SITES</code>. If the package has multiple 4234 <code class="varname">MASTER_SITES</code>. If the package has multiple
4235 <code class="varname">DISTFILES</code> or multiple 4235 <code class="varname">DISTFILES</code> or multiple
4236 <code class="varname">PATCHFILES</code> from different sites, you can 4236 <code class="varname">PATCHFILES</code> from different sites, you can
4237 set 4237 set
4238 <code class="varname">SITES.<em class="replaceable"><code>distfile</code></em></code> 4238 <code class="varname">SITES.<em class="replaceable"><code>distfile</code></em></code>
4239 to the list of URLs where the file 4239 to the list of URLs where the file
4240 <code class="filename"><em class="replaceable"><code>distfile</code></em></code> 4240 <code class="filename"><em class="replaceable"><code>distfile</code></em></code>
4241 (including the suffix) can be found.</p> 4241 (including the suffix) can be found.</p>
4242<pre class="programlisting"> 4242<pre class="programlisting">
4243DISTFILES= ${DISTNAME}${EXTRACT_SUFX} 4243DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
4244DISTFILES+= foo-file.tar.gz 4244DISTFILES+= foo-file.tar.gz
4245SITES.foo-file.tar.gz= \ 4245SITES.foo-file.tar.gz= \
4246https://www.somewhere.com/somehow/ \ 4246https://www.somewhere.com/somehow/ \
4247https://www.somewhereelse.com/mirror/somehow/ 4247https://www.somewhereelse.com/mirror/somehow/
4248</pre> 4248</pre>
4249<p>When actually fetching the distfiles, each item from 4249<p>When actually fetching the distfiles, each item from
4250 <code class="varname">MASTER_SITES</code> or 4250 <code class="varname">MASTER_SITES</code> or
4251 <code class="varname">SITES.*</code> gets the name of each distfile 4251 <code class="varname">SITES.*</code> gets the name of each distfile
4252 appended to it, without an intermediate slash. Therefore, 4252 appended to it, without an intermediate slash. Therefore,
4253 all site values have to end with a slash or other separator 4253 all site values have to end with a slash or other separator
4254 character. This allows for example to set 4254 character. This allows for example to set
4255 <code class="varname">MASTER_SITES</code> to a URL of a CGI script 4255 <code class="varname">MASTER_SITES</code> to a URL of a CGI script
4256 that gets the name of the distfile as a parameter. In this 4256 that gets the name of the distfile as a parameter. In this
4257 case, the definition would look like:</p> 4257 case, the definition would look like:</p>
4258<pre class="programlisting"> 4258<pre class="programlisting">
4259MASTER_SITES= https://www.example.com/download.cgi?file= 4259MASTER_SITES= https://www.example.com/download.cgi?file=
4260</pre> 4260</pre>
4261<p> The exception to this rule are URLs starting with a dash. 4261<p> The exception to this rule are URLs starting with a dash.
4262 In that case the URL is taken as is, fetched and the result 4262 In that case the URL is taken as is, fetched and the result
4263 stored under the name of the distfile. You can use this style 4263 stored under the name of the distfile. You can use this style
4264 for the case when the download URL style does not match the 4264 for the case when the download URL style does not match the
4265 above common case. For example, if permanent download URL is a 4265 above common case. For example, if permanent download URL is a
4266 redirector to the real download URL, or the download file name 4266 redirector to the real download URL, or the download file name
4267 is offered by an HTTP Content-Disposition header. In the 4267 is offered by an HTTP Content-Disposition header. In the
4268 following example, <code class="filename">foo-1.0.0.tar.gz</code> will be 4268 following example, <code class="filename">foo-1.0.0.tar.gz</code> will be
4269 created instead of the default 4269 created instead of the default
4270 <code class="filename">v1.0.0.tar.gz</code>.</p> 4270 <code class="filename">v1.0.0.tar.gz</code>.</p>
4271<pre class="programlisting"> 4271<pre class="programlisting">
4272DISTNAME= foo-1.0.0 4272DISTNAME= foo-1.0.0
4273MASTER_SITES= -https://www.example.com/archive/v1.0.0.tar.gz 4273MASTER_SITES= -https://www.example.com/archive/v1.0.0.tar.gz
4274</pre> 4274</pre>
4275<p>There are some predefined values for 4275<p>There are some predefined values for
4276 <code class="varname">MASTER_SITES</code>, which can be used in 4276 <code class="varname">MASTER_SITES</code>, which can be used in
4277 packages. The names of the variables should speak for 4277 packages. The names of the variables should speak for
4278 themselves.</p> 4278 themselves.</p>
4279<table border="0" summary="Simple list" class="simplelist"> 4279<table border="0" summary="Simple list" class="simplelist">
4280<tr> 4280<tr>
4281<td>MASTER_SITE_APACHE</td> 4281<td>MASTER_SITE_APACHE</td>
4282<td>MASTER_SITE_BACKUP</td> 4282<td>MASTER_SITE_BACKUP</td>
4283</tr> 4283</tr>
4284<tr> 4284<tr>
4285<td>MASTER_SITE_CRATESIO</td> 4285<td>MASTER_SITE_CRATESIO</td>
4286<td>MASTER_SITE_CYGWIN</td> 4286<td>MASTER_SITE_CYGWIN</td>
4287</tr> 4287</tr>
4288<tr> 4288<tr>
4289<td>MASTER_SITE_DEBIAN</td> 4289<td>MASTER_SITE_DEBIAN</td>
4290<td>MASTER_SITE_FREEBSD</td> 4290<td>MASTER_SITE_FREEBSD</td>
4291</tr> 4291</tr>
4292<tr> 4292<tr>
4293<td>MASTER_SITE_FREEBSD_LOCAL</td> 4293<td>MASTER_SITE_FREEBSD_LOCAL</td>
4294<td>MASTER_SITE_GENTOO</td> 4294<td>MASTER_SITE_GENTOO</td>
4295</tr> 4295</tr>
4296<tr> 4296<tr>
4297<td>MASTER_SITE_GITHUB</td> 4297<td>MASTER_SITE_GITHUB</td>
4298<td>MASTER_SITE_GNOME</td> 4298<td>MASTER_SITE_GITLAB</td>
4299</tr> 4299</tr>
4300<tr> 4300<tr>
 4301<td>MASTER_SITE_GNOME</td>
4301<td>MASTER_SITE_GNU</td> 4302<td>MASTER_SITE_GNU</td>
4302<td>MASTER_SITE_GNUSTEP</td> 
4303</tr> 4303</tr>
4304<tr> 4304<tr>
 4305<td>MASTER_SITE_GNUSTEP</td>
4305<td>MASTER_SITE_HASKELL_HACKAGE</td> 4306<td>MASTER_SITE_HASKELL_HACKAGE</td>
4306<td>MASTER_SITE_IFARCHIVE</td> 
4307</tr> 4307</tr>
4308<tr> 4308<tr>
 4309<td>MASTER_SITE_IFARCHIVE</td>
4309<td>MASTER_SITE_KDE</td> 4310<td>MASTER_SITE_KDE</td>
4310<td>MASTER_SITE_MOZILLA</td> 
4311</tr> 4311</tr>
4312<tr> 4312<tr>
 4313<td>MASTER_SITE_MOZILLA</td>
4313<td>MASTER_SITE_MOZILLA_ALL</td> 4314<td>MASTER_SITE_MOZILLA_ALL</td>
4314<td>MASTER_SITE_MYSQL</td> 
4315</tr> 4315</tr>
4316<tr> 4316<tr>
 4317<td>MASTER_SITE_MYSQL</td>
4317<td>MASTER_SITE_NETLIB</td> 4318<td>MASTER_SITE_NETLIB</td>
4318<td>MASTER_SITE_OPENBSD</td> 
4319</tr> 4319</tr>
4320<tr> 4320<tr>
 4321<td>MASTER_SITE_OPENBSD</td>
4321<td>MASTER_SITE_OPENOFFICE</td> 4322<td>MASTER_SITE_OPENOFFICE</td>
4322<td>MASTER_SITE_OSDN</td> 
4323</tr> 4323</tr>
4324<tr> 4324<tr>
 4325<td>MASTER_SITE_OSDN</td>
4325<td>MASTER_SITE_PERL_CPAN</td> 4326<td>MASTER_SITE_PERL_CPAN</td>
4326<td>MASTER_SITE_PGSQL</td> 
4327</tr> 4327</tr>
4328<tr> 4328<tr>
 4329<td>MASTER_SITE_PGSQL</td>
4329<td>MASTER_SITE_PYPI</td> 4330<td>MASTER_SITE_PYPI</td>
4330<td>MASTER_SITE_RUBYGEMS</td> 
4331</tr> 4331</tr>
4332<tr> 4332<tr>
 4333<td>MASTER_SITE_RUBYGEMS</td>
4333<td>MASTER_SITE_R_CRAN</td> 4334<td>MASTER_SITE_R_CRAN</td>
4334<td>MASTER_SITE_SOURCEFORGE</td> 
4335</tr> 4335</tr>
4336<tr> 4336<tr>
 4337<td>MASTER_SITE_SOURCEFORGE</td>
4337<td>MASTER_SITE_SUNSITE</td> 4338<td>MASTER_SITE_SUNSITE</td>
4338<td>MASTER_SITE_SUSE</td> 
4339</tr> 4339</tr>
4340<tr> 4340<tr>
 4341<td>MASTER_SITE_SUSE</td>
4341<td>MASTER_SITE_TEX_CTAN</td> 4342<td>MASTER_SITE_TEX_CTAN</td>
4342<td>MASTER_SITE_XCONTRIB</td> 
4343</tr> 4343</tr>
4344<tr> 4344<tr>
 4345<td>MASTER_SITE_XCONTRIB</td>
4345<td>MASTER_SITE_XEMACS</td> 4346<td>MASTER_SITE_XEMACS</td>
 4347</tr>
 4348<tr>
4346<td>MASTER_SITE_XORG</td> 4349<td>MASTER_SITE_XORG</td>
 4350<td> </td>
4347</tr> 4351</tr>
4348</table> 4352</table>
4349<p>Some explanations for the less self-explaining ones: 4353<p>Some explanations for the less self-explaining ones:
4350 <code class="varname">MASTER_SITE_BACKUP</code> contains backup sites 4354 <code class="varname">MASTER_SITE_BACKUP</code> contains backup sites
4351 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 4355 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
4352 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> 4356 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>
4353<p>If you choose one of these predefined sites, you may 4357<p>If you choose one of these predefined sites, you may
4354 want to specify a subdirectory of that site. Since these 4358 want to specify a subdirectory of that site. Since these
4355 macros may expand to more than one actual site, you 4359 macros may expand to more than one actual site, you
4356 <span class="emphasis"><em>must</em></span> use the following construct to 4360 <span class="emphasis"><em>must</em></span> use the following construct to
4357 specify a subdirectory:</p> 4361 specify a subdirectory:</p>
4358<pre class="programlisting"> 4362<pre class="programlisting">
4359MASTER_SITES= ${MASTER_SITE_GNU:=subdirectory/name/} 4363MASTER_SITES= ${MASTER_SITE_GNU:=subdirectory/name/}
4360MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=project_name/} 4364MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=project_name/}
4361</pre> 4365</pre>
4362<p>Note the trailing slash after the subdirectory 4366<p>Note the trailing slash after the subdirectory
4363 name.</p> 4367 name.</p>
4364</div> 4368</div>
4365<div class="sect2"> 4369<div class="sect2">
4366<div class="titlepage"><div><div><h3 class="title"> 4370<div class="titlepage"><div><div><h3 class="title">
4367<a name="build.fetch.how"></a>13.5.2. How are the files fetched?</h3></div></div></div> 4371<a name="build.fetch.how"></a>13.5.2. How are the files fetched?</h3></div></div></div>
4368<p>The <span class="emphasis"><em>fetch</em></span> phase makes sure that 4372<p>The <span class="emphasis"><em>fetch</em></span> phase makes sure that
4369 all the distfiles exist in a local directory 4373 all the distfiles exist in a local directory
4370 (<code class="varname">DISTDIR</code>, which can be set by the pkgsrc 4374 (<code class="varname">DISTDIR</code>, which can be set by the pkgsrc
4371 user). If the files do not exist, they are fetched using 4375 user). If the files do not exist, they are fetched using
4372 commands of the form</p> 4376 commands of the form</p>
4373<pre class="programlisting"> 4377<pre class="programlisting">
4374${FETCH_CMD} ${FETCH_BEFORE_ARGS} ${site}${file} ${FETCH_AFTER_ARGS} 4378${FETCH_CMD} ${FETCH_BEFORE_ARGS} ${site}${file} ${FETCH_AFTER_ARGS}
4375</pre> 4379</pre>
4376<p>where <code class="literal">${site}</code> varies through 4380<p>where <code class="literal">${site}</code> varies through
4377 several possibilities in turn: first, 4381 several possibilities in turn: first,
4378 <code class="varname">MASTER_SITE_OVERRIDE</code> is tried, then the 4382 <code class="varname">MASTER_SITE_OVERRIDE</code> is tried, then the
4379 sites specified in either <code class="varname">SITES.file</code> if 4383 sites specified in either <code class="varname">SITES.file</code> if
4380 defined, else <code class="varname">MASTER_SITES</code> or 4384 defined, else <code class="varname">MASTER_SITES</code> or
4381 <code class="varname">PATCH_SITES</code>, as applies, then finally the 4385 <code class="varname">PATCH_SITES</code>, as applies, then finally the
4382 value of <code class="varname">MASTER_SITE_BACKUP</code>. The order of 4386 value of <code class="varname">MASTER_SITE_BACKUP</code>. The order of
4383 all except the first and the last can be optionally sorted 4387 all except the first and the last can be optionally sorted
4384 by the user, via setting either 4388 by the user, via setting either
4385 <code class="varname">MASTER_SORT_RANDOM</code>, and 4389 <code class="varname">MASTER_SORT_RANDOM</code>, and
4386 <code class="varname">MASTER_SORT_AWK</code> or 4390 <code class="varname">MASTER_SORT_AWK</code> or
4387 <code class="varname">MASTER_SORT_REGEX</code>.</p> 4391 <code class="varname">MASTER_SORT_REGEX</code>.</p>
4388<p> The specific command and arguments used depend on the 4392<p> The specific command and arguments used depend on the
4389 <code class="varname">FETCH_USING</code> parameter. The example above is 4393 <code class="varname">FETCH_USING</code> parameter. The example above is
4390 for <code class="literal">FETCH_USING=custom</code>.</p> 4394 for <code class="literal">FETCH_USING=custom</code>.</p>
4391<p>The distfiles mirror run by the NetBSD Foundation uses the 4395<p>The distfiles mirror run by the NetBSD Foundation uses the
4392 <span class="emphasis"><em>mirror-distfiles</em></span> target to mirror the 4396 <span class="emphasis"><em>mirror-distfiles</em></span> target to mirror the
4393 distfiles, if they are freely distributable. Packages setting 4397 distfiles, if they are freely distributable. Packages setting
4394 <code class="varname">NO_SRC_ON_FTP</code> (usually to 4398 <code class="varname">NO_SRC_ON_FTP</code> (usually to
4395 <span class="quote">&#8220;<span class="quote">${RESTRICTED}</span>&#8221;</span>) will not have their distfiles 4399 <span class="quote">&#8220;<span class="quote">${RESTRICTED}</span>&#8221;</span>) will not have their distfiles
4396 mirrored.</p> 4400 mirrored.</p>
4397</div> 4401</div>
4398</div> 4402</div>
4399<div class="sect1"> 4403<div class="sect1">
4400<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4404<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4401<a name="build.checksum"></a>13.6. The <span class="emphasis"><em>checksum</em></span> phase</h2></div></div></div> 4405<a name="build.checksum"></a>13.6. The <span class="emphasis"><em>checksum</em></span> phase</h2></div></div></div>
4402<p>After the distfile(s) are fetched, their checksum is 4406<p>After the distfile(s) are fetched, their checksum is
4403 generated and compared with the checksums stored in the 4407 generated and compared with the checksums stored in the
4404 distinfo file. If the checksums don't match, the build is 4408 distinfo file. If the checksums don't match, the build is
4405 aborted. This is to ensure the same distfile is used for 4409 aborted. This is to ensure the same distfile is used for
4406 building, and that the distfile wasn't changed, e.g. by some 4410 building, and that the distfile wasn't changed, e.g. by some
4407 malign force, deliberately changed distfiles on the master 4411 malign force, deliberately changed distfiles on the master
4408 distribution site or network lossage.</p> 4412 distribution site or network lossage.</p>
4409</div> 4413</div>
4410<div class="sect1"> 4414<div class="sect1">
4411<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4415<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4412<a name="build.extract"></a>13.7. The <span class="emphasis"><em>extract</em></span> phase</h2></div></div></div> 4416<a name="build.extract"></a>13.7. The <span class="emphasis"><em>extract</em></span> phase</h2></div></div></div>
4413<p>When the distfiles are present on the local system, they 4417<p>When the distfiles are present on the local system, they
4414 need to be extracted, as they usually come in the form of some 4418 need to be extracted, as they usually come in the form of some
4415 compressed archive format.</p> 4419 compressed archive format.</p>
4416<p>By default, all <code class="varname">DISTFILES</code> are 4420<p>By default, all <code class="varname">DISTFILES</code> are
4417 extracted. If you only need some of them, you can set the 4421 extracted. If you only need some of them, you can set the
4418 <code class="varname">EXTRACT_ONLY</code> variable to the list of those 4422 <code class="varname">EXTRACT_ONLY</code> variable to the list of those
4419 files.</p> 4423 files.</p>
4420<p>Extracting the files is usually done by a little 4424<p>Extracting the files is usually done by a little
4421 program, <code class="filename">mk/extract/extract</code>, which 4425 program, <code class="filename">mk/extract/extract</code>, which
4422 already knows how to extract various archive formats, so most 4426 already knows how to extract various archive formats, so most
4423 likely you will not need to change anything here. But if you 4427 likely you will not need to change anything here. But if you
4424 need, the following variables may help you:</p> 4428 need, the following variables may help you:</p>
4425<div class="variablelist"><dl class="variablelist"> 4429<div class="variablelist"><dl class="variablelist">
4426<dt><span class="term"><code class="varname">EXTRACT_OPTS_{BIN,LHA,PAX,RAR,TAR,ZIP,ZOO}</code></span></dt> 4430<dt><span class="term"><code class="varname">EXTRACT_OPTS_{BIN,LHA,PAX,RAR,TAR,ZIP,ZOO}</code></span></dt>
4427<dd><p>Use these variables to override the default 4431<dd><p>Use these variables to override the default
4428 options for an extract command, which are defined in 4432 options for an extract command, which are defined in
4429 <code class="filename">mk/extract/extract</code>.</p></dd> 4433 <code class="filename">mk/extract/extract</code>.</p></dd>
4430<dt><span class="term"><code class="varname">EXTRACT_USING</code></span></dt> 4434<dt><span class="term"><code class="varname">EXTRACT_USING</code></span></dt>
4431<dd><p>This variable can be set to 4435<dd><p>This variable can be set to
4432 <code class="literal">bsdtar</code>, <code class="literal">gtar</code>, <code class="literal">nbtar</code> 4436 <code class="literal">bsdtar</code>, <code class="literal">gtar</code>, <code class="literal">nbtar</code>
4433 (which is the default value), <code class="literal">pax</code>, or an 4437 (which is the default value), <code class="literal">pax</code>, or an
4434 absolute pathname pointing to the command with which tar 4438 absolute pathname pointing to the command with which tar
4435 archives should be extracted. It is preferred to choose bsdtar over gtar 4439 archives should be extracted. It is preferred to choose bsdtar over gtar
4436 if NetBSD's pax-as-tar is not good enough.</p></dd> 4440 if NetBSD's pax-as-tar is not good enough.</p></dd>
4437</dl></div> 4441</dl></div>
4438<p>If the <code class="filename">extract</code> program doesn't 4442<p>If the <code class="filename">extract</code> program doesn't
4439 serve your needs, you can also override the 4443 serve your needs, you can also override the
4440 <code class="varname">EXTRACT_CMD</code> variable, which holds the 4444 <code class="varname">EXTRACT_CMD</code> variable, which holds the
4441 command used for extracting the files. This command is 4445 command used for extracting the files. This command is
4442 executed in the <code class="filename">${WRKSRC}</code> 4446 executed in the <code class="filename">${WRKSRC}</code>
4443 directory. During execution of this command, the shell 4447 directory. During execution of this command, the shell
4444 variable <code class="varname">extract_file</code> holds the absolute 4448 variable <code class="varname">extract_file</code> holds the absolute
4445 pathname of the file that is going to be extracted.</p> 4449 pathname of the file that is going to be extracted.</p>
4446<p>And if that still does not suffice, you can override the 4450<p>And if that still does not suffice, you can override the
4447 <code class="varname">do-extract</code> target in the package 4451 <code class="varname">do-extract</code> target in the package
4448 Makefile.</p> 4452 Makefile.</p>
4449</div> 4453</div>
4450<div class="sect1"> 4454<div class="sect1">
4451<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4455<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4452<a name="build.patch"></a>13.8. The <span class="emphasis"><em>patch</em></span> phase</h2></div></div></div> 4456<a name="build.patch"></a>13.8. The <span class="emphasis"><em>patch</em></span> phase</h2></div></div></div>
4453<p>After extraction, all the patches named by the 4457<p>After extraction, all the patches named by the
4454 <code class="varname">PATCHFILES</code>, those present in the patches 4458 <code class="varname">PATCHFILES</code>, those present in the patches
4455 subdirectory of the package as well as in 4459 subdirectory of the package as well as in
4456 $LOCALPATCHES/$PKGPATH (e.g. 4460 $LOCALPATCHES/$PKGPATH (e.g.
4457 <code class="filename">/usr/local/patches/graphics/png</code>) are 4461 <code class="filename">/usr/local/patches/graphics/png</code>) are
4458 applied. Patchfiles ending in <code class="filename">.Z</code> or 4462 applied. Patchfiles ending in <code class="filename">.Z</code> or
4459 <code class="filename">.gz</code> are uncompressed before they are 4463 <code class="filename">.gz</code> are uncompressed before they are
4460 applied, files ending in <code class="filename">.orig</code> or 4464 applied, files ending in <code class="filename">.orig</code> or
4461 <code class="filename">.rej</code> are ignored. Any special options to 4465 <code class="filename">.rej</code> are ignored. Any special options to
4462 <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/patch.1"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> can be handed in 4466 <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/patch.1"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> can be handed in
4463 <code class="varname">PATCH_DIST_ARGS</code>. See <a class="xref" href="#components.patches" title="12.3. patches/*">Section 12.3, &#8220;<code class="filename">patches/*</code>&#8221;</a> for more details.</p> 4467 <code class="varname">PATCH_DIST_ARGS</code>. See <a class="xref" href="#components.patches" title="12.3. patches/*">Section 12.3, &#8220;<code class="filename">patches/*</code>&#8221;</a> for more details.</p>
4464<p>By default <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/patch.1"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> is given special arguments to make it 4468<p>By default <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/patch.1"><span class="citerefentry"><span class="refentrytitle">patch</span>(1)</span></a> is given special arguments to make it
4465 fail if the expected text from the patch context is not found in the 4469 fail if the expected text from the patch context is not found in the
4466 patched file. If that happens, fix the patch file by comparing it 4470 patched file. If that happens, fix the patch file by comparing it
4467 with the actual text in the file to be patched.</p> 4471 with the actual text in the file to be patched.</p>
4468</div> 4472</div>
4469<div class="sect1"> 4473<div class="sect1">
4470<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4474<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4471<a name="build.tools"></a>13.9. The <span class="emphasis"><em>tools</em></span> phase</h2></div></div></div> 4475<a name="build.tools"></a>13.9. The <span class="emphasis"><em>tools</em></span> phase</h2></div></div></div>
4472<p>This is covered in <a class="xref" href="#tools" title="Chapter 17. Tools needed for building or running">Chapter 17, <i>Tools needed for building or running</i></a>. 4476<p>This is covered in <a class="xref" href="#tools" title="Chapter 17. Tools needed for building or running">Chapter 17, <i>Tools needed for building or running</i></a>.
4473 </p> 4477 </p>
4474</div> 4478</div>
4475<div class="sect1"> 4479<div class="sect1">
4476<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4480<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4477<a name="build.wrapper"></a>13.10. The <span class="emphasis"><em>wrapper</em></span> phase</h2></div></div></div> 4481<a name="build.wrapper"></a>13.10. The <span class="emphasis"><em>wrapper</em></span> phase</h2></div></div></div>
4478<p>This phase creates wrapper programs for the compilers and 4482<p>This phase creates wrapper programs for the compilers and
4479 linkers. The following variables can be used to tweak the 4483 linkers. The following variables can be used to tweak the
4480 wrappers.</p> 4484 wrappers.</p>
4481<div class="variablelist"><dl class="variablelist"> 4485<div class="variablelist"><dl class="variablelist">
4482<dt><span class="term"><code class="varname">ECHO_WRAPPER_MSG</code></span></dt> 4486<dt><span class="term"><code class="varname">ECHO_WRAPPER_MSG</code></span></dt>
4483<dd><p>The command used to print progress 4487<dd><p>The command used to print progress
4484 messages. Does nothing by default. Set to 4488 messages. Does nothing by default. Set to
4485 <code class="literal">${ECHO}</code> to see the progress 4489 <code class="literal">${ECHO}</code> to see the progress
4486 messages.</p></dd> 4490 messages.</p></dd>
4487<dt><span class="term"><code class="varname">WRAPPER_DEBUG</code></span></dt> 4491<dt><span class="term"><code class="varname">WRAPPER_DEBUG</code></span></dt>
4488<dd><p>This variable can be set to 4492<dd><p>This variable can be set to
4489 <code class="literal">yes</code> (default) or <code class="literal">no</code>, 4493 <code class="literal">yes</code> (default) or <code class="literal">no</code>,
4490 depending on whether you want additional information in the 4494 depending on whether you want additional information in the
4491 wrapper log file.</p></dd> 4495 wrapper log file.</p></dd>
4492<dt><span class="term"><code class="varname">WRAPPER_UPDATE_CACHE</code></span></dt> 4496<dt><span class="term"><code class="varname">WRAPPER_UPDATE_CACHE</code></span></dt>
4493<dd><p>This variable can be set to 4497<dd><p>This variable can be set to
4494 <code class="literal">yes</code> or <code class="literal">no</code>, depending 4498 <code class="literal">yes</code> or <code class="literal">no</code>, depending
4495 on whether the wrapper should use its cache, which will 4499 on whether the wrapper should use its cache, which will
4496 improve the speed. The default value is 4500 improve the speed. The default value is
4497 <code class="literal">yes</code>, but is forced to 4501 <code class="literal">yes</code>, but is forced to
4498 <code class="literal">no</code> if the platform does not support 4502 <code class="literal">no</code> if the platform does not support
4499 it.</p></dd> 4503 it.</p></dd>
4500<dt><span class="term"><code class="varname">WRAPPER_REORDER_CMDS</code></span></dt> 4504<dt><span class="term"><code class="varname">WRAPPER_REORDER_CMDS</code></span></dt>
4501<dd><p>A list of reordering commands. A reordering 4505<dd><p>A list of reordering commands. A reordering
4502 command has the form 4506 command has the form
4503 <code class="literal">reorder:l:<em class="replaceable"><code>lib1</code></em>:<em class="replaceable"><code>lib2</code></em></code>. 4507 <code class="literal">reorder:l:<em class="replaceable"><code>lib1</code></em>:<em class="replaceable"><code>lib2</code></em></code>.
4504 It ensures that that 4508 It ensures that that
4505 <code class="literal">-l<em class="replaceable"><code>lib1</code></em></code> occurs 4509 <code class="literal">-l<em class="replaceable"><code>lib1</code></em></code> occurs
4506 before <code class="literal">-l<em class="replaceable"><code>lib2</code></em></code>. 4510 before <code class="literal">-l<em class="replaceable"><code>lib2</code></em></code>.
4507 </p></dd> 4511 </p></dd>
4508</dl></div> 4512</dl></div>
4509</div> 4513</div>
4510<div class="sect1"> 4514<div class="sect1">
4511<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4515<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4512<a name="build.configure"></a>13.11. The <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div> 4516<a name="build.configure"></a>13.11. The <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div>
4513<p>Most pieces of software need information on the header 4517<p>Most pieces of software need information on the header
4514 files, system calls, and library routines which are available 4518 files, system calls, and library routines which are available
4515 on the platform they run on. The process of determining this 4519 on the platform they run on. The process of determining this
4516 information is known as configuration, and is usually 4520 information is known as configuration, and is usually
4517 automated. In most cases, a script is supplied with the 4521 automated. In most cases, a script is supplied with the
4518 distfiles, and its invocation results in generation of header 4522 distfiles, and its invocation results in generation of header
4519 files, Makefiles, etc.</p> 4523 files, Makefiles, etc.</p>
4520<p>If the package contains a configure script, this can be 4524<p>If the package contains a configure script, this can be
4521 invoked by setting <code class="varname">HAS_CONFIGURE</code> to 4525 invoked by setting <code class="varname">HAS_CONFIGURE</code> to
4522 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. If the configure script is a GNU autoconf 4526 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. If the configure script is a GNU autoconf
4523 script, you should set <code class="varname">GNU_CONFIGURE</code> to 4527 script, you should set <code class="varname">GNU_CONFIGURE</code> to
4524 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> instead.</p> 4528 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span> instead.</p>
4525<p>In the <code class="literal">do-configure</code> stage, a rough 4529<p>In the <code class="literal">do-configure</code> stage, a rough
4526 equivalent of the following command is run. See 4530 equivalent of the following command is run. See
4527 <code class="filename">mk/configure/configure.mk</code>, target 4531 <code class="filename">mk/configure/configure.mk</code>, target
4528 <code class="literal">do-configure-script</code> for the exact 4532 <code class="literal">do-configure-script</code> for the exact
4529 definition.</p> 4533 definition.</p>
4530<pre class="programlisting"> 4534<pre class="programlisting">
4531.for dir in ${CONFIGURE_DIRS} 4535.for dir in ${CONFIGURE_DIRS}
4532 cd ${WRKSRC} &amp;&amp; cd ${dir} \ 4536 cd ${WRKSRC} &amp;&amp; cd ${dir} \
4533 &amp;&amp; env ${CONFIGURE_ENV} \ 4537 &amp;&amp; env ${CONFIGURE_ENV} \
4534 ${CONFIG_SHELL} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS} 4538 ${CONFIG_SHELL} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}
4535.endfor 4539.endfor
4536</pre> 4540</pre>
4537<p><code class="varname">CONFIGURE_DIRS</code> (default: 4541<p><code class="varname">CONFIGURE_DIRS</code> (default:
4538 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to 4542 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to
4539 <code class="varname">WRKSRC</code>. In each of these directories, the 4543 <code class="varname">WRKSRC</code>. In each of these directories, the
4540 configure script is run with the environment 4544 configure script is run with the environment
4541 <code class="varname">CONFIGURE_ENV</code> and arguments 4545 <code class="varname">CONFIGURE_ENV</code> and arguments
4542 <code class="varname">CONFIGURE_ARGS</code>. The variables 4546 <code class="varname">CONFIGURE_ARGS</code>. The variables
4543 <code class="varname">CONFIGURE_ENV</code>, 4547 <code class="varname">CONFIGURE_ENV</code>,
4544 <code class="varname">CONFIGURE_SCRIPT</code> (default: 4548 <code class="varname">CONFIGURE_SCRIPT</code> (default:
4545 <span class="quote">&#8220;<span class="quote">./configure</span>&#8221;</span>) and 4549 <span class="quote">&#8220;<span class="quote">./configure</span>&#8221;</span>) and
4546 <code class="varname">CONFIGURE_ARGS</code> may all be changed by the 4550 <code class="varname">CONFIGURE_ARGS</code> may all be changed by the
4547 package.</p> 4551 package.</p>
4548<p>If the program uses the Perl way of configuration (mainly Perl 4552<p>If the program uses the Perl way of configuration (mainly Perl
4549 modules, but not only), i.e. a file called 4553 modules, but not only), i.e. a file called
4550 <code class="filename">Makefile.PL</code>, it should include 4554 <code class="filename">Makefile.PL</code>, it should include
4551 <code class="filename">../../lang/perl5/module.mk</code>. To set any parameter for 4555 <code class="filename">../../lang/perl5/module.mk</code>. To set any parameter for
4552 <code class="filename">Makefile.PL</code> use the <code class="varname">MAKE_PARAMS</code> 4556 <code class="filename">Makefile.PL</code> use the <code class="varname">MAKE_PARAMS</code>
4553 variable (e.g., <code class="literal">MAKE_PARAMS+=foo=bar</code></p> 4557 variable (e.g., <code class="literal">MAKE_PARAMS+=foo=bar</code></p>
4554<p>If the program uses an <code class="filename">Imakefile</code> 4558<p>If the program uses an <code class="filename">Imakefile</code>
4555 for configuration, the appropriate steps can be invoked by 4559 for configuration, the appropriate steps can be invoked by
4556 setting <code class="varname">USE_IMAKE</code> to 4560 setting <code class="varname">USE_IMAKE</code> to
4557 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. If you only need xmkmf, add it to <code class="varname">USE_TOOLS</code>. 4561 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. If you only need xmkmf, add it to <code class="varname">USE_TOOLS</code>.
4558 You can add variables to xmkmf's environment by adding them to the 4562 You can add variables to xmkmf's environment by adding them to the
4559 <code class="varname">SCRIPTS_ENV</code> variable.</p> 4563 <code class="varname">SCRIPTS_ENV</code> variable.</p>
4560<p>If the program uses <code class="filename">cmake</code> 4564<p>If the program uses <code class="filename">cmake</code>
4561 for configuration, the appropriate steps can be invoked by 4565 for configuration, the appropriate steps can be invoked by
4562 setting <code class="varname">USE_CMAKE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. 4566 setting <code class="varname">USE_CMAKE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.
4563 You can add variables to cmake's environment by adding them to the 4567 You can add variables to cmake's environment by adding them to the
4564 <code class="varname">CONFIGURE_ENV</code> variable and arguments to cmake 4568 <code class="varname">CONFIGURE_ENV</code> variable and arguments to cmake
4565 by adding them to the <code class="varname">CMAKE_ARGS</code> variable. 4569 by adding them to the <code class="varname">CMAKE_ARGS</code> variable.
4566 The top directory argument is given by the 4570 The top directory argument is given by the
4567 <code class="varname">CMAKE_ARG_PATH</code> variable, that defaults to 4571 <code class="varname">CMAKE_ARG_PATH</code> variable, that defaults to
4568 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> (relative to <code class="varname">CONFIGURE_DIRS</code>)</p> 4572 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> (relative to <code class="varname">CONFIGURE_DIRS</code>)</p>
4569<p>If there is no configure step at all, set 4573<p>If there is no configure step at all, set
4570 <code class="varname">NO_CONFIGURE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p> 4574 <code class="varname">NO_CONFIGURE</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p>
4571</div> 4575</div>
4572<div class="sect1"> 4576<div class="sect1">
4573<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4577<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4574<a name="build.build"></a>13.12. The <span class="emphasis"><em>build</em></span> phase</h2></div></div></div> 4578<a name="build.build"></a>13.12. The <span class="emphasis"><em>build</em></span> phase</h2></div></div></div>
4575<p>For building a package, a rough equivalent of the following 4579<p>For building a package, a rough equivalent of the following
4576 code is executed; see <code class="filename">mk/build/build.mk</code>, target 4580 code is executed; see <code class="filename">mk/build/build.mk</code>, target
4577 <code class="literal">do-build</code> for the exact definition.</p> 4581 <code class="literal">do-build</code> for the exact definition.</p>
4578<pre class="programlisting"> 4582<pre class="programlisting">
4579.for dir in ${BUILD_DIRS} 4583.for dir in ${BUILD_DIRS}
4580 cd ${WRKSRC} &amp;&amp; cd ${dir} \ 4584 cd ${WRKSRC} &amp;&amp; cd ${dir} \
4581 &amp;&amp; env ${MAKE_ENV} \ 4585 &amp;&amp; env ${MAKE_ENV} \
4582 ${MAKE_PROGRAM} ${MAKE_FLAGS} ${BUILD_MAKE_FLAGS} \ 4586 ${MAKE_PROGRAM} ${MAKE_FLAGS} ${BUILD_MAKE_FLAGS} \
4583 -f ${MAKE_FILE} \ 4587 -f ${MAKE_FILE} \
4584 ${BUILD_TARGET} 4588 ${BUILD_TARGET}
4585.endfor 4589.endfor
4586</pre> 4590</pre>
4587<p><code class="varname">BUILD_DIRS</code> (default: 4591<p><code class="varname">BUILD_DIRS</code> (default:
4588 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to 4592 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span>) is a list of pathnames relative to
4589 <code class="varname">WRKSRC</code>. In each of these directories, 4593 <code class="varname">WRKSRC</code>. In each of these directories,
4590 <code class="varname">MAKE_PROGRAM</code> is run with the environment 4594 <code class="varname">MAKE_PROGRAM</code> is run with the environment
4591 <code class="varname">MAKE_ENV</code> and arguments 4595 <code class="varname">MAKE_ENV</code> and arguments
4592 <code class="varname">BUILD_MAKE_FLAGS</code>. The variables 4596 <code class="varname">BUILD_MAKE_FLAGS</code>. The variables
4593 <code class="varname">MAKE_ENV</code>, 4597 <code class="varname">MAKE_ENV</code>,
4594 <code class="varname">BUILD_MAKE_FLAGS</code>, 4598 <code class="varname">BUILD_MAKE_FLAGS</code>,
4595 <code class="varname">MAKE_FILE</code> and 4599 <code class="varname">MAKE_FILE</code> and
4596 <code class="varname">BUILD_TARGET</code> may all be changed by the 4600 <code class="varname">BUILD_TARGET</code> may all be changed by the
4597 package.</p> 4601 package.</p>
4598<p>The default value of <code class="varname">MAKE_PROGRAM</code> is 4602<p>The default value of <code class="varname">MAKE_PROGRAM</code> is
4599 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span> if <code class="varname">USE_TOOLS</code> contains 4603 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span> if <code class="varname">USE_TOOLS</code> contains
4600 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span> otherwise. The 4604 <span class="quote">&#8220;<span class="quote">gmake</span>&#8221;</span>, <span class="quote">&#8220;<span class="quote">make</span>&#8221;</span> otherwise. The
4601 default value of <code class="varname">MAKE_FILE</code> is 4605 default value of <code class="varname">MAKE_FILE</code> is
4602 <span class="quote">&#8220;<span class="quote">Makefile</span>&#8221;</span>, and <code class="varname">BUILD_TARGET</code> 4606 <span class="quote">&#8220;<span class="quote">Makefile</span>&#8221;</span>, and <code class="varname">BUILD_TARGET</code>
4603 defaults to <span class="quote">&#8220;<span class="quote">all</span>&#8221;</span>.</p> 4607 defaults to <span class="quote">&#8220;<span class="quote">all</span>&#8221;</span>.</p>
4604<p>If there is no build step at all, set 4608<p>If there is no build step at all, set
4605 <code class="varname">NO_BUILD</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p> 4609 <code class="varname">NO_BUILD</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>.</p>
4606</div> 4610</div>
4607<div class="sect1"> 4611<div class="sect1">
4608<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4612<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4609<a name="build.test"></a>13.13. The <span class="emphasis"><em>test</em></span> phase</h2></div></div></div> 4613<a name="build.test"></a>13.13. The <span class="emphasis"><em>test</em></span> phase</h2></div></div></div>
4610<p>[TODO]</p> 4614<p>[TODO]</p>
4611</div> 4615</div>
4612<div class="sect1"> 4616<div class="sect1">
4613<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4617<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4614<a name="build.install"></a>13.14. The <span class="emphasis"><em>install</em></span> phase</h2></div></div></div> 4618<a name="build.install"></a>13.14. The <span class="emphasis"><em>install</em></span> phase</h2></div></div></div>
4615<p>Once the build stage has completed, the final step is to 4619<p>Once the build stage has completed, the final step is to
4616 install the software in public directories, so users can 4620 install the software in public directories, so users can
4617 access the programs and files.</p> 4621 access the programs and files.</p>
4618<p>In the <span class="emphasis"><em>install</em></span> phase, a rough equivalent 4622<p>In the <span class="emphasis"><em>install</em></span> phase, a rough equivalent
4619 of the following code is executed; see 4623 of the following code is executed; see
4620 <code class="filename">mk/install/install.mk</code>, target 4624 <code class="filename">mk/install/install.mk</code>, target
4621 <code class="literal">do-install</code> for the exact definition. Additionally, 4625 <code class="literal">do-install</code> for the exact definition. Additionally,
4622 before and after this code, several consistency checks are run 4626 before and after this code, several consistency checks are run
4623 against the files-to-be-installed, see 4627 against the files-to-be-installed, see
4624 <code class="filename">mk/check/*.mk</code> for details.</p> 4628 <code class="filename">mk/check/*.mk</code> for details.</p>
4625<pre class="programlisting"> 4629<pre class="programlisting">
4626.for dir in ${INSTALL_DIRS} 4630.for dir in ${INSTALL_DIRS}
4627 cd ${WRKSRC} &amp;&amp; cd ${dir} \ 4631 cd ${WRKSRC} &amp;&amp; cd ${dir} \
4628 &amp;&amp; env ${INSTALL_ENV} ${MAKE_ENV} \ 4632 &amp;&amp; env ${INSTALL_ENV} ${MAKE_ENV} \
4629 ${MAKE_PROGRAM} ${MAKE_FLAGS} ${INSTALL_MAKE_FLAGS} \ 4633 ${MAKE_PROGRAM} ${MAKE_FLAGS} ${INSTALL_MAKE_FLAGS} \
4630 -f ${MAKE_FILE} ${INSTALL_TARGET} 4634 -f ${MAKE_FILE} ${INSTALL_TARGET}
4631.endfor 4635.endfor
4632</pre> 4636</pre>
4633<p>The variable's meanings are analogous to the ones in the 4637<p>The variable's meanings are analogous to the ones in the
4634 <span class="emphasis"><em>build</em></span> phase. 4638 <span class="emphasis"><em>build</em></span> phase.
4635 <code class="varname">INSTALL_DIRS</code> defaults to 4639 <code class="varname">INSTALL_DIRS</code> defaults to
4636 <code class="varname">BUILD_DIRS</code>. <code class="varname">INSTALL_TARGET</code> 4640 <code class="varname">BUILD_DIRS</code>. <code class="varname">INSTALL_TARGET</code>
4637 is <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> by default, plus 4641 is <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> by default, plus
4638 <span class="quote">&#8220;<span class="quote">install.man</span>&#8221;</span> if <code class="varname">USE_IMAKE</code> is 4642 <span class="quote">&#8220;<span class="quote">install.man</span>&#8221;</span> if <code class="varname">USE_IMAKE</code> is
4639 defined and <code class="varname">NO_INSTALL_MANPAGES</code> is not 4643 defined and <code class="varname">NO_INSTALL_MANPAGES</code> is not
4640 defined.</p> 4644 defined.</p>
4641<p>In the <span class="emphasis"><em>install</em></span> phase, the following 4645<p>In the <span class="emphasis"><em>install</em></span> phase, the following
4642 variables are useful. They are all variations of the 4646 variables are useful. They are all variations of the
4643 <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/install.1"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a> command that have the owner, group and 4647 <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/install.1"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a> command that have the owner, group and
4644 permissions preset. <code class="varname">INSTALL</code> is the plain 4648 permissions preset. <code class="varname">INSTALL</code> is the plain
4645 install command. The specialized variants, together with their 4649 install command. The specialized variants, together with their
4646 intended use, are:</p> 4650 intended use, are:</p>
4647<div class="variablelist"><dl class="variablelist"> 4651<div class="variablelist"><dl class="variablelist">
4648<dt><span class="term"><code class="varname">INSTALL_PROGRAM_DIR</code></span></dt> 4652<dt><span class="term"><code class="varname">INSTALL_PROGRAM_DIR</code></span></dt>
4649<dd><p>directories that contain 4653<dd><p>directories that contain
4650 binaries</p></dd> 4654 binaries</p></dd>
4651<dt><span class="term"><code class="varname">INSTALL_SCRIPT_DIR</code></span></dt> 4655<dt><span class="term"><code class="varname">INSTALL_SCRIPT_DIR</code></span></dt>
4652<dd><p>directories that contain 4656<dd><p>directories that contain
4653 scripts</p></dd> 4657 scripts</p></dd>
4654<dt><span class="term"><code class="varname">INSTALL_LIB_DIR</code></span></dt> 4658<dt><span class="term"><code class="varname">INSTALL_LIB_DIR</code></span></dt>
4655<dd><p>directories that contain shared and static 4659<dd><p>directories that contain shared and static
4656 libraries</p></dd> 4660 libraries</p></dd>
4657<dt><span class="term"><code class="varname">INSTALL_DATA_DIR</code></span></dt> 4661<dt><span class="term"><code class="varname">INSTALL_DATA_DIR</code></span></dt>
4658<dd><p>directories that contain data 4662<dd><p>directories that contain data
4659 files</p></dd> 4663 files</p></dd>
4660<dt><span class="term"><code class="varname">INSTALL_MAN_DIR</code></span></dt> 4664<dt><span class="term"><code class="varname">INSTALL_MAN_DIR</code></span></dt>
4661<dd><p>directories that contain man 4665<dd><p>directories that contain man
4662 pages</p></dd> 4666 pages</p></dd>
4663<dt><span class="term"><code class="varname">INSTALL_GAME_DIR</code></span></dt> 4667<dt><span class="term"><code class="varname">INSTALL_GAME_DIR</code></span></dt>
4664<dd><p>directories that contain data files for games 4668<dd><p>directories that contain data files for games
4665 </p></dd> 4669 </p></dd>
4666<dt><span class="term"><code class="varname">INSTALL_PROGRAM</code></span></dt> 4670<dt><span class="term"><code class="varname">INSTALL_PROGRAM</code></span></dt>
4667<dd><p>binaries that can be stripped from debugging 4671<dd><p>binaries that can be stripped from debugging
4668 symbols</p></dd> 4672 symbols</p></dd>
4669<dt><span class="term"><code class="varname">INSTALL_SCRIPT</code></span></dt> 4673<dt><span class="term"><code class="varname">INSTALL_SCRIPT</code></span></dt>
4670<dd><p>binaries that cannot be 4674<dd><p>binaries that cannot be
4671 stripped</p></dd> 4675 stripped</p></dd>
4672<dt><span class="term"><code class="varname">INSTALL_GAME</code></span></dt> 4676<dt><span class="term"><code class="varname">INSTALL_GAME</code></span></dt>
4673<dd><p>game 4677<dd><p>game
4674 binaries</p></dd> 4678 binaries</p></dd>
4675<dt><span class="term"><code class="varname">INSTALL_LIB</code></span></dt> 4679<dt><span class="term"><code class="varname">INSTALL_LIB</code></span></dt>
4676<dd><p>shared and static 4680<dd><p>shared and static
4677 libraries</p></dd> 4681 libraries</p></dd>
4678<dt><span class="term"><code class="varname">INSTALL_DATA</code></span></dt> 4682<dt><span class="term"><code class="varname">INSTALL_DATA</code></span></dt>
4679<dd><p>data files</p></dd> 4683<dd><p>data files</p></dd>
4680<dt><span class="term"><code class="varname">INSTALL_GAME_DATA</code></span></dt> 4684<dt><span class="term"><code class="varname">INSTALL_GAME_DATA</code></span></dt>
4681<dd><p>data files for 4685<dd><p>data files for
4682 games</p></dd> 4686 games</p></dd>
4683<dt><span class="term"><code class="varname">INSTALL_MAN</code></span></dt> 4687<dt><span class="term"><code class="varname">INSTALL_MAN</code></span></dt>
4684<dd><p>man pages</p></dd> 4688<dd><p>man pages</p></dd>
4685</dl></div> 4689</dl></div>
4686<p>Some other variables are:</p> 4690<p>Some other variables are:</p>
4687<div class="variablelist"><dl class="variablelist"> 4691<div class="variablelist"><dl class="variablelist">
4688<dt><span class="term"><code class="varname">INSTALL_UNSTRIPPED</code></span></dt> 4692<dt><span class="term"><code class="varname">INSTALL_UNSTRIPPED</code></span></dt>
4689<dd><p>If set to <code class="literal">yes</code>, do not run <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/strip.1"><span class="citerefentry"><span class="refentrytitle">strip</span>(1)</span></a> 4693<dd><p>If set to <code class="literal">yes</code>, do not run <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/strip.1"><span class="citerefentry"><span class="refentrytitle">strip</span>(1)</span></a>
4690 when installing binaries. Any debugging sections and symbols present in 4694 when installing binaries. Any debugging sections and symbols present in
4691 binaries will be preserved. 4695 binaries will be preserved.
4692 </p></dd> 4696 </p></dd>
4693<dt><span class="term"><code class="varname">INSTALLATION_DIRS</code></span></dt> 4697<dt><span class="term"><code class="varname">INSTALLATION_DIRS</code></span></dt>
4694<dd><p>A list of directories relative to 4698<dd><p>A list of directories relative to
4695 <code class="varname">PREFIX</code> that are created by pkgsrc at the 4699 <code class="varname">PREFIX</code> that are created by pkgsrc at the
4696 beginning of the <span class="emphasis"><em>install</em></span> phase. 4700 beginning of the <span class="emphasis"><em>install</em></span> phase.
4697 The package is supposed to create all needed directories itself 4701 The package is supposed to create all needed directories itself
4698 before installing files to it and list all other directories here. 4702 before installing files to it and list all other directories here.
4699 </p></dd> 4703 </p></dd>
4700</dl></div> 4704</dl></div>
4701<p>In the rare cases that a package shouldn't install anything, 4705<p>In the rare cases that a package shouldn't install anything,
4702 set <code class="varname">NO_INSTALL</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This is 4706 set <code class="varname">NO_INSTALL</code> to <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This is
4703 mostly relevant for packages in the <code class="filename">regress</code> 4707 mostly relevant for packages in the <code class="filename">regress</code>
4704 category.</p> 4708 category.</p>
4705</div> 4709</div>
4706<div class="sect1"> 4710<div class="sect1">
4707<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4711<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4708<a name="build.package"></a>13.15. The <span class="emphasis"><em>package</em></span> phase</h2></div></div></div> 4712<a name="build.package"></a>13.15. The <span class="emphasis"><em>package</em></span> phase</h2></div></div></div>
4709<p>Once the install stage has completed, a binary package of 4713<p>Once the install stage has completed, a binary package of
4710 the installed files can be built. These binary packages can be 4714 the installed files can be built. These binary packages can be
4711 used for quick installation without previous compilation, e.g. by 4715 used for quick installation without previous compilation, e.g. by
4712 the <span class="command"><strong>make bin-install</strong></span> or by using 4716 the <span class="command"><strong>make bin-install</strong></span> or by using
4713 <span class="command"><strong>pkg_add</strong></span>.</p> 4717 <span class="command"><strong>pkg_add</strong></span>.</p>
4714<p>By default, the binary packages are created in 4718<p>By default, the binary packages are created in
4715 <code class="filename">${PACKAGES}/All</code> and symlinks are created in 4719 <code class="filename">${PACKAGES}/All</code> and symlinks are created in
4716 <code class="filename">${PACKAGES}/<em class="replaceable"><code>category</code></em></code>, 4720 <code class="filename">${PACKAGES}/<em class="replaceable"><code>category</code></em></code>,
4717 one for each category in the <code class="varname">CATEGORIES</code> 4721 one for each category in the <code class="varname">CATEGORIES</code>
4718 variable. <code class="varname">PACKAGES</code> defaults to 4722 variable. <code class="varname">PACKAGES</code> defaults to
4719 <code class="filename">pkgsrc/packages</code>.</p> 4723 <code class="filename">pkgsrc/packages</code>.</p>
4720</div> 4724</div>
4721<div class="sect1"> 4725<div class="sect1">
4722<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4726<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4723<a name="build.clean"></a>13.16. Cleaning up</h2></div></div></div> 4727<a name="build.clean"></a>13.16. Cleaning up</h2></div></div></div>
4724<p>Once you're finished with a package, you can clean the work 4728<p>Once you're finished with a package, you can clean the work
4725 directory by running <span class="command"><strong>make clean</strong></span>. If you want 4729 directory by running <span class="command"><strong>make clean</strong></span>. If you want
4726 to clean the work directories of all dependencies too, use 4730 to clean the work directories of all dependencies too, use
4727 <span class="command"><strong>make clean-depends</strong></span>.</p> 4731 <span class="command"><strong>make clean-depends</strong></span>.</p>
4728</div> 4732</div>
4729<div class="sect1"> 4733<div class="sect1">
4730<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 4734<div class="titlepage"><div><div><h2 class="title" style="clear: both">
4731<a name="build.helpful-targets"></a>13.17. Other helpful targets</h2></div></div></div> 4735<a name="build.helpful-targets"></a>13.17. Other helpful targets</h2></div></div></div>
4732<div class="variablelist"><dl class="variablelist"> 4736<div class="variablelist"><dl class="variablelist">
4733<dt><span class="term">pre/post-*</span></dt> 4737<dt><span class="term">pre/post-*</span></dt>
4734<dd> 4738<dd>
4735<p>For any of the main targets described in the previous 4739<p>For any of the main targets described in the previous
4736 section (configure, build, install, etc.), two auxiliary 4740 section (configure, build, install, etc.), two auxiliary
4737 targets exist with 4741 targets exist with
4738 <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 4742 <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
4739 prefix for the main target's name. These targets are 4743 prefix for the main target's name. These targets are
4740 invoked before and after the main target is called, 4744 invoked before and after the main target is called,
4741 allowing extra configuration or installation steps be 4745 allowing extra configuration or installation steps be
4742 performed from a package's Makefile, for example, which 4746 performed from a package's Makefile, for example, which
4743 a program's configure script or install target 4747 a program's configure script or install target
4744 omitted.</p> 4748 omitted.</p>
4745<p>About 5% of the pkgsrc packages define their custom 4749<p>About 5% of the pkgsrc packages define their custom
4746 post-extract target, another 5% define pre-configure, and 10% 4750 post-extract target, another 5% define pre-configure, and 10%
4747 define post-install. The other pre/post-* targets are defined 4751 define post-install. The other pre/post-* targets are defined
4748 even less often.</p> 4752 even less often.</p>
4749</dd> 4753</dd>
4750<dt><span class="term">do-*</span></dt> 4754<dt><span class="term">do-*</span></dt>
4751<dd> 4755<dd>
4752<p>Should one of the main targets do the wrong thing, 4756<p>Should one of the main targets do the wrong thing,
4753 and should there be no variable to fix this, you can 4757 and should there be no variable to fix this, you can
4754 redefine it with the do-* target. (Note that redefining 4758 redefine it with the do-* target. (Note that redefining
4755 the target itself instead of the do-* target is a bad 4759 the target itself instead of the do-* target is a bad
4756 idea, as the pre-* and post-* targets won't be called 4760 idea, as the pre-* and post-* targets won't be called
4757 anymore, etc.)</p> 4761 anymore, etc.)</p>
4758<p>About 15% of the pkgsrc packages override the default 4762<p>About 15% of the pkgsrc packages override the default
4759 do-install, the other do-* targets are overridden even less 4763 do-install, the other do-* targets are overridden even less
4760 often.</p> 4764 often.</p>
4761</dd> 4765</dd>
4762<dt><span class="term">reinstall</span></dt> 4766<dt><span class="term">reinstall</span></dt>
4763<dd> 4767<dd>
4764<p>If you did a <span class="command"><strong>make install</strong></span> and 4768<p>If you did a <span class="command"><strong>make install</strong></span> and
4765 you noticed some file was not installed properly, you 4769 you noticed some file was not installed properly, you
4766 can repeat the installation with this target, which will 4770 can repeat the installation with this target, which will
4767 ignore the <span class="quote">&#8220;<span class="quote">already installed</span>&#8221;</span> flag.</p> 4771 ignore the <span class="quote">&#8220;<span class="quote">already installed</span>&#8221;</span> flag.</p>
4768<p>This is the default value of 4772<p>This is the default value of
4769 <code class="varname">DEPENDS_TARGET</code> except in the case of 4773 <code class="varname">DEPENDS_TARGET</code> except in the case of
4770 <span class="command"><strong>make update</strong></span> and <span class="command"><strong>make 4774 <span class="command"><strong>make update</strong></span> and <span class="command"><strong>make
4771 package</strong></span>, where the defaults are 4775 package</strong></span>, where the defaults are
4772 <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span>, 4776 <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> and <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span>,
4773 respectively.</p> 4777 respectively.</p>
4774</dd> 4778</dd>
4775<dt><span class="term">deinstall</span></dt> 4779<dt><span class="term">deinstall</span></dt>
4776<dd> 4780<dd>
4777<p>This target does a <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_delete.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> in the 4781<p>This target does a <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_delete.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> in the
4778 current directory, effectively de-installing the 4782 current directory, effectively de-installing the
4779 package. The following variables can be used to tune the 4783 package. The following variables can be used to tune the
4780 behaviour:</p> 4784 behaviour:</p>
4781<div class="variablelist"><dl class="variablelist"> 4785<div class="variablelist"><dl class="variablelist">
4782<dt><span class="term"><code class="varname">PKG_VERBOSE</code></span></dt> 4786<dt><span class="term"><code class="varname">PKG_VERBOSE</code></span></dt>
4783<dd><p>Add a "-v" to the <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_delete.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> command.</p></dd> 4787<dd><p>Add a "-v" to the <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_delete.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> command.</p></dd>
4784<dt><span class="term"><code class="varname">DEINSTALLDEPENDS</code></span></dt> 4788<dt><span class="term"><code class="varname">DEINSTALLDEPENDS</code></span></dt>
4785<dd><p>Remove all packages that require (depend on) 4789<dd><p>Remove all packages that require (depend on)
4786 the given package. This can be used to remove any 4790 the given package. This can be used to remove any
4787 packages that may have been pulled in by a given 4791 packages that may have been pulled in by a given
4788 package, e.g. if <span class="command"><strong>make deinstall 4792 package, e.g. if <span class="command"><strong>make deinstall
4789 DEINSTALLDEPENDS=1</strong></span> is done in 4793 DEINSTALLDEPENDS=1</strong></span> is done in
4790 <code class="filename">pkgsrc/x11/kde</code>, this is 4794 <code class="filename">pkgsrc/x11/kde</code>, this is
4791 likely to remove whole KDE. Works by adding 4795 likely to remove whole KDE. Works by adding
4792 <span class="quote">&#8220;<span class="quote">-R</span>&#8221;</span> to the <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_delete.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> 4796 <span class="quote">&#8220;<span class="quote">-R</span>&#8221;</span> to the <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_delete.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a>
4793 command line.</p></dd> 4797 command line.</p></dd>
4794</dl></div> 4798</dl></div>
4795</dd> 4799</dd>
4796<dt><span class="term">bin-install</span></dt> 4800<dt><span class="term">bin-install</span></dt>
4797<dd><p>Install a binary package from local disk and via FTP 4801<dd><p>Install a binary package from local disk and via FTP
4798 from a list of sites (see the 4802 from a list of sites (see the
4799 <code class="varname">BINPKG_SITES</code> variable), and do a 4803 <code class="varname">BINPKG_SITES</code> variable), and do a
4800 <span class="command"><strong>make package</strong></span> if no binary package is 4804 <span class="command"><strong>make package</strong></span> if no binary package is
4801 available anywhere. The arguments given to 4805 available anywhere. The arguments given to
4802 <span class="command"><strong>pkg_add</strong></span> can be set via 4806 <span class="command"><strong>pkg_add</strong></span> can be set via
4803 <code class="varname">BIN_INSTALL_FLAGS</code> e.g., to do verbose 4807 <code class="varname">BIN_INSTALL_FLAGS</code> e.g., to do verbose
4804 operation, etc.</p></dd> 4808 operation, etc.</p></dd>
4805<dt><span class="term">install-clean</span></dt> 4809<dt><span class="term">install-clean</span></dt>
4806<dd><p>This target removes the state files for the "install" and later 4810<dd><p>This target removes the state files for the "install" and later
4807 phases so that the "install" target may be re-invoked. This can be 4811 phases so that the "install" target may be re-invoked. This can be
4808 used after editing the PLIST to install the package without 4812 used after editing the PLIST to install the package without
4809 rebuilding it.</p></dd> 4813 rebuilding it.</p></dd>
4810<dt><span class="term">build-clean</span></dt> 4814<dt><span class="term">build-clean</span></dt>
4811<dd><p>This target removes the state files for the "build" and later 4815<dd><p>This target removes the state files for the "build" and later
4812 phases so that the "build" target may be re-invoked.</p></dd> 4816 phases so that the "build" target may be re-invoked.</p></dd>
4813<dt><span class="term">update</span></dt> 4817<dt><span class="term">update</span></dt>
4814<dd> 4818<dd>
4815<p>This target causes the current package to be 4819<p>This target causes the current package to be
4816 updated to the latest version. The package and all 4820 updated to the latest version. The package and all
4817 depending packages first get de-installed, then current 4821 depending packages first get de-installed, then current
4818 versions of the corresponding packages get compiled and 4822 versions of the corresponding packages get compiled and
4819 installed. This is similar to manually noting which 4823 installed. This is similar to manually noting which
4820 packages are currently installed, then performing a 4824 packages are currently installed, then performing a
4821 series of <span class="command"><strong>make deinstall</strong></span> and 4825 series of <span class="command"><strong>make deinstall</strong></span> and
4822 <span class="command"><strong>make install</strong></span> (or whatever 4826 <span class="command"><strong>make install</strong></span> (or whatever
4823 <code class="varname">UPDATE_TARGET</code> is set to) for these 4827 <code class="varname">UPDATE_TARGET</code> is set to) for these
4824 packages.</p> 4828 packages.</p>
4825<p>You can use the <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> target to 4829<p>You can use the <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> target to
4826 resume package updating in case a previous <span class="command"><strong>make 4830 resume package updating in case a previous <span class="command"><strong>make
4827 update</strong></span> was interrupted for some reason. 4831 update</strong></span> was interrupted for some reason.
4828 However, in this case, make sure you don't call 4832 However, in this case, make sure you don't call
4829 <span class="command"><strong>make clean</strong></span> or otherwise remove the 4833 <span class="command"><strong>make clean</strong></span> or otherwise remove the
4830 list of dependent packages in <code class="varname">WRKDIR</code>. 4834 list of dependent packages in <code class="varname">WRKDIR</code>.
4831 Otherwise, you lose the ability to automatically update 4835 Otherwise, you lose the ability to automatically update
4832 the current package along with the dependent packages 4836 the current package along with the dependent packages
4833 you have installed.</p> 4837 you have installed.</p>
4834<p>Resuming an interrupted <span class="command"><strong>make 4838<p>Resuming an interrupted <span class="command"><strong>make
4835 update</strong></span> will only work as long as the package 4839 update</strong></span> will only work as long as the package
4836 tree remains unchanged. If the source code for one of 4840 tree remains unchanged. If the source code for one of
4837 the packages to be updated has been changed, resuming 4841 the packages to be updated has been changed, resuming
4838 <span class="command"><strong>make update</strong></span> will most certainly 4842 <span class="command"><strong>make update</strong></span> will most certainly
4839 fail!</p> 4843 fail!</p>
4840<p>The following variables can be used either on the 4844<p>The following variables can be used either on the
4841 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to 4845 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to
4842 alter the behaviour of <span class="command"><strong>make 4846 alter the behaviour of <span class="command"><strong>make
4843 update</strong></span>:</p> 4847 update</strong></span>:</p>
4844<div class="variablelist"><dl class="variablelist"> 4848<div class="variablelist"><dl class="variablelist">
4845<dt><span class="term"><code class="varname">UPDATE_TARGET</code></span></dt> 4849<dt><span class="term"><code class="varname">UPDATE_TARGET</code></span></dt>
4846<dd><p>Install target to recursively use for the 4850<dd><p>Install target to recursively use for the
4847 updated package and the dependent packages. 4851 updated package and the dependent packages.
4848 Defaults to <code class="varname">DEPENDS_TARGET</code> if 4852 Defaults to <code class="varname">DEPENDS_TARGET</code> if
4849 set, <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> otherwise for 4853 set, <span class="quote">&#8220;<span class="quote">install</span>&#8221;</span> otherwise for
4850 <span class="command"><strong>make update</strong></span>. Other good 4854 <span class="command"><strong>make update</strong></span>. Other good
4851 targets are <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> or 4855 targets are <span class="quote">&#8220;<span class="quote">package</span>&#8221;</span> or
4852 <span class="quote">&#8220;<span class="quote">bin-install</span>&#8221;</span>. Do not set this to 4856 <span class="quote">&#8220;<span class="quote">bin-install</span>&#8221;</span>. Do not set this to
4853 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> or you will get stuck in an 4857 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> or you will get stuck in an
4854 endless loop!</p></dd> 4858 endless loop!</p></dd>
4855<dt><span class="term"><code class="varname">NOCLEAN</code></span></dt> 4859<dt><span class="term"><code class="varname">NOCLEAN</code></span></dt>
4856<dd><p>Don't clean up after updating. Useful if 4860<dd><p>Don't clean up after updating. Useful if
4857 you want to leave the work sources of the updated 4861 you want to leave the work sources of the updated
4858 packages around for inspection or other purposes. 4862 packages around for inspection or other purposes.
4859 Be sure you eventually clean up the source tree 4863 Be sure you eventually clean up the source tree
4860 (see the <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target below) 4864 (see the <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target below)
4861 or you may run into troubles with old source code 4865 or you may run into troubles with old source code
4862 still lying around on your next 4866 still lying around on your next
4863 <span class="command"><strong>make</strong></span> or <span class="command"><strong>make 4867 <span class="command"><strong>make</strong></span> or <span class="command"><strong>make
4864 update</strong></span>.</p></dd> 4868 update</strong></span>.</p></dd>
4865<dt><span class="term"><code class="varname">REINSTALL</code></span></dt> 4869<dt><span class="term"><code class="varname">REINSTALL</code></span></dt>
4866<dd><p>Deinstall each package before installing 4870<dd><p>Deinstall each package before installing
4867 (making <code class="varname">DEPENDS_TARGET</code>). This 4871 (making <code class="varname">DEPENDS_TARGET</code>). This
4868 may be necessary if the 4872 may be necessary if the
4869 <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target (see below) was 4873 <span class="quote">&#8220;<span class="quote">clean-update</span>&#8221;</span> target (see below) was
4870 called after interrupting a running <span class="command"><strong>make 4874 called after interrupting a running <span class="command"><strong>make
4871 update</strong></span>.</p></dd> 4875 update</strong></span>.</p></dd>
4872<dt><span class="term"><code class="varname">DEPENDS_TARGET</code></span></dt> 4876<dt><span class="term"><code class="varname">DEPENDS_TARGET</code></span></dt>
4873<dd><p>Allows you to disable recursion and hardcode 4877<dd><p>Allows you to disable recursion and hardcode
4874 the target for packages. The default is 4878 the target for packages. The default is
4875 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> for the update target, 4879 <span class="quote">&#8220;<span class="quote">update</span>&#8221;</span> for the update target,
4876 facilitating a recursive update of prerequisite 4880 facilitating a recursive update of prerequisite
4877 packages. Only set 4881 packages. Only set
4878 <code class="varname">DEPENDS_TARGET</code> if you want to 4882 <code class="varname">DEPENDS_TARGET</code> if you want to
4879 disable recursive updates. Use 4883 disable recursive updates. Use
4880 <code class="varname">UPDATE_TARGET</code> instead to just 4884 <code class="varname">UPDATE_TARGET</code> instead to just
4881 set a specific target for each package to be 4885 set a specific target for each package to be
4882 installed during <span class="command"><strong>make update</strong></span> 4886 installed during <span class="command"><strong>make update</strong></span>
4883 (see above).</p></dd> 4887 (see above).</p></dd>
4884</dl></div> 4888</dl></div>
4885</dd> 4889</dd>
4886<dt><span class="term">clean-update</span></dt> 4890<dt><span class="term">clean-update</span></dt>
4887<dd> 4891<dd>
4888<p>Clean the source tree for all packages that would 4892<p>Clean the source tree for all packages that would
4889 get updated if <span class="command"><strong>make update</strong></span> was called 4893 get updated if <span class="command"><strong>make update</strong></span> was called
4890 from the current directory. This target should not be 4894 from the current directory. This target should not be
4891 used if the current package (or any of its depending 4895 used if the current package (or any of its depending
4892 packages) have already been de-installed (e.g., after 4896 packages) have already been de-installed (e.g., after
4893 calling <span class="command"><strong>make update</strong></span>) or you may lose 4897 calling <span class="command"><strong>make update</strong></span>) or you may lose
4894 some packages you intended to update. As a rule of 4898 some packages you intended to update. As a rule of
4895 thumb: only use this target <span class="emphasis"><em>before</em></span> 4899 thumb: only use this target <span class="emphasis"><em>before</em></span>
4896 the first time you run <span class="command"><strong>make update</strong></span> 4900 the first time you run <span class="command"><strong>make update</strong></span>
4897 and only if you have a dirty package tree (e.g., if you 4901 and only if you have a dirty package tree (e.g., if you
4898 used <code class="varname">NOCLEAN</code>).</p> 4902 used <code class="varname">NOCLEAN</code>).</p>
4899<p>If you are unsure about whether your tree is 4903<p>If you are unsure about whether your tree is
4900 clean, you can either perform a <span class="command"><strong>make 4904 clean, you can either perform a <span class="command"><strong>make
4901 clean</strong></span> at the top of the tree, or use the 4905 clean</strong></span> at the top of the tree, or use the
4902 following sequence of commands from the directory of the 4906 following sequence of commands from the directory of the
4903 package you want to update (<span class="emphasis"><em>before</em></span> 4907 package you want to update (<span class="emphasis"><em>before</em></span>
4904 running <span class="command"><strong>make update</strong></span> for the first 4908 running <span class="command"><strong>make update</strong></span> for the first
4905 time, otherwise you lose all the packages you wanted to 4909 time, otherwise you lose all the packages you wanted to
4906 update!):</p> 4910 update!):</p>
4907<pre class="screen"> 4911<pre class="screen">
4908<code class="prompt">#</code> <strong class="userinput"><code>make clean-update</code></strong> 4912<code class="prompt">#</code> <strong class="userinput"><code>make clean-update</code></strong>
4909<code class="prompt">#</code> <strong class="userinput"><code>make clean CLEANDEPENDS=YES</code></strong> 4913<code class="prompt">#</code> <strong class="userinput"><code>make clean CLEANDEPENDS=YES</code></strong>
4910<code class="prompt">#</code> <strong class="userinput"><code>make update</code></strong> 4914<code class="prompt">#</code> <strong class="userinput"><code>make update</code></strong>
4911 </pre> 4915 </pre>
4912<p>The following variables can be used either on the 4916<p>The following variables can be used either on the
4913 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to alter the behaviour of 4917 command line or in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> to alter the behaviour of
4914 <span class="command"><strong>make clean-update</strong></span>:</p> 4918 <span class="command"><strong>make clean-update</strong></span>:</p>
4915<div class="variablelist"><dl class="variablelist"> 4919<div class="variablelist"><dl class="variablelist">
4916<dt><span class="term"><code class="varname">CLEAR_DIRLIST</code></span></dt> 4920<dt><span class="term"><code class="varname">CLEAR_DIRLIST</code></span></dt>
4917<dd><p>After <span class="command"><strong>make clean</strong></span>, do not 4921<dd><p>After <span class="command"><strong>make clean</strong></span>, do not
4918 reconstruct the list of directories to update for 4922 reconstruct the list of directories to update for
4919 this package. Only use this if <span class="command"><strong>make 4923 this package. Only use this if <span class="command"><strong>make
4920 update</strong></span> successfully installed all 4924 update</strong></span> successfully installed all
4921 packages you wanted to update. Normally, this is 4925 packages you wanted to update. Normally, this is
4922 done automatically on <span class="command"><strong>make 4926 done automatically on <span class="command"><strong>make
4923 update</strong></span>, but may have been suppressed by 4927 update</strong></span>, but may have been suppressed by
4924 the <code class="varname">NOCLEAN</code> variable (see 4928 the <code class="varname">NOCLEAN</code> variable (see
4925 above).</p></dd> 4929 above).</p></dd>
4926</dl></div> 4930</dl></div>
4927</dd> 4931</dd>
4928<dt><span class="term">replace</span></dt> 4932<dt><span class="term">replace</span></dt>
4929<dd> 4933<dd>
4930<p>Update the installation of the current package. This 4934<p>Update the installation of the current package. This
4931 differs from update in that it does not replace dependent 4935 differs from update in that it does not replace dependent
4932 packages. You will need to install <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_tarup/index.html" target="_top"><code class="filename">pkgtools/pkg_tarup</code></a> for this 4936 packages. You will need to install <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkg_tarup/index.html" target="_top"><code class="filename">pkgtools/pkg_tarup</code></a> for this
4933 target to work.</p> 4937 target to work.</p>
4934<p><span class="emphasis"><em>Be careful when using this 4938<p><span class="emphasis"><em>Be careful when using this
4935 target!</em></span> There are no guarantees that dependent 4939 target!</em></span> There are no guarantees that dependent
4936 packages will still work, in particular they will most 4940 packages will still work, in particular they will most
4937 certainly break if you <span class="command"><strong>make replace</strong></span> a 4941 certainly break if you <span class="command"><strong>make replace</strong></span> a
4938 library package whose shared library major version changed 4942 library package whose shared library major version changed
4939 between your installed version and the new one. For this 4943 between your installed version and the new one. For this
4940 reason, this target is not officially supported and only 4944 reason, this target is not officially supported and only
4941 recommended for advanced users.</p> 4945 recommended for advanced users.</p>
4942</dd> 4946</dd>
4943<dt><span class="term">info</span></dt> 4947<dt><span class="term">info</span></dt>
4944<dd><p>This target invokes <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_info.1"><span class="citerefentry"><span class="refentrytitle">pkg_info</span>(1)</span></a> for the current 4948<dd><p>This target invokes <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_info.1"><span class="citerefentry"><span class="refentrytitle">pkg_info</span>(1)</span></a> for the current
4945 package. You can use this to check which version of a 4949 package. You can use this to check which version of a
4946 package is installed.</p></dd> 4950 package is installed.</p></dd>
4947<dt><span class="term">index</span></dt> 4951<dt><span class="term">index</span></dt>
4948<dd> 4952<dd>
4949<p>This is a top-level command, i.e. it should be used in 4953<p>This is a top-level command, i.e. it should be used in
4950 the <code class="filename">pkgsrc</code> directory. It creates a 4954 the <code class="filename">pkgsrc</code> directory. It creates a
4951 database of all packages in the local pkgsrc tree, including 4955 database of all packages in the local pkgsrc tree, including
4952 dependencies, comment, maintainer, and some other useful 4956 dependencies, comment, maintainer, and some other useful
4953 information. Individual entries are created by running 4957 information. Individual entries are created by running
4954 <span class="command"><strong>make describe</strong></span> in the packages' 4958 <span class="command"><strong>make describe</strong></span> in the packages'
4955 directories. This index file is saved as 4959 directories. This index file is saved as
4956 <code class="filename">pkgsrc/INDEX</code>. It can be displayed in 4960 <code class="filename">pkgsrc/INDEX</code>. It can be displayed in
4957 verbose format by running <span class="command"><strong>make 4961 verbose format by running <span class="command"><strong>make
4958 print-index</strong></span>. You can search in it with 4962 print-index</strong></span>. You can search in it with
4959 <span class="command"><strong>make search 4963 <span class="command"><strong>make search
4960 key=<em class="replaceable"><code>something</code></em></strong></span>. You can 4964 key=<em class="replaceable"><code>something</code></em></strong></span>. You can
4961 extract a list of all packages that depend on a particular 4965 extract a list of all packages that depend on a particular
4962 one by running <span class="command"><strong>make show-deps 4966 one by running <span class="command"><strong>make show-deps
4963 PKG=<em class="replaceable"><code>somepackage</code></em></strong></span>.</p> 4967 PKG=<em class="replaceable"><code>somepackage</code></em></strong></span>.</p>
4964<p>Running this command takes a very long time, some 4968<p>Running this command takes a very long time, some
4965 hours even on fast machines!</p> 4969 hours even on fast machines!</p>
4966</dd> 4970</dd>
4967<dt><span class="term">readme</span></dt> 4971<dt><span class="term">readme</span></dt>
4968<dd> 4972<dd>
4969<p>This target generates a 4973<p>This target generates a
4970 <code class="filename">index.html</code> file, which can be 4974 <code class="filename">index.html</code> file, which can be
4971 viewed using a browser such as <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/index.html" target="_top"><code class="filename">www/firefox</code></a> or <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/links/index.html" target="_top"><code class="filename">www/links</code></a>. The generated files 4975 viewed using a browser such as <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/firefox/index.html" target="_top"><code class="filename">www/firefox</code></a> or <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/www/links/index.html" target="_top"><code class="filename">www/links</code></a>. The generated files
4972 contain references to any packages which are in the 4976 contain references to any packages which are in the
4973 <code class="varname">PACKAGES</code> directory on the local 4977 <code class="varname">PACKAGES</code> directory on the local
4974 host. The generated files can be made to refer to URLs 4978 host. The generated files can be made to refer to URLs
4975 based on <code class="varname">FTP_PKG_URL_HOST</code> and 4979 based on <code class="varname">FTP_PKG_URL_HOST</code> and
4976 <code class="varname">FTP_PKG_URL_DIR</code>. For example, if I 4980 <code class="varname">FTP_PKG_URL_DIR</code>. For example, if I
4977 wanted to generate <code class="filename">index.html</code> 4981 wanted to generate <code class="filename">index.html</code>
4978 files which pointed to binary packages on the local 4982 files which pointed to binary packages on the local
4979 machine, in the directory 4983 machine, in the directory
4980 <code class="filename">/usr/packages</code>, set 4984 <code class="filename">/usr/packages</code>, set
4981 <code class="varname">FTP_PKG_URL_HOST=file://localhost</code> and 4985 <code class="varname">FTP_PKG_URL_HOST=file://localhost</code> and
4982 <code class="varname">FTP_PKG_URL_DIR=/usr/packages</code>. The 4986 <code class="varname">FTP_PKG_URL_DIR=/usr/packages</code>. The
4983 <code class="varname">${PACKAGES}</code> directory and its 4987 <code class="varname">${PACKAGES}</code> directory and its
4984 subdirectories will be searched for all the binary 4988 subdirectories will be searched for all the binary
4985 packages.</p> 4989 packages.</p>
4986<p>The target can be run at the toplevel or in category 4990<p>The target can be run at the toplevel or in category
4987 directories, in which case it descends recursively.</p> 4991 directories, in which case it descends recursively.</p>
4988</dd> 4992</dd>
4989<dt><span class="term">readme-all</span></dt> 4993<dt><span class="term">readme-all</span></dt>
4990<dd><p>This is a top-level command, run it in 4994<dd><p>This is a top-level command, run it in
4991 <code class="filename">pkgsrc</code>. Use this target to create a 4995 <code class="filename">pkgsrc</code>. Use this target to create a
4992 file <code class="filename">README-all.html</code> which contains a 4996 file <code class="filename">README-all.html</code> which contains a
4993 list of all packages currently available in the NetBSD 4997 list of all packages currently available in the NetBSD
4994 Packages Collection, together with the category they belong 4998 Packages Collection, together with the category they belong
4995 to and a short description. This file is compiled from the 4999 to and a short description. This file is compiled from the
4996 <code class="filename">pkgsrc/*/index.html</code> files, so be sure 5000 <code class="filename">pkgsrc/*/index.html</code> files, so be sure
4997 to run this <span class="emphasis"><em>after</em></span> a <span class="command"><strong>make 5001 to run this <span class="emphasis"><em>after</em></span> a <span class="command"><strong>make
4998 readme</strong></span>.</p></dd> 5002 readme</strong></span>.</p></dd>
4999<dt><span class="term">cdrom-readme</span></dt> 5003<dt><span class="term">cdrom-readme</span></dt>
5000<dd><p>This is very much the same as the 5004<dd><p>This is very much the same as the
5001 <span class="quote">&#8220;<span class="quote">readme</span>&#8221;</span> target (see above), but is to be 5005 <span class="quote">&#8220;<span class="quote">readme</span>&#8221;</span> target (see above), but is to be
5002 used when generating a pkgsrc tree to be written to a 5006 used when generating a pkgsrc tree to be written to a
5003 CD-ROM. This target also produces 5007 CD-ROM. This target also produces
5004 <code class="filename">index.html</code> files, and can be made 5008 <code class="filename">index.html</code> files, and can be made
5005 to refer to URLs based on 5009 to refer to URLs based on
5006 <code class="varname">CDROM_PKG_URL_HOST</code> and 5010 <code class="varname">CDROM_PKG_URL_HOST</code> and
5007 <code class="varname">CDROM_PKG_URL_DIR</code>.</p></dd> 5011 <code class="varname">CDROM_PKG_URL_DIR</code>.</p></dd>
5008<dt><span class="term">show-distfiles</span></dt> 5012<dt><span class="term">show-distfiles</span></dt>
5009<dd><p>This target shows which distfiles and patchfiles 5013<dd><p>This target shows which distfiles and patchfiles
5010 are needed to build the package 5014 are needed to build the package
5011 (<code class="varname">ALLFILES</code>, which contains all 5015 (<code class="varname">ALLFILES</code>, which contains all
5012 <code class="varname">DISTFILES</code> and 5016 <code class="varname">DISTFILES</code> and
5013 <code class="varname">PATCHFILES</code>, but not 5017 <code class="varname">PATCHFILES</code>, but not
5014 <code class="filename">patches/*</code>).</p></dd> 5018 <code class="filename">patches/*</code>).</p></dd>
5015<dt><span class="term">show-downlevel</span></dt> 5019<dt><span class="term">show-downlevel</span></dt>
5016<dd><p>This target shows nothing if the package is not 5020<dd><p>This target shows nothing if the package is not
5017 installed. If a version of this package is installed, 5021 installed. If a version of this package is installed,
5018 but is not the version provided in this version of 5022 but is not the version provided in this version of
5019 pkgsrc, then a warning message is displayed. This target 5023 pkgsrc, then a warning message is displayed. This target
5020 can be used to show which of your installed packages are 5024 can be used to show which of your installed packages are
5021 downlevel, and so the old versions can be deleted, and 5025 downlevel, and so the old versions can be deleted, and
5022 the current ones added.</p></dd> 5026 the current ones added.</p></dd>
5023<dt><span class="term">show-pkgsrc-dir</span></dt> 5027<dt><span class="term">show-pkgsrc-dir</span></dt>
5024<dd><p>This target shows the directory in the pkgsrc 5028<dd><p>This target shows the directory in the pkgsrc
5025 hierarchy from which the package can be built and 5029 hierarchy from which the package can be built and
5026 installed. This may not be the same directory as the one 5030 installed. This may not be the same directory as the one
5027 from which the package was installed. This target is 5031 from which the package was installed. This target is
5028 intended to be used by people who may wish to upgrade 5032 intended to be used by people who may wish to upgrade
5029 many packages on a single host, and can be invoked from 5033 many packages on a single host, and can be invoked from
5030 the top-level pkgsrc Makefile by using the 5034 the top-level pkgsrc Makefile by using the
5031 <span class="quote">&#8220;<span class="quote">show-host-specific-pkgs</span>&#8221;</span> target.</p></dd> 5035 <span class="quote">&#8220;<span class="quote">show-host-specific-pkgs</span>&#8221;</span> target.</p></dd>
5032<dt><span class="term">show-installed-depends</span></dt> 5036<dt><span class="term">show-installed-depends</span></dt>
5033<dd><p>This target shows which installed packages match 5037<dd><p>This target shows which installed packages match
5034 the current package's <code class="varname">DEPENDS</code>. Useful 5038 the current package's <code class="varname">DEPENDS</code>. Useful
5035 if out of date dependencies are causing build 5039 if out of date dependencies are causing build
5036 problems.</p></dd> 5040 problems.</p></dd>
5037<dt><span class="term">print-build-depends-list</span></dt> 5041<dt><span class="term">print-build-depends-list</span></dt>
5038<dd><p>This target shows the list of packages that the current package 5042<dd><p>This target shows the list of packages that the current package
5039 depends on for building.</p></dd> 5043 depends on for building.</p></dd>
5040<dt><span class="term">print-run-depends-list</span></dt> 5044<dt><span class="term">print-run-depends-list</span></dt>
5041<dd><p>This target shows the list of packages that the current package 5045<dd><p>This target shows the list of packages that the current package
5042 depends on for running.</p></dd> 5046 depends on for running.</p></dd>
5043<dt><span class="term">check-shlibs</span></dt> 5047<dt><span class="term">check-shlibs</span></dt>
5044<dd><p>After a package is installed, check all its 5048<dd><p>After a package is installed, check all its
5045 binaries and (on ELF platforms) shared libraries to see 5049 binaries and (on ELF platforms) shared libraries to see
5046 if they find the shared libs they need. Run by default 5050 if they find the shared libs they need. Run by default
5047 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> 5051 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>
5048<dt><span class="term">print-PLIST</span></dt> 5052<dt><span class="term">print-PLIST</span></dt>
5049<dd> 5053<dd>
5050<p>After a <span class="quote">&#8220;<span class="quote">make install</span>&#8221;</span> from a new or 5054<p>After a <span class="quote">&#8220;<span class="quote">make install</span>&#8221;</span> from a new or
5051 upgraded pkg, this prints out an attempt to generate a 5055 upgraded pkg, this prints out an attempt to generate a
5052 new <code class="filename">PLIST</code> from a <span class="command"><strong>find 5056 new <code class="filename">PLIST</code> from a <span class="command"><strong>find
5053 -newer work/.extract_done</strong></span>. An attempt is made 5057 -newer work/.extract_done</strong></span>. An attempt is made
5054 to care for shared libs etc., but it is 5058 to care for shared libs etc., but it is
5055 <span class="emphasis"><em>strongly</em></span> recommended to review the 5059 <span class="emphasis"><em>strongly</em></span> recommended to review the
5056 result before putting it into 5060 result before putting it into
5057 <code class="filename">PLIST</code>. On upgrades, it's useful to 5061 <code class="filename">PLIST</code>. On upgrades, it's useful to
5058 diff the output of this command against an already 5062 diff the output of this command against an already
5059 existing <code class="filename">PLIST</code> file.</p> 5063 existing <code class="filename">PLIST</code> file.</p>
5060<p>If the package installs files via <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/tar.1"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a> or 5064<p>If the package installs files via <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/tar.1"><span class="citerefentry"><span class="refentrytitle">tar</span>(1)</span></a> or
5061 other methods that don't update file access times, be 5065 other methods that don't update file access times, be
5062 sure to add these files manually to your 5066 sure to add these files manually to your
5063 <code class="filename">PLIST</code>, as the <span class="quote">&#8220;<span class="quote">find 5067 <code class="filename">PLIST</code>, as the <span class="quote">&#8220;<span class="quote">find
5064 -newer</span>&#8221;</span> command used by this target won't catch 5068 -newer</span>&#8221;</span> command used by this target won't catch
5065 them!</p> 5069 them!</p>
5066<p>See <a class="xref" href="#print-PLIST" title="19.3. Tweaking output of make print-PLIST">Section 19.3, &#8220;Tweaking output of <span class="command"><strong>make print-PLIST</strong></span>&#8221;</a> for more 5070<p>See <a class="xref" href="#print-PLIST" title="19.3. Tweaking output of make print-PLIST">Section 19.3, &#8220;Tweaking output of <span class="command"><strong>make print-PLIST</strong></span>&#8221;</a> for more
5067 information on this target.</p> 5071 information on this target.</p>
5068</dd> 5072</dd>
5069</dl></div> 5073</dl></div>
5070</div> 5074</div>
5071</div> 5075</div>
5072<div class="chapter"> 5076<div class="chapter">
5073<div class="titlepage"><div><div><h2 class="title"> 5077<div class="titlepage"><div><div><h2 class="title">
5074<a name="creating"></a>Chapter 14. Creating a new pkgsrc package from scratch</h2></div></div></div> 5078<a name="creating"></a>Chapter 14. Creating a new pkgsrc package from scratch</h2></div></div></div>
5075<div class="toc"> 5079<div class="toc">
5076<p><b>Table of Contents</b></p> 5080<p><b>Table of Contents</b></p>
5077<dl class="toc"> 5081<dl class="toc">
5078<dt><span class="sect1"><a href="#creating.common">14.1. Common types of packages</a></span></dt> 5082<dt><span class="sect1"><a href="#creating.common">14.1. Common types of packages</a></span></dt>
5079<dd><dl> 5083<dd><dl>
5080<dt><span class="sect2"><a href="#creating.python-module">14.1.1. Python modules and programs</a></span></dt> 5084<dt><span class="sect2"><a href="#creating.python-module">14.1.1. Python modules and programs</a></span></dt>
5081<dt><span class="sect2"><a href="#creating.R-package">14.1.2. R packages</a></span></dt> 5085<dt><span class="sect2"><a href="#creating.R-package">14.1.2. R packages</a></span></dt>
5082<dt><span class="sect2"><a href="#creating.TeX-package">14.1.3. TeXlive packages</a></span></dt> 5086<dt><span class="sect2"><a href="#creating.TeX-package">14.1.3. TeXlive packages</a></span></dt>
5083</dl></dd> 5087</dl></dd>
5084<dt><span class="sect1"><a href="#creating.examples">14.2. Examples</a></span></dt> 5088<dt><span class="sect1"><a href="#creating.examples">14.2. Examples</a></span></dt>
5085<dd><dl><dt><span class="sect2"><a href="#creating.nvu">14.2.1. How the www/nvu package came into pkgsrc</a></span></dt></dl></dd> 5089<dd><dl><dt><span class="sect2"><a href="#creating.nvu">14.2.1. How the www/nvu package came into pkgsrc</a></span></dt></dl></dd>
5086</dl> 5090</dl>
5087</div> 5091</div>
5088<p>When you find a package that is not yet in pkgsrc, you 5092<p>When you find a package that is not yet in pkgsrc, you
5089most likely have a URL from where you can download the source 5093most likely have a URL from where you can download the source
5090code. Starting with this URL, creating a package involves only a 5094code. Starting with this URL, creating a package involves only a
5091few steps.</p> 5095few steps.</p>
5092<div class="procedure"><ol class="procedure" type="1"> 5096<div class="procedure"><ol class="procedure" type="1">
5093<li class="step"><p>In your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, set <code class="code">PKG_DEVELOPER=yes</code> to 5097<li class="step"><p>In your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, set <code class="code">PKG_DEVELOPER=yes</code> to
5094enable the basic quality checks.</p></li> 5098enable the basic quality checks.</p></li>
5095<li class="step"> 5099<li class="step">
5096<p>Install the package <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/pkg_developer/index.html" target="_top"><code class="filename">meta-pkgs/pkg_developer</code></a>, which among others will 5100<p>Install the package <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/pkg_developer/index.html" target="_top"><code class="filename">meta-pkgs/pkg_developer</code></a>, which among others will
5097install the utilities <span class="command"><strong>url2pkg</strong></span>, 5101install the utilities <span class="command"><strong>url2pkg</strong></span>,
5098<span class="command"><strong>pkglint</strong></span>, <span class="command"><strong>pkgvi</strong></span> and 5102<span class="command"><strong>pkglint</strong></span>, <span class="command"><strong>pkgvi</strong></span> and
5099<span class="command"><strong>mkpatches</strong></span>:</p> 5103<span class="command"><strong>mkpatches</strong></span>:</p>
5100<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr/pkgsrc</code></strong> 5104<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd /usr/pkgsrc</code></strong>
5101<code class="prompt">$</code> <strong class="userinput"><code>(cd meta-pkgs/pkg_developer &amp;&amp; bmake update)</code></strong></pre> 5105<code class="prompt">$</code> <strong class="userinput"><code>(cd meta-pkgs/pkg_developer &amp;&amp; bmake update)</code></strong></pre>
5102</li> 5106</li>
5103<li class="step"> 5107<li class="step">
5104<p>Choose one of the top-level directories as the category in 5108<p>Choose one of the top-level directories as the category in
5105which you want to place your package. You can also create a directory of 5109which you want to place your package. You can also create a directory of
5106your own (maybe called <code class="filename">local</code>). Change into that 5110your own (maybe called <code class="filename">local</code>). Change into that
5107category directory:</p> 5111category directory:</p>
5108<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd <em class="replaceable"><code>category</code></em></code></strong></pre> 5112<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>cd <em class="replaceable"><code>category</code></em></code></strong></pre>
5109</li> 5113</li>
5110<li class="step"> 5114<li class="step">
5111<p>Run the program <span class="command"><strong>url2pkg</strong></span>, passing as 5115<p>Run the program <span class="command"><strong>url2pkg</strong></span>, passing as
5112argument the URL of the distribution file (in most cases a 5116argument the URL of the distribution file (in most cases a
5113<code class="filename">.tar.gz</code> file). This will download the distribution 5117<code class="filename">.tar.gz</code> file). This will download the distribution
5114file and create the necessary files of the package, based on what's in 5118file and create the necessary files of the package, based on what's in
5115the distribution file:</p> 5119the distribution file:</p>
5116<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>url2pkg <em class="replaceable"><code>https://www.example.org/packages/package-1.0.tar.gz</code></em></code></strong></pre> 5120<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>url2pkg <em class="replaceable"><code>https://www.example.org/packages/package-1.0.tar.gz</code></em></code></strong></pre>
5117</li> 5121</li>
5118<li class="step"> 5122<li class="step">
5119<p>Examine the extracted files to determine the dependencies of 5123<p>Examine the extracted files to determine the dependencies of
5120your package. Ideally, this is mentioned in some 5124your package. Ideally, this is mentioned in some
5121<code class="filename">README</code> file, but things may differ. For each of 5125<code class="filename">README</code> file, but things may differ. For each of
5122these dependencies, look where it exists in pkgsrc, and if there is a 5126these dependencies, look where it exists in pkgsrc, and if there is a
5123file called <code class="filename">buildlink3.mk</code> in that directory, add a 5127file called <code class="filename">buildlink3.mk</code> in that directory, add a
5124line to your package <code class="filename">Makefile</code> which includes that 5128line to your package <code class="filename">Makefile</code> which includes that
5125file just before the last line. If the 5129file just before the last line. If the
5126<code class="filename">buildlink3.mk</code> file does not exist, it must be 5130<code class="filename">buildlink3.mk</code> file does not exist, it must be
5127created first. The <code class="filename">buildlink3.mk</code> file makes sure 5131created first. The <code class="filename">buildlink3.mk</code> file makes sure
5128that the package's include files and libraries are provided.</p> 5132that the package's include files and libraries are provided.</p>
5129<p>If you just need binaries from a dependent package, add a 5133<p>If you just need binaries from a dependent package, add a
5130<code class="varname">DEPENDS</code> line to the Makefile, which specifies the 5134<code class="varname">DEPENDS</code> line to the Makefile, which specifies the
5131version of the dependency and where it can be found in pkgsrc. This line 5135version of the dependency and where it can be found in pkgsrc. This line
5132should be placed in the third paragraph. If the dependency is only 5136should be placed in the third paragraph. If the dependency is only
5133needed for building the package, but not when using it, use 5137needed for building the package, but not when using it, use
5134<code class="varname">TOOL_DEPENDS</code> or <code class="varname">BUILD_DEPENDS</code> 5138<code class="varname">TOOL_DEPENDS</code> or <code class="varname">BUILD_DEPENDS</code>
5135instead of <code class="varname">DEPENDS</code>. 5139instead of <code class="varname">DEPENDS</code>.
5136The difference between <code class="varname">TOOL_DEPENDS</code> and 5140The difference between <code class="varname">TOOL_DEPENDS</code> and
5137<code class="varname">BUILD_DEPENDS</code> occurs when cross-compiling: 5141<code class="varname">BUILD_DEPENDS</code> occurs when cross-compiling:
5138<code class="varname">TOOL_DEPENDS</code> are <span class="emphasis"><em>native</em></span> 5142<code class="varname">TOOL_DEPENDS</code> are <span class="emphasis"><em>native</em></span>
5139packages, i.e. packages for the platform where the package is built; 5143packages, i.e. packages for the platform where the package is built;
5140<code class="varname">BUILD_DEPENDS</code> are <span class="emphasis"><em>target</em></span> 5144<code class="varname">BUILD_DEPENDS</code> are <span class="emphasis"><em>target</em></span>
5141packages, i.e. packages for the platform for which the package 5145packages, i.e. packages for the platform for which the package
5142is built. There is also <code class="varname">TEST_DEPENDS</code>, which 5146is built. There is also <code class="varname">TEST_DEPENDS</code>, which
5143specifies a dependency used only for testing the resulting package 5147specifies a dependency used only for testing the resulting package
5144built, using the upstream project's included test suite, on the native 5148built, using the upstream project's included test suite, on the native
5145platform. 5149platform.
5146Your package may then look like this:</p> 5150Your package may then look like this:</p>
5147<pre class="programlisting"> 5151<pre class="programlisting">
5148[...] 5152[...]
5149 5153
5150TOOL_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt 5154TOOL_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt
5151DEPENDS+= screen-[0-9]*:../../misc/screen 5155DEPENDS+= screen-[0-9]*:../../misc/screen
5152DEPENDS+= screen&gt;=4.0:../../misc/screen 5156DEPENDS+= screen&gt;=4.0:../../misc/screen
5153 5157
5154[...] 5158[...]
5155 5159
5156.include "../../<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>package</code></em>/buildlink3.mk" 5160.include "../../<em class="replaceable"><code>category</code></em>/<em class="replaceable"><code>package</code></em>/buildlink3.mk"
5157.include "../../devel/glib2/buildlink3.mk" 5161.include "../../devel/glib2/buildlink3.mk"
5158.include "../../mk/bsd.pkg.mk" 5162.include "../../mk/bsd.pkg.mk"
5159</pre> 5163</pre>
5160</li> 5164</li>
5161<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> to see what things still need 5165<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> to see what things still need
5162to be done to make your package a <span class="quote">&#8220;<span class="quote">good</span>&#8221;</span> one. If you don't 5166to be done to make your package a <span class="quote">&#8220;<span class="quote">good</span>&#8221;</span> one. If you don't
5163know what pkglint's warnings want to tell you, try <span class="command"><strong>pkglint 5167know what pkglint's warnings want to tell you, try <span class="command"><strong>pkglint
5164--explain</strong></span> or <span class="command"><strong>pkglint -e</strong></span>, which outputs 5168--explain</strong></span> or <span class="command"><strong>pkglint -e</strong></span>, which outputs
5165additional explanations.</p></li> 5169additional explanations.</p></li>
5166<li class="step"><p>In many cases the package is not yet ready to build. You can 5170<li class="step"><p>In many cases the package is not yet ready to build. You can
5167find instructions for the most common cases in the next section, <a class="xref" href="#creating.common" title="14.1. Common types of packages">Section 14.1, &#8220;Common types of packages&#8221;</a>. After you have followed the instructions 5171find instructions for the most common cases in the next section, <a class="xref" href="#creating.common" title="14.1. Common types of packages">Section 14.1, &#8220;Common types of packages&#8221;</a>. After you have followed the instructions
5168over there, you can hopefully continue here.</p></li> 5172over there, you can hopefully continue here.</p></li>
5169<li class="step"><p>Run <span class="command"><strong>bmake clean</strong></span> to clean the working 5173<li class="step"><p>Run <span class="command"><strong>bmake clean</strong></span> to clean the working
5170directory from the extracted files. Besides these files, a lot of cache 5174directory from the extracted files. Besides these files, a lot of cache
5171files and other system information have been saved in the working 5175files and other system information have been saved in the working
5172directory, which may have become outdated after you edited the 5176directory, which may have become outdated after you edited the
5173<code class="filename">Makefile</code>.</p></li> 5177<code class="filename">Makefile</code>.</p></li>
5174<li class="step"> 5178<li class="step">
5175<p>Now, run <span class="command"><strong>bmake</strong></span> to build the package. For 5179<p>Now, run <span class="command"><strong>bmake</strong></span> to build the package. For
5176the various things that can go wrong in this phase, consult <a class="xref" href="#fixes" title="Chapter 21. Making your package work">Chapter 21, <i>Making your package work</i></a>.</p> 5180the various things that can go wrong in this phase, consult <a class="xref" href="#fixes" title="Chapter 21. Making your package work">Chapter 21, <i>Making your package work</i></a>.</p>
5177<p>If the extracted files from the package need to be fixed, run 5181<p>If the extracted files from the package need to be fixed, run
5178multiple rounds of these commands:</p> 5182multiple rounds of these commands:</p>
5179<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>bmake</code></strong> 5183<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>bmake</code></strong>
5180<code class="prompt">$</code> <strong class="userinput"><code>pkgvi ${WRKSRC}/some/file/that/does/not/compile</code></strong> 5184<code class="prompt">$</code> <strong class="userinput"><code>pkgvi ${WRKSRC}/some/file/that/does/not/compile</code></strong>
5181<code class="prompt">$</code> <strong class="userinput"><code>mkpatches</code></strong> 5185<code class="prompt">$</code> <strong class="userinput"><code>mkpatches</code></strong>
5182<code class="prompt">$</code> <strong class="userinput"><code>bmake mps</code></strong> 5186<code class="prompt">$</code> <strong class="userinput"><code>bmake mps</code></strong>
5183<code class="prompt">$</code> <strong class="userinput"><code>bmake clean</code></strong></pre> 5187<code class="prompt">$</code> <strong class="userinput"><code>bmake clean</code></strong></pre>
5184</li> 5188</li>
5185<li class="step"><p>When the package builds fine, the next step is to install 5189<li class="step"><p>When the package builds fine, the next step is to install
5186the package. Run <span class="command"><strong>bmake install</strong></span> and hope that 5190the package. Run <span class="command"><strong>bmake install</strong></span> and hope that
5187everything works.</p></li> 5191everything works.</p></li>
5188<li class="step"><p>Up to now, the file <code class="filename">PLIST</code>, which 5192<li class="step"><p>Up to now, the file <code class="filename">PLIST</code>, which
5189contains a list of the files that are installed by the package, is 5193contains a list of the files that are installed by the package, is
5190nearly empty. Run <span class="command"><strong>bmake print-PLIST 5194nearly empty. Run <span class="command"><strong>bmake print-PLIST
5191&gt;PLIST</strong></span> to generate a probably correct list. Check 5195&gt;PLIST</strong></span> to generate a probably correct list. Check
5192the file using your preferred text editor to see if the list of 5196the file using your preferred text editor to see if the list of
5193files looks plausible.</p></li> 5197files looks plausible.</p></li>
5194<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> again to see if the generated 5198<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> again to see if the generated
5195<code class="filename">PLIST</code> contains garbage or not.</p></li> 5199<code class="filename">PLIST</code> contains garbage or not.</p></li>
5196<li class="step"><p>When you ran <span class="command"><strong>bmake install</strong></span>, the package 5200<li class="step"><p>When you ran <span class="command"><strong>bmake install</strong></span>, the package
5197had been registered in the database of installed files, but with an 5201had been registered in the database of installed files, but with an
5198empty list of files. To fix this, run <span class="command"><strong>bmake deinstall</strong></span> 5202empty list of files. To fix this, run <span class="command"><strong>bmake deinstall</strong></span>
5199and <span class="command"><strong>bmake install</strong></span> again. Now the package is 5203and <span class="command"><strong>bmake install</strong></span> again. Now the package is
5200registered with the list of files from 5204registered with the list of files from
5201<code class="filename">PLIST</code>.</p></li> 5205<code class="filename">PLIST</code>.</p></li>
5202<li class="step"><p>Run <span class="command"><strong>bmake clean update</strong></span> to run everything 5206<li class="step"><p>Run <span class="command"><strong>bmake clean update</strong></span> to run everything
5203from above again in a single step, making sure that the PLIST is correct 5207from above again in a single step, making sure that the PLIST is correct
5204and the whole package is created as intended.</p></li> 5208and the whole package is created as intended.</p></li>
5205<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> to see if there's anything 5209<li class="step"><p>Run <span class="command"><strong>pkglint</strong></span> to see if there's anything
5206left to do.</p></li> 5210left to do.</p></li>
5207<li class="step"><p>Commit the package to pkgsrc-wip or main pkgsrc; see <a class="xref" href="#submit" title="Chapter 23. Submitting and Committing">Chapter 23, <i>Submitting and Committing</i></a>.</p></li> 5211<li class="step"><p>Commit the package to pkgsrc-wip or main pkgsrc; see <a class="xref" href="#submit" title="Chapter 23. Submitting and Committing">Chapter 23, <i>Submitting and Committing</i></a>.</p></li>
5208</ol></div> 5212</ol></div>
5209<div class="sect1"> 5213<div class="sect1">
5210<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5214<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5211<a name="creating.common"></a>14.1. Common types of packages</h2></div></div></div> 5215<a name="creating.common"></a>14.1. Common types of packages</h2></div></div></div>
5212<div class="sect2"> 5216<div class="sect2">
5213<div class="titlepage"><div><div><h3 class="title"> 5217<div class="titlepage"><div><div><h3 class="title">
5214<a name="creating.python-module"></a>14.1.1. Python modules and programs</h3></div></div></div> 5218<a name="creating.python-module"></a>14.1.1. Python modules and programs</h3></div></div></div>
5215<p>Python modules and programs packages are easily created using a 5219<p>Python modules and programs packages are easily created using a
5216set of predefined variables.</p> 5220set of predefined variables.</p>
5217<p> 5221<p>
5218If some Python versions are not supported by the software, set the 5222If some Python versions are not supported by the software, set the
5219<code class="varname">PYTHON_VERSIONS_INCOMPATIBLE</code> variable to the Python versions 5223<code class="varname">PYTHON_VERSIONS_INCOMPATIBLE</code> variable to the Python versions
5220that are not supported, e.g. 5224that are not supported, e.g.
5221</p> 5225</p>
5222<pre class="programlisting"> 5226<pre class="programlisting">
5223PYTHON_VERSIONS_INCOMPATIBLE= 27 5227PYTHON_VERSIONS_INCOMPATIBLE= 27
5224</pre> 5228</pre>
5225<p> 5229<p>
5226If the packaged software is a Python module, include one of 5230If the packaged software is a Python module, include one of
5227<code class="filename">../../lang/python/egg.mk</code> or 5231<code class="filename">../../lang/python/egg.mk</code> or
5228<code class="filename">../../lang/python/extension.mk</code>.</p> 5232<code class="filename">../../lang/python/extension.mk</code>.</p>
5229<p>Most Python packages use setuptools (<span class="quote">&#8220;<span class="quote">eggs</span>&#8221;</span>). 5233<p>Most Python packages use setuptools (<span class="quote">&#8220;<span class="quote">eggs</span>&#8221;</span>).
5230If the packaged software is using setuptools, you only need 5234If the packaged software is using setuptools, you only need
5231to include <span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/egg.mk</code></span>&#8221;</span>. 5235to include <span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/egg.mk</code></span>&#8221;</span>.
5232</p> 5236</p>
5233<p>Either way, the package directory should be called 5237<p>Either way, the package directory should be called
5234<span class="quote">&#8220;<span class="quote">py-software</span>&#8221;</span> and <code class="varname">PKGNAME</code> should be set to 5238<span class="quote">&#8220;<span class="quote">py-software</span>&#8221;</span> and <code class="varname">PKGNAME</code> should be set to
5235<span class="quote">&#8220;<span class="quote">${PYPKGPREFIX}-${DISTNAME}</span>&#8221;</span>, e.g. 5239<span class="quote">&#8220;<span class="quote">${PYPKGPREFIX}-${DISTNAME}</span>&#8221;</span>, e.g.
5236</p> 5240</p>
5237<pre class="programlisting"> 5241<pre class="programlisting">
5238DISTNAME= foopymodule-1.2.10 5242DISTNAME= foopymodule-1.2.10
5239PKGNAME= ${PYPKGPREFIX}-${DISTNAME} 5243PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
5240</pre> 5244</pre>
5241<p>If it is an application, include 5245<p>If it is an application, include
5242<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/application.mk</code></span>&#8221;</span>. 5246<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/application.mk</code></span>&#8221;</span>.
5243In order to correctly set the path to the Python interpreter, use the 5247In order to correctly set the path to the Python interpreter, use the
5244<code class="varname">REPLACE_PYTHON</code> variable and set it to the list of files 5248<code class="varname">REPLACE_PYTHON</code> variable and set it to the list of files
5245(paths relative to <code class="varname">WRKSRC</code>) that must be corrected. 5249(paths relative to <code class="varname">WRKSRC</code>) that must be corrected.
5246For example: 5250For example:
5247</p> 5251</p>
5248<pre class="programlisting"> 5252<pre class="programlisting">
5249REPLACE_PYTHON= *.py 5253REPLACE_PYTHON= *.py
5250</pre> 5254</pre>
5251<p>Some Python modules have separate distributions for Python-2.x 5255<p>Some Python modules have separate distributions for Python-2.x
5252and Python-3.x support. In pkgsrc this is handled by the 5256and Python-3.x support. In pkgsrc this is handled by the
5253<code class="filename">versioned_dependencies.mk</code> file. Set 5257<code class="filename">versioned_dependencies.mk</code> file. Set
5254<code class="varname">PYTHON_VERSIONED_DEPENDENCIES</code> to the list of 5258<code class="varname">PYTHON_VERSIONED_DEPENDENCIES</code> to the list of
5255packages that should be depended upon and include 5259packages that should be depended upon and include
5256<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/versioned_dependencies.mk</code></span>&#8221;</span>, 5260<span class="quote">&#8220;<span class="quote"><code class="filename">../../lang/python/versioned_dependencies.mk</code></span>&#8221;</span>,
5257then the pkgsrc infrastructure will depend on the appropriate package 5261then the pkgsrc infrastructure will depend on the appropriate package
5258version. For example: 5262version. For example:
5259</p> 5263</p>
5260<pre class="programlisting"> 5264<pre class="programlisting">
5261PYTHON_VERSIONED_DEPENDENCIES=dialog 5265PYTHON_VERSIONED_DEPENDENCIES=dialog
5262</pre> 5266</pre>
5263<p> 5267<p>
5264Look inside <code class="filename">versioned_dependencies.mk</code> for a list 5268Look inside <code class="filename">versioned_dependencies.mk</code> for a list
5265of supported packages.</p> 5269of supported packages.</p>
5266</div> 5270</div>
5267<div class="sect2"> 5271<div class="sect2">
5268<div class="titlepage"><div><div><h3 class="title"> 5272<div class="titlepage"><div><div><h3 class="title">
5269<a name="creating.R-package"></a>14.1.2. R packages</h3></div></div></div> 5273<a name="creating.R-package"></a>14.1.2. R packages</h3></div></div></div>
5270<p>Simple R packages from <a class="ulink" href="https://cran.r-project.org/web/packages/available_packages_by_name.html" target="_top">CRAN</a> 5274<p>Simple R packages from <a class="ulink" href="https://cran.r-project.org/web/packages/available_packages_by_name.html" target="_top">CRAN</a>
5271are handled automatically by <span class="command"><strong>R2pkg</strong></span>, which is 5275are handled automatically by <span class="command"><strong>R2pkg</strong></span>, which is
5272available in <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/R2pkg/index.html" target="_top"><code class="filename">pkgtools/R2pkg</code></a>. 5276available in <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/R2pkg/index.html" target="_top"><code class="filename">pkgtools/R2pkg</code></a>.
5273Individual packages (and optionally their dependencies) may be created 5277Individual packages (and optionally their dependencies) may be created
5274and updated. R packages generally follow the same form, and most of 5278and updated. R packages generally follow the same form, and most of
5275the relevant information needed is contained in a 5279the relevant information needed is contained in a
5276<code class="filename">DESCRIPTION</code> file as part of each R package on 5280<code class="filename">DESCRIPTION</code> file as part of each R package on
5277<a class="ulink" href="https://cran.r-project.org/web/packages/available_packages_by_name.html" target="_top">CRAN</a>. 5281<a class="ulink" href="https://cran.r-project.org/web/packages/available_packages_by_name.html" target="_top">CRAN</a>.
5278Consequently, <span class="command"><strong>R2pkg</strong></span> downloads that information and 5282Consequently, <span class="command"><strong>R2pkg</strong></span> downloads that information and
5279creates or updates a package in the canonical form. The resulting 5283creates or updates a package in the canonical form. The resulting
5280package should be reviewed for correctness.</p> 5284package should be reviewed for correctness.</p>
5281</div> 5285</div>
5282<div class="sect2"> 5286<div class="sect2">
5283<div class="titlepage"><div><div><h3 class="title"> 5287<div class="titlepage"><div><div><h3 class="title">
5284<a name="creating.TeX-package"></a>14.1.3. TeXlive packages</h3></div></div></div> 5288<a name="creating.TeX-package"></a>14.1.3. TeXlive packages</h3></div></div></div>
5285<p>TeXlive packages from <a class="ulink" href="https://www.ctan.org/" target="_top">CTAN</a> are handled automatically by 5289<p>TeXlive packages from <a class="ulink" href="https://www.ctan.org/" target="_top">CTAN</a> are handled automatically by
5286<span class="command"><strong>texlive2pkg</strong></span>, which is available in <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/texlive2pkg/index.html" target="_top"><code class="filename">pkgtools/texlive2pkg</code></a>.</p> 5290<span class="command"><strong>texlive2pkg</strong></span>, which is available in <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/texlive2pkg/index.html" target="_top"><code class="filename">pkgtools/texlive2pkg</code></a>.</p>
5287<p>If the TeXlive package name is not known, it may be useful to 5291<p>If the TeXlive package name is not known, it may be useful to
5288search <a class="ulink" href="https://www.ctan.org/" target="_top">CTAN</a>. A 5292search <a class="ulink" href="https://www.ctan.org/" target="_top">CTAN</a>. A
5289<span class="quote">&#8220;<span class="quote">Contained in</span>&#8221;</span> field on the package page typically 5293<span class="quote">&#8220;<span class="quote">Contained in</span>&#8221;</span> field on the package page typically
5290identifies the basename of the package file in the <a class="ulink" href="https://www.ctan.org/tex-archive/systems/texlive/tlnet/archive" target="_top">TeXlive 5294identifies the basename of the package file in the <a class="ulink" href="https://www.ctan.org/tex-archive/systems/texlive/tlnet/archive" target="_top">TeXlive
5291archive</a>.</p> 5295archive</a>.</p>
5292<p>If the TeXlive package name is known, download the files from 5296<p>If the TeXlive package name is known, download the files from
5293the <a class="ulink" href="https://www.ctan.org/tex-archive/systems/texlive/tlnet/archive" target="_top">TeXlive 5297the <a class="ulink" href="https://www.ctan.org/tex-archive/systems/texlive/tlnet/archive" target="_top">TeXlive
5294archive</a>. For package <code class="filename">foo</code>, you will need 5298archive</a>. For package <code class="filename">foo</code>, you will need
5295to download <code class="filename">foo.tar.xz</code>. Most TeXlive packages 5299to download <code class="filename">foo.tar.xz</code>. Most TeXlive packages
5296also have associated documentation packages, so download 5300also have associated documentation packages, so download
5297<code class="filename">foo.doc.tar.xz</code> at the same time. These files 5301<code class="filename">foo.doc.tar.xz</code> at the same time. These files
5298should be placed in the appropriate category directory, which is often 5302should be placed in the appropriate category directory, which is often
5299but not always <code class="filename">print</code>. Then run the following 5303but not always <code class="filename">print</code>. Then run the following
5300command in the category directory.</p> 5304command in the category directory.</p>
5301<pre class="programlisting"> 5305<pre class="programlisting">
5302texlive2pkg foo.tar.xz foo.doc.tar.xz 5306texlive2pkg foo.tar.xz foo.doc.tar.xz
5303</pre> 5307</pre>
5304<p>This will create two packages, <code class="filename">tex-foo</code> and 5308<p>This will create two packages, <code class="filename">tex-foo</code> and
5305<code class="filename">tex-foo-doc</code>. Be sure to check that both packages 5309<code class="filename">tex-foo-doc</code>. Be sure to check that both packages
5306are correct.</p> 5310are correct.</p>
5307<p>Finally, <a class="ulink" href="https://www.ctan.org/" target="_top">CTAN</a> 5311<p>Finally, <a class="ulink" href="https://www.ctan.org/" target="_top">CTAN</a>
5308currently does not include version information in package filenames 5312currently does not include version information in package filenames
5309and changes their contents periodically when updates occur. 5313and changes their contents periodically when updates occur.
5310Consequently, pkgsrc avoids downloading distfiles directly from <a class="ulink" href="https://www.ctan.org/" target="_top">CTAN</a> and instead relies on the 5314Consequently, pkgsrc avoids downloading distfiles directly from <a class="ulink" href="https://www.ctan.org/" target="_top">CTAN</a> and instead relies on the
5311pkgsrc archives. For each new or updated TeXlive package, e.g., the 5315pkgsrc archives. For each new or updated TeXlive package, e.g., the
5312main one and the corresponding documentation, upload the distfiles 5316main one and the corresponding documentation, upload the distfiles
5313with the following command in each package directory.</p> 5317with the following command in each package directory.</p>
5314<pre class="programlisting"> 5318<pre class="programlisting">
5315make upload-distfiles 5319make upload-distfiles
5316</pre> 5320</pre>
5317</div> 5321</div>
5318</div> 5322</div>
5319<div class="sect1"> 5323<div class="sect1">
5320<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 5324<div class="titlepage"><div><div><h2 class="title" style="clear: both">
5321<a name="creating.examples"></a>14.2. Examples</h2></div></div></div> 5325<a name="creating.examples"></a>14.2. Examples</h2></div></div></div>
5322<div class="sect2"> 5326<div class="sect2">
5323<div class="titlepage"><div><div><h3 class="title"> 5327<div class="titlepage"><div><div><h3 class="title">
5324<a name="creating.nvu"></a>14.2.1. How the www/nvu package came into pkgsrc</h3></div></div></div> 5328<a name="creating.nvu"></a>14.2.1. How the www/nvu package came into pkgsrc</h3></div></div></div>
5325<div class="sect3"> 5329<div class="sect3">
5326<div class="titlepage"><div><div><h4 class="title"> 5330<div class="titlepage"><div><div><h4 class="title">
5327<a name="creating.nvu.init"></a>14.2.1.1. The initial package</h4></div></div></div> 5331<a name="creating.nvu.init"></a>14.2.1.1. The initial package</h4></div></div></div>
5328<p>Looking at the file <code class="filename">pkgsrc/doc/TODO</code>, I saw 5332<p>Looking at the file <code class="filename">pkgsrc/doc/TODO</code>, I saw
5329that the <span class="quote">&#8220;<span class="quote">nvu</span>&#8221;</span> package has not yet been imported into 5333that the <span class="quote">&#8220;<span class="quote">nvu</span>&#8221;</span> package has not yet been imported into
5330pkgsrc. As the description says it has to do with the web, the obvious 5334pkgsrc. As the description says it has to do with the web, the obvious
5331choice for the category is <span class="quote">&#8220;<span class="quote">www</span>&#8221;</span>.</p> 5335choice for the category is <span class="quote">&#8220;<span class="quote">www</span>&#8221;</span>.</p>
5332<pre class="programlisting"> 5336<pre class="programlisting">
5333<code class="prompt">$</code> mkdir www/nvu 5337<code class="prompt">$</code> mkdir www/nvu
5334<code class="prompt">$</code> cd www/nvu 5338<code class="prompt">$</code> cd www/nvu
5335</pre> 5339</pre>
5336<p>The web site says that the sources are available as a tar file, so 5340<p>The web site says that the sources are available as a tar file, so
5337I fed that URL to the <span class="command"><strong>url2pkg</strong></span> program:</p> 5341I fed that URL to the <span class="command"><strong>url2pkg</strong></span> program:</p>
5338<pre class="programlisting"> 5342<pre class="programlisting">
5339<code class="prompt">$</code> url2pkg http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2 5343<code class="prompt">$</code> url2pkg http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2
5340</pre> 5344</pre>
5341<p>My editor popped up, and I added a <code class="varname">PKGNAME</code> line 5345<p>My editor popped up, and I added a <code class="varname">PKGNAME</code> line
5342below the <code class="varname">DISTNAME</code> line, as the package name should 5346below the <code class="varname">DISTNAME</code> line, as the package name should
5343not have the word <span class="quote">&#8220;<span class="quote">sources</span>&#8221;</span> in it. I also filled in the 5347not have the word <span class="quote">&#8220;<span class="quote">sources</span>&#8221;</span> in it. I also filled in the
5344<code class="varname">MAINTAINER</code>, <code class="varname">HOMEPAGE</code> and 5348<code class="varname">MAINTAINER</code>, <code class="varname">HOMEPAGE</code> and
5345<code class="varname">COMMENT</code> fields. Then the package 5349<code class="varname">COMMENT</code> fields. Then the package
@@ -7624,2000 +7628,2000 @@ ACCEPTABLE_LICENSES+=xv-license @@ -7624,2000 +7628,2000 @@ ACCEPTABLE_LICENSES+=xv-license
7624<li class="listitem"> 7628<li class="listitem">
7625<p>If your package needs another package's binaries or 7629<p>If your package needs another package's binaries or
7626 libraries only for building, and if that package has a 7630 libraries only for building, and if that package has a
7627 <code class="filename">buildlink3.mk</code> file available, use it:</p> 7631 <code class="filename">buildlink3.mk</code> file available, use it:</p>
7628<pre class="programlisting"> 7632<pre class="programlisting">
7629.include "../../graphics/jpeg/buildlink3.mk" 7633.include "../../graphics/jpeg/buildlink3.mk"
7630</pre> 7634</pre>
7631<p>but set 7635<p>but set
7632 <code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>jpeg</code></em>?=build</code> 7636 <code class="varname">BUILDLINK_DEPMETHOD.<em class="replaceable"><code>jpeg</code></em>?=build</code>
7633 to make it a build dependency only. This case is rather 7637 to make it a build dependency only. This case is rather
7634 rare.</p> 7638 rare.</p>
7635</li> 7639</li>
7636<li class="listitem"> 7640<li class="listitem">
7637<p>If your package needs binaries from another package to build, 7641<p>If your package needs binaries from another package to build,
7638 use the <code class="varname">TOOL_DEPENDS</code> definition:</p> 7642 use the <code class="varname">TOOL_DEPENDS</code> definition:</p>
7639<pre class="programlisting"> 7643<pre class="programlisting">
7640TOOL_DEPENDS+= itstool-[0-9]*:../../textproc/itstool 7644TOOL_DEPENDS+= itstool-[0-9]*:../../textproc/itstool
7641</pre> 7645</pre>
7642</li> 7646</li>
7643<li class="listitem"><p>If your package needs static libraries to link against, header 7647<li class="listitem"><p>If your package needs static libraries to link against, header
7644 files to include, etc. from another package to build, 7648 files to include, etc. from another package to build,
7645 use the <code class="varname">BUILD_DEPENDS</code> definition.</p></li> 7649 use the <code class="varname">BUILD_DEPENDS</code> definition.</p></li>
7646<li class="listitem"><p>If your package needs a library with which to link and 7650<li class="listitem"><p>If your package needs a library with which to link and
7647 there is no <code class="filename">buildlink3.mk</code> file 7651 there is no <code class="filename">buildlink3.mk</code> file
7648 available, create one. Using 7652 available, create one. Using
7649 <code class="varname">DEPENDS</code> won't be sufficient because the 7653 <code class="varname">DEPENDS</code> won't be sufficient because the
7650 include files and libraries will be hidden from the compiler.</p></li> 7654 include files and libraries will be hidden from the compiler.</p></li>
7651<li class="listitem"> 7655<li class="listitem">
7652<p>If your package needs some executable to be able to run 7656<p>If your package needs some executable to be able to run
7653 correctly and if there's no 7657 correctly and if there's no
7654 <code class="filename">buildlink3.mk</code> file, this is specified 7658 <code class="filename">buildlink3.mk</code> file, this is specified
7655 using the <code class="varname">DEPENDS</code> variable. The 7659 using the <code class="varname">DEPENDS</code> variable. The
7656 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/lyx/index.html" target="_top"><code class="filename">print/lyx</code></a> package needs to 7660 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/lyx/index.html" target="_top"><code class="filename">print/lyx</code></a> package needs to
7657 be able to execute the latex binary from the tex-latex-bin package 7661 be able to execute the latex binary from the tex-latex-bin package
7658 when it runs, and that is specified:</p> 7662 when it runs, and that is specified:</p>
7659<pre class="programlisting"> 7663<pre class="programlisting">
7660DEPENDS+= tex-latex-bin-[0-9]*:../../print/tex-latex-bin 7664DEPENDS+= tex-latex-bin-[0-9]*:../../print/tex-latex-bin
7661</pre> 7665</pre>
7662</li> 7666</li>
7663<li class="listitem"><p>If your package includes a test suite that has extra 7667<li class="listitem"><p>If your package includes a test suite that has extra
7664 dependencies only required for this purpose (frequently this 7668 dependencies only required for this purpose (frequently this
7665 can be run as a <span class="quote">&#8220;<span class="quote">make test</span>&#8221;</span> target), use the 7669 can be run as a <span class="quote">&#8220;<span class="quote">make test</span>&#8221;</span> target), use the
7666 <code class="varname">TEST_DEPENDS</code> variable.</p></li> 7670 <code class="varname">TEST_DEPENDS</code> variable.</p></li>
7667<li class="listitem"> 7671<li class="listitem">
7668<p>You can use wildcards in package dependencies. Note that 7672<p>You can use wildcards in package dependencies. Note that
7669 such wildcard dependencies are retained when creating binary 7673 such wildcard dependencies are retained when creating binary
7670 packages. The dependency is checked when installing the binary 7674 packages. The dependency is checked when installing the binary
7671 package and any package which matches the pattern will be 7675 package and any package which matches the pattern will be
7672 used. Wildcard dependencies should be used with care.</p> 7676 used. Wildcard dependencies should be used with care.</p>
7673<p>The <span class="quote">&#8220;<span class="quote">-[0-9]*</span>&#8221;</span> should be used instead of 7677<p>The <span class="quote">&#8220;<span class="quote">-[0-9]*</span>&#8221;</span> should be used instead of
7674 <span class="quote">&#8220;<span class="quote">-*</span>&#8221;</span> to avoid potentially ambiguous matches 7678 <span class="quote">&#8220;<span class="quote">-*</span>&#8221;</span> to avoid potentially ambiguous matches
7675 such as <span class="quote">&#8220;<span class="quote">tk-postgresql</span>&#8221;</span> matching a 7679 such as <span class="quote">&#8220;<span class="quote">tk-postgresql</span>&#8221;</span> matching a
7676 <span class="quote">&#8220;<span class="quote">tk-*</span>&#8221;</span> <code class="varname">DEPENDS</code>.</p> 7680 <span class="quote">&#8220;<span class="quote">tk-*</span>&#8221;</span> <code class="varname">DEPENDS</code>.</p>
7677<p>Wildcards can also be used to specify that a package 7681<p>Wildcards can also be used to specify that a package
7678 will only build against a certain minimum version of a 7682 will only build against a certain minimum version of a
7679 pre-requisite:</p> 7683 pre-requisite:</p>
7680<pre class="programlisting"> 7684<pre class="programlisting">
7681DEPENDS+= ImageMagick&gt;=6.0:../../graphics/ImageMagick 7685DEPENDS+= ImageMagick&gt;=6.0:../../graphics/ImageMagick
7682</pre> 7686</pre>
7683<p>This means that the package will build using version 6.0 7687<p>This means that the package will build using version 6.0
7684 of ImageMagick or newer. Such a dependency may be warranted 7688 of ImageMagick or newer. Such a dependency may be warranted
7685 if, for example, the command line options of an executable 7689 if, for example, the command line options of an executable
7686 have changed.</p> 7690 have changed.</p>
7687<p>If you need to depend on minimum versions of libraries, 7691<p>If you need to depend on minimum versions of libraries,
7688 set 7692 set
7689 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code> 7693 <code class="varname">BUILDLINK_API_DEPENDS.<em class="replaceable"><code>pkg</code></em></code>
7690 to the appropriate pattern before including its 7694 to the appropriate pattern before including its
7691 <code class="filename">buildlink3.mk</code> file, e.g.</p> 7695 <code class="filename">buildlink3.mk</code> file, e.g.</p>
7692<pre class="programlisting"> 7696<pre class="programlisting">
7693BUILDLINK_API_DEPENDS.jpeg+= jpeg&gt;=9.0 7697BUILDLINK_API_DEPENDS.jpeg+= jpeg&gt;=9.0
7694.include "../../graphics/jpeg/buildlink3.mk" 7698.include "../../graphics/jpeg/buildlink3.mk"
7695</pre> 7699</pre>
7696<p>For security fixes, please update the package 7700<p>For security fixes, please update the package
7697 vulnerabilities file. See <a class="xref" href="#security-handling" title="21.1.9. Handling packages with security problems">Section 21.1.9, &#8220;Handling packages with security problems&#8221;</a> for more 7701 vulnerabilities file. See <a class="xref" href="#security-handling" title="21.1.9. Handling packages with security problems">Section 21.1.9, &#8220;Handling packages with security problems&#8221;</a> for more
7698 information.</p> 7702 information.</p>
7699</li> 7703</li>
7700</ol></div> 7704</ol></div>
7701<p>If your package needs files from another package to build, 7705<p>If your package needs files from another package to build,
7702 add the relevant distribution files to 7706 add the relevant distribution files to
7703 <code class="varname">DISTFILES</code>, so they will be extracted 7707 <code class="varname">DISTFILES</code>, so they will be extracted
7704 automatically. See the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/ghostscript/index.html" target="_top"><code class="filename">print/ghostscript</code></a> package for an example. 7708 automatically. See the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/print/ghostscript/index.html" target="_top"><code class="filename">print/ghostscript</code></a> package for an example.
7705 (It relies on the jpeg sources being present in source form 7709 (It relies on the jpeg sources being present in source form
7706 during the build.)</p> 7710 during the build.)</p>
7707</div> 7711</div>
7708<div class="sect2"> 7712<div class="sect2">
7709<div class="titlepage"><div><div><h3 class="title"> 7713<div class="titlepage"><div><div><h3 class="title">
7710<a name="conflicts"></a>21.1.6. Handling conflicts with other packages</h3></div></div></div> 7714<a name="conflicts"></a>21.1.6. Handling conflicts with other packages</h3></div></div></div>
7711<p>Your package may conflict with other packages a user might 7715<p>Your package may conflict with other packages a user might
7712 already have installed on his system, e.g. if your package 7716 already have installed on his system, e.g. if your package
7713 installs the same set of files as another package in the pkgsrc 7717 installs the same set of files as another package in the pkgsrc
7714 tree or has the same <code class="varname">PKGNAME</code>.</p> 7718 tree or has the same <code class="varname">PKGNAME</code>.</p>
7715<p>For example, <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/libXaw3d/index.html" target="_top"><code class="filename">x11/libXaw3d</code></a> 7719<p>For example, <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/libXaw3d/index.html" target="_top"><code class="filename">x11/libXaw3d</code></a>
7716 and <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/Xaw-Xpm/index.html" target="_top"><code class="filename">x11/Xaw-Xpm</code></a> 7720 and <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/x11/Xaw-Xpm/index.html" target="_top"><code class="filename">x11/Xaw-Xpm</code></a>
7717 install the same shared library, thus you set in 7721 install the same shared library, thus you set in
7718 <code class="filename">pkgsrc/x11/libXaw3d/Makefile</code>:</p> 7722 <code class="filename">pkgsrc/x11/libXaw3d/Makefile</code>:</p>
7719<pre class="programlisting"> 7723<pre class="programlisting">
7720CONFLICTS= Xaw-Xpm-[0-9]* 7724CONFLICTS= Xaw-Xpm-[0-9]*
7721 </pre> 7725 </pre>
7722<p>and in <code class="filename">pkgsrc/x11/Xaw-Xpm/Makefile</code>:</p> 7726<p>and in <code class="filename">pkgsrc/x11/Xaw-Xpm/Makefile</code>:</p>
7723<pre class="programlisting"> 7727<pre class="programlisting">
7724CONFLICTS= libXaw3d-[0-9]* 7728CONFLICTS= libXaw3d-[0-9]*
7725 </pre> 7729 </pre>
7726<p><a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_add.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> is able to detect attempts to install packages 7730<p><a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_add.1"><span class="citerefentry"><span class="refentrytitle">pkg_add</span>(1)</span></a> is able to detect attempts to install packages
7727 that conflict with existing packages and abort. However, in many 7731 that conflict with existing packages and abort. However, in many
7728 situations this is too late in the process. Binary package managers 7732 situations this is too late in the process. Binary package managers
7729 will not know about the conflict until they attempt to install the 7733 will not know about the conflict until they attempt to install the
7730 package after already downloading it and all its dependencies. 7734 package after already downloading it and all its dependencies.
7731 Users may also waste time building a package and its dependencies 7735 Users may also waste time building a package and its dependencies
7732 only to find out at the end that it conflicts with another package 7736 only to find out at the end that it conflicts with another package
7733 they have installed.</p> 7737 they have installed.</p>
7734<p>To avoid these issues <code class="varname">CONFLICTS</code> entries 7738<p>To avoid these issues <code class="varname">CONFLICTS</code> entries
7735 should be added in all cases where it is known that packages conflict 7739 should be added in all cases where it is known that packages conflict
7736 with each other. These <code class="varname">CONFLICTS</code> entries are 7740 with each other. These <code class="varname">CONFLICTS</code> entries are
7737 exported in <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_summary.5"><span class="citerefentry"><span class="refentrytitle">pkg_summary</span>(5)</span></a> files and consumed by binary package 7741 exported in <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_summary.5"><span class="citerefentry"><span class="refentrytitle">pkg_summary</span>(5)</span></a> files and consumed by binary package
7738 managers to inform users that packages cannot be installed onto 7742 managers to inform users that packages cannot be installed onto
7739 the target system.</p> 7743 the target system.</p>
7740</div> 7744</div>
7741<div class="sect2"> 7745<div class="sect2">
7742<div class="titlepage"><div><div><h3 class="title"> 7746<div class="titlepage"><div><div><h3 class="title">
7743<a name="not-building-packages"></a>21.1.7. Packages that cannot or should not be built</h3></div></div></div> 7747<a name="not-building-packages"></a>21.1.7. Packages that cannot or should not be built</h3></div></div></div>
7744<p>There are several reasons why a package might be 7748<p>There are several reasons why a package might be
7745 instructed to not build under certain circumstances. If the 7749 instructed to not build under certain circumstances. If the
7746 package builds and runs on most platforms, the exceptions 7750 package builds and runs on most platforms, the exceptions
7747 should be noted with <code class="varname">BROKEN_ON_PLATFORM</code>. If 7751 should be noted with <code class="varname">BROKEN_ON_PLATFORM</code>. If
7748 the package builds and runs on a small handful of platforms, 7752 the package builds and runs on a small handful of platforms,
7749 set <code class="varname">BROKEN_EXCEPT_ON_PLATFORM</code> instead. 7753 set <code class="varname">BROKEN_EXCEPT_ON_PLATFORM</code> instead.
7750 Both <code class="varname">BROKEN_ON_PLATFORM</code> and 7754 Both <code class="varname">BROKEN_ON_PLATFORM</code> and
7751 <code class="varname">BROKEN_EXCEPT_ON_PLATFORM</code> are OS triples 7755 <code class="varname">BROKEN_EXCEPT_ON_PLATFORM</code> are OS triples
7752 (OS-version-platform) that can use glob-style 7756 (OS-version-platform) that can use glob-style
7753 wildcards.</p> 7757 wildcards.</p>
7754<p>If a package is not appropriate for some platforms (as 7758<p>If a package is not appropriate for some platforms (as
7755 opposed to merely broken), a different set of variables should be 7759 opposed to merely broken), a different set of variables should be
7756 used as this affects failure reporting and statistics. 7760 used as this affects failure reporting and statistics.
7757 If the package is appropriate for most platforms, the exceptions 7761 If the package is appropriate for most platforms, the exceptions
7758 should be noted with <code class="varname">NOT_FOR_PLATFORM</code>. If 7762 should be noted with <code class="varname">NOT_FOR_PLATFORM</code>. If
7759 the package is appropriate for only a small handful of platforms 7763 the package is appropriate for only a small handful of platforms
7760 (often exactly one), set <code class="varname">ONLY_FOR_PLATFORM</code> instead. 7764 (often exactly one), set <code class="varname">ONLY_FOR_PLATFORM</code> instead.
7761 Both <code class="varname">ONLY_FOR_PLATFORM</code> and 7765 Both <code class="varname">ONLY_FOR_PLATFORM</code> and
7762 <code class="varname">NOT_FOR_PLATFORM</code> are OS triples 7766 <code class="varname">NOT_FOR_PLATFORM</code> are OS triples
7763 (OS-version-platform) that can use glob-style 7767 (OS-version-platform) that can use glob-style
7764 wildcards.</p> 7768 wildcards.</p>
7765<p>Some packages are tightly bound to a specific version of an 7769<p>Some packages are tightly bound to a specific version of an
7766 operating system, e.g. LKMs or <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/sysutils/lsof/index.html" target="_top"><code class="filename">sysutils/lsof</code></a>. Such binary packages are not 7770 operating system, e.g. LKMs or <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/sysutils/lsof/index.html" target="_top"><code class="filename">sysutils/lsof</code></a>. Such binary packages are not
7767 backwards compatible with other versions of the OS, and should be 7771 backwards compatible with other versions of the OS, and should be
7768 uploaded to a version specific directory on the FTP server. Mark 7772 uploaded to a version specific directory on the FTP server. Mark
7769 these packages by setting <code class="varname">OSVERSION_SPECIFIC</code> to 7773 these packages by setting <code class="varname">OSVERSION_SPECIFIC</code> to
7770 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This variable is not currently used by any of 7774 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>. This variable is not currently used by any of
7771 the package system internals, but may be used in the 7775 the package system internals, but may be used in the
7772 future.</p> 7776 future.</p>
7773<p>If the package should be skipped (for example, because it 7777<p>If the package should be skipped (for example, because it
7774 provides functionality already provided by the system), set 7778 provides functionality already provided by the system), set
7775 <code class="varname">PKG_SKIP_REASON</code> to a descriptive message. If 7779 <code class="varname">PKG_SKIP_REASON</code> to a descriptive message. If
7776 the package should fail because some preconditions are not met, 7780 the package should fail because some preconditions are not met,
7777 set <code class="varname">PKG_FAIL_REASON</code> to a descriptive 7781 set <code class="varname">PKG_FAIL_REASON</code> to a descriptive
7778 message.</p> 7782 message.</p>
7779</div> 7783</div>
7780<div class="sect2"> 7784<div class="sect2">
7781<div class="titlepage"><div><div><h3 class="title"> 7785<div class="titlepage"><div><div><h3 class="title">
7782<a name="undeletable-packages"></a>21.1.8. Packages which should not be deleted, once installed</h3></div></div></div> 7786<a name="undeletable-packages"></a>21.1.8. Packages which should not be deleted, once installed</h3></div></div></div>
7783<p>To ensure that a package may not be deleted, once it has been 7787<p>To ensure that a package may not be deleted, once it has been
7784 installed, the <code class="varname">PKG_PRESERVE</code> definition should 7788 installed, the <code class="varname">PKG_PRESERVE</code> definition should
7785 be set in the package Makefile. This will be carried into any 7789 be set in the package Makefile. This will be carried into any
7786 binary package that is made from this pkgsrc entry. A 7790 binary package that is made from this pkgsrc entry. A
7787 <span class="quote">&#8220;<span class="quote">preserved</span>&#8221;</span> package will 7791 <span class="quote">&#8220;<span class="quote">preserved</span>&#8221;</span> package will
7788 not be deleted using <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_delete.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> unless the 7792 not be deleted using <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/pkg_delete.1"><span class="citerefentry"><span class="refentrytitle">pkg_delete</span>(1)</span></a> unless the
7789 <span class="quote">&#8220;<span class="quote">-f</span>&#8221;</span> option is used.</p> 7793 <span class="quote">&#8220;<span class="quote">-f</span>&#8221;</span> option is used.</p>
7790</div> 7794</div>
7791<div class="sect2"> 7795<div class="sect2">
7792<div class="titlepage"><div><div><h3 class="title"> 7796<div class="titlepage"><div><div><h3 class="title">
7793<a name="security-handling"></a>21.1.9. Handling packages with security problems</h3></div></div></div> 7797<a name="security-handling"></a>21.1.9. Handling packages with security problems</h3></div></div></div>
7794<p>When a vulnerability is found, this should be noted in 7798<p>When a vulnerability is found, this should be noted in
7795 <code class="filename">localsrc/security/advisories/pkg-vulnerabilities</code>. 7799 <code class="filename">localsrc/security/advisories/pkg-vulnerabilities</code>.
7796 Entries in that file consist of three parts:</p> 7800 Entries in that file consist of three parts:</p>
7797<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7801<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7798<li class="listitem"><p>package version pattern</p></li> 7802<li class="listitem"><p>package version pattern</p></li>
7799<li class="listitem"><p>type of vulnerability (please cut'n'paste an existing one where possible)</p></li> 7803<li class="listitem"><p>type of vulnerability (please cut'n'paste an existing one where possible)</p></li>
7800<li class="listitem"><p>URL providing additional information about the issue</p></li> 7804<li class="listitem"><p>URL providing additional information about the issue</p></li>
7801</ul></div> 7805</ul></div>
7802<p>For the package version pattern please always use `&lt;' to 7806<p>For the package version pattern please always use `&lt;' to
7803 mark an upper bound (not `&lt;='!). This will avoid possible 7807 mark an upper bound (not `&lt;='!). This will avoid possible
7804 problems due unrelated <code class="varname">PKGREVISION</code> bumps not 7808 problems due unrelated <code class="varname">PKGREVISION</code> bumps not
7805 related to security fixes. Lower bounds can be added too, using 7809 related to security fixes. Lower bounds can be added too, using
7806 '&gt;' or '&gt;='. For example, 7810 '&gt;' or '&gt;='. For example,
7807 <span class="quote">&#8220;<span class="quote"><code class="literal">foo&gt;=1&lt;1.2</code></span>&#8221;</span> would mark 7811 <span class="quote">&#8220;<span class="quote"><code class="literal">foo&gt;=1&lt;1.2</code></span>&#8221;</span> would mark
7808 versions 1.0 (included) to 1.2 (excluded) of 7812 versions 1.0 (included) to 1.2 (excluded) of
7809 <span class="quote">&#8220;<span class="quote"><code class="literal">foo</code></span>&#8221;</span> as affected by the security 7813 <span class="quote">&#8220;<span class="quote"><code class="literal">foo</code></span>&#8221;</span> as affected by the security
7810 issue.</p> 7814 issue.</p>
7811<p>Entries should always be added at the bottom of the file.</p> 7815<p>Entries should always be added at the bottom of the file.</p>
7812<p>When fixing packages, please modify the upper bound of the 7816<p>When fixing packages, please modify the upper bound of the
7813 corresponding entry. To continue the previous example, if a fix 7817 corresponding entry. To continue the previous example, if a fix
7814 was backported to version 1.1nb2, change the previous pattern to 7818 was backported to version 1.1nb2, change the previous pattern to
7815 <span class="quote">&#8220;<span class="quote"><code class="literal">foo&gt;=1&lt;1.1nb2</code></span>&#8221;</span>.</p> 7819 <span class="quote">&#8220;<span class="quote"><code class="literal">foo&gt;=1&lt;1.1nb2</code></span>&#8221;</span>.</p>
7816<p>To locally test a package version pattern against a 7820<p>To locally test a package version pattern against a
7817 <code class="varname">PKGNAME</code> you can use the <span class="command"><strong>pkg_admin 7821 <code class="varname">PKGNAME</code> you can use the <span class="command"><strong>pkg_admin
7818 pmatch</strong></span> command.</p> 7822 pmatch</strong></span> command.</p>
7819<p>The URL should be as permanent as possible and provide as 7823<p>The URL should be as permanent as possible and provide as
7820 much information about the issue as possible. CVE entries are 7824 much information about the issue as possible. CVE entries are
7821 preferred.</p> 7825 preferred.</p>
7822<p>After committing that file, ask pkgsrc-security@NetBSD.org to 7826<p>After committing that file, ask pkgsrc-security@NetBSD.org to
7823 update the file on ftp.NetBSD.org.</p> 7827 update the file on ftp.NetBSD.org.</p>
7824<p>After fixing the vulnerability by a patch, its 7828<p>After fixing the vulnerability by a patch, its
7825 <code class="varname">PKGREVISION</code> should be increased (this is of 7829 <code class="varname">PKGREVISION</code> should be increased (this is of
7826 course not necessary if the problem is fixed by using a newer 7830 course not necessary if the problem is fixed by using a newer
7827 release of the software), and the pattern in the 7831 release of the software), and the pattern in the
7828 pkg-vulnerabilities file must be updated.</p> 7832 pkg-vulnerabilities file must be updated.</p>
7829<p>Also, if the fix should be applied to the stable pkgsrc 7833<p>Also, if the fix should be applied to the stable pkgsrc
7830 branch, be sure to submit a pullup request!</p> 7834 branch, be sure to submit a pullup request!</p>
7831<p>Binary packages already on ftp.NetBSD.org will be handled 7835<p>Binary packages already on ftp.NetBSD.org will be handled
7832 semi-automatically by a weekly cron job.</p> 7836 semi-automatically by a weekly cron job.</p>
7833<p>In case a security issue is disputed, please contact 7837<p>In case a security issue is disputed, please contact
7834 pkgsrc-security@NetBSD.org.</p> 7838 pkgsrc-security@NetBSD.org.</p>
7835</div> 7839</div>
7836<div class="sect2"> 7840<div class="sect2">
7837<div class="titlepage"><div><div><h3 class="title"> 7841<div class="titlepage"><div><div><h3 class="title">
7838<a name="bumping-pkgrevision"></a>21.1.10. How to handle incrementing versions when fixing an existing package</h3></div></div></div> 7842<a name="bumping-pkgrevision"></a>21.1.10. How to handle incrementing versions when fixing an existing package</h3></div></div></div>
7839<p>When making fixes to an existing package it can be useful 7843<p>When making fixes to an existing package it can be useful
7840 to change the version number in <code class="varname">PKGNAME</code>. To 7844 to change the version number in <code class="varname">PKGNAME</code>. To
7841 avoid conflicting with future versions by the original author, a 7845 avoid conflicting with future versions by the original author, a
7842 <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 7846 <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
7843 on package versions by setting <code class="varname">PKGREVISION=1</code> 7847 on package versions by setting <code class="varname">PKGREVISION=1</code>
7844 (2, ...). The <span class="quote">&#8220;<span class="quote">nb</span>&#8221;</span> is treated like a 7848 (2, ...). The <span class="quote">&#8220;<span class="quote">nb</span>&#8221;</span> is treated like a
7845 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> by the package tools. e.g.</p> 7849 <span class="quote">&#8220;<span class="quote">.</span>&#8221;</span> by the package tools. e.g.</p>
7846<pre class="programlisting"> 7850<pre class="programlisting">
7847DISTNAME= foo-17.42 7851DISTNAME= foo-17.42
7848PKGREVISION= 9 7852PKGREVISION= 9
7849</pre> 7853</pre>
7850<p>will result in a <code class="varname">PKGNAME</code> of 7854<p>will result in a <code class="varname">PKGNAME</code> of
7851 <span class="quote">&#8220;<span class="quote">foo-17.42nb9</span>&#8221;</span>. If you want to use the original 7855 <span class="quote">&#8220;<span class="quote">foo-17.42nb9</span>&#8221;</span>. If you want to use the original
7852 value of <code class="varname">PKGNAME</code> without the <span class="quote">&#8220;<span class="quote">nbX</span>&#8221;</span> 7856 value of <code class="varname">PKGNAME</code> without the <span class="quote">&#8220;<span class="quote">nbX</span>&#8221;</span>
7853 suffix, e.g. for setting <code class="varname">DIST_SUBDIR</code>, use 7857 suffix, e.g. for setting <code class="varname">DIST_SUBDIR</code>, use
7854 <code class="varname">PKGNAME_NOREV</code>.</p> 7858 <code class="varname">PKGNAME_NOREV</code>.</p>
7855<p>When a new release of the package is released, the 7859<p>When a new release of the package is released, the
7856 <code class="varname">PKGREVISION</code> should be removed, e.g. on a new 7860 <code class="varname">PKGREVISION</code> should be removed, e.g. on a new
7857 minor release of the above package, things should be like:</p> 7861 minor release of the above package, things should be like:</p>
7858<pre class="programlisting"> 7862<pre class="programlisting">
7859DISTNAME= foo-17.43 7863DISTNAME= foo-17.43
7860</pre> 7864</pre>
7861<p><code class="varname">PKGREVISION</code> should be incremented for any 7865<p><code class="varname">PKGREVISION</code> should be incremented for any
7862 non-trivial change in the resulting binary package. Without a 7866 non-trivial change in the resulting binary package. Without a
7863 <code class="varname">PKGREVISION</code> bump, someone with the previous 7867 <code class="varname">PKGREVISION</code> bump, someone with the previous
7864 version installed has no way of knowing that their package is out 7868 version installed has no way of knowing that their package is out
7865 of date. Thus, changes without increasing 7869 of date. Thus, changes without increasing
7866 <code class="varname">PKGREVISION</code> are essentially labeled "this is so 7870 <code class="varname">PKGREVISION</code> are essentially labeled "this is so
7867 trivial that no reasonable person would want to upgrade", and this 7871 trivial that no reasonable person would want to upgrade", and this
7868 is the rough test for when increasing 7872 is the rough test for when increasing
7869 <code class="varname">PKGREVISION</code> is appropriate. Examples of 7873 <code class="varname">PKGREVISION</code> is appropriate. Examples of
7870 changes that do not merit increasing 7874 changes that do not merit increasing
7871 <code class="varname">PKGREVISION</code> are:</p> 7875 <code class="varname">PKGREVISION</code> are:</p>
7872<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7876<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7873<li class="listitem"><p>Changing <code class="varname">HOMEPAGE</code>, 7877<li class="listitem"><p>Changing <code class="varname">HOMEPAGE</code>,
7874 <code class="varname">MAINTAINER</code>, <code class="varname">OWNER</code>, or 7878 <code class="varname">MAINTAINER</code>, <code class="varname">OWNER</code>, or
7875 comments in Makefile.</p></li> 7879 comments in Makefile.</p></li>
7876<li class="listitem"><p>Changing build variables if the resulting binary 7880<li class="listitem"><p>Changing build variables if the resulting binary
7877 package is the same.</p></li> 7881 package is the same.</p></li>
7878<li class="listitem"><p>Changing 7882<li class="listitem"><p>Changing
7879 <code class="filename">DESCR</code>.</p></li> 7883 <code class="filename">DESCR</code>.</p></li>
7880<li class="listitem"><p>Adding <code class="varname">PKG_OPTIONS</code> if the 7884<li class="listitem"><p>Adding <code class="varname">PKG_OPTIONS</code> if the
7881 default options don't change.</p></li> 7885 default options don't change.</p></li>
7882</ul></div> 7886</ul></div>
7883<p>Examples of changes that do merit an increase to 7887<p>Examples of changes that do merit an increase to
7884 <code class="varname">PKGREVISION</code> include:</p> 7888 <code class="varname">PKGREVISION</code> include:</p>
7885<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7889<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7886<li class="listitem"><p>Security fixes</p></li> 7890<li class="listitem"><p>Security fixes</p></li>
7887<li class="listitem"><p>Changes or additions to a patch 7891<li class="listitem"><p>Changes or additions to a patch
7888 file</p></li> 7892 file</p></li>
7889<li class="listitem"><p>Changes to the 7893<li class="listitem"><p>Changes to the
7890 <code class="filename">PLIST</code></p></li> 7894 <code class="filename">PLIST</code></p></li>
7891<li class="listitem"><p>A dependency is changed or 7895<li class="listitem"><p>A dependency is changed or
7892 renamed.</p></li> 7896 renamed.</p></li>
7893</ul></div> 7897</ul></div>
7894<p>PKGREVISION must also be incremented when dependencies have ABI 7898<p>PKGREVISION must also be incremented when dependencies have ABI
7895 changes.</p> 7899 changes.</p>
7896</div> 7900</div>
7897<div class="sect2"> 7901<div class="sect2">
7898<div class="titlepage"><div><div><h3 class="title"> 7902<div class="titlepage"><div><div><h3 class="title">
7899<a name="fixes.subst"></a>21.1.11. Substituting variable text in the package files (the SUBST framework)</h3></div></div></div> 7903<a name="fixes.subst"></a>21.1.11. Substituting variable text in the package files (the SUBST framework)</h3></div></div></div>
7900<p>When you want to replace the same text in multiple files, or 7904<p>When you want to replace the same text in multiple files, or
7901multiple times in the same file, it is cumbersome to maintain a patch 7905multiple times in the same file, it is cumbersome to maintain a patch
7902file for this. This is where the SUBST framework steps in. It provides an 7906file for this. This is where the SUBST framework steps in. It provides an
7903easy-to-use interface for replacing text in files. It just needs the 7907easy-to-use interface for replacing text in files. It just needs the
7904following information:</p> 7908following information:</p>
7905<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 7909<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
7906<li class="listitem"><p>In which phase of the package build cycle should the 7910<li class="listitem"><p>In which phase of the package build cycle should the
7907replacement happen?</p></li> 7911replacement happen?</p></li>
7908<li class="listitem"><p>In which files should the replacement 7912<li class="listitem"><p>In which files should the replacement
7909happen?</p></li> 7913happen?</p></li>
7910<li class="listitem"><p>Which text should be replaced with 7914<li class="listitem"><p>Which text should be replaced with
7911what?</p></li> 7915what?</p></li>
7912</ul></div> 7916</ul></div>
7913<p>This information is encoded in a block of <code class="varname">SUBST</code> 7917<p>This information is encoded in a block of <code class="varname">SUBST</code>
7914variables. A minimal example is:</p> 7918variables. A minimal example is:</p>
7915<pre class="programlisting"> 7919<pre class="programlisting">
7916SUBST_CLASSES+= paths 7920SUBST_CLASSES+= paths
7917SUBST_STAGE.paths= pre-configure 7921SUBST_STAGE.paths= pre-configure
7918SUBST_FILES.paths= src/*.c 7922SUBST_FILES.paths= src/*.c
7919SUBST_SED.paths= -e 's,/usr/local,${PREFIX},g' 7923SUBST_SED.paths= -e 's,/usr/local,${PREFIX},g'
7920</pre> 7924</pre>
7921<p>Translated into English, it means: In the pre-configure stage (that 7925<p>Translated into English, it means: In the pre-configure stage (that
7922is, after applying the patches from the patches/ directory and before 7926is, after applying the patches from the patches/ directory and before
7923running the configure script and the portability check), replace the text 7927running the configure script and the portability check), replace the text
7924<code class="literal">/usr/local</code> with the content of the variable 7928<code class="literal">/usr/local</code> with the content of the variable
7925<code class="varname">PREFIX</code>.</p> 7929<code class="varname">PREFIX</code>.</p>
7926<p>Each SUBST block starts by appending an identifier to 7930<p>Each SUBST block starts by appending an identifier to
7927<code class="varname">SUBST_CLASSES</code> (note the <code class="literal">+=</code>). This 7931<code class="varname">SUBST_CLASSES</code> (note the <code class="literal">+=</code>). This
7928identifier can be chosen freely by the package. If there should ever be 7932identifier can be chosen freely by the package. If there should ever be
7929duplicate identifiers, the pkgsrc infrastructure will catch this and fail 7933duplicate identifiers, the pkgsrc infrastructure will catch this and fail
7930early, so don't worry about name collisions.</p> 7934early, so don't worry about name collisions.</p>
7931<p>Except for <code class="varname">SUBST_CLASSES</code>, all variables in a 7935<p>Except for <code class="varname">SUBST_CLASSES</code>, all variables in a
7932SUBST block are parameterized using this identifier. In the remainder of 7936SUBST block are parameterized using this identifier. In the remainder of
7933this section, these parameterized variables are written as 7937this section, these parameterized variables are written as
7934<code class="varname">SUBST_STAGE.*</code>.</p> 7938<code class="varname">SUBST_STAGE.*</code>.</p>
7935<pre class="programlisting"> 7939<pre class="programlisting">
7936SUBST_CLASSES+= paths 7940SUBST_CLASSES+= paths
7937SUBST_STAGE.paths= pre-configure 7941SUBST_STAGE.paths= pre-configure
7938SUBST_MESSAGE.paths= Fixing absolute paths. 7942SUBST_MESSAGE.paths= Fixing absolute paths.
7939SUBST_FILES.paths= src/*.c 7943SUBST_FILES.paths= src/*.c
7940SUBST_FILES.paths+= scripts/*.sh 7944SUBST_FILES.paths+= scripts/*.sh
7941SUBST_SED.paths= -e 's,"/usr/local,"${PREFIX},g' 7945SUBST_SED.paths= -e 's,"/usr/local,"${PREFIX},g'
7942SUBST_SED.paths+= -e 's,"/var/log,"${VARBASE}/log,g' 7946SUBST_SED.paths+= -e 's,"/var/log,"${VARBASE}/log,g'
7943SUBST_VARS.paths= LOCALBASE PREFIX PKGVERSION 7947SUBST_VARS.paths= LOCALBASE PREFIX PKGVERSION
7944</pre> 7948</pre>
7945<p>To get a complete picture about the SUBST substitutions, run 7949<p>To get a complete picture about the SUBST substitutions, run
7946<span class="command"><strong>bmake show-all-subst</strong></span>. If something doesn't work as 7950<span class="command"><strong>bmake show-all-subst</strong></span>. If something doesn't work as
7947expected, run pkglint on the package, which detects several typical 7951expected, run pkglint on the package, which detects several typical
7948mistakes surrounding the SUBST blocks. For any questions that might 7952mistakes surrounding the SUBST blocks. For any questions that might
7949remain after this, have a look at 7953remain after this, have a look at
7950<code class="filename">mk/subst.mk</code>.</p> 7954<code class="filename">mk/subst.mk</code>.</p>
7951<div class="sect3"> 7955<div class="sect3">
7952<div class="titlepage"><div><div><h4 class="title"> 7956<div class="titlepage"><div><div><h4 class="title">
7953<a name="fixes.subst.when"></a>21.1.11.1. Choosing the time where the substitutions happen</h4></div></div></div> 7957<a name="fixes.subst.when"></a>21.1.11.1. Choosing the time where the substitutions happen</h4></div></div></div>
7954<p>The <code class="varname">SUBST_STAGE.*</code> is one of 7958<p>The <code class="varname">SUBST_STAGE.*</code> is one of
7955{pre,do,post}-{extract,patch,configure,build,test,install}. Of these, 7959{pre,do,post}-{extract,patch,configure,build,test,install}. Of these,
7956<code class="literal">pre-configure</code> is used most often, by far. The most 7960<code class="literal">pre-configure</code> is used most often, by far. The most
7957popular stages are, in chronological order:</p> 7961popular stages are, in chronological order:</p>
7958<div class="variablelist"><dl class="variablelist"> 7962<div class="variablelist"><dl class="variablelist">
7959<dt><span class="term"><code class="literal">post-extract</code></span></dt> 7963<dt><span class="term"><code class="literal">post-extract</code></span></dt>
7960<dd> 7964<dd>
7961<p>The substitutions are applied immediately after the 7965<p>The substitutions are applied immediately after the
7962distfiles are extracted. Running <span class="command"><strong>bmake extract</strong></span> on the 7966distfiles are extracted. Running <span class="command"><strong>bmake extract</strong></span> on the
7963package will leave no traces of the original files.</p> 7967package will leave no traces of the original files.</p>
7964<p>When the substitution applies to files for which there is also a 7968<p>When the substitution applies to files for which there is also a
7965patch in the <code class="filename">patches/</code> directory, this means that the 7969patch in the <code class="filename">patches/</code> directory, this means that the
7966patches will be computed based on the result of the substitution. When 7970patches will be computed based on the result of the substitution. When
7967these patches are sent to the upstream maintainer later, to be fixed in 7971these patches are sent to the upstream maintainer later, to be fixed in
7968the upstream package, these patches may no longer match what the upstream 7972the upstream package, these patches may no longer match what the upstream
7969author is used to. Because of this, <code class="literal">pre-configure</code> is 7973author is used to. Because of this, <code class="literal">pre-configure</code> is
7970often a better choice.</p> 7974often a better choice.</p>
7971</dd> 7975</dd>
7972<dt><span class="term"><code class="literal">pre-configure</code></span></dt> 7976<dt><span class="term"><code class="literal">pre-configure</code></span></dt>
7973<dd> 7977<dd>
7974<p>The substitutions are applied after the patches from the 7978<p>The substitutions are applied after the patches from the
7975<code class="filename">patches/</code> directory. This makes it possible to run 7979<code class="filename">patches/</code> directory. This makes it possible to run
7976<span class="command"><strong>bmake patch</strong></span> on the package, after which the patches 7980<span class="command"><strong>bmake patch</strong></span> on the package, after which the patches
7977can be edited using the tools pkgvi and mkpatches from the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/index.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> package.</p> 7981can be edited using the tools pkgvi and mkpatches from the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkgdiff/index.html" target="_top"><code class="filename">pkgtools/pkgdiff</code></a> package.</p>
7978<p>When updating the patches, it is helpful to explicitly separate the 7982<p>When updating the patches, it is helpful to explicitly separate the
7979<span class="command"><strong>bmake patch</strong></span> from the <span class="command"><strong>bmake 7983<span class="command"><strong>bmake patch</strong></span> from the <span class="command"><strong>bmake
7980configure</strong></span>, and to only edit the patches between these commands. 7984configure</strong></span>, and to only edit the patches between these commands.
7981Otherwise the substitutions from the SUBST block will end up in the patch 7985Otherwise the substitutions from the SUBST block will end up in the patch
7982file. When this happens in really obvious ways, pkglint will complain 7986file. When this happens in really obvious ways, pkglint will complain
7983about patches that contain a hard-coded <code class="literal">/usr/pkg</code> 7987about patches that contain a hard-coded <code class="literal">/usr/pkg</code>
7984instead of the correct and intended <code class="literal">@PREFIX@</code>, but it 7988instead of the correct and intended <code class="literal">@PREFIX@</code>, but it
7985can only detect these really obvious 7989can only detect these really obvious
7986cases.</p> 7990cases.</p>
7987</dd> 7991</dd>
7988<dt><span class="term"><code class="literal">do-configure</code></span></dt> 7992<dt><span class="term"><code class="literal">do-configure</code></span></dt>
7989<dd><p>This stage should only be used if the package defines a 7993<dd><p>This stage should only be used if the package defines a
7990<code class="literal">pre-configure</code> action itself, and the substitution must 7994<code class="literal">pre-configure</code> action itself, and the substitution must
7991happen after that. Typical examples are packages that use the 7995happen after that. Typical examples are packages that use the
7992<code class="literal">pre-configure</code> stage to regenerate the GNU configure 7996<code class="literal">pre-configure</code> stage to regenerate the GNU configure
7993script from 7997script from
7994<code class="filename">configure.ac</code>.</p></dd> 7998<code class="filename">configure.ac</code>.</p></dd>
7995<dt><span class="term"><code class="literal">post-configure</code></span></dt> 7999<dt><span class="term"><code class="literal">post-configure</code></span></dt>
7996<dd><p>This stage is used to fix up any mistakes by the 8000<dd><p>This stage is used to fix up any mistakes by the
7997configure stage.</p></dd> 8001configure stage.</p></dd>
7998<dt><span class="term"><code class="literal">pre-build</code></span></dt> 8002<dt><span class="term"><code class="literal">pre-build</code></span></dt>
7999<dd><p>This stage should only be used for substitutions that are 8003<dd><p>This stage should only be used for substitutions that are
8000clearly related to building the package, not for fixing the 8004clearly related to building the package, not for fixing the
8001configuration. Substitutions for pathnames (such as replacing 8005configuration. Substitutions for pathnames (such as replacing
8002<code class="filename">/usr/local</code> with <code class="literal">${PREFIX}</code>) or 8006<code class="filename">/usr/local</code> with <code class="literal">${PREFIX}</code>) or
8003user names (such as replacing <code class="literal">@MY_USER@</code> with the 8007user names (such as replacing <code class="literal">@MY_USER@</code> with the
8004actual username) belong in pre-configure or post-configure 8008actual username) belong in pre-configure or post-configure
8005instead.</p></dd> 8009instead.</p></dd>
8006<dt><span class="term"><code class="literal">post-build</code></span></dt> 8010<dt><span class="term"><code class="literal">post-build</code></span></dt>
8007<dd> 8011<dd>
8008<p>Just as with pre-build, this stage should only be used 8012<p>Just as with pre-build, this stage should only be used
8009for substitutions that are clearly related to building the package, not 8013for substitutions that are clearly related to building the package, not
8010for fixing the configuration. Substitutions for pathnames (such as 8014for fixing the configuration. Substitutions for pathnames (such as
8011replacing <code class="filename">/usr/local</code> with 8015replacing <code class="filename">/usr/local</code> with
8012<code class="literal">${PREFIX}</code>) or user names (such as replacing 8016<code class="literal">${PREFIX}</code>) or user names (such as replacing
8013<code class="literal">@MY_USER@</code> with the actual username) belong in 8017<code class="literal">@MY_USER@</code> with the actual username) belong in
8014pre-configure or post-configure instead.</p> 8018pre-configure or post-configure instead.</p>
8015<p>A typical use is to update pkg-config files to include the rpath 8019<p>A typical use is to update pkg-config files to include the rpath
8016compiler options.</p> 8020compiler options.</p>
8017</dd> 8021</dd>
8018<dt><span class="term"><code class="literal">pre-install</code></span></dt> 8022<dt><span class="term"><code class="literal">pre-install</code></span></dt>
8019<dd><p>In general, the install phase should be as simple as 8023<dd><p>In general, the install phase should be as simple as
8020possible. As with the pre-build and post-build stages, it should not be 8024possible. As with the pre-build and post-build stages, it should not be
8021used to fix pathnames or user names, these belong in pre-configure 8025used to fix pathnames or user names, these belong in pre-configure
8022instead. There are only few legitimate use cases for applying 8026instead. There are only few legitimate use cases for applying
8023substitutions in this stage.</p></dd> 8027substitutions in this stage.</p></dd>
8024</dl></div> 8028</dl></div>
8025</div> 8029</div>
8026<div class="sect3"> 8030<div class="sect3">
8027<div class="titlepage"><div><div><h4 class="title"> 8031<div class="titlepage"><div><div><h4 class="title">
8028<a name="fixes.subst.where"></a>21.1.11.2. Choosing the files where the substitutions happen</h4></div></div></div> 8032<a name="fixes.subst.where"></a>21.1.11.2. Choosing the files where the substitutions happen</h4></div></div></div>
8029<p>The <code class="varname">SUBST_FILES.*</code> variable contains a list of 8033<p>The <code class="varname">SUBST_FILES.*</code> variable contains a list of
8030filename patterns. These patterns are relative to 8034filename patterns. These patterns are relative to
8031<code class="varname">WRKSRC</code> since that is where most substitutions happen. 8035<code class="varname">WRKSRC</code> since that is where most substitutions happen.
8032A typical example is:</p> 8036A typical example is:</p>
8033<pre class="programlisting"> 8037<pre class="programlisting">
8034SUBST_FILES.path= Makefile */Makefile */*/Makefile *.[ch] 8038SUBST_FILES.path= Makefile */Makefile */*/Makefile *.[ch]
8035</pre> 8039</pre>
8036<p>The above patterns, especially the last, are quite broad. The SUBST 8040<p>The above patterns, especially the last, are quite broad. The SUBST
8037implementation checks that each filename pattern that is mentioned here 8041implementation checks that each filename pattern that is mentioned here
8038has an effect. For example, if none of the 8042has an effect. For example, if none of the
8039<code class="filename">*/*/Makefile</code> files contains the patterns to be found 8043<code class="filename">*/*/Makefile</code> files contains the patterns to be found
8040and substituted, that filename pattern is redundant and should be left 8044and substituted, that filename pattern is redundant and should be left
8041out. By default, the SUBST framework will complain with an error message. 8045out. By default, the SUBST framework will complain with an error message.
8042If the text to be substituted occurs in some of the files from a single 8046If the text to be substituted occurs in some of the files from a single
8043pattern, but not in all of them, that is totally ok, and the SUBST 8047pattern, but not in all of them, that is totally ok, and the SUBST
8044framework will only print an INFO message for those files.</p> 8048framework will only print an INFO message for those files.</p>
8045<p>If there is a good reason for having redundant filename patterns, 8049<p>If there is a good reason for having redundant filename patterns,
8046set <code class="varname">SUBST_NOOP_OK.*</code> to <code class="literal">yes</code>.</p> 8050set <code class="varname">SUBST_NOOP_OK.*</code> to <code class="literal">yes</code>.</p>
8047<p>Another popular way of choosing the files for the substitutions is 8051<p>Another popular way of choosing the files for the substitutions is
8048via a shell command, like this:</p> 8052via a shell command, like this:</p>
8049<pre class="programlisting"> 8053<pre class="programlisting">
8050C_FILES_CMD= cd ${WRKSRC} &amp;&amp; ${FIND} . -name '*.c' 8054C_FILES_CMD= cd ${WRKSRC} &amp;&amp; ${FIND} . -name '*.c'
8051SUBST_FILES.path= ${C_FILES_CMD:sh} 8055SUBST_FILES.path= ${C_FILES_CMD:sh}
8052</pre> 8056</pre>
8053<p>The variable name <code class="varname">C_FILES_CMD</code> in this example is 8057<p>The variable name <code class="varname">C_FILES_CMD</code> in this example is
8054freely chosen and independent of the SUBST framework.</p> 8058freely chosen and independent of the SUBST framework.</p>
8055<p>In this variant, the <code class="varname">SUBST_FILES.*</code> variable 8059<p>In this variant, the <code class="varname">SUBST_FILES.*</code> variable
8056lists each file individually. Thereby chances are higher that there are 8060lists each file individually. Thereby chances are higher that there are
8057filename patterns in which no substitution happens. Since the SUBST 8061filename patterns in which no substitution happens. Since the SUBST
8058framework cannot know whether the filename patterns in 8062framework cannot know whether the filename patterns in
8059<code class="varname">SUBST_FILES.*</code> have been explicitly listed in the 8063<code class="varname">SUBST_FILES.*</code> have been explicitly listed in the
8060Makefile (where any redundant filename pattern would be suspicious) or 8064Makefile (where any redundant filename pattern would be suspicious) or
8061been generated by a shell command (in which redundant filename patterns 8065been generated by a shell command (in which redundant filename patterns
8062are more likely and to be expected), it will complain about these 8066are more likely and to be expected), it will complain about these
8063redundant filename patterns. Therefore, SUBST blocks that use a shell 8067redundant filename patterns. Therefore, SUBST blocks that use a shell
8064command to generate the list of filename patterns often need to set 8068command to generate the list of filename patterns often need to set
8065<code class="varname">SUBST_NOOP_OK.*</code> to <code class="literal">yes</code>.</p> 8069<code class="varname">SUBST_NOOP_OK.*</code> to <code class="literal">yes</code>.</p>
8066</div> 8070</div>
8067<div class="sect3"> 8071<div class="sect3">
8068<div class="titlepage"><div><div><h4 class="title"> 8072<div class="titlepage"><div><div><h4 class="title">
8069<a name="fixes.subst.what"></a>21.1.11.3. Choosing what to substitute</h4></div></div></div> 8073<a name="fixes.subst.what"></a>21.1.11.3. Choosing what to substitute</h4></div></div></div>
8070<p>In most cases, the substitutions are given using one or more 8074<p>In most cases, the substitutions are given using one or more
8071<a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/sed.1"><span class="citerefentry"><span class="refentrytitle">sed</span>(1)</span></a> commands, like this:</p> 8075<a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/sed.1"><span class="citerefentry"><span class="refentrytitle">sed</span>(1)</span></a> commands, like this:</p>
8072<pre class="programlisting"> 8076<pre class="programlisting">
8073SUBST_SED.path= -e 's|/usr/local|${PREFIX}|g' 8077SUBST_SED.path= -e 's|/usr/local|${PREFIX}|g'
8074</pre> 8078</pre>
8075<p>Each of the sed commands needs to be preceded by the 8079<p>Each of the sed commands needs to be preceded by the
8076<code class="literal">-e</code> option and should be specified on a line of its 8080<code class="literal">-e</code> option and should be specified on a line of its
8077own, to avoid hiding short sed commands at the end of a line.</p> 8081own, to avoid hiding short sed commands at the end of a line.</p>
8078<p>Since the sed commands often contain shell metacharacters as the 8082<p>Since the sed commands often contain shell metacharacters as the
8079separator (the <code class="literal">|</code> in the above example), it is common 8083separator (the <code class="literal">|</code> in the above example), it is common
8080to enclose them in single quotes.</p> 8084to enclose them in single quotes.</p>
8081<p>A common substitution is to replace placeholders of the form 8085<p>A common substitution is to replace placeholders of the form
8082<code class="literal">@VARNAME@</code> with their pkgsrc counterpart variable 8086<code class="literal">@VARNAME@</code> with their pkgsrc counterpart variable
8083<code class="literal">${VARNAME}</code>. A typical example is:</p> 8087<code class="literal">${VARNAME}</code>. A typical example is:</p>
8084<pre class="programlisting"> 8088<pre class="programlisting">
8085SUBST_VARS.path= PREFIX 8089SUBST_VARS.path= PREFIX
8086</pre> 8090</pre>
8087<p>This type of substitutions is typically done by the GNU configure 8091<p>This type of substitutions is typically done by the GNU configure
8088scripts during the do-configure stage, but in some cases these need to be 8092scripts during the do-configure stage, but in some cases these need to be
8089overridden. The same pattern is also used when a package defines patches 8093overridden. The same pattern is also used when a package defines patches
8090that replace previously hard-coded paths like 8094that replace previously hard-coded paths like
8091<code class="literal">/usr/local</code> with a <code class="literal">@PREFIX@</code> 8095<code class="literal">/usr/local</code> with a <code class="literal">@PREFIX@</code>
8092placeholder first, which then gets substituted by the actual 8096placeholder first, which then gets substituted by the actual
8093<code class="literal">${PREFIX}</code> in the pre-configure stage. In many of these 8097<code class="literal">${PREFIX}</code> in the pre-configure stage. In many of these
8094cases, it works equally well to just use the SUBST framework to directly 8098cases, it works equally well to just use the SUBST framework to directly
8095replace <code class="literal">/usr/local</code> with <code class="literal">${PREFIX}</code>, 8099replace <code class="literal">/usr/local</code> with <code class="literal">${PREFIX}</code>,
8096thereby omitting the intermediate patch file.</p> 8100thereby omitting the intermediate patch file.</p>
8097<p>If the above is not flexible enough, it is possible to not use sed 8101<p>If the above is not flexible enough, it is possible to not use sed
8098at all for the substitution but to specify an entirely different command, 8102at all for the substitution but to specify an entirely different command,
8099like this:</p> 8103like this:</p>
8100<pre class="programlisting"> 8104<pre class="programlisting">
8101SUBST_FILTER_CMD.path= LC_ALL=C ${TR} -d '\r' 8105SUBST_FILTER_CMD.path= LC_ALL=C ${TR} -d '\r'
8102</pre> 8106</pre>
8103<p>This is used for the few remaining packages in which the 8107<p>This is used for the few remaining packages in which the
8104distributed files use Windows-style line endings that need to be 8108distributed files use Windows-style line endings that need to be
8105converted to UNIX-style line endings.</p> 8109converted to UNIX-style line endings.</p>
8106</div> 8110</div>
8107<div class="sect3"> 8111<div class="sect3">
8108<div class="titlepage"><div><div><h4 class="title"> 8112<div class="titlepage"><div><div><h4 class="title">
8109<a name="fixes.subst.other"></a>21.1.11.4. Other SUBST variables</h4></div></div></div> 8113<a name="fixes.subst.other"></a>21.1.11.4. Other SUBST variables</h4></div></div></div>
8110<p>When a SUBST block is applied during a package build, a message is 8114<p>When a SUBST block is applied during a package build, a message is
8111logged. The default message is fine for most purposes but can be 8115logged. The default message is fine for most purposes but can be
8112overridden by setting <code class="literal">SUBST_MESSAGE.*</code> to an individual 8116overridden by setting <code class="literal">SUBST_MESSAGE.*</code> to an individual
8113message.</p> 8117message.</p>
8114</div> 8118</div>
8115</div> 8119</div>
8116</div> 8120</div>
8117<div class="sect1"> 8121<div class="sect1">
8118<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8122<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8119<a name="fixes.fetch"></a>21.2. The <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div> 8123<a name="fixes.fetch"></a>21.2. The <span class="emphasis"><em>fetch</em></span> phase</h2></div></div></div>
8120<div class="sect2"> 8124<div class="sect2">
8121<div class="titlepage"><div><div><h3 class="title"> 8125<div class="titlepage"><div><div><h3 class="title">
8122<a name="no-plain-download"></a>21.2.1. Packages whose distfiles aren't available for plain downloading</h3></div></div></div> 8126<a name="no-plain-download"></a>21.2.1. Packages whose distfiles aren't available for plain downloading</h3></div></div></div>
8123<p>If you need to download from a dynamic URL you can set 8127<p>If you need to download from a dynamic URL you can set
8124 <code class="varname">DYNAMIC_MASTER_SITES</code> and a <span class="command"><strong>make 8128 <code class="varname">DYNAMIC_MASTER_SITES</code> and a <span class="command"><strong>make
8125 fetch</strong></span> will call <code class="filename">files/getsite.sh</code> 8129 fetch</strong></span> will call <code class="filename">files/getsite.sh</code>
8126 with the name of each file to download as an argument, expecting 8130 with the name of each file to download as an argument, expecting
8127 it to output the URL of the directory from which to download 8131 it to output the URL of the directory from which to download
8128 it. <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/graphics/ns-cult3d/index.html" target="_top"><code class="filename">graphics/ns-cult3d</code></a> is an 8132 it. <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/graphics/ns-cult3d/index.html" target="_top"><code class="filename">graphics/ns-cult3d</code></a> is an
8129 example of this usage.</p> 8133 example of this usage.</p>
8130<p>If the download can't be automated, because the user must 8134<p>If the download can't be automated, because the user must
8131 submit personal information to apply for a password, or must pay 8135 submit personal information to apply for a password, or must pay
8132 for the source, or whatever, you can set 8136 for the source, or whatever, you can set
8133 <code class="varname">FETCH_MESSAGE</code> to a list of lines that are 8137 <code class="varname">FETCH_MESSAGE</code> to a list of lines that are
8134 displayed to the user before aborting the build. Example:</p> 8138 displayed to the user before aborting the build. Example:</p>
8135<pre class="programlisting"> 8139<pre class="programlisting">
8136FETCH_MESSAGE= "Please download the files" 8140FETCH_MESSAGE= "Please download the files"
8137FETCH_MESSAGE+= " "${DISTFILES:Q} 8141FETCH_MESSAGE+= " "${DISTFILES:Q}
8138FETCH_MESSAGE+= "manually from "${MASTER_SITES:Q}"." 8142FETCH_MESSAGE+= "manually from "${MASTER_SITES:Q}"."
8139</pre> 8143</pre>
8140</div> 8144</div>
8141<div class="sect2"> 8145<div class="sect2">
8142<div class="titlepage"><div><div><h3 class="title"> 8146<div class="titlepage"><div><div><h3 class="title">
8143<a name="modified-distfiles-same-name"></a>21.2.2. How to handle modified distfiles with the 'old' name</h3></div></div></div> 8147<a name="modified-distfiles-same-name"></a>21.2.2. How to handle modified distfiles with the 'old' name</h3></div></div></div>
8144<p>Sometimes authors of a software package make some 8148<p>Sometimes authors of a software package make some
8145 modifications after the software was released, and they put up a 8149 modifications after the software was released, and they put up a
8146 new distfile without changing the package's version number. If a 8150 new distfile without changing the package's version number. If a
8147 package is already in pkgsrc at that time, the checksum will 8151 package is already in pkgsrc at that time, the checksum will
8148 no longer match. The contents of the new distfile should be 8152 no longer match. The contents of the new distfile should be
8149 compared against the old one before changing anything, to make 8153 compared against the old one before changing anything, to make
8150 sure the distfile was really updated on purpose, and that 8154 sure the distfile was really updated on purpose, and that
8151 no trojan horse or so crept in. 8155 no trojan horse or so crept in.
8152 Please mention that the distfiles were compared and what was found 8156 Please mention that the distfiles were compared and what was found
8153 in your commit message.</p> 8157 in your commit message.</p>
8154<p>Then, the correct way to work around this is to set 8158<p>Then, the correct way to work around this is to set
8155 <code class="varname">DIST_SUBDIR</code> to a unique directory name, usually 8159 <code class="varname">DIST_SUBDIR</code> to a unique directory name, usually
8156 based on <code class="varname">PKGNAME_NOREV</code> (but take care with 8160 based on <code class="varname">PKGNAME_NOREV</code> (but take care with
8157 python or ruby packages, where <code class="varname">PKGNAME</code> includes 8161 python or ruby packages, where <code class="varname">PKGNAME</code> includes
8158 a variable prefix). All <code class="varname">DISTFILES</code> and 8162 a variable prefix). All <code class="varname">DISTFILES</code> and
8159 <code class="varname">PATCHFILES</code> for this package will be put in that 8163 <code class="varname">PATCHFILES</code> for this package will be put in that
8160 subdirectory of the local distfiles directory. (See <a class="xref" href="#bumping-pkgrevision" title="21.1.10. How to handle incrementing versions when fixing an existing package">Section 21.1.10, &#8220;How to handle incrementing versions when fixing an existing package&#8221;</a> for more details.) In case this 8164 subdirectory of the local distfiles directory. (See <a class="xref" href="#bumping-pkgrevision" title="21.1.10. How to handle incrementing versions when fixing an existing package">Section 21.1.10, &#8220;How to handle incrementing versions when fixing an existing package&#8221;</a> for more details.) In case this
8161 happens more often, <code class="varname">PKGNAME</code> can be used (thus 8165 happens more often, <code class="varname">PKGNAME</code> can be used (thus
8162 including the <code class="filename">nbX</code> suffix) or a date stamp can 8166 including the <code class="filename">nbX</code> suffix) or a date stamp can
8163 be appended, like 8167 be appended, like
8164 <code class="varname">${PKGNAME_NOREV}-YYYYMMDD</code>.</p> 8168 <code class="varname">${PKGNAME_NOREV}-YYYYMMDD</code>.</p>
8165<p><code class="varname">DIST_SUBDIR</code> is also used when a distfile's 8169<p><code class="varname">DIST_SUBDIR</code> is also used when a distfile's
8166 name does not contain a version and the distfile is apt to change. In 8170 name does not contain a version and the distfile is apt to change. In
8167 cases where the likelihood of this is very small, 8171 cases where the likelihood of this is very small,
8168 <code class="varname">DIST_SUBDIR</code> might not be required. Additionally, 8172 <code class="varname">DIST_SUBDIR</code> might not be required. Additionally,
8169 <code class="varname">DIST_SUBDIR</code> must not be removed unless the 8173 <code class="varname">DIST_SUBDIR</code> must not be removed unless the
8170 distfile name changes, even if a package is being moved or 8174 distfile name changes, even if a package is being moved or
8171 renamed.</p> 8175 renamed.</p>
8172<p>Do not forget regenerating the <code class="filename">distinfo</code> file 8176<p>Do not forget regenerating the <code class="filename">distinfo</code> file
8173 after that, since it contains the <code class="varname">DIST_SUBDIR</code> 8177 after that, since it contains the <code class="varname">DIST_SUBDIR</code>
8174 path in the filenames. 8178 path in the filenames.
8175 Also, increase the PKGREVISION if the installed package is different. 8179 Also, increase the PKGREVISION if the installed package is different.
8176 Furthermore, a mail to the package's authors seems appropriate 8180 Furthermore, a mail to the package's authors seems appropriate
8177 telling them that changing distfiles after releases without 8181 telling them that changing distfiles after releases without
8178 changing the file names is not good practice.</p> 8182 changing the file names is not good practice.</p>
8179</div> 8183</div>
8180<div class="sect2"> 8184<div class="sect2">
8181<div class="titlepage"><div><div><h3 class="title"> 8185<div class="titlepage"><div><div><h3 class="title">
8182<a name="build.fetch.github"></a>21.2.3. Packages hosted on github.com</h3></div></div></div> 8186<a name="build.fetch.github"></a>21.2.3. Packages hosted on github.com</h3></div></div></div>
8183<p>Helper methods exist for packages hosted on github.com which 8187<p>Helper methods exist for packages hosted on github.com which
8184 will often have distfile names that clash with other packages, for 8188 will often have distfile names that clash with other packages, for
8185 example <code class="filename">1.0.tar.gz</code>. Use one of the three recipes 8189 example <code class="filename">1.0.tar.gz</code>. Use one of the three recipes
8186 from below:</p> 8190 from below:</p>
8187<div class="sect3"> 8191<div class="sect3">
8188<div class="titlepage"><div><div><h4 class="title"> 8192<div class="titlepage"><div><div><h4 class="title">
8189<a name="build.fetch.github.tag"></a>21.2.3.1. Fetch based on a tagged release</h4></div></div></div> 8193<a name="build.fetch.github.tag"></a>21.2.3.1. Fetch based on a tagged release</h4></div></div></div>
8190<p>If your distfile URL looks similar to 8194<p>If your distfile URL looks similar to
8191 <code class="literal">https://github.com/username/example/archive/v1.0.zip</code>, 8195 <code class="literal">https://github.com/username/example/archive/v1.0.zip</code>,
8192 then you are packaging a tagged release.</p> 8196 then you are packaging a tagged release.</p>
8193<pre class="programlisting"> 8197<pre class="programlisting">
8194DISTNAME= example-1.0 8198DISTNAME= example-1.0
8195MASTER_SITES= ${MASTER_SITE_GITHUB:=username/} 8199MASTER_SITES= ${MASTER_SITE_GITHUB:=username/}
8196#GITHUB_PROJECT= example # can be omitted if same as DISTNAME 8200#GITHUB_PROJECT= example # can be omitted if same as DISTNAME
8197GITHUB_TAG= v${PKGVERSION_NOREV} 8201GITHUB_TAG= v${PKGVERSION_NOREV}
8198EXTRACT_SUFX= .zip 8202EXTRACT_SUFX= .zip
8199</pre> 8203</pre>
8200</div> 8204</div>
8201<div class="sect3"> 8205<div class="sect3">
8202<div class="titlepage"><div><div><h4 class="title"> 8206<div class="titlepage"><div><div><h4 class="title">
8203<a name="build.fetch.github.commit.prerelease"></a>21.2.3.2. Fetch based on a specific commit before the first release</h4></div></div></div> 8207<a name="build.fetch.github.commit.prerelease"></a>21.2.3.2. Fetch based on a specific commit before the first release</h4></div></div></div>
8204<p>If your distfile looks similar to 8208<p>If your distfile looks similar to
8205 <code class="literal">https://github.com/username/example/archive/988881adc9fc3655077dc2d4d757d480b5ea0e11</code> and is from a commit before the first 8209 <code class="literal">https://github.com/username/example/archive/988881adc9fc3655077dc2d4d757d480b5ea0e11</code> and is from a commit before the first
8206 release, then set the package version to 0.0.0.N, where N is the number 8210 release, then set the package version to 0.0.0.N, where N is the number
8207 of commits to the repository, and set GITHUB_TAG to the commit hash. 8211 of commits to the repository, and set GITHUB_TAG to the commit hash.
8208 This will (almost) ensure that the first tagged release will have a 8212 This will (almost) ensure that the first tagged release will have a
8209 version greater than this one so that package upgrades will function 8213 version greater than this one so that package upgrades will function
8210 properly.</p> 8214 properly.</p>
8211<pre class="programlisting"> 8215<pre class="programlisting">
8212DISTNAME= example-0.0.0.347 8216DISTNAME= example-0.0.0.347
8213MASTER_SITES= ${MASTER_SITE_GITHUB:=username/} 8217MASTER_SITES= ${MASTER_SITE_GITHUB:=username/}
8214#GITHUB_PROJECT= example # can be omitted if same as DISTNAME 8218#GITHUB_PROJECT= example # can be omitted if same as DISTNAME
8215GITHUB_TAG= 988881adc9fc3655077dc2d4d757d480b5ea0e11 8219GITHUB_TAG= 988881adc9fc3655077dc2d4d757d480b5ea0e11
8216</pre> 8220</pre>
8217</div> 8221</div>
8218<div class="sect3"> 8222<div class="sect3">
8219<div class="titlepage"><div><div><h4 class="title"> 8223<div class="titlepage"><div><div><h4 class="title">
8220<a name="build.fetch.github.commit.postrelease"></a>21.2.3.3. Fetch based on a specific commit after a release</h4></div></div></div> 8224<a name="build.fetch.github.commit.postrelease"></a>21.2.3.3. Fetch based on a specific commit after a release</h4></div></div></div>
8221<p>If your distfile looks similar to 8225<p>If your distfile looks similar to
8222 <code class="literal">https://github.com/username/example/archive/988881adc9fc3655077dc2d4d757d480b5ea0e11</code> and is from a commit after a release, 8226 <code class="literal">https://github.com/username/example/archive/988881adc9fc3655077dc2d4d757d480b5ea0e11</code> and is from a commit after a release,
8223 then include the last release version and the commit count since that 8227 then include the last release version and the commit count since that
8224 release in the package version and set GITHUB_TAG to the commit hash. 8228 release in the package version and set GITHUB_TAG to the commit hash.
8225 The latest release and commit count are shown in the output of 8229 The latest release and commit count are shown in the output of
8226 "git describe --tags": 8230 "git describe --tags":
8227 </p> 8231 </p>
8228<pre class="screen"> 8232<pre class="screen">
8229# git clone https://github.com/username/example 8233# git clone https://github.com/username/example
8230# cd example 8234# cd example
8231# git describe --tags 8235# git describe --tags
82321.2.3-5-g988881a 82361.2.3-5-g988881a
8233</pre> 8237</pre>
8234<pre class="programlisting"> 8238<pre class="programlisting">
8235DISTNAME= example-1.2.3.5 8239DISTNAME= example-1.2.3.5
8236MASTER_SITES= ${MASTER_SITE_GITHUB:=username/} 8240MASTER_SITES= ${MASTER_SITE_GITHUB:=username/}
8237#GITHUB_PROJECT= example # can be omitted if same as DISTNAME 8241#GITHUB_PROJECT= example # can be omitted if same as DISTNAME
8238GITHUB_TAG= 988881adc9fc3655077dc2d4d757d480b5ea0e11 8242GITHUB_TAG= 988881adc9fc3655077dc2d4d757d480b5ea0e11
8239</pre> 8243</pre>
8240</div> 8244</div>
8241<div class="sect3"> 8245<div class="sect3">
8242<div class="titlepage"><div><div><h4 class="title"> 8246<div class="titlepage"><div><div><h4 class="title">
8243<a name="build.fetch.github.release"></a>21.2.3.4. Fetch based on release</h4></div></div></div> 8247<a name="build.fetch.github.release"></a>21.2.3.4. Fetch based on release</h4></div></div></div>
8244<p>If your distfile URL looks similar to 8248<p>If your distfile URL looks similar to
8245 <code class="literal">https://github.com/username/example/releases/download/rel-1.6/offensive-1.6.zip</code>, 8249 <code class="literal">https://github.com/username/example/releases/download/rel-1.6/offensive-1.6.zip</code>,
8246 then you are packaging a release.</p> 8250 then you are packaging a release.</p>
8247<pre class="programlisting"> 8251<pre class="programlisting">
8248DISTNAME= offensive-1.6 8252DISTNAME= offensive-1.6
8249PKGNAME= ${DISTNAME:S/offensive/proper/} 8253PKGNAME= ${DISTNAME:S/offensive/proper/}
8250MASTER_SITES= ${MASTER_SITE_GITHUB:=username/} 8254MASTER_SITES= ${MASTER_SITE_GITHUB:=username/}
8251GITHUB_PROJECT= example 8255GITHUB_PROJECT= example
8252GITHUB_RELEASE= rel-${PKGVERSION_NOREV} # usually just set this to ${DISTNAME} 8256GITHUB_RELEASE= rel-${PKGVERSION_NOREV} # usually just set this to ${DISTNAME}
8253EXTRACT_SUFX= .zip 8257EXTRACT_SUFX= .zip
8254</pre> 8258</pre>
8255</div> 8259</div>
8256</div> 8260</div>
8257</div> 8261</div>
8258<div class="sect1"> 8262<div class="sect1">
8259<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8263<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8260<a name="fixes.configure"></a>21.3. The <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div> 8264<a name="fixes.configure"></a>21.3. The <span class="emphasis"><em>configure</em></span> phase</h2></div></div></div>
8261<div class="sect2"> 8265<div class="sect2">
8262<div class="titlepage"><div><div><h3 class="title"> 8266<div class="titlepage"><div><div><h3 class="title">
8263<a name="fixes.libtool"></a>21.3.1. Shared libraries - libtool</h3></div></div></div> 8267<a name="fixes.libtool"></a>21.3.1. Shared libraries - libtool</h3></div></div></div>
8264<p>pkgsrc supports many different machines, with different 8268<p>pkgsrc supports many different machines, with different
8265 object formats like a.out and ELF, and varying abilities to do 8269 object formats like a.out and ELF, and varying abilities to do
8266 shared library and dynamic loading at all. To accompany this, 8270 shared library and dynamic loading at all. To accompany this,
8267 varying commands and options have to be passed to the 8271 varying commands and options have to be passed to the
8268 compiler, linker, etc. to get the Right Thing, which can be 8272 compiler, linker, etc. to get the Right Thing, which can be
8269 pretty annoying especially if you don't have all the machines 8273 pretty annoying especially if you don't have all the machines
8270 at your hand to test things. The 8274 at your hand to test things. The
8271 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/libtool/index.html" target="_top"><code class="filename">devel/libtool</code></a> pkg 8275 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/libtool/index.html" target="_top"><code class="filename">devel/libtool</code></a> pkg
8272 can help here, as it just <span class="quote">&#8220;<span class="quote">knows</span>&#8221;</span> how to build 8276 can help here, as it just <span class="quote">&#8220;<span class="quote">knows</span>&#8221;</span> how to build
8273 both static and dynamic libraries from a set of source files, 8277 both static and dynamic libraries from a set of source files,
8274 thus being platform-independent.</p> 8278 thus being platform-independent.</p>
8275<p>Here's how to use libtool in a package in seven simple 8279<p>Here's how to use libtool in a package in seven simple
8276 steps:</p> 8280 steps:</p>
8277<div class="orderedlist"><ol class="orderedlist" type="1"> 8281<div class="orderedlist"><ol class="orderedlist" type="1">
8278<li class="listitem"><p>Add <code class="varname">USE_LIBTOOL=yes</code> to the package 8282<li class="listitem"><p>Add <code class="varname">USE_LIBTOOL=yes</code> to the package
8279 Makefile.</p></li> 8283 Makefile.</p></li>
8280<li class="listitem"><p>For library objects, use <span class="quote">&#8220;<span class="quote">${LIBTOOL} --mode=compile 8284<li class="listitem"><p>For library objects, use <span class="quote">&#8220;<span class="quote">${LIBTOOL} --mode=compile
8281 ${CC}</span>&#8221;</span> in place of <span class="quote">&#8220;<span class="quote">${CC}</span>&#8221;</span>. You could even 8285 ${CC}</span>&#8221;</span> in place of <span class="quote">&#8220;<span class="quote">${CC}</span>&#8221;</span>. You could even
8282 add it to the definition of <code class="varname">CC</code>, if only 8286 add it to the definition of <code class="varname">CC</code>, if only
8283 libraries are being built in a given Makefile. This one command 8287 libraries are being built in a given Makefile. This one command
8284 will build both PIC and non-PIC library objects, so you need not 8288 will build both PIC and non-PIC library objects, so you need not
8285 have separate shared and non-shared library rules.</p></li> 8289 have separate shared and non-shared library rules.</p></li>
8286<li class="listitem"> 8290<li class="listitem">
8287<p>For the linking of the library, remove any 8291<p>For the linking of the library, remove any
8288 <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 8292 <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
8289 -Bshareable</span>&#8221;</span> commands, and instead use:</p> 8293 -Bshareable</span>&#8221;</span> commands, and instead use:</p>
8290<pre class="programlisting"> 8294<pre class="programlisting">
8291${LIBTOOL} --mode=link \ 8295${LIBTOOL} --mode=link \
8292 ${CC} -o ${.TARGET:.a=.la} \ 8296 ${CC} -o ${.TARGET:.a=.la} \
8293 ${OBJS:.o=.lo} \ 8297 ${OBJS:.o=.lo} \
8294 -rpath ${PREFIX}/lib \ 8298 -rpath ${PREFIX}/lib \
8295 -version-info major:minor 8299 -version-info major:minor
8296</pre> 8300</pre>
8297<p>Note that the library is changed to have a 8301<p>Note that the library is changed to have a
8298 <code class="filename">.la</code> extension, and the objects are 8302 <code class="filename">.la</code> extension, and the objects are
8299 changed to have a <code class="filename">.lo</code> 8303 changed to have a <code class="filename">.lo</code>
8300 extension. Change <code class="varname">OBJS</code> as 8304 extension. Change <code class="varname">OBJS</code> as
8301 necessary. This automatically creates all of the 8305 necessary. This automatically creates all of the
8302 <code class="filename">.a</code>, 8306 <code class="filename">.a</code>,
8303 <code class="filename">.so.major.minor</code>, and ELF symlinks (if 8307 <code class="filename">.so.major.minor</code>, and ELF symlinks (if
8304 necessary) in the build directory. Be sure to include 8308 necessary) in the build directory. Be sure to include
8305 <span class="quote">&#8220;<span class="quote">-version-info</span>&#8221;</span>, especially when major and 8309 <span class="quote">&#8220;<span class="quote">-version-info</span>&#8221;</span>, especially when major and
8306 minor are zero, as libtool will otherwise strip off the 8310 minor are zero, as libtool will otherwise strip off the
8307 shared library version.</p> 8311 shared library version.</p>
8308<p>From the libtool manual:</p> 8312<p>From the libtool manual:</p>
8309<pre class="programlisting"> 8313<pre class="programlisting">
8310So, libtool library versions are described by three integers: 8314So, libtool library versions are described by three integers:
8311 8315
8312CURRENT 8316CURRENT
8313The most recent interface number that this library implements. 8317The most recent interface number that this library implements.
8314 8318
8315REVISION 8319REVISION
8316The implementation number of the CURRENT interface. 8320The implementation number of the CURRENT interface.
8317 8321
8318AGE 8322AGE
8319The difference between the newest and oldest interfaces that 8323The difference between the newest and oldest interfaces that
8320this library implements. In other words, the library implements 8324this library implements. In other words, the library implements
8321all the interface numbers in the range from number `CURRENT - 8325all the interface numbers in the range from number `CURRENT -
8322AGE' to `CURRENT'. 8326AGE' to `CURRENT'.
8323 8327
8324If two libraries have identical CURRENT and AGE numbers, then the 8328If two libraries have identical CURRENT and AGE numbers, then the
8325dynamic linker chooses the library with the greater REVISION number. 8329dynamic linker chooses the library with the greater REVISION number.
8326</pre> 8330</pre>
8327<p>The <span class="quote">&#8220;<span class="quote">-release</span>&#8221;</span> option will produce 8331<p>The <span class="quote">&#8220;<span class="quote">-release</span>&#8221;</span> option will produce
8328 different results for a.out and ELF (excluding symlinks) 8332 different results for a.out and ELF (excluding symlinks)
8329 in only one case. An ELF library of the form 8333 in only one case. An ELF library of the form
8330 <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> 8334 <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>
8331 will have a symlink of 8335 will have a symlink of
8332 <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> 8336 <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>
8333 on an a.out platform. This is handled 8337 on an a.out platform. This is handled
8334 automatically.</p> 8338 automatically.</p>
8335<p>The <span class="quote">&#8220;<span class="quote">-rpath argument</span>&#8221;</span> is the install 8339<p>The <span class="quote">&#8220;<span class="quote">-rpath argument</span>&#8221;</span> is the install
8336 directory of the library being built.</p> 8340 directory of the library being built.</p>
8337<p>In the <code class="filename">PLIST</code>, include only the 8341<p>In the <code class="filename">PLIST</code>, include only the
8338 <code class="filename">.la</code> file, the other files will be 8342 <code class="filename">.la</code> file, the other files will be
8339 added automatically.</p> 8343 added automatically.</p>
8340</li> 8344</li>
8341<li class="listitem"> 8345<li class="listitem">
8342<p>When linking shared object (<code class="filename">.so</code>) 8346<p>When linking shared object (<code class="filename">.so</code>)
8343 files, i.e. files that are loaded via <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/dlopen.3"><span class="citerefentry"><span class="refentrytitle">dlopen</span>(3)</span></a>, NOT 8347 files, i.e. files that are loaded via <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/dlopen.3"><span class="citerefentry"><span class="refentrytitle">dlopen</span>(3)</span></a>, NOT
8344 shared libraries, use <span class="quote">&#8220;<span class="quote">-module 8348 shared libraries, use <span class="quote">&#8220;<span class="quote">-module
8345 -avoid-version</span>&#8221;</span> to prevent them getting version 8349 -avoid-version</span>&#8221;</span> to prevent them getting version
8346 tacked on.</p> 8350 tacked on.</p>
8347<p>The <code class="filename">PLIST</code> file gets the 8351<p>The <code class="filename">PLIST</code> file gets the
8348 <code class="filename">foo.so</code> entry.</p> 8352 <code class="filename">foo.so</code> entry.</p>
8349</li> 8353</li>
8350<li class="listitem"> 8354<li class="listitem">
8351<p>When linking programs that depend on these libraries 8355<p>When linking programs that depend on these libraries
8352 <span class="emphasis"><em>before</em></span> they are installed, preface 8356 <span class="emphasis"><em>before</em></span> they are installed, preface
8353 the <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/cc.1"><span class="citerefentry"><span class="refentrytitle">cc</span>(1)</span></a> or <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/ld.1"><span class="citerefentry"><span class="refentrytitle">ld</span>(1)</span></a> line with <span class="quote">&#8220;<span class="quote">${LIBTOOL} 8357 the <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/cc.1"><span class="citerefentry"><span class="refentrytitle">cc</span>(1)</span></a> or <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/ld.1"><span class="citerefentry"><span class="refentrytitle">ld</span>(1)</span></a> line with <span class="quote">&#8220;<span class="quote">${LIBTOOL}
8354 --mode=link</span>&#8221;</span>, and it will find the correct 8358 --mode=link</span>&#8221;</span>, and it will find the correct
8355 libraries (static or shared), but please be aware that 8359 libraries (static or shared), but please be aware that
8356 libtool will not allow you to specify a relative path in 8360 libtool will not allow you to specify a relative path in
8357 -L (such as <span class="quote">&#8220;<span class="quote">-L../somelib</span>&#8221;</span>), because it 8361 -L (such as <span class="quote">&#8220;<span class="quote">-L../somelib</span>&#8221;</span>), because it
8358 expects you to change that argument to be the 8362 expects you to change that argument to be the
8359 <code class="filename">.la</code> file. e.g.</p> 8363 <code class="filename">.la</code> file. e.g.</p>
8360<pre class="programlisting"> 8364<pre class="programlisting">
8361${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib 8365${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib
8362</pre> 8366</pre>
8363<p>should be changed to:</p> 8367<p>should be changed to:</p>
8364<pre class="programlisting"> 8368<pre class="programlisting">
8365${LIBTOOL} --mode=link ${CC} -o <em class="replaceable"><code>someprog</code></em> <em class="replaceable"><code>../somelib/somelib.la</code></em> 8369${LIBTOOL} --mode=link ${CC} -o <em class="replaceable"><code>someprog</code></em> <em class="replaceable"><code>../somelib/somelib.la</code></em>
8366</pre> 8370</pre>
8367<p>and it will do the right thing with the libraries.</p> 8371<p>and it will do the right thing with the libraries.</p>
8368</li> 8372</li>
8369<li class="listitem"> 8373<li class="listitem">
8370<p>When installing libraries, preface the <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/install.1"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a> 8374<p>When installing libraries, preface the <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/install.1"><span class="citerefentry"><span class="refentrytitle">install</span>(1)</span></a>
8371 or <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/cp.1"><span class="citerefentry"><span class="refentrytitle">cp</span>(1)</span></a> command with <span class="quote">&#8220;<span class="quote">${LIBTOOL} 8375 or <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/cp.1"><span class="citerefentry"><span class="refentrytitle">cp</span>(1)</span></a> command with <span class="quote">&#8220;<span class="quote">${LIBTOOL}
8372 --mode=install</span>&#8221;</span>, and change the library name to 8376 --mode=install</span>&#8221;</span>, and change the library name to
8373 <code class="filename">.la</code>. e.g.</p> 8377 <code class="filename">.la</code>. e.g.</p>
8374<pre class="programlisting"> 8378<pre class="programlisting">
8375${LIBTOOL} --mode=install ${BSD_INSTALL_LIB} ${SOMELIB:.a=.la} ${PREFIX}/lib 8379${LIBTOOL} --mode=install ${BSD_INSTALL_LIB} ${SOMELIB:.a=.la} ${PREFIX}/lib
8376</pre> 8380</pre>
8377<p>This will install the static <code class="filename">.a</code>, 8381<p>This will install the static <code class="filename">.a</code>,
8378 shared library, any needed symlinks, and run 8382 shared library, any needed symlinks, and run
8379 <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/ldconfig.8"><span class="citerefentry"><span class="refentrytitle">ldconfig</span>(8)</span></a>.</p> 8383 <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/ldconfig.8"><span class="citerefentry"><span class="refentrytitle">ldconfig</span>(8)</span></a>.</p>
8380</li> 8384</li>
8381<li class="listitem"><p>In your <code class="filename">PLIST</code>, include only 8385<li class="listitem"><p>In your <code class="filename">PLIST</code>, include only
8382 the <code class="filename">.la</code> 8386 the <code class="filename">.la</code>
8383 file (this is a change from previous behaviour).</p></li> 8387 file (this is a change from previous behaviour).</p></li>
8384</ol></div> 8388</ol></div>
8385</div> 8389</div>
8386<div class="sect2"> 8390<div class="sect2">
8387<div class="titlepage"><div><div><h3 class="title"> 8391<div class="titlepage"><div><div><h3 class="title">
8388<a name="using-libtool"></a>21.3.2. Using libtool on GNU packages that already support libtool</h3></div></div></div> 8392<a name="using-libtool"></a>21.3.2. Using libtool on GNU packages that already support libtool</h3></div></div></div>
8389<p>Add <code class="varname">USE_LIBTOOL=yes</code> to the 8393<p>Add <code class="varname">USE_LIBTOOL=yes</code> to the
8390 package Makefile. This will override the package's own libtool 8394 package Makefile. This will override the package's own libtool
8391 in most cases. For older libtool using packages, libtool is 8395 in most cases. For older libtool using packages, libtool is
8392 made by ltconfig script during the do-configure step; you can 8396 made by ltconfig script during the do-configure step; you can
8393 check the libtool script location by doing <span class="command"><strong>make 8397 check the libtool script location by doing <span class="command"><strong>make
8394 configure; find work*/ -name libtool</strong></span>.</p> 8398 configure; find work*/ -name libtool</strong></span>.</p>
8395<p><code class="varname">LIBTOOL_OVERRIDE</code> specifies which libtool 8399<p><code class="varname">LIBTOOL_OVERRIDE</code> specifies which libtool
8396 scripts, relative to <code class="varname">WRKSRC</code>, to override. By 8400 scripts, relative to <code class="varname">WRKSRC</code>, to override. By
8397 default, it is set to <span class="quote">&#8220;<span class="quote">libtool */libtool 8401 default, it is set to <span class="quote">&#8220;<span class="quote">libtool */libtool
8398 */*/libtool</span>&#8221;</span>. If this does not match the location of the 8402 */*/libtool</span>&#8221;</span>. If this does not match the location of the
8399 package's libtool script(s), set it as appropriate.</p> 8403 package's libtool script(s), set it as appropriate.</p>
8400<p>If you do not need <code class="filename">*.a</code> static 8404<p>If you do not need <code class="filename">*.a</code> static
8401 libraries built and installed, then use 8405 libraries built and installed, then use
8402 <code class="varname">SHLIBTOOL_OVERRIDE</code> instead.</p> 8406 <code class="varname">SHLIBTOOL_OVERRIDE</code> instead.</p>
8403<p>If your package makes use of the platform-independent library 8407<p>If your package makes use of the platform-independent library
8404 for loading dynamic shared objects, that comes with libtool 8408 for loading dynamic shared objects, that comes with libtool
8405 (libltdl), you should include devel/libltdl/buildlink3.mk.</p> 8409 (libltdl), you should include devel/libltdl/buildlink3.mk.</p>
8406<p>Some packages use libtool incorrectly so that the package 8410<p>Some packages use libtool incorrectly so that the package
8407 may not work or build in some circumstances. Some of the more 8411 may not work or build in some circumstances. Some of the more
8408 common errors are:</p> 8412 common errors are:</p>
8409<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8413<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8410<li class="listitem"> 8414<li class="listitem">
8411<p>The inclusion of a shared object (-module) as a dependent library in an 8415<p>The inclusion of a shared object (-module) as a dependent library in an
8412 executable or library. This in itself isn't a problem if one of two things 8416 executable or library. This in itself isn't a problem if one of two things
8413 has been done:</p> 8417 has been done:</p>
8414<div class="orderedlist"><ol class="orderedlist" type="1"> 8418<div class="orderedlist"><ol class="orderedlist" type="1">
8415<li class="listitem"><p>The shared object is named correctly, i.e. 8419<li class="listitem"><p>The shared object is named correctly, i.e.
8416 <code class="filename">libfoo.la</code>, not 8420 <code class="filename">libfoo.la</code>, not
8417 <code class="filename">foo.la</code></p></li> 8421 <code class="filename">foo.la</code></p></li>
8418<li class="listitem"><p>The -dlopen option is used when linking an executable.</p></li> 8422<li class="listitem"><p>The -dlopen option is used when linking an executable.</p></li>
8419</ol></div> 8423</ol></div>
8420</li> 8424</li>
8421<li class="listitem"><p>The use of libltdl without the correct calls to initialisation routines. 8425<li class="listitem"><p>The use of libltdl without the correct calls to initialisation routines.
8422 The function lt_dlinit() should be called and the macro 8426 The function lt_dlinit() should be called and the macro
8423 <code class="varname">LTDL_SET_PRELOADED_SYMBOLS</code> included in 8427 <code class="varname">LTDL_SET_PRELOADED_SYMBOLS</code> included in
8424 executables.</p></li> 8428 executables.</p></li>
8425</ul></div> 8429</ul></div>
8426</div> 8430</div>
8427<div class="sect2"> 8431<div class="sect2">
8428<div class="titlepage"><div><div><h3 class="title"> 8432<div class="titlepage"><div><div><h3 class="title">
8429<a name="autoconf-automake"></a>21.3.3. GNU Autoconf/Automake</h3></div></div></div> 8433<a name="autoconf-automake"></a>21.3.3. GNU Autoconf/Automake</h3></div></div></div>
8430<p>If a package needs GNU autoconf or automake to be executed 8434<p>If a package needs GNU autoconf or automake to be executed
8431 to regenerate the 8435 to regenerate the
8432 <code class="filename">configure</code> 8436 <code class="filename">configure</code>
8433 script and <code class="filename">Makefile.in</code> makefile 8437 script and <code class="filename">Makefile.in</code> makefile
8434 templates from <code class="filename">configure.ac</code> and 8438 templates from <code class="filename">configure.ac</code> and
8435 <code class="filename">Makefile.am</code>, 8439 <code class="filename">Makefile.am</code>,
8436 then they should be executed in a pre-configure target:</p> 8440 then they should be executed in a pre-configure target:</p>
8437<pre class="programlisting"> 8441<pre class="programlisting">
8438USE_TOOLS+= autoconf automake autoreconf 8442USE_TOOLS+= autoconf automake autoreconf
8439GNU_CONFIGURE= yes 8443GNU_CONFIGURE= yes
8440... 8444...
8441 8445
8442pre-configure: 8446pre-configure:
8443 set -e; cd ${WRKSRC} &amp;&amp; autoreconf -fi 8447 set -e; cd ${WRKSRC} &amp;&amp; autoreconf -fi
8444... 8448...
8445</pre> 8449</pre>
8446<p>Packages which use GNU Automake will sometimes 8450<p>Packages which use GNU Automake will sometimes
8447 require GNU Make (<code class="literal">gmake</code> in 8451 require GNU Make (<code class="literal">gmake</code> in
8448 <code class="varname">USE_TOOLS</code>), 8452 <code class="varname">USE_TOOLS</code>),
8449 but not always. Note that autoreconf 8453 but not always. Note that autoreconf
8450 only needs to be executed if <code class="filename">configure.ac</code> 8454 only needs to be executed if <code class="filename">configure.ac</code>
8451 or Makefiles are modified, or <code class="filename">configure</code> 8455 or Makefiles are modified, or <code class="filename">configure</code>
8452 is not present.</p> 8456 is not present.</p>
8453<p>There are times when the configure process makes 8457<p>There are times when the configure process makes
8454 additional changes to the generated files, which then causes 8458 additional changes to the generated files, which then causes
8455 the build process to try to re-execute the automake sequence. 8459 the build process to try to re-execute the automake sequence.
8456 This is prevented by touching various files in the configure 8460 This is prevented by touching various files in the configure
8457 stage. If this causes problems with your package you can set 8461 stage. If this causes problems with your package you can set
8458 <code class="varname">AUTOMAKE_OVERRIDE=NO</code> in the package 8462 <code class="varname">AUTOMAKE_OVERRIDE=NO</code> in the package
8459 Makefile.</p> 8463 Makefile.</p>
8460</div> 8464</div>
8461<div class="sect2"> 8465<div class="sect2">
8462<div class="titlepage"><div><div><h3 class="title"> 8466<div class="titlepage"><div><div><h3 class="title">
8463<a name="meson"></a>21.3.4. Meson / ninja</h3></div></div></div> 8467<a name="meson"></a>21.3.4. Meson / ninja</h3></div></div></div>
8464<p>Packages using Meson to configure need to include: 8468<p>Packages using Meson to configure need to include:
8465 8469
8466</p> 8470</p>
8467<pre class="programlisting"> 8471<pre class="programlisting">
8468.include "../../devel/meson/build.mk" 8472.include "../../devel/meson/build.mk"
8469</pre> 8473</pre>
8470<p>In nearly all cases (any program with dependencies), 8474<p>In nearly all cases (any program with dependencies),
8471 pkg-config needs to be added to 8475 pkg-config needs to be added to
8472 <code class="varname">USE_TOOLS</code>. If the package installs 8476 <code class="varname">USE_TOOLS</code>. If the package installs
8473 translation files for non-English languages, also 8477 translation files for non-English languages, also
8474 add msgfmt and xgettext: 8478 add msgfmt and xgettext:
8475 8479
8476</p> 8480</p>
8477<pre class="programlisting"> 8481<pre class="programlisting">
8478USE_TOOLS+= pkg-config msgfmt xgettext 8482USE_TOOLS+= pkg-config msgfmt xgettext
8479</pre> 8483</pre>
8480<p>If any options need to be passed to Meson, use 8484<p>If any options need to be passed to Meson, use
8481 <code class="varname">MESON_ARGS</code> instead of 8485 <code class="varname">MESON_ARGS</code> instead of
8482 <code class="varname">CONFIGURE_ARGS</code>: 8486 <code class="varname">CONFIGURE_ARGS</code>:
8483 8487
8484</p> 8488</p>
8485<pre class="programlisting"> 8489<pre class="programlisting">
8486MESON_ARGS+= -Dx11=false 8490MESON_ARGS+= -Dx11=false
8487</pre> 8491</pre>
8488</div> 8492</div>
8489</div> 8493</div>
8490<div class="sect1"> 8494<div class="sect1">
8491<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8495<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8492<a name="programming-languages"></a>21.4. Programming languages</h2></div></div></div> 8496<a name="programming-languages"></a>21.4. Programming languages</h2></div></div></div>
8493<div class="sect2"> 8497<div class="sect2">
8494<div class="titlepage"><div><div><h3 class="title"> 8498<div class="titlepage"><div><div><h3 class="title">
8495<a name="basic-programming-languages"></a>21.4.1. C, C++, and Fortran</h3></div></div></div> 8499<a name="basic-programming-languages"></a>21.4.1. C, C++, and Fortran</h3></div></div></div>
8496<p>Compilers for the C and C++ languages comes with 8500<p>Compilers for the C and C++ languages comes with
8497 the NetBSD base system. By default, pkgsrc assumes that a package 8501 the NetBSD base system. By default, pkgsrc assumes that a package
8498 is written in C and will hide all other compilers (via the wrapper 8502 is written in C and will hide all other compilers (via the wrapper
8499 framework, see <a class="xref" href="#buildlink" title="Chapter 18. Buildlink methodology">Chapter 18, <i>Buildlink methodology</i></a>).</p> 8503 framework, see <a class="xref" href="#buildlink" title="Chapter 18. Buildlink methodology">Chapter 18, <i>Buildlink methodology</i></a>).</p>
8500<p>To declare which language's compiler a package needs, set 8504<p>To declare which language's compiler a package needs, set
8501 the <code class="varname">USE_LANGUAGES</code> variable. Allowed values 8505 the <code class="varname">USE_LANGUAGES</code> variable. Allowed values
8502 currently are: 8506 currently are:
8503 </p> 8507 </p>
8504<pre class="programlisting"> 8508<pre class="programlisting">
8505 c99, c++, c++03, gnu++03, c++0x, gnu++0x, c++11, gnu++11, 8509 c99, c++, c++03, gnu++03, c++0x, gnu++0x, c++11, gnu++11,
8506 c++14, gnu++14, c++17, gnu++17, c++20, gnu++20, fortran, 8510 c++14, gnu++14, c++17, gnu++17, c++20, gnu++20, fortran,
8507 fortran77, java, objc, obj-c++, and ada. 8511 fortran77, java, objc, obj-c++, and ada.
8508 </pre> 8512 </pre>
8509<p> 8513<p>
8510 (and any combination). The default is 8514 (and any combination). The default is
8511 <span class="quote">&#8220;<span class="quote">c</span>&#8221;</span>. Packages using GNU configure scripts, even if 8515 <span class="quote">&#8220;<span class="quote">c</span>&#8221;</span>. Packages using GNU configure scripts, even if
8512 written in C++, usually need a C compiler for the configure 8516 written in C++, usually need a C compiler for the configure
8513 phase.</p> 8517 phase.</p>
8514<p>To express a general requirement on a specific C or C++ 8518<p>To express a general requirement on a specific C or C++
8515 version, normally only <code class="varname">GCC_REQD</code> needs to be set. 8519 version, normally only <code class="varname">GCC_REQD</code> needs to be set.
8516 For example, GCC 7 includes support for C++17, so if the package uses 8520 For example, GCC 7 includes support for C++17, so if the package uses
8517 C++17 it should specify: 8521 C++17 it should specify:
8518 8522
8519 </p> 8523 </p>
8520<pre class="programlisting"> 8524<pre class="programlisting">
8521 GCC_REQD+= 7 8525 GCC_REQD+= 7
8522 </pre> 8526 </pre>
8523<p>Language variants like <code class="literal">c++11</code> for 8527<p>Language variants like <code class="literal">c++11</code> for
8524 <code class="varname">USE_LANGUAGES</code> should only be specified 8528 <code class="varname">USE_LANGUAGES</code> should only be specified
8525 if the package does not explicitly set <code class="literal">-std=...</code> 8529 if the package does not explicitly set <code class="literal">-std=...</code>
8526 when compiling (i.e. the package assumes the compiler defaults to 8530 when compiling (i.e. the package assumes the compiler defaults to
8527 C++11 or some other standard). This is usually a bug in the 8531 C++11 or some other standard). This is usually a bug in the
8528 upstream build system.</p> 8532 upstream build system.</p>
8529<p>GCC version 5 includes support for C++14, while GCC 4.7 includes 8533<p>GCC version 5 includes support for C++14, while GCC 4.7 includes
8530 more-or-less complete support for C++11. For more information, consult 8534 more-or-less complete support for C++11. For more information, consult
8531 <a class="ulink" href="https://gcc.gnu.org/projects/cxx-status.html" target="_top">GCC's own documentation on programming language support.</a></p> 8535 <a class="ulink" href="https://gcc.gnu.org/projects/cxx-status.html" target="_top">GCC's own documentation on programming language support.</a></p>
8532</div> 8536</div>
8533<div class="sect2"> 8537<div class="sect2">
8534<div class="titlepage"><div><div><h3 class="title"> 8538<div class="titlepage"><div><div><h3 class="title">
8535<a name="java-programming-language"></a>21.4.2. Java</h3></div></div></div> 8539<a name="java-programming-language"></a>21.4.2. Java</h3></div></div></div>
8536<p>If a program is written in Java, use the Java framework in 8540<p>If a program is written in Java, use the Java framework in
8537 pkgsrc. The package must include 8541 pkgsrc. The package must include
8538 <code class="filename">../../mk/java-vm.mk</code>. This Makefile fragment 8542 <code class="filename">../../mk/java-vm.mk</code>. This Makefile fragment
8539 provides the following variables:</p> 8543 provides the following variables:</p>
8540<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 8544<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
8541<li class="listitem"><p><code class="varname">USE_JAVA</code> defines if a build 8545<li class="listitem"><p><code class="varname">USE_JAVA</code> defines if a build
8542 dependency on the JDK is added. If 8546 dependency on the JDK is added. If
8543 <code class="varname">USE_JAVA</code> is set to <span class="quote">&#8220;<span class="quote">run</span>&#8221;</span>, then 8547 <code class="varname">USE_JAVA</code> is set to <span class="quote">&#8220;<span class="quote">run</span>&#8221;</span>, then
8544 there is only a runtime dependency on the JDK. The default is 8548 there is only a runtime dependency on the JDK. The default is
8545 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, which also adds a build dependency on the 8549 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, which also adds a build dependency on the
8546 JDK.</p></li> 8550 JDK.</p></li>
8547<li class="listitem"><p>Set <code class="varname">USE_JAVA2</code> to declare that 8551<li class="listitem"><p>Set <code class="varname">USE_JAVA2</code> to declare that
8548 a package needs a Java2 implementation. The supported values 8552 a package needs a Java2 implementation. The supported values
8549 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 8553 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
8550 <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 8554 <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
8551 implementation, <span class="quote">&#8220;<span class="quote">1.4</span>&#8221;</span> insists on versions 1.4 or 8555 implementation, <span class="quote">&#8220;<span class="quote">1.4</span>&#8221;</span> insists on versions 1.4 or
8552 above, and <span class="quote">&#8220;<span class="quote">1.5</span>&#8221;</span> only accepts versions 1.5 or 8556 above, and <span class="quote">&#8220;<span class="quote">1.5</span>&#8221;</span> only accepts versions 1.5 or
8553 above. This variable is not set by default.</p></li> 8557 above. This variable is not set by default.</p></li>
8554<li class="listitem"><p><code class="varname">PKG_JAVA_HOME</code> is 8558<li class="listitem"><p><code class="varname">PKG_JAVA_HOME</code> is
8555 automatically set to the runtime location of the used Java 8559 automatically set to the runtime location of the used Java
8556 implementation dependency. It may be used to set 8560 implementation dependency. It may be used to set
8557 <code class="varname">JAVA_HOME</code> to a good value if the program 8561 <code class="varname">JAVA_HOME</code> to a good value if the program
8558 needs this variable to be defined. 8562 needs this variable to be defined.
8559 </p></li> 8563 </p></li>
8560</ul></div> 8564</ul></div>
8561</div> 8565</div>
8562<div class="sect2"> 8566<div class="sect2">
8563<div class="titlepage"><div><div><h3 class="title"> 8567<div class="titlepage"><div><div><h3 class="title">
8564<a name="go-programming-language"></a>21.4.3. Go</h3></div></div></div> 8568<a name="go-programming-language"></a>21.4.3. Go</h3></div></div></div>
8565<p>If a program is written in Go and has any dependencies on 8569<p>If a program is written in Go and has any dependencies on
8566 other Go modules, have the package include 8570 other Go modules, have the package include
8567 <code class="filename">../../lang/go/go-module.mk</code>.</p> 8571 <code class="filename">../../lang/go/go-module.mk</code>.</p>
8568<div class="orderedlist"><ol class="orderedlist" type="1"> 8572<div class="orderedlist"><ol class="orderedlist" type="1">
8569<li class="listitem"><p>Generate a list of those dependencies with 8573<li class="listitem"><p>Generate a list of those dependencies with
8570 <span class="command"><strong>make clean &amp;&amp; make patch &amp;&amp; make show-go-modules &gt; 8574 <span class="command"><strong>make clean &amp;&amp; make patch &amp;&amp; make show-go-modules &gt;
8571 go-modules.mk</strong></span>.</p></li> 8575 go-modules.mk</strong></span>.</p></li>
8572<li class="listitem"><p>Prepend 8576<li class="listitem"><p>Prepend
8573 <code class="literal">.include "go-modules.mk"</code> to any other 8577 <code class="literal">.include "go-modules.mk"</code> to any other
8574 <code class="literal">.include</code>s.</p></li> 8578 <code class="literal">.include</code>s.</p></li>
8575<li class="listitem"><p>Incorporate these modules in 8579<li class="listitem"><p>Incorporate these modules in
8576 <code class="filename">distinfo</code> with <span class="command"><strong>make 8580 <code class="filename">distinfo</code> with <span class="command"><strong>make
8577 makesum</strong></span>.</p></li> 8581 makesum</strong></span>.</p></li>
8578</ol></div> 8582</ol></div>
8579</div> 8583</div>
8580<div class="sect2"> 8584<div class="sect2">
8581<div class="titlepage"><div><div><h3 class="title"> 8585<div class="titlepage"><div><div><h3 class="title">
8582<a name="rust-programming-language"></a>21.4.4. Rust</h3></div></div></div> 8586<a name="rust-programming-language"></a>21.4.4. Rust</h3></div></div></div>
8583<p>If a program is written in Rust and uses Cargo to build, 8587<p>If a program is written in Rust and uses Cargo to build,
8584 have the package include 8588 have the package include
8585 <code class="filename">../../lang/rust/cargo.mk</code>.</p> 8589 <code class="filename">../../lang/rust/cargo.mk</code>.</p>
8586<div class="orderedlist"><ol class="orderedlist" type="1"> 8590<div class="orderedlist"><ol class="orderedlist" type="1">
8587<li class="listitem"><p>Generate a list of those dependencies with 8591<li class="listitem"><p>Generate a list of those dependencies with
8588 <span class="command"><strong>make CARGO_ARGS="build --release" build &amp;&amp; 8592 <span class="command"><strong>make CARGO_ARGS="build --release" build &amp;&amp;
8589 make print-cargo-depends &gt; cargo-depends.mk</strong></span>.</p></li> 8593 make print-cargo-depends &gt; cargo-depends.mk</strong></span>.</p></li>
8590<li class="listitem"><p>Prepend 8594<li class="listitem"><p>Prepend
8591 <code class="literal">.include "cargo-depends.mk"</code> to any other 8595 <code class="literal">.include "cargo-depends.mk"</code> to any other
8592 <code class="literal">.include</code>s.</p></li> 8596 <code class="literal">.include</code>s.</p></li>
8593<li class="listitem"><p>Incorporate these modules in 8597<li class="listitem"><p>Incorporate these modules in
8594 <code class="filename">distinfo</code> with <span class="command"><strong>make 8598 <code class="filename">distinfo</code> with <span class="command"><strong>make
8595 makesum</strong></span>.</p></li> 8599 makesum</strong></span>.</p></li>
8596</ol></div> 8600</ol></div>
8597</div> 8601</div>
8598<div class="sect2"> 8602<div class="sect2">
8599<div class="titlepage"><div><div><h3 class="title"> 8603<div class="titlepage"><div><div><h3 class="title">
8600<a name="perl-scripts"></a>21.4.5. Packages containing Perl scripts</h3></div></div></div> 8604<a name="perl-scripts"></a>21.4.5. Packages containing Perl scripts</h3></div></div></div>
8601<p>If your package contains interpreted Perl scripts, add 8605<p>If your package contains interpreted Perl scripts, add
8602 <span class="quote">&#8220;<span class="quote">perl</span>&#8221;</span> to the <code class="varname">USE_TOOLS</code> variable 8606 <span class="quote">&#8220;<span class="quote">perl</span>&#8221;</span> to the <code class="varname">USE_TOOLS</code> variable
8603 and set <code class="varname">REPLACE_PERL</code> to ensure that the proper 8607 and set <code class="varname">REPLACE_PERL</code> to ensure that the proper
8604 interpreter path is set. <code class="varname">REPLACE_PERL</code> should 8608 interpreter path is set. <code class="varname">REPLACE_PERL</code> should
8605 contain a list of scripts, relative to <code class="varname">WRKSRC</code>, 8609 contain a list of scripts, relative to <code class="varname">WRKSRC</code>,
8606 that you want adjusted. Every occurrence of 8610 that you want adjusted. Every occurrence of
8607 <code class="filename">*/bin/perl</code> in a she-bang line will be 8611 <code class="filename">*/bin/perl</code> in a she-bang line will be
8608 replaced with the full path to the Perl executable.</p> 8612 replaced with the full path to the Perl executable.</p>
8609<p>If a particular version of Perl is needed, set the 8613<p>If a particular version of Perl is needed, set the
8610 <code class="varname">PERL5_REQD</code> variable to the version number. The 8614 <code class="varname">PERL5_REQD</code> variable to the version number. The
8611 default is <span class="quote">&#8220;<span class="quote">5.0</span>&#8221;</span>.</p> 8615 default is <span class="quote">&#8220;<span class="quote">5.0</span>&#8221;</span>.</p>
8612<p>See <a class="xref" href="#perl-modules" title="21.6.6. Packages installing Perl modules">Section 21.6.6, &#8220;Packages installing Perl modules&#8221;</a> for information 8616<p>See <a class="xref" href="#perl-modules" title="21.6.6. Packages installing Perl modules">Section 21.6.6, &#8220;Packages installing Perl modules&#8221;</a> for information
8613 about handling Perl modules.</p> 8617 about handling Perl modules.</p>
8614<p>There is also the <code class="varname">REPLACE_PERL6</code> variable 8618<p>There is also the <code class="varname">REPLACE_PERL6</code> variable
8615 for the language now known as Raku.</p> 8619 for the language now known as Raku.</p>
8616</div> 8620</div>
8617<div class="sect2"> 8621<div class="sect2">
8618<div class="titlepage"><div><div><h3 class="title"> 8622<div class="titlepage"><div><div><h3 class="title">
8619<a name="shell-scripts"></a>21.4.6. Packages containing shell scripts</h3></div></div></div> 8623<a name="shell-scripts"></a>21.4.6. Packages containing shell scripts</h3></div></div></div>
8620<p><code class="varname">REPLACE_SH</code>, 8624<p><code class="varname">REPLACE_SH</code>,
8621 <code class="varname">REPLACE_BASH</code>, <code class="varname">REPLACE_CSH</code>, 8625 <code class="varname">REPLACE_BASH</code>, <code class="varname">REPLACE_CSH</code>,
8622 and <code class="varname">REPLACE_KSH</code> can be used to replace shell 8626 and <code class="varname">REPLACE_KSH</code> can be used to replace shell
8623 hash bangs in files. Please use the appropriate one, preferring 8627 she-bangs in files. Please use the appropriate one, preferring
8624 <code class="varname">REPLACE_SH</code> in case this shell is sufficient. 8628 <code class="varname">REPLACE_SH</code> when this shell is sufficient.
8625 Each should contain a list of scripts, relative to 8629 Each should contain a list of scripts, relative to
8626 <code class="varname">WRKSRC</code>, that you want adjusted. Every 8630 <code class="varname">WRKSRC</code>, that you want adjusted. Every
8627 occurrence of the matching shell in a she-bang line will be 8631 occurrence of the matching shell in a she-bang line will be
8628 replaced with the full path to the shell executable. 8632 replaced with the full path to the shell executable.
8629 When using <code class="varname">REPLACE_BASH</code>, don't forget to add 8633 When using <code class="varname">REPLACE_BASH</code>, don't forget to add
8630 <code class="filename">bash</code> to <code class="varname">USE_TOOLS</code>.</p> 8634 <code class="filename">bash</code> to <code class="varname">USE_TOOLS</code>.</p>
8631</div> 8635</div>
8632<div class="sect2"> 8636<div class="sect2">
8633<div class="titlepage"><div><div><h3 class="title"> 8637<div class="titlepage"><div><div><h3 class="title">
8634<a name="other-programming-languages"></a>21.4.7. Other programming languages</h3></div></div></div> 8638<a name="other-programming-languages"></a>21.4.7. Other programming languages</h3></div></div></div>
8635<p>There are further similar REPLACE variables available, e.g., 8639<p>There are further similar REPLACE variables available, e.g.,
8636 <code class="varname">REPLACE_AWK</code> for packages containing awk scripts, 8640 <code class="varname">REPLACE_AWK</code> for packages containing awk scripts,
8637 and <code class="varname">REPLACE_R</code> for R. These two, like the others 8641 and <code class="varname">REPLACE_R</code> for R. These two, like the others
8638 noted above, have their actions defined centrally in 8642 noted above, have their actions defined centrally in
8639 <code class="filename">mk/configure/replace-interpreter.mk</code>. Other 8643 <code class="filename">mk/configure/replace-interpreter.mk</code>. Other
8640 languages define the actions of these variables within their own 8644 languages define the actions of these variables within their own
8641 dedicated part of the tree, e.g., <code class="varname">REPLACE_PHP</code> is 8645 dedicated part of the tree, e.g., <code class="varname">REPLACE_PHP</code> is
8642 actioned in <code class="filename">lang/php/phpversion.mk</code>, and 8646 actioned in <code class="filename">lang/php/phpversion.mk</code>, and
8643 <code class="varname">REPLACE_PYTHON</code> is actioned in 8647 <code class="varname">REPLACE_PYTHON</code> is actioned in
8644 <code class="filename">lang/python/application.mk</code>. For other languages, 8648 <code class="filename">lang/python/application.mk</code>. For other languages,
8645 consult the mk files found within their specific directories (the 8649 consult the mk files found within their specific directories (the
8646 naming convention varies), or check the list found in 8650 naming convention varies), or check the list found in
8647 <a class="xref" href="#help-topics" title="Appendix E. Help topics">Appendix E, <i>Help topics</i></a>.</p> 8651 <a class="xref" href="#help-topics" title="Appendix E. Help topics">Appendix E, <i>Help topics</i></a>.</p>
8648<p>Currently, special handling for other languages varies 8652<p>Currently, special handling for other languages varies
8649 in pkgsrc. If a compiler package provides a 8653 in pkgsrc. If a compiler package provides a
8650 <code class="filename">buildlink3.mk</code> file, include that, otherwise 8654 <code class="filename">buildlink3.mk</code> file, include that, otherwise
8651 just add a (build) dependency on the appropriate compiler 8655 just add a (build) dependency on the appropriate compiler
8652 package.</p> 8656 package.</p>
8653</div> 8657</div>
8654</div> 8658</div>
8655<div class="sect1"> 8659<div class="sect1">
8656<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 8660<div class="titlepage"><div><div><h2 class="title" style="clear: both">
8657<a name="fixes.build"></a>21.5. The <span class="emphasis"><em>build</em></span> phase</h2></div></div></div> 8661<a name="fixes.build"></a>21.5. The <span class="emphasis"><em>build</em></span> phase</h2></div></div></div>
8658<p>The most common failures when building a package are that 8662<p>The most common failures when building a package are that
8659 some platforms do not provide certain header files, functions or 8663 some platforms do not provide certain header files, functions or
8660 libraries, or they provide the functions in a library that the 8664 libraries, or they provide the functions in a library that the
8661 original package author didn't know. To work around this, you 8665 original package author didn't know. To work around this, you
8662 can rewrite the source code in most cases so that it does not 8666 can rewrite the source code in most cases so that it does not
8663 use the missing functions or provides a replacement function.</p> 8667 use the missing functions or provides a replacement function.</p>
8664<div class="sect2"> 8668<div class="sect2">
8665<div class="titlepage"><div><div><h3 class="title"> 8669<div class="titlepage"><div><div><h3 class="title">
8666<a name="fixes.build.cpp"></a>21.5.1. Compiling C and C++ code conditionally</h3></div></div></div> 8670<a name="fixes.build.cpp"></a>21.5.1. Compiling C and C++ code conditionally</h3></div></div></div>
8667<p>If a package already comes with a GNU configure script, the 8671<p>If a package already comes with a GNU configure script, the
8668 preferred way to fix the build failure is to change the 8672 preferred way to fix the build failure is to change the
8669 configure script, not the code. In the other cases, you can 8673 configure script, not the code. In the other cases, you can
8670 utilize the C preprocessor, which defines certain macros 8674 utilize the C preprocessor, which defines certain macros
8671 depending on the operating system and hardware architecture it 8675 depending on the operating system and hardware architecture it
8672 compiles for. These macros can be queried using for example 8676 compiles for. These macros can be queried using for example
8673 <code class="varname">#if defined(__i386)</code>. Almost every operating 8677 <code class="varname">#if defined(__i386)</code>. Almost every operating
8674 system, hardware architecture and compiler has its own macro. 8678 system, hardware architecture and compiler has its own macro.
8675 For example, if the macros <code class="varname">__GNUC__</code>, 8679 For example, if the macros <code class="varname">__GNUC__</code>,
8676 <code class="varname">__i386__</code> and <code class="varname">__NetBSD__</code> 8680 <code class="varname">__i386__</code> and <code class="varname">__NetBSD__</code>
8677 are all defined, you know that you are using NetBSD on an i386 8681 are all defined, you know that you are using NetBSD on an i386
8678 compatible CPU, and your compiler is GCC.</p> 8682 compatible CPU, and your compiler is GCC.</p>
8679<p>The list of the following macros for hardware and 8683<p>The list of the following macros for hardware and
8680 operating system depends on the compiler that is used. For 8684 operating system depends on the compiler that is used. For
8681 example, if you want to conditionally compile code on Solaris, 8685 example, if you want to conditionally compile code on Solaris,
8682 don't use <code class="varname">__sun__</code>, as the SunPro compiler 8686 don't use <code class="varname">__sun__</code>, as the SunPro compiler
8683 does not define it. Use <code class="varname">__sun</code> instead.</p> 8687 does not define it. Use <code class="varname">__sun</code> instead.</p>
8684<div class="sect3"> 8688<div class="sect3">
8685<div class="titlepage"><div><div><h4 class="title"> 8689<div class="titlepage"><div><div><h4 class="title">
8686<a name="fixes.build.cpp.os"></a>21.5.1.1. C preprocessor macros to identify the operating system</h4></div></div></div> 8690<a name="fixes.build.cpp.os"></a>21.5.1.1. C preprocessor macros to identify the operating system</h4></div></div></div>
8687<p>To distinguish between specific NetBSD versions, 8691<p>To distinguish between specific NetBSD versions,
8688 you should use the following code.</p> 8692 you should use the following code.</p>
8689<pre class="programlisting"> 8693<pre class="programlisting">
8690#ifdef __NetBSD__ 8694#ifdef __NetBSD__
8691#include &lt;sys/param.h&gt; 8695#include &lt;sys/param.h&gt;
8692#if __NetBSD_Prereq__(9,99,17) 8696#if __NetBSD_Prereq__(9,99,17)
8693/* use a newer feature */ 8697/* use a newer feature */
8694#else 8698#else
8695/* older code */ 8699/* older code */
8696#endif 8700#endif
8697#endif 8701#endif
8698 8702
8699#ifndef _WIN32 8703#ifndef _WIN32
8700/* Unix-like specific code */ 8704/* Unix-like specific code */
8701#endif 8705#endif
8702</pre> 8706</pre>
8703<p>To distinguish between 4.4 BSD-derived systems and the 8707<p>To distinguish between 4.4 BSD-derived systems and the
8704 rest of the world, you should use the following code.</p> 8708 rest of the world, you should use the following code.</p>
8705<pre class="programlisting"> 8709<pre class="programlisting">
8706#include &lt;sys/param.h&gt; 8710#include &lt;sys/param.h&gt;
8707#if (defined(BSD) &amp;&amp; BSD &gt;= 199306) 8711#if (defined(BSD) &amp;&amp; BSD &gt;= 199306)
8708/* BSD-specific code goes here */ 8712/* BSD-specific code goes here */
8709#else 8713#else
8710/* non-BSD-specific code goes here */ 8714/* non-BSD-specific code goes here */
8711#endif 8715#endif
8712</pre> 8716</pre>
8713<p>You can also test for the following macros:</p> 8717<p>You can also test for the following macros:</p>
8714<pre class="programlisting"> 8718<pre class="programlisting">
8715Cygwin __CYGWIN__ 8719Cygwin __CYGWIN__
8716DragonFly __DragonFly__ 8720DragonFly __DragonFly__
8717FreeBSD __FreeBSD__ 8721FreeBSD __FreeBSD__
8718Haiku __HAIKU__ 8722Haiku __HAIKU__
8719Interix __INTERIX 8723Interix __INTERIX
8720IRIX __sgi (TODO: get a definite source for this) 8724IRIX __sgi (TODO: get a definite source for this)
8721Linux __linux 8725Linux __linux
8722Mac OS X __APPLE__ 8726Mac OS X __APPLE__
8723MirBSD __MirBSD__ (__OpenBSD__ is also defined) 8727MirBSD __MirBSD__ (__OpenBSD__ is also defined)
8724Minix3 __minix 8728Minix3 __minix
8725NetBSD __NetBSD__ 8729NetBSD __NetBSD__
8726OpenBSD __OpenBSD__ 8730OpenBSD __OpenBSD__
8727Solaris sun, __sun 8731Solaris sun, __sun
8728</pre> 8732</pre>
8729</div> 8733</div>
8730<div class="sect3"> 8734<div class="sect3">
8731<div class="titlepage"><div><div><h4 class="title"> 8735<div class="titlepage"><div><div><h4 class="title">
8732<a name="fixes.build.cpp.arch"></a>21.5.1.2. C preprocessor macros to identify the hardware architecture</h4></div></div></div> 8736<a name="fixes.build.cpp.arch"></a>21.5.1.2. C preprocessor macros to identify the hardware architecture</h4></div></div></div>
8733<pre class="programlisting"> 8737<pre class="programlisting">
8734i386 i386, __i386, __i386__ 8738i386 i386, __i386, __i386__
8735x86-64 __amd64__, __x86_64__ 8739x86-64 __amd64__, __x86_64__
8736ARM __arm__ 8740ARM __arm__
8737MIPS __mips 8741MIPS __mips
8738SPARC sparc, __sparc 8742SPARC sparc, __sparc
8739PowerPC __powerpc 8743PowerPC __powerpc
8740</pre> 8744</pre>
8741</div> 8745</div>
8742<div class="sect3"> 8746<div class="sect3">
8743<div class="titlepage"><div><div><h4 class="title"> 8747<div class="titlepage"><div><div><h4 class="title">
8744<a name="fixes.build.cpp.compiler"></a>21.5.1.3. C preprocessor macros to identify the compiler</h4></div></div></div> 8748<a name="fixes.build.cpp.compiler"></a>21.5.1.3. C preprocessor macros to identify the compiler</h4></div></div></div>
8745<pre class="programlisting"> 8749<pre class="programlisting">
8746GCC __GNUC__ (major version), __GNUC_MINOR__ 8750GCC __GNUC__ (major version), __GNUC_MINOR__
8747MIPSpro _COMPILER_VERSION (0x741 for MIPSpro 7.41) 8751MIPSpro _COMPILER_VERSION (0x741 for MIPSpro 7.41)
8748SunPro __SUNPRO_C (0x570 for Sun C 5.7) 8752SunPro __SUNPRO_C (0x570 for Sun C 5.7)
8749SunPro C++ __SUNPRO_CC (0x580 for Sun C++ 5.8) 8753SunPro C++ __SUNPRO_CC (0x580 for Sun C++ 5.8)
8750</pre> 8754</pre>
8751</div> 8755</div>
8752</div> 8756</div>
8753<div class="sect2"> 8757<div class="sect2">
8754<div class="titlepage"><div><div><h3 class="title"> 8758<div class="titlepage"><div><div><h3 class="title">
8755<a name="compiler-bugs"></a>21.5.2. How to handle compiler bugs</h3></div></div></div> 8759<a name="compiler-bugs"></a>21.5.2. How to handle compiler bugs</h3></div></div></div>
8756<p>Some source files trigger bugs in the compiler, based on 8760<p>Some source files trigger bugs in the compiler, based on
8757 combinations of compiler version and architecture and almost 8761 combinations of compiler version and architecture and almost
8758 always relation to optimisation being enabled. Common symptoms 8762 always relation to optimisation being enabled. Common symptoms
8759 are gcc internal errors or never finishing compiling a 8763 are gcc internal errors or never finishing compiling a
8760 file.</p> 8764 file.</p>
8761<p>Typically, a workaround involves testing the 8765<p>Typically, a workaround involves testing the
8762 <code class="varname">MACHINE_ARCH</code> and compiler version, disabling 8766 <code class="varname">MACHINE_ARCH</code> and compiler version, disabling
8763 optimisation for that combination of file, 8767 optimisation for that combination of file,
8764 <code class="varname">MACHINE_ARCH</code> and compiler.</p> 8768 <code class="varname">MACHINE_ARCH</code> and compiler.</p>
8765<p>This used to be a big problem in the past, but is rarely 8769<p>This used to be a big problem in the past, but is rarely
8766 needed now as compiler technology has matured. If you still need 8770 needed now as compiler technology has matured. If you still need
8767 to add a compiler specific workaround, please do so in the file 8771 to add a compiler specific workaround, please do so in the file
8768 <code class="filename">hacks.mk</code> and describe the symptom and 8772 <code class="filename">hacks.mk</code> and describe the symptom and
8769 compiler version as detailed as possible.</p> 8773 compiler version as detailed as possible.</p>
8770</div> 8774</div>
8771<div class="sect2"> 8775<div class="sect2">
8772<div class="titlepage"><div><div><h3 class="title"> 8776<div class="titlepage"><div><div><h3 class="title">
8773<a name="fixes.build.header"></a>21.5.3. No such file or directory</h3></div></div></div> 8777<a name="fixes.build.header"></a>21.5.3. No such file or directory</h3></div></div></div>
8774<p>Compilation sometimes fails with an error message like this:</p> 8778<p>Compilation sometimes fails with an error message like this:</p>
8775<pre class="programlisting"> 8779<pre class="programlisting">
8776.../x11/gtk3/work/gtk+-3.24.12/gdk/gdktypes.h:35:10: 8780.../x11/gtk3/work/gtk+-3.24.12/gdk/gdktypes.h:35:10:
8777 fatal error: pango/pango.h: No such file or directory 8781 fatal error: pango/pango.h: No such file or directory
8778</pre> 8782</pre>
8779<p>The proper way to fix this problem depends on the type of the 8783<p>The proper way to fix this problem depends on the type of the
8780header, which is described in the following sections.</p> 8784header, which is described in the following sections.</p>
8781<div class="sect3"> 8785<div class="sect3">
8782<div class="titlepage"><div><div><h4 class="title"> 8786<div class="titlepage"><div><div><h4 class="title">
8783<a name="fixes.build.header.bl3"></a>21.5.3.1. Headers from other packages</h4></div></div></div> 8787<a name="fixes.build.header.bl3"></a>21.5.3.1. Headers from other packages</h4></div></div></div>
8784<p>If the header name looks like it comes from a different package, 8788<p>If the header name looks like it comes from a different package,
8785that other package should be included via the buildlink3 8789that other package should be included via the buildlink3
8786framework.</p> 8790framework.</p>
8787<p>First, look whether the header is somewhere in the buildlink3 8791<p>First, look whether the header is somewhere in the buildlink3
8788directory below <code class="varname">WRKDIR</code>. In the above case of 8792directory below <code class="varname">WRKDIR</code>. In the above case of
8789the missing Pango header:</p> 8793the missing Pango header:</p>
8790<pre class="programlisting"> 8794<pre class="programlisting">
8791<code class="prompt">$</code> find work/.buildlink/ -print | grep -F pango/pango.h 8795<code class="prompt">$</code> find work/.buildlink/ -print | grep -F pango/pango.h
8792</pre> 8796</pre>
8793<p>In the case of Pango, the output is:</p> 8797<p>In the case of Pango, the output is:</p>
8794<pre class="programlisting"> 8798<pre class="programlisting">
8795work/.buildlink/include/pango-1.0/pango/pango.h 8799work/.buildlink/include/pango-1.0/pango/pango.h
8796</pre> 8800</pre>
8797<p>If the <code class="filename">pango/pango.h</code> file were placed directly 8801<p>If the <code class="filename">pango/pango.h</code> file were placed directly
8798in the <code class="filename">.buildlink</code> directory, it would have been 8802in the <code class="filename">.buildlink</code> directory, it would have been
8799found automatically. There is an extra <code class="filename">pango-1.0</code> 8803found automatically. There is an extra <code class="filename">pango-1.0</code>
8800path component though, which means that the compiler command line must 8804path component though, which means that the compiler command line must
8801contain an option of the form 8805contain an option of the form
8802<code class="literal">-I${BUILDLINK3_PREFIX.pango}/include/pango-1.0</code>. In 8806<code class="literal">-I${BUILDLINK3_PREFIX.pango}/include/pango-1.0</code>. In
8803most cases this option is generated by the configure script, which can be examined using:</p> 8807most cases this option is generated by the configure script, which can be examined using:</p>
8804<pre class="programlisting"> 8808<pre class="programlisting">
8805<code class="prompt">$</code> $ grep -o '[-]I[^[:space:]]*/pango[^[:space:]]*' work/*/Makefile 8809<code class="prompt">$</code> $ grep -o '[-]I[^[:space:]]*/pango[^[:space:]]*' work/*/Makefile
8806-I/usr/pkg/include/pango-1.0 8810-I/usr/pkg/include/pango-1.0
8807-I/usr/pkg/include/pango-1.0 8811-I/usr/pkg/include/pango-1.0
8808-I/usr/pkg/include/pango-1.0 8812-I/usr/pkg/include/pango-1.0
8809-I/usr/pkg/include/pango-1.0 8813-I/usr/pkg/include/pango-1.0
8810-I/usr/pkg/include/pango-1.0 8814-I/usr/pkg/include/pango-1.0
8811</pre> 8815</pre>
8812<p>This looks good. These options are transformed by the buildlink 8816<p>This looks good. These options are transformed by the buildlink
8813wrapper to refer to the correct path inside 8817wrapper to refer to the correct path inside
8814<code class="filename">work/.buildlink</code>.</p> 8818<code class="filename">work/.buildlink</code>.</p>
8815<p>Since the compilation fails though, examine the compiler command 8819<p>Since the compilation fails though, examine the compiler command
8816lines in <code class="filename">work/.work.log</code> to see whether the 8820lines in <code class="filename">work/.work.log</code> to see whether the
8817<code class="literal">-I</code> option is included in the particular command 8821<code class="literal">-I</code> option is included in the particular command
8818line.</p> 8822line.</p>
8819<p>To further analyze the situation, run <span class="command"><strong>bmake 8823<p>To further analyze the situation, run <span class="command"><strong>bmake
8820build-env</strong></span>, which sets up an interactive, realistic environment 8824build-env</strong></span>, which sets up an interactive, realistic environment
8821including all the pkgsrc wrapper commands and environment variables. From 8825including all the pkgsrc wrapper commands and environment variables. From
8822there, try to compile some simple example programs that use the 8826there, try to compile some simple example programs that use the
8823header.</p> 8827header.</p>
8824</div> 8828</div>
8825<div class="sect3"> 8829<div class="sect3">
8826<div class="titlepage"><div><div><h4 class="title"> 8830<div class="titlepage"><div><div><h4 class="title">
8827<a name="fixes.build.header.gen"></a>21.5.3.2. Headers generated during the build</h4></div></div></div> 8831<a name="fixes.build.header.gen"></a>21.5.3.2. Headers generated during the build</h4></div></div></div>
8828<p>If the name of the header seems to come from the package itself, 8832<p>If the name of the header seems to come from the package itself,
8829and if the build is run with parallel jobs, the package may have some 8833and if the build is run with parallel jobs, the package may have some
8830undeclared dependencies between the <code class="filename">.c</code> and the 8834undeclared dependencies between the <code class="filename">.c</code> and the
8831<code class="filename">.h</code> files, and a C file is compiled before its 8835<code class="filename">.h</code> files, and a C file is compiled before its
8832required header is generated.</p> 8836required header is generated.</p>
8833<p>To see whether the build runs with parallel jobs, run 8837<p>To see whether the build runs with parallel jobs, run
8834<span class="command"><strong>bmake show-all-build | grep JOBS</strong></span>. Its output looks 8838<span class="command"><strong>bmake show-all-build | grep JOBS</strong></span>. Its output looks
8835like this:</p> 8839like this:</p>
8836<pre class="programlisting"> 8840<pre class="programlisting">
8837 usr MAKE_JOBS= 7 8841 usr MAKE_JOBS= 7
8838 pkg MAKE_JOBS_SAFE # undefined 8842 pkg MAKE_JOBS_SAFE # undefined
8839 def _MAKE_JOBS_N= 7 8843 def _MAKE_JOBS_N= 7
8840</pre> 8844</pre>
8841<p>In this case the pkgsrc user has asked pkgsrc to build packages 8845<p>In this case the pkgsrc user has asked pkgsrc to build packages
8842with 7 jobs in parallel (<code class="varname">MAKE_JOBS</code>). The 8846with 7 jobs in parallel (<code class="varname">MAKE_JOBS</code>). The
8843package could have disabled parallel builds by setting 8847package could have disabled parallel builds by setting
8844<code class="varname">MAKE_JOBS_SAFE</code> to <code class="literal">no</code>, but 8848<code class="varname">MAKE_JOBS_SAFE</code> to <code class="literal">no</code>, but
8845in this case it hasn't.</p> 8849in this case it hasn't.</p>
8846<p>To see whether the build failure is caused by parallel builds, 8850<p>To see whether the build failure is caused by parallel builds,
8847first save the exact error message and a bit of context, maybe you need 8851first save the exact error message and a bit of context, maybe you need
8848it later for reporting a bug. Next, run:</p> 8852it later for reporting a bug. Next, run:</p>
8849<pre class="programlisting"> 8853<pre class="programlisting">
8850MAKE_JOBS_SAFE=no bmake clean build 8854MAKE_JOBS_SAFE=no bmake clean build
8851</pre> 8855</pre>
8852<p>If that succeeds, <a class="ulink" href="https://www.NetBSD.org/cgi-bin/sendpr.cgi?gndb=netbsd" target="_top">file a bug 8856<p>If that succeeds, <a class="ulink" href="https://www.NetBSD.org/cgi-bin/sendpr.cgi?gndb=netbsd" target="_top">file a bug
8853report</a> against the pkgsrc package, including the exact error 8857report</a> against the pkgsrc package, including the exact error
8854message and the contents of your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file.</p> 8858message and the contents of your <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a> file.</p>
8855</div> 8859</div>
8856<div class="sect3"> 8860<div class="sect3">
8857<div class="titlepage"><div><div><h4 class="title"> 8861<div class="titlepage"><div><div><h4 class="title">
8858<a name="fixes.build.header.symlink"></a>21.5.3.3. Symlinks</h4></div></div></div> 8862<a name="fixes.build.header.symlink"></a>21.5.3.3. Symlinks</h4></div></div></div>
8859<p>Pkgsrc does not work reliably if any of 8863<p>Pkgsrc does not work reliably if any of
8860<code class="varname">LOCALBASE</code>, <code class="varname">VARBASE</code> or 8864<code class="varname">LOCALBASE</code>, <code class="varname">VARBASE</code> or
8861<code class="varname">WRKDIR</code> contains a symlink. Since 2019Q2, the pkgsrc 8865<code class="varname">WRKDIR</code> contains a symlink. Since 2019Q2, the pkgsrc
8862bootstrap program prevents installing pkgsrc in symlink-based 8866bootstrap program prevents installing pkgsrc in symlink-based
8863directories. Existing pkgsrc installations are not checked for symlinks 8867directories. Existing pkgsrc installations are not checked for symlinks
8864though.</p> 8868though.</p>
8865<p>The "No such file or directory" error messages are a typical 8869<p>The "No such file or directory" error messages are a typical
8866symptom of symlinks, and it's quite difficult to find out that this is 8870symptom of symlinks, and it's quite difficult to find out that this is
8867the actual cause.</p> 8871the actual cause.</p>
8868</div> 8872</div>
8869<div class="sect3"> 8873<div class="sect3">
8870<div class="titlepage"><div><div><h4 class="title"> 8874<div class="titlepage"><div><div><h4 class="title">
8871<a name="fixes.build.header.stale"></a>21.5.3.4. Stale working directories</h4></div></div></div> 8875<a name="fixes.build.header.stale"></a>21.5.3.4. Stale working directories</h4></div></div></div>
8872<p>When building a hierarchy of packages, it may happen that one 8876<p>When building a hierarchy of packages, it may happen that one
8873package is built and then pkgsrc is updated. This situation can provoke 8877package is built and then pkgsrc is updated. This situation can provoke
8874various hard to diagnose build errors. To clean up the situation:</p> 8878various hard to diagnose build errors. To clean up the situation:</p>
8875<pre class="programlisting"> 8879<pre class="programlisting">
8876<code class="prompt">$</code> (cd ../../ &amp;&amp; cat mk/bsd.pkg.mk &gt;/dev/null &amp;&amp; rm -rf */*/work) 8880<code class="prompt">$</code> (cd ../../ &amp;&amp; cat mk/bsd.pkg.mk &gt;/dev/null &amp;&amp; rm -rf */*/work)
8877</pre> 8881</pre>
8878<p>(The only purpose of the <code class="filename">bsd.pkg.mk</code> is to 8882<p>(The only purpose of the <code class="filename">bsd.pkg.mk</code> is to
8879prevent running this command in the wrong directory.)</p> 8883prevent running this command in the wrong directory.)</p>
8880<p>If you have set <code class="varname">WRKOBJDIR</code> in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, remove 8884<p>If you have set <code class="varname">WRKOBJDIR</code> in <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>, remove
8881that directory as well.</p> 8885that directory as well.</p>
8882</div> 8886</div>
8883<div class="sect3"> 8887<div class="sect3">
8884<div class="titlepage"><div><div><h4 class="title"> 8888<div class="titlepage"><div><div><h4 class="title">
8885<a name="fixes.build.header.misc"></a>21.5.3.5. Other possible reasons</h4></div></div></div> 8889<a name="fixes.build.header.misc"></a>21.5.3.5. Other possible reasons</h4></div></div></div>
8886<p>On platforms other than BSD, third-party packages are installed in 8890<p>On platforms other than BSD, third-party packages are installed in
8887<code class="filename">/usr/include</code>, together with the base system. This 8891<code class="filename">/usr/include</code>, together with the base system. This
8888means that pkgsrc cannot distinguish between headers provided by the base 8892means that pkgsrc cannot distinguish between headers provided by the base
8889system (which it needs) and headers from third-party packages (which are 8893system (which it needs) and headers from third-party packages (which are
8890often included in pkgsrc as well). This can lead to subtle version 8894often included in pkgsrc as well). This can lead to subtle version
8891mismatches.</p> 8895mismatches.</p>
8892<p>In pkgsrc installations that have been active for several years, it 8896<p>In pkgsrc installations that have been active for several years, it
8893may happen that some files are manually deleted. To exclude this unlikely 8897may happen that some files are manually deleted. To exclude this unlikely
8894reason, run <span class="command"><strong>pkg_admin check</strong></span>.</p> 8898reason, run <span class="command"><strong>pkg_admin check</strong></span>.</p>
8895<p>It may help to run <span class="command"><strong>pkg_admin rebuild-tree</strong></span> to 8899<p>It may help to run <span class="command"><strong>pkg_admin rebuild-tree</strong></span> to
8896check/fix dependencies.</p> 8900check/fix dependencies.</p>
8897<p>If all of the above doesn't help, see <a class="xref" href="#help-user" title="Chapter 2. Getting help">Chapter 2, <i>Getting help</i></a> 8901<p>If all of the above doesn't help, see <a class="xref" href="#help-user" title="Chapter 2. Getting help">Chapter 2, <i>Getting help</i></a>
8898for contact information. Be prepared to describe what you have tried so 8902for contact information. Be prepared to describe what you have tried so
8899far and what any error messages were.</p> 8903far and what any error messages were.</p>
8900</div> 8904</div>
8901</div> 8905</div>
8902<div class="sect2"> 8906<div class="sect2">
8903<div class="titlepage"><div><div><h3 class="title"> 8907<div class="titlepage"><div><div><h3 class="title">
8904<a name="undefined-reference"></a>21.5.4. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span> 8908<a name="undefined-reference"></a>21.5.4. Undefined reference to <span class="quote">&#8220;<span class="quote">...</span>&#8221;</span>
8905</h3></div></div></div> 8909</h3></div></div></div>
8906<p>This error message often means that a package did not 8910<p>This error message often means that a package did not
8907 link to a shared library it needs. The following functions are 8911 link to a shared library it needs. The following functions are
8908 known to cause this error message over and over.</p> 8912 known to cause this error message over and over.</p>
8909<div class="informaltable"> 8913<div class="informaltable">
8910<a name="undefined-reference-functions"></a><table class="informaltable" border="1"> 8914<a name="undefined-reference-functions"></a><table class="informaltable" border="1">
8911<colgroup> 8915<colgroup>
8912<col> 8916<col>
8913<col> 8917<col>
8914<col> 8918<col>
8915</colgroup> 8919</colgroup>
8916<thead><tr> 8920<thead><tr>
8917<th>Function</th> 8921<th>Function</th>
8918<th>Library</th> 8922<th>Library</th>
8919<th>Affected platforms</th> 8923<th>Affected platforms</th>
8920</tr></thead> 8924</tr></thead>
8921<tbody> 8925<tbody>
8922<tr> 8926<tr>
8923<td>accept, bind, connect</td> 8927<td>accept, bind, connect</td>
8924<td>-lsocket</td> 8928<td>-lsocket</td>
8925<td>Solaris</td> 8929<td>Solaris</td>
8926</tr> 8930</tr>
8927<tr> 8931<tr>
8928<td>crypt</td> 8932<td>crypt</td>
8929<td>-lcrypt</td> 8933<td>-lcrypt</td>
8930<td>DragonFly, NetBSD</td> 8934<td>DragonFly, NetBSD</td>
8931</tr> 8935</tr>
8932<tr> 8936<tr>
8933<td>dlopen, dlsym</td> 8937<td>dlopen, dlsym</td>
8934<td>-ldl</td> 8938<td>-ldl</td>
8935<td>Linux</td> 8939<td>Linux</td>
8936</tr> 8940</tr>
8937<tr> 8941<tr>
8938<td>gethost*</td> 8942<td>gethost*</td>
8939<td>-lnsl</td> 8943<td>-lnsl</td>
8940<td>Solaris</td> 8944<td>Solaris</td>
8941</tr> 8945</tr>
8942<tr> 8946<tr>
8943<td>inet_aton</td> 8947<td>inet_aton</td>
8944<td>-lresolv</td> 8948<td>-lresolv</td>
8945<td>Solaris</td> 8949<td>Solaris</td>
8946</tr> 8950</tr>
8947<tr> 8951<tr>
8948<td>nanosleep, sem_*, timer_*</td> 8952<td>nanosleep, sem_*, timer_*</td>
8949<td>-lrt</td> 8953<td>-lrt</td>
8950<td>Solaris</td> 8954<td>Solaris</td>
8951</tr> 8955</tr>
8952<tr> 8956<tr>
8953<td>openpty</td> 8957<td>openpty</td>
8954<td>-lutil</td> 8958<td>-lutil</td>
8955<td>Linux</td> 8959<td>Linux</td>
8956</tr> 8960</tr>
8957</tbody> 8961</tbody>
8958</table> 8962</table>
8959</div> 8963</div>
8960<p>To fix these linker errors, it is often sufficient to add 8964<p>To fix these linker errors, it is often sufficient to add
8961 <code class="literal">LIBS.<em class="replaceable"><code>OperatingSystem</code></em>+= 8965 <code class="literal">LIBS.<em class="replaceable"><code>OperatingSystem</code></em>+=
8962 -l<em class="replaceable"><code>foo</code></em></code> to the package 8966 -l<em class="replaceable"><code>foo</code></em></code> to the package
8963 <code class="filename">Makefile</code> and then run <span class="command"><strong>bmake clean; 8967 <code class="filename">Makefile</code> and then run <span class="command"><strong>bmake clean;
8964 bmake</strong></span>.</p> 8968 bmake</strong></span>.</p>
8965<div class="sect3"> 8969<div class="sect3">
8966<div class="titlepage"><div><div><h4 class="title"> 8970<div class="titlepage"><div><div><h4 class="title">
8967<a name="undefined-reference-sunpro"></a>21.5.4.1. The SunPro compiler and inline functions</h4></div></div></div> 8971<a name="undefined-reference-sunpro"></a>21.5.4.1. The SunPro compiler and inline functions</h4></div></div></div>
8968<p>When you are using the SunPro compiler, there is another 8972<p>When you are using the SunPro compiler, there is another
8969possibility. That compiler cannot handle the following code:</p> 8973possibility. That compiler cannot handle the following code:</p>
8970<pre class="programlisting"> 8974<pre class="programlisting">
8971extern int extern_func(int); 8975extern int extern_func(int);
8972 8976
8973static inline int 8977static inline int
8974inline_func(int x) 8978inline_func(int x)
8975{ 8979{
8976 return extern_func(x); 8980 return extern_func(x);
8977} 8981}
8978 8982
8979int main(void) 8983int main(void)
8980{ 8984{
8981 return 0; 8985 return 0;
8982} 8986}
8983</pre> 8987</pre>
8984<p>It generates the code for <code class="function">inline_func</code> even if 8988<p>It generates the code for <code class="function">inline_func</code> even if
8985that function is never used. This code then refers to 8989that function is never used. This code then refers to
8986<code class="function">extern_func</code>, which can usually not be resolved. To 8990<code class="function">extern_func</code>, which can usually not be resolved. To
8987solve this problem you can try to tell the package to disable inlining 8991solve this problem you can try to tell the package to disable inlining
8988of functions.</p> 8992of functions.</p>
8989</div> 8993</div>
8990</div> 8994</div>
8991<div class="sect2"> 8995<div class="sect2">
8992<div class="titlepage"><div><div><h3 class="title"> 8996<div class="titlepage"><div><div><h3 class="title">
8993<a name="out-of-memory"></a>21.5.5. Running out of memory</h3></div></div></div> 8997<a name="out-of-memory"></a>21.5.5. Running out of memory</h3></div></div></div>
8994<p>Sometimes packages fail to build because the compiler runs 8998<p>Sometimes packages fail to build because the compiler runs
8995 into an operating system specific soft limit. With the 8999 into an operating system specific soft limit. With the
8996 <code class="varname">UNLIMIT_RESOURCES</code> variable pkgsrc can be told 9000 <code class="varname">UNLIMIT_RESOURCES</code> variable pkgsrc can be told
8997 to unlimit the resources. The allowed values are any combination of 9001 to unlimit the resources. The allowed values are any combination of
8998 <span class="quote">&#8220;<span class="quote">cputime</span>&#8221;</span>, 9002 <span class="quote">&#8220;<span class="quote">cputime</span>&#8221;</span>,
8999 <span class="quote">&#8220;<span class="quote">datasize</span>&#8221;</span>, 9003 <span class="quote">&#8220;<span class="quote">datasize</span>&#8221;</span>,
9000 <span class="quote">&#8220;<span class="quote">memorysize</span>&#8221;</span>, 9004 <span class="quote">&#8220;<span class="quote">memorysize</span>&#8221;</span>,
9001 <span class="quote">&#8220;<span class="quote">stacksize</span>&#8221;</span> and 9005 <span class="quote">&#8220;<span class="quote">stacksize</span>&#8221;</span> and
9002 <span class="quote">&#8220;<span class="quote">virtualsize</span>&#8221;</span>. 9006 <span class="quote">&#8220;<span class="quote">virtualsize</span>&#8221;</span>.
9003 Setting this variable is similar to running the shell builtin 9007 Setting this variable is similar to running the shell builtin
9004 <span class="command"><strong>ulimit</strong></span> command to raise the maximum data 9008 <span class="command"><strong>ulimit</strong></span> command to raise the maximum data
9005 segment size or maximum stack size of a process, respectively, to 9009 segment size or maximum stack size of a process, respectively, to
9006 their hard limits.</p> 9010 their hard limits.</p>
9007</div> 9011</div>
9008</div> 9012</div>
9009<div class="sect1"> 9013<div class="sect1">
9010<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9014<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9011<a name="fixes.install"></a>21.6. The <span class="emphasis"><em>install</em></span> phase</h2></div></div></div> 9015<a name="fixes.install"></a>21.6. The <span class="emphasis"><em>install</em></span> phase</h2></div></div></div>
9012<div class="sect2"> 9016<div class="sect2">
9013<div class="titlepage"><div><div><h3 class="title"> 9017<div class="titlepage"><div><div><h3 class="title">
9014<a name="install-scripts"></a>21.6.1. Creating needed directories</h3></div></div></div> 9018<a name="install-scripts"></a>21.6.1. Creating needed directories</h3></div></div></div>
9015<p>The BSD-compatible <span class="command"><strong>install</strong></span> supplied 9019<p>The BSD-compatible <span class="command"><strong>install</strong></span> supplied
9016 with some operating systems cannot create more than one 9020 with some operating systems cannot create more than one
9017 directory at a time. As such, you should call 9021 directory at a time. As such, you should call
9018 <code class="literal">${INSTALL_*_DIR}</code> like this:</p> 9022 <code class="literal">${INSTALL_*_DIR}</code> like this:</p>
9019<pre class="programlisting"> 9023<pre class="programlisting">
9020${INSTALL_DATA_DIR} ${PREFIX}/dir1 9024${INSTALL_DATA_DIR} ${PREFIX}/dir1
9021${INSTALL_DATA_DIR} ${PREFIX}/dir2 9025${INSTALL_DATA_DIR} ${PREFIX}/dir2
9022</pre> 9026</pre>
9023<p>Instead of running the <span class="command"><strong>install</strong></span> commands 9027<p>Instead of running the <span class="command"><strong>install</strong></span> commands
9024 directly, you can also append <span class="quote">&#8220;<span class="quote"><code class="literal">dir1 9028 directly, you can also append <span class="quote">&#8220;<span class="quote"><code class="literal">dir1
9025 dir2</code></span>&#8221;</span> to the <code class="varname">INSTALLATION_DIRS</code> 9029 dir2</code></span>&#8221;</span> to the <code class="varname">INSTALLATION_DIRS</code>
9026 variable, which will automatically do the right thing.</p> 9030 variable, which will automatically do the right thing.</p>
9027</div> 9031</div>
9028<div class="sect2"> 9032<div class="sect2">
9029<div class="titlepage"><div><div><h3 class="title"> 9033<div class="titlepage"><div><div><h3 class="title">
9030<a name="where-to-install-documentation"></a>21.6.2. Where to install documentation</h3></div></div></div> 9034<a name="where-to-install-documentation"></a>21.6.2. Where to install documentation</h3></div></div></div>
9031<p>In general, documentation should be installed into 9035<p>In general, documentation should be installed into
9032 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or 9036 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or
9033 <code class="filename">${PREFIX}/share/doc/${PKGNAME_NOREV}</code> (the latter 9037 <code class="filename">${PREFIX}/share/doc/${PKGNAME_NOREV}</code> (the latter
9034 includes the version number of the package).</p> 9038 includes the version number of the package).</p>
9035<p>Many modern packages using GNU autoconf allow to set the 9039<p>Many modern packages using GNU autoconf allow to set the
9036 directory where HTML documentation is installed with the 9040 directory where HTML documentation is installed with the
9037 <span class="quote">&#8220;<span class="quote">--with-html-dir</span>&#8221;</span> option. Sometimes using this flag is 9041 <span class="quote">&#8220;<span class="quote">--with-html-dir</span>&#8221;</span> option. Sometimes using this flag is
9038 needed because otherwise the documentation ends up in 9042 needed because otherwise the documentation ends up in
9039 <code class="filename">${PREFIX}/share/doc/html</code> or other places. In 9043 <code class="filename">${PREFIX}/share/doc/html</code> or other places. In
9040 pkgsrc, the HTML documentation should go into the package-specific 9044 pkgsrc, the HTML documentation should go into the package-specific
9041 directory, just like any other documentation.</p> 9045 directory, just like any other documentation.</p>
9042<p>An exception to the above is that library API documentation 9046<p>An exception to the above is that library API documentation
9043 generated with the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/textproc/gtk-doc/index.html" target="_top"><code class="filename">textproc/gtk-doc</code></a> tools, for use by special 9047 generated with the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/textproc/gtk-doc/index.html" target="_top"><code class="filename">textproc/gtk-doc</code></a> tools, for use by special
9044 browsers (devhelp) should be left at their default location, which 9048 browsers (devhelp) should be left at their default location, which
9045 is <code class="filename">${PREFIX}/share/gtk-doc</code>. Such 9049 is <code class="filename">${PREFIX}/share/gtk-doc</code>. Such
9046 documentation can be recognized from files ending in 9050 documentation can be recognized from files ending in
9047 <code class="filename">.devhelp</code> or <code class="filename">.devhelp2</code>. 9051 <code class="filename">.devhelp</code> or <code class="filename">.devhelp2</code>.
9048 (It is also acceptable to install such files in 9052 (It is also acceptable to install such files in
9049 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or 9053 <code class="filename">${PREFIX}/share/doc/${PKGBASE}</code> or
9050 <code class="filename">${PREFIX}/share/doc/${PKGNAME}</code>; the 9054 <code class="filename">${PREFIX}/share/doc/${PKGNAME}</code>; the
9051 <code class="filename">.devhelp*</code> file must be directly in that 9055 <code class="filename">.devhelp*</code> file must be directly in that
9052 directory then, no additional subdirectory level is allowed in 9056 directory then, no additional subdirectory level is allowed in
9053 this case. This is usually achieved by using 9057 this case. This is usually achieved by using
9054 <span class="quote">&#8220;<span class="quote">--with-html-dir=${PREFIX}/share/doc</span>&#8221;</span>. 9058 <span class="quote">&#8220;<span class="quote">--with-html-dir=${PREFIX}/share/doc</span>&#8221;</span>.
9055 <code class="filename">${PREFIX}/share/gtk-doc</code> is preferred 9059 <code class="filename">${PREFIX}/share/gtk-doc</code> is preferred
9056 though.)</p> 9060 though.)</p>
9057</div> 9061</div>
9058<div class="sect2"> 9062<div class="sect2">
9059<div class="titlepage"><div><div><h3 class="title"> 9063<div class="titlepage"><div><div><h3 class="title">
9060<a name="installing-score-files"></a>21.6.3. Installing highscore files</h3></div></div></div> 9064<a name="installing-score-files"></a>21.6.3. Installing highscore files</h3></div></div></div>
9061<p>Certain packages, most of them in the games category, install 9065<p>Certain packages, most of them in the games category, install
9062 a score file that allows all users on the system to record their 9066 a score file that allows all users on the system to record their
9063 highscores. In order for this to work, the binaries need to be 9067 highscores. In order for this to work, the binaries need to be
9064 installed setgid and the score files owned by the appropriate 9068 installed setgid and the score files owned by the appropriate
9065 group and/or owner (traditionally the "games" user/group). Set 9069 group and/or owner (traditionally the "games" user/group). Set
9066 <code class="varname">USE_GAMESGROUP</code> to yes to support this. The 9070 <code class="varname">USE_GAMESGROUP</code> to yes to support this. The
9067 following variables, documented in more detail in 9071 following variables, documented in more detail in
9068 <code class="filename">mk/defaults/mk.conf</code>, control this 9072 <code class="filename">mk/defaults/mk.conf</code>, control this
9069 behaviour: <code class="varname">GAMEDATAMODE</code>, 9073 behaviour: <code class="varname">GAMEDATAMODE</code>,
9070 <code class="varname">GAMEDIRMODE</code>, <code class="varname">GAMES_GROUP</code>, 9074 <code class="varname">GAMEDIRMODE</code>, <code class="varname">GAMES_GROUP</code>,
9071 <code class="varname">GAMEMODE</code>, <code class="varname">GAME_USER</code>. 9075 <code class="varname">GAMEMODE</code>, <code class="varname">GAME_USER</code>.
9072 Other useful variables are: <code class="varname">GAMEDIR_PERMS</code>, 9076 Other useful variables are: <code class="varname">GAMEDIR_PERMS</code>,
9073 <code class="varname">GAMEDATA_PERMS</code> and 9077 <code class="varname">GAMEDATA_PERMS</code> and
9074 <code class="varname">SETGID_GAMES_PERMS</code>.</p> 9078 <code class="varname">SETGID_GAMES_PERMS</code>.</p>
9075<p>An example that illustrates some of the variables described above is 9079<p>An example that illustrates some of the variables described above is
9076 <code class="filename">games/moon-buggy</code>. <code class="varname">OWN_DIRS_PERMS</code> is 9080 <code class="filename">games/moon-buggy</code>. <code class="varname">OWN_DIRS_PERMS</code> is
9077 used to properly set directory permissions of the directory where the 9081 used to properly set directory permissions of the directory where the
9078 scorefile is saved, <code class="varname">REQD_FILES_PERMS</code> is used to create a 9082 scorefile is saved, <code class="varname">REQD_FILES_PERMS</code> is used to create a
9079 dummy scorefile (<code class="filename">mbscore</code>) with the proper permissions 9083 dummy scorefile (<code class="filename">mbscore</code>) with the proper permissions
9080 and <code class="varname">SPECIAL_PERMS</code> is used to install setgid the game 9084 and <code class="varname">SPECIAL_PERMS</code> is used to install setgid the game
9081 binary:</p> 9085 binary:</p>
9082<pre class="programlisting"> 9086<pre class="programlisting">
9083USE_GAMESGROUP= yes 9087USE_GAMESGROUP= yes
9084 9088
9085BUILD_DEFS+= VARBASE 9089BUILD_DEFS+= VARBASE
9086 9090
9087OWN_DIRS_PERMS+= ${VARBASE}/games/moon-buggy ${GAMEDIR_PERMS} 9091OWN_DIRS_PERMS+= ${VARBASE}/games/moon-buggy ${GAMEDIR_PERMS}
9088REQD_FILES_PERMS+= /dev/null ${VARBASE}/games/moon-buggy/mbscore ${GAMEDATA_PERMS} 9092REQD_FILES_PERMS+= /dev/null ${VARBASE}/games/moon-buggy/mbscore ${GAMEDATA_PERMS}
9089SPECIAL_PERMS+= ${PREFIX}/bin/moon-buggy ${SETGID_GAMES_PERMS} 9093SPECIAL_PERMS+= ${PREFIX}/bin/moon-buggy ${SETGID_GAMES_PERMS}
9090</pre> 9094</pre>
9091<p>Various <code class="varname">INSTALL_*</code> variables are also available: 9095<p>Various <code class="varname">INSTALL_*</code> variables are also available:
9092 <code class="varname">INSTALL_GAME</code> to install setgid game binaries, 9096 <code class="varname">INSTALL_GAME</code> to install setgid game binaries,
9093 <code class="varname">INSTALL_GAME_DIR</code> to install game directories that are 9097 <code class="varname">INSTALL_GAME_DIR</code> to install game directories that are
9094 needed to be accessed by setgid games and 9098 needed to be accessed by setgid games and
9095 <code class="varname">INSTALL_GAME_DATA</code> to install scorefiles.</p> 9099 <code class="varname">INSTALL_GAME_DATA</code> to install scorefiles.</p>
9096<p>A package should therefore never hard code file ownership or 9100<p>A package should therefore never hard code file ownership or
9097 access permissions but rely on <code class="varname">*_PERMS</code> as described above 9101 access permissions but rely on <code class="varname">*_PERMS</code> as described above
9098 or alternatively on <code class="varname">INSTALL_GAME</code>, 9102 or alternatively on <code class="varname">INSTALL_GAME</code>,
9099 <code class="varname">INSTALL_GAME_DATA</code> and 9103 <code class="varname">INSTALL_GAME_DATA</code> and
9100 <code class="varname">INSTALL_GAME_DIR</code> to set these correctly.</p> 9104 <code class="varname">INSTALL_GAME_DIR</code> to set these correctly.</p>
9101</div> 9105</div>
9102<div class="sect2"> 9106<div class="sect2">
9103<div class="titlepage"><div><div><h3 class="title"> 9107<div class="titlepage"><div><div><h3 class="title">
9104<a name="destdir-support"></a>21.6.4. Adding DESTDIR support to packages</h3></div></div></div> 9108<a name="destdir-support"></a>21.6.4. Adding DESTDIR support to packages</h3></div></div></div>
9105<p><code class="varname">DESTDIR</code> support means that a package 9109<p><code class="varname">DESTDIR</code> support means that a package
9106 installs into a staging directory, not the final location of the 9110 installs into a staging directory, not the final location of the
9107 files. Then a binary package is created which can be used for 9111 files. Then a binary package is created which can be used for
9108 installation as usual. There are two ways: Either the package must 9112 installation as usual. There are two ways: Either the package must
9109 install as root (<span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span>) or the package can 9113 install as root (<span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span>) or the package can
9110 install as non-root user (<span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>).</p> 9114 install as non-root user (<span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>).</p>
9111<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9115<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9112<li class="listitem"><p><code class="varname">PKG_DESTDIR_SUPPORT</code> has to be 9116<li class="listitem"><p><code class="varname">PKG_DESTDIR_SUPPORT</code> has to be
9113 set to <span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>. 9117 set to <span class="quote">&#8220;<span class="quote">destdir</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span>.
9114 By default <code class="varname">PKG_DESTDIR_SUPPORT</code> 9118 By default <code class="varname">PKG_DESTDIR_SUPPORT</code>
9115 is set to <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span> to help catching more 9119 is set to <span class="quote">&#8220;<span class="quote">user-destdir</span>&#8221;</span> to help catching more
9116 potential packaging problems. If bsd.prefs.mk is included in the Makefile, 9120 potential packaging problems. If bsd.prefs.mk is included in the Makefile,
9117 <code class="varname">PKG_DESTDIR_SUPPORT</code> needs to be set before 9121 <code class="varname">PKG_DESTDIR_SUPPORT</code> needs to be set before
9118 the inclusion.</p></li> 9122 the inclusion.</p></li>
9119<li class="listitem"><p>All installation operations have to be prefixed with 9123<li class="listitem"><p>All installation operations have to be prefixed with
9120 <code class="filename">${DESTDIR}</code>.</p></li> 9124 <code class="filename">${DESTDIR}</code>.</p></li>
9121<li class="listitem"><p>automake gets this DESTDIR mostly right 9125<li class="listitem"><p>automake gets this DESTDIR mostly right
9122 automatically. Many manual rules and pre/post-install often are 9126 automatically. Many manual rules and pre/post-install often are
9123 incorrect; fix them.</p></li> 9127 incorrect; fix them.</p></li>
9124<li class="listitem"><p>If files are installed with special owner/group 9128<li class="listitem"><p>If files are installed with special owner/group
9125 use <code class="varname">SPECIAL_PERMS</code>.</p></li> 9129 use <code class="varname">SPECIAL_PERMS</code>.</p></li>
9126<li class="listitem"><p>In general, packages should support 9130<li class="listitem"><p>In general, packages should support
9127 <code class="varname">UNPRIVILEGED</code> to be able to use 9131 <code class="varname">UNPRIVILEGED</code> to be able to use
9128 DESTDIR.</p></li> 9132 DESTDIR.</p></li>
9129</ul></div> 9133</ul></div>
9130</div> 9134</div>
9131<div class="sect2"> 9135<div class="sect2">
9132<div class="titlepage"><div><div><h3 class="title"> 9136<div class="titlepage"><div><div><h3 class="title">
9133<a name="hardcoded-paths"></a>21.6.5. Packages with hardcoded paths to other interpreters</h3></div></div></div> 9137<a name="hardcoded-paths"></a>21.6.5. Packages with hardcoded paths to other interpreters</h3></div></div></div>
9134<p>Your package may also contain scripts with hardcoded paths to 9138<p>Your package may also contain scripts with hardcoded paths to
9135 other interpreters besides (or as well as) Perl. To correct the 9139 other interpreters besides (or as well as) Perl. To correct the
9136 full pathname to the script interpreter, you need to set the 9140 full pathname to the script interpreter, you need to set the
9137 following definitions in your <code class="filename">Makefile</code> (we 9141 following definitions in your <code class="filename">Makefile</code> (we
9138 shall use <span class="command"><strong>tclsh</strong></span> in this example):</p> 9142 shall use <span class="command"><strong>tclsh</strong></span> in this example):</p>
9139<pre class="programlisting"> 9143<pre class="programlisting">
9140REPLACE_INTERPRETER+= tcl 9144REPLACE_INTERPRETER+= tcl
9141REPLACE.tcl.old= .*/bin/tclsh 9145REPLACE.tcl.old= .*/bin/tclsh
9142REPLACE.tcl.new= ${PREFIX}/bin/tclsh 9146REPLACE.tcl.new= ${PREFIX}/bin/tclsh
9143REPLACE_FILES.tcl= # list of tcl scripts which need to be fixed, 9147REPLACE_FILES.tcl= # list of tcl scripts which need to be fixed,
9144# relative to ${WRKSRC}, just as in REPLACE_PERL 9148# relative to ${WRKSRC}, just as in REPLACE_PERL
9145</pre> 9149</pre>
9146</div> 9150</div>
9147<div class="sect2"> 9151<div class="sect2">
9148<div class="titlepage"><div><div><h3 class="title"> 9152<div class="titlepage"><div><div><h3 class="title">
9149<a name="perl-modules"></a>21.6.6. Packages installing Perl modules</h3></div></div></div> 9153<a name="perl-modules"></a>21.6.6. Packages installing Perl modules</h3></div></div></div>
9150<p>Makefiles of packages providing perl5 modules should include 9154<p>Makefiles of packages providing perl5 modules should include
9151 the Makefile fragment 9155 the Makefile fragment
9152 <code class="filename">../../lang/perl5/module.mk</code>. It provides a 9156 <code class="filename">../../lang/perl5/module.mk</code>. It provides a
9153 <span class="command"><strong>do-configure</strong></span> target for the standard perl 9157 <span class="command"><strong>do-configure</strong></span> target for the standard perl
9154 configuration for such modules as well as various hooks to tune 9158 configuration for such modules as well as various hooks to tune
9155 this configuration. See comments in this file for 9159 this configuration. See comments in this file for
9156 details.</p> 9160 details.</p>
9157<p>Perl5 modules will install into different places depending 9161<p>Perl5 modules will install into different places depending
9158 on the version of perl used during the build process. To 9162 on the version of perl used during the build process. To
9159 address this, pkgsrc will append lines to the 9163 address this, pkgsrc will append lines to the
9160 <code class="filename">PLIST</code> corresponding to the files listed in 9164 <code class="filename">PLIST</code> corresponding to the files listed in
9161 the installed <code class="filename">.packlist</code> file generated by 9165 the installed <code class="filename">.packlist</code> file generated by
9162 most perl5 modules. This is invoked by defining 9166 most perl5 modules. This is invoked by defining
9163 <code class="varname">PERL5_PACKLIST</code> to a space-separated list of 9167 <code class="varname">PERL5_PACKLIST</code> to a space-separated list of
9164 packlist files relative to <code class="varname">PERL5_PACKLIST_DIR</code> 9168 packlist files relative to <code class="varname">PERL5_PACKLIST_DIR</code>
9165 (<code class="varname">PERL5_INSTALLVENDORARCH</code> by default), 9169 (<code class="varname">PERL5_INSTALLVENDORARCH</code> by default),
9166 e.g.:</p> 9170 e.g.:</p>
9167<pre class="programlisting"> 9171<pre class="programlisting">
9168PERL5_PACKLIST= auto/Pg/.packlist 9172PERL5_PACKLIST= auto/Pg/.packlist
9169</pre> 9173</pre>
9170<p>The perl5 config variables 9174<p>The perl5 config variables
9171 <code class="varname">installarchlib</code>, 9175 <code class="varname">installarchlib</code>,
9172 <code class="varname">installscript</code>, 9176 <code class="varname">installscript</code>,
9173 <code class="varname">installvendorbin</code>, 9177 <code class="varname">installvendorbin</code>,
9174 <code class="varname">installvendorscript</code>, 9178 <code class="varname">installvendorscript</code>,
9175 <code class="varname">installvendorarch</code>, 9179 <code class="varname">installvendorarch</code>,
9176 <code class="varname">installvendorlib</code>, 9180 <code class="varname">installvendorlib</code>,
9177 <code class="varname">installvendorman1dir</code>, and 9181 <code class="varname">installvendorman1dir</code>, and
9178 <code class="varname">installvendorman3dir</code> represent those 9182 <code class="varname">installvendorman3dir</code> represent those
9179 locations in which components of perl5 modules may be installed, 9183 locations in which components of perl5 modules may be installed,
9180 provided as variable with uppercase and prefixed with 9184 provided as variable with uppercase and prefixed with
9181 <code class="varname">PERL5_</code>, e.g. <code class="varname">PERL5_INSTALLARCHLIB</code> 9185 <code class="varname">PERL5_</code>, e.g. <code class="varname">PERL5_INSTALLARCHLIB</code>
9182 and may be used by perl5 packages that don't have a packlist. 9186 and may be used by perl5 packages that don't have a packlist.
9183 These variables are also substituted for in the 9187 These variables are also substituted for in the
9184 <code class="filename">PLIST</code> as uppercase prefixed with 9188 <code class="filename">PLIST</code> as uppercase prefixed with
9185 <code class="varname">PERL5_SUB_</code>.</p> 9189 <code class="varname">PERL5_SUB_</code>.</p>
9186</div> 9190</div>
9187<div class="sect2"> 9191<div class="sect2">
9188<div class="titlepage"><div><div><h3 class="title"> 9192<div class="titlepage"><div><div><h3 class="title">
9189<a name="faq.info-files"></a>21.6.7. Packages installing info files</h3></div></div></div> 9193<a name="faq.info-files"></a>21.6.7. Packages installing info files</h3></div></div></div>
9190<p>Some packages install info files or use the 9194<p>Some packages install info files or use the
9191 <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span> 9195 <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> or <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span>
9192 commands. <code class="varname">INFO_FILES</code> should be defined in 9196 commands. <code class="varname">INFO_FILES</code> should be defined in
9193 the package Makefile so that <code class="filename">INSTALL</code> and 9197 the package Makefile so that <code class="filename">INSTALL</code> and
9194 <code class="filename">DEINSTALL</code> scripts will be generated to 9198 <code class="filename">DEINSTALL</code> scripts will be generated to
9195 handle registration of the info files in the Info directory 9199 handle registration of the info files in the Info directory
9196 file. The <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span> command used for the info 9200 file. The <span class="quote">&#8220;<span class="quote">install-info</span>&#8221;</span> command used for the info
9197 files registration is either provided by the system, or by a 9201 files registration is either provided by the system, or by a
9198 special purpose package automatically added as dependency if 9202 special purpose package automatically added as dependency if
9199 needed.</p> 9203 needed.</p>
9200<p><code class="varname">PKGINFODIR</code> is the directory under 9204<p><code class="varname">PKGINFODIR</code> is the directory under
9201 <code class="filename">${PREFIX}</code> where info files are primarily 9205 <code class="filename">${PREFIX}</code> where info files are primarily
9202 located. <code class="varname">PKGINFODIR</code> defaults to 9206 located. <code class="varname">PKGINFODIR</code> defaults to
9203 <span class="quote">&#8220;<span class="quote">info</span>&#8221;</span> and can be overridden by the user.</p> 9207 <span class="quote">&#8220;<span class="quote">info</span>&#8221;</span> and can be overridden by the user.</p>
9204<p>The info files for the package should be listed in the 9208<p>The info files for the package should be listed in the
9205 package <code class="filename">PLIST</code>; however any split info files 9209 package <code class="filename">PLIST</code>; however any split info files
9206 need not be listed.</p> 9210 need not be listed.</p>
9207<p>A package which needs the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command 9211<p>A package which needs the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command
9208 at build time must add <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> to 9212 at build time must add <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> to
9209 <code class="varname">USE_TOOLS</code> in its Makefile. If a minimum 9213 <code class="varname">USE_TOOLS</code> in its Makefile. If a minimum
9210 version of the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command is needed it 9214 version of the <span class="quote">&#8220;<span class="quote">makeinfo</span>&#8221;</span> command is needed it
9211 should be noted with the <code class="varname">TEXINFO_REQD</code> 9215 should be noted with the <code class="varname">TEXINFO_REQD</code>
9212 variable in the package <code class="filename">Makefile</code>. By 9216 variable in the package <code class="filename">Makefile</code>. By
9213 default, a minimum version of 3.12 is required. If the system 9217 default, a minimum version of 3.12 is required. If the system
9214 does not provide a <span class="command"><strong>makeinfo</strong></span> command or if it 9218 does not provide a <span class="command"><strong>makeinfo</strong></span> command or if it
9215 does not match the required minimum, a build dependency on the 9219 does not match the required minimum, a build dependency on the
9216 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/gtexinfo/index.html" target="_top"><code class="filename">devel/gtexinfo</code></a> package will 9220 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/devel/gtexinfo/index.html" target="_top"><code class="filename">devel/gtexinfo</code></a> package will
9217 be added automatically.</p> 9221 be added automatically.</p>
9218<p>The build and installation process of the software provided 9222<p>The build and installation process of the software provided
9219 by the package should not use the 9223 by the package should not use the
9220 <span class="command"><strong>install-info</strong></span> command as the registration of 9224 <span class="command"><strong>install-info</strong></span> command as the registration of
9221 info files is the task of the package 9225 info files is the task of the package
9222 <code class="filename">INSTALL</code> script, and it must use the 9226 <code class="filename">INSTALL</code> script, and it must use the
9223 appropriate <span class="command"><strong>makeinfo</strong></span> command.</p> 9227 appropriate <span class="command"><strong>makeinfo</strong></span> command.</p>
9224<p>To achieve this goal, the pkgsrc infrastructure creates 9228<p>To achieve this goal, the pkgsrc infrastructure creates
9225 overriding scripts for the <span class="command"><strong>install-info</strong></span> and 9229 overriding scripts for the <span class="command"><strong>install-info</strong></span> and
9226 <span class="command"><strong>makeinfo</strong></span> commands in a directory listed early 9230 <span class="command"><strong>makeinfo</strong></span> commands in a directory listed early
9227 in <code class="varname">PATH</code>.</p> 9231 in <code class="varname">PATH</code>.</p>
9228<p>The script overriding <span class="command"><strong>install-info</strong></span> has 9232<p>The script overriding <span class="command"><strong>install-info</strong></span> has
9229 no effect except the logging of a message. The script overriding 9233 no effect except the logging of a message. The script overriding
9230 <span class="command"><strong>makeinfo</strong></span> logs a message and according to the 9234 <span class="command"><strong>makeinfo</strong></span> logs a message and according to the
9231 value of <code class="varname">TEXINFO_REQD</code> either runs the appropriate 9235 value of <code class="varname">TEXINFO_REQD</code> either runs the appropriate
9232 <span class="command"><strong>makeinfo</strong></span> command or exit on error.</p> 9236 <span class="command"><strong>makeinfo</strong></span> command or exit on error.</p>
9233</div> 9237</div>
9234<div class="sect2"> 9238<div class="sect2">
9235<div class="titlepage"><div><div><h3 class="title"> 9239<div class="titlepage"><div><div><h3 class="title">
9236<a name="manpages"></a>21.6.8. Packages installing man pages</h3></div></div></div> 9240<a name="manpages"></a>21.6.8. Packages installing man pages</h3></div></div></div>
9237<p>All packages that install manual pages should install them 9241<p>All packages that install manual pages should install them
9238 into the same directory, so that there is one common place to look 9242 into the same directory, so that there is one common place to look
9239 for them. In pkgsrc, this place is 9243 for them. In pkgsrc, this place is
9240 <code class="literal">${PREFIX}/${PKGMANDIR}</code>, and this expression 9244 <code class="literal">${PREFIX}/${PKGMANDIR}</code>, and this expression
9241 should be used in packages. The default for 9245 should be used in packages. The default for
9242 <code class="varname">PKGMANDIR</code> is 9246 <code class="varname">PKGMANDIR</code> is
9243 <span class="quote">&#8220;<span class="quote"><code class="filename">man</code></span>&#8221;</span>. Another often-used value 9247 <span class="quote">&#8220;<span class="quote"><code class="filename">man</code></span>&#8221;</span>. Another often-used value
9244 is <span class="quote">&#8220;<span class="quote"><code class="filename">share/man</code></span>&#8221;</span>.</p> 9248 is <span class="quote">&#8220;<span class="quote"><code class="filename">share/man</code></span>&#8221;</span>.</p>
9245<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 9249<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
9246<h3 class="title">Note</h3> 9250<h3 class="title">Note</h3>
9247<p>The support for a custom <code class="varname">PKGMANDIR</code> 9251<p>The support for a custom <code class="varname">PKGMANDIR</code>
9248 is far from complete.</p> 9252 is far from complete.</p>
9249</div> 9253</div>
9250<p>The <code class="filename">PLIST</code> files can just use 9254<p>The <code class="filename">PLIST</code> files can just use
9251 <code class="filename">man/</code> as the top level directory for the man 9255 <code class="filename">man/</code> as the top level directory for the man
9252 page file entries, and the pkgsrc framework will convert as 9256 page file entries, and the pkgsrc framework will convert as
9253 needed. In all other places, the correct 9257 needed. In all other places, the correct
9254 <code class="varname">PKGMANDIR</code> must be used.</p> 9258 <code class="varname">PKGMANDIR</code> must be used.</p>
9255<p>Packages that are 9259<p>Packages that are
9256 configured with <code class="varname">GNU_CONFIGURE</code> set as 9260 configured with <code class="varname">GNU_CONFIGURE</code> set as
9257 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, by default will use the 9261 <span class="quote">&#8220;<span class="quote">yes</span>&#8221;</span>, by default will use the
9258 <code class="filename">./configure</code> 9262 <code class="filename">./configure</code>
9259 --mandir switch to set where the man pages should be installed. 9263 --mandir switch to set where the man pages should be installed.
9260 The path is <code class="varname">GNU_CONFIGURE_MANDIR</code> which defaults 9264 The path is <code class="varname">GNU_CONFIGURE_MANDIR</code> which defaults
9261 to <code class="varname">${PREFIX}/${PKGMANDIR}</code>.</p> 9265 to <code class="varname">${PREFIX}/${PKGMANDIR}</code>.</p>
9262<p>Packages that use <code class="varname">GNU_CONFIGURE</code> but do not 9266<p>Packages that use <code class="varname">GNU_CONFIGURE</code> but do not
9263 use --mandir, can set <code class="varname">CONFIGURE_HAS_MANDIR</code> 9267 use --mandir, can set <code class="varname">CONFIGURE_HAS_MANDIR</code>
9264 to <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span>. 9268 to <span class="quote">&#8220;<span class="quote">no</span>&#8221;</span>.
9265 Or if the <code class="filename">./configure</code> script uses 9269 Or if the <code class="filename">./configure</code> script uses
9266 a non-standard use of --mandir, you can set 9270 a non-standard use of --mandir, you can set
9267 <code class="varname">GNU_CONFIGURE_MANDIR</code> as needed.</p> 9271 <code class="varname">GNU_CONFIGURE_MANDIR</code> as needed.</p>
9268<p>See <a class="xref" href="#manpage-compression" title="19.5. Man page compression">Section 19.5, &#8220;Man page compression&#8221;</a> for 9272<p>See <a class="xref" href="#manpage-compression" title="19.5. Man page compression">Section 19.5, &#8220;Man page compression&#8221;</a> for
9269 information on installation of compressed manual pages.</p> 9273 information on installation of compressed manual pages.</p>
9270</div> 9274</div>
9271<div class="sect2"> 9275<div class="sect2">
9272<div class="titlepage"><div><div><h3 class="title"> 9276<div class="titlepage"><div><div><h3 class="title">
9273<a name="x11-fonts"></a>21.6.9. Packages installing X11 fonts</h3></div></div></div> 9277<a name="x11-fonts"></a>21.6.9. Packages installing X11 fonts</h3></div></div></div>
9274<p>If a package installs font files, you will need to rebuild 9278<p>If a package installs font files, you will need to rebuild
9275 the fonts database in the directory where they get installed at 9279 the fonts database in the directory where they get installed at
9276 installation and deinstallation time. This can be automatically 9280 installation and deinstallation time. This can be automatically
9277 done by using the pkginstall framework.</p> 9281 done by using the pkginstall framework.</p>
9278<p>You can list the directories where fonts are installed in the 9282<p>You can list the directories where fonts are installed in the
9279 <code class="varname">FONTS_DIRS.<em class="replaceable"><code>type</code></em></code> 9283 <code class="varname">FONTS_DIRS.<em class="replaceable"><code>type</code></em></code>
9280 variables, where <em class="replaceable"><code>type</code></em> can be one of 9284 variables, where <em class="replaceable"><code>type</code></em> can be one of
9281 <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>. 9285 <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>.
9282 Also make sure that the database file 9286 Also make sure that the database file
9283 <code class="filename">fonts.dir</code> is not listed in the PLIST.</p> 9287 <code class="filename">fonts.dir</code> is not listed in the PLIST.</p>
9284<p>Note that you should not create new directories for fonts; 9288<p>Note that you should not create new directories for fonts;
9285 instead use the standard ones to avoid that the user needs to 9289 instead use the standard ones to avoid that the user needs to
9286 manually configure his X server to find them.</p> 9290 manually configure his X server to find them.</p>
9287</div> 9291</div>
9288<div class="sect2"> 9292<div class="sect2">
9289<div class="titlepage"><div><div><h3 class="title"> 9293<div class="titlepage"><div><div><h3 class="title">
9290<a name="sgml-xml-data"></a>21.6.10. Packages installing SGML or XML data</h3></div></div></div> 9294<a name="sgml-xml-data"></a>21.6.10. Packages installing SGML or XML data</h3></div></div></div>
9291<p>If a package installs SGML or XML data files that need to be 9295<p>If a package installs SGML or XML data files that need to be
9292 registered in system-wide catalogs (like DTDs, sub-catalogs, 9296 registered in system-wide catalogs (like DTDs, sub-catalogs,
9293 etc.), you need to take some extra steps:</p> 9297 etc.), you need to take some extra steps:</p>
9294<div class="orderedlist"><ol class="orderedlist" type="1"> 9298<div class="orderedlist"><ol class="orderedlist" type="1">
9295<li class="listitem"><p>Include 9299<li class="listitem"><p>Include
9296 <code class="filename">../../textproc/xmlcatmgr/catalogs.mk</code> in 9300 <code class="filename">../../textproc/xmlcatmgr/catalogs.mk</code> in
9297 your <code class="filename">Makefile</code>, which takes care of 9301 your <code class="filename">Makefile</code>, which takes care of
9298 registering those files in system-wide catalogs at 9302 registering those files in system-wide catalogs at
9299 installation and deinstallation time.</p></li> 9303 installation and deinstallation time.</p></li>
9300<li class="listitem"><p>Set <code class="varname">SGML_CATALOGS</code> to the full path of 9304<li class="listitem"><p>Set <code class="varname">SGML_CATALOGS</code> to the full path of
9301 any SGML catalogs installed by the package.</p></li> 9305 any SGML catalogs installed by the package.</p></li>
9302<li class="listitem"><p>Set <code class="varname">XML_CATALOGS</code> to the full path of 9306<li class="listitem"><p>Set <code class="varname">XML_CATALOGS</code> to the full path of
9303 any XML catalogs installed by the package.</p></li> 9307 any XML catalogs installed by the package.</p></li>
9304<li class="listitem"><p>Set <code class="varname">SGML_ENTRIES</code> to individual entries 9308<li class="listitem"><p>Set <code class="varname">SGML_ENTRIES</code> to individual entries
9305 to be added to the SGML catalog. These come in groups of 9309 to be added to the SGML catalog. These come in groups of
9306 three strings; see xmlcatmgr(1) for more information 9310 three strings; see xmlcatmgr(1) for more information
9307 (specifically, arguments recognized by the 'add' action). 9311 (specifically, arguments recognized by the 'add' action).
9308 Note that you will normally not use this variable.</p></li> 9312 Note that you will normally not use this variable.</p></li>
9309<li class="listitem"><p>Set <code class="varname">XML_ENTRIES</code> to individual entries 9313<li class="listitem"><p>Set <code class="varname">XML_ENTRIES</code> to individual entries
9310 to be added to the XML catalog. These come in groups of three 9314 to be added to the XML catalog. These come in groups of three
9311 strings; see xmlcatmgr(1) for more information (specifically, 9315 strings; see xmlcatmgr(1) for more information (specifically,
9312 arguments recognized by the 'add' action). Note that you will 9316 arguments recognized by the 'add' action). Note that you will
9313 normally not use this variable.</p></li> 9317 normally not use this variable.</p></li>
9314</ol></div> 9318</ol></div>
9315</div> 9319</div>
9316<div class="sect2"> 9320<div class="sect2">
9317<div class="titlepage"><div><div><h3 class="title"> 9321<div class="titlepage"><div><div><h3 class="title">
9318<a name="mime-database"></a>21.6.11. Packages installing extensions to the MIME database</h3></div></div></div> 9322<a name="mime-database"></a>21.6.11. Packages installing extensions to the MIME database</h3></div></div></div>
9319<p>If a package provides extensions to the MIME database by 9323<p>If a package provides extensions to the MIME database by
9320 installing <code class="filename">.xml</code> files inside 9324 installing <code class="filename">.xml</code> files inside
9321 <code class="filename">${PREFIX}/share/mime/packages</code>, you 9325 <code class="filename">${PREFIX}/share/mime/packages</code>, you
9322 need to take some extra steps to ensure that the database is kept 9326 need to take some extra steps to ensure that the database is kept
9323 consistent with respect to these new files:</p> 9327 consistent with respect to these new files:</p>
9324<div class="orderedlist"><ol class="orderedlist" type="1"> 9328<div class="orderedlist"><ol class="orderedlist" type="1">
9325<li class="listitem"><p>Include 9329<li class="listitem"><p>Include
9326 <code class="filename">../../databases/shared-mime-info/mimedb.mk</code> 9330 <code class="filename">../../databases/shared-mime-info/mimedb.mk</code>
9327 (avoid using the <code class="filename">buildlink3.mk</code> file from 9331 (avoid using the <code class="filename">buildlink3.mk</code> file from
9328 this same directory, which is reserved for inclusion from 9332 this same directory, which is reserved for inclusion from
9329 other <code class="filename">buildlink3.mk</code> files). It takes 9333 other <code class="filename">buildlink3.mk</code> files). It takes
9330 care of rebuilding the MIME database at installation and 9334 care of rebuilding the MIME database at installation and
9331 deinstallation time, and disallows any access to it directly 9335 deinstallation time, and disallows any access to it directly
9332 from the package.</p></li> 9336 from the package.</p></li>
9333<li class="listitem"><p>Check the PLIST and remove any entries under the 9337<li class="listitem"><p>Check the PLIST and remove any entries under the
9334 <code class="filename">share/mime</code> directory, 9338 <code class="filename">share/mime</code> directory,
9335 <span class="emphasis"><em>except</em></span> for files saved under 9339 <span class="emphasis"><em>except</em></span> for files saved under
9336 <code class="filename">share/mime/packages</code>. The former are 9340 <code class="filename">share/mime/packages</code>. The former are
9337 handled automatically by 9341 handled automatically by
9338 the update-mime-database program, but the latter are 9342 the update-mime-database program, but the latter are
9339 package-dependent and must be removed by the package that 9343 package-dependent and must be removed by the package that
9340 installed them in the first place.</p></li> 9344 installed them in the first place.</p></li>
9341<li class="listitem"><p>Remove any <code class="filename">share/mime/*</code> directories 9345<li class="listitem"><p>Remove any <code class="filename">share/mime/*</code> directories
9342 from the PLIST. They will be handled by the shared-mime-info 9346 from the PLIST. They will be handled by the shared-mime-info
9343 package.</p></li> 9347 package.</p></li>
9344</ol></div> 9348</ol></div>
9345</div> 9349</div>
9346<div class="sect2"> 9350<div class="sect2">
9347<div class="titlepage"><div><div><h3 class="title"> 9351<div class="titlepage"><div><div><h3 class="title">
9348<a name="intltool"></a>21.6.12. Packages using intltool</h3></div></div></div> 9352<a name="intltool"></a>21.6.12. Packages using intltool</h3></div></div></div>
9349<p>If a package uses intltool during its build, add 9353<p>If a package uses intltool during its build, add
9350 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code>, 9354 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code>,
9351 which forces it to use the intltool package provided by pkgsrc, 9355 which forces it to use the intltool package provided by pkgsrc,
9352 instead of the one bundled with the distribution file.</p> 9356 instead of the one bundled with the distribution file.</p>
9353<p>This tracks intltool's build-time dependencies and uses the 9357<p>This tracks intltool's build-time dependencies and uses the
9354 latest available version; this way, the package benefits of any 9358 latest available version; this way, the package benefits of any
9355 bug fixes that may have appeared since it was released.</p> 9359 bug fixes that may have appeared since it was released.</p>
9356</div> 9360</div>
9357<div class="sect2"> 9361<div class="sect2">
9358<div class="titlepage"><div><div><h3 class="title"> 9362<div class="titlepage"><div><div><h3 class="title">
9359<a name="startup-scripts"></a>21.6.13. Packages installing startup scripts</h3></div></div></div> 9363<a name="startup-scripts"></a>21.6.13. Packages installing startup scripts</h3></div></div></div>
9360<p>If a package contains a rc.d script, it won't be copied into 9364<p>If a package contains a rc.d script, it won't be copied into
9361 the startup directory by default, but you can enable it, by adding 9365 the startup directory by default, but you can enable it, by adding
9362 the option <code class="varname">PKG_RCD_SCRIPTS=YES</code> in 9366 the option <code class="varname">PKG_RCD_SCRIPTS=YES</code> in
9363 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. This option will copy the scripts 9367 <a class="link" href="#mk.conf"><code class="filename">mk.conf</code></a>. This option will copy the scripts
9364 into <code class="filename">/etc/rc.d</code> when a package is installed, and 9368 into <code class="filename">/etc/rc.d</code> when a package is installed, and
9365 it will automatically remove the scripts when the package is 9369 it will automatically remove the scripts when the package is
9366 deinstalled.</p> 9370 deinstalled.</p>
9367</div> 9371</div>
9368<div class="sect2"> 9372<div class="sect2">
9369<div class="titlepage"><div><div><h3 class="title"> 9373<div class="titlepage"><div><div><h3 class="title">
9370<a name="tex-packages"></a>21.6.14. Packages installing TeX modules</h3></div></div></div> 9374<a name="tex-packages"></a>21.6.14. Packages installing TeX modules</h3></div></div></div>
9371<p>If a package installs TeX packages into the texmf tree, 9375<p>If a package installs TeX packages into the texmf tree,
9372 the <code class="filename">ls-R</code> database of the tree needs to be 9376 the <code class="filename">ls-R</code> database of the tree needs to be
9373 updated.</p> 9377 updated.</p>
9374<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 9378<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
9375<h3 class="title">Note</h3> 9379<h3 class="title">Note</h3>
9376<p>Except the main TeX packages such as kpathsea, 9380<p>Except the main TeX packages such as kpathsea,
9377 packages should install files 9381 packages should install files
9378 into <code class="filename">${PREFIX}/share/texmf-dist</code>, 9382 into <code class="filename">${PREFIX}/share/texmf-dist</code>,
9379 not <code class="filename">${PREFIX}/share/texmf</code>.</p> 9383 not <code class="filename">${PREFIX}/share/texmf</code>.</p>
9380</div> 9384</div>
9381<div class="orderedlist"><ol class="orderedlist" type="1"> 9385<div class="orderedlist"><ol class="orderedlist" type="1">
9382<li class="listitem"><p>Include 9386<li class="listitem"><p>Include
9383 <code class="filename">../../print/kpathsea/texmf.mk</code>. This 9387 <code class="filename">../../print/kpathsea/texmf.mk</code>. This
9384 takes care of rebuilding the <code class="filename">ls-R</code> 9388 takes care of rebuilding the <code class="filename">ls-R</code>
9385 database at installation and deinstallation time.</p></li> 9389 database at installation and deinstallation time.</p></li>
9386<li class="listitem"> 9390<li class="listitem">
9387<p>If your package installs files into a texmf 9391<p>If your package installs files into a texmf
9388 tree other than the one 9392 tree other than the one
9389 at <code class="filename">${PREFIX}/share/texmf-dist</code>, 9393 at <code class="filename">${PREFIX}/share/texmf-dist</code>,
9390 set <code class="varname">TEX_TEXMF_DIRS</code> to the list of all texmf 9394 set <code class="varname">TEX_TEXMF_DIRS</code> to the list of all texmf
9391 trees that need database update.</p> 9395 trees that need database update.</p>
9392<p>If your package also installs font map files that need 9396<p>If your package also installs font map files that need
9393 to be registered using <span class="command"><strong>updmap</strong></span>, 9397 to be registered using <span class="command"><strong>updmap</strong></span>,
9394 include <code class="filename">../../print/tex-tetex/map.mk</code> and 9398 include <code class="filename">../../print/tex-tetex/map.mk</code> and
9395 set <code class="varname">TEX_MAP_FILES</code> and/or 9399 set <code class="varname">TEX_MAP_FILES</code> and/or
9396 <code class="varname">TEX_MIXEDMAP_FILES</code> to the list of all 9400 <code class="varname">TEX_MIXEDMAP_FILES</code> to the list of all
9397 such font map files. Then <span class="command"><strong>updmap</strong></span> will 9401 such font map files. Then <span class="command"><strong>updmap</strong></span> will
9398 be run automatically at installation/deinstallation to 9402 be run automatically at installation/deinstallation to
9399 enable/disable font map files for TeX output 9403 enable/disable font map files for TeX output
9400 drivers.</p> 9404 drivers.</p>
9401</li> 9405</li>
9402<li class="listitem"><p>Make sure that none of <code class="filename">ls-R</code> 9406<li class="listitem"><p>Make sure that none of <code class="filename">ls-R</code>
9403 databases are included in <code class="filename">PLIST</code>, as 9407 databases are included in <code class="filename">PLIST</code>, as
9404 they will be removed only by the kpathsea package.</p></li> 9408 they will be removed only by the kpathsea package.</p></li>
9405</ol></div> 9409</ol></div>
9406</div> 9410</div>
9407<div class="sect2"> 9411<div class="sect2">
9408<div class="titlepage"><div><div><h3 class="title"> 9412<div class="titlepage"><div><div><h3 class="title">
9409<a name="emulation-packages"></a>21.6.15. Packages supporting running binaries in 9413<a name="emulation-packages"></a>21.6.15. Packages supporting running binaries in
9410 emulation</h3></div></div></div> 9414 emulation</h3></div></div></div>
9411<p>There are some packages that provide libraries and 9415<p>There are some packages that provide libraries and
9412 executables for running binaries from a one operating system 9416 executables for running binaries from a one operating system
9413 on a different one (if the latter supports it). One example 9417 on a different one (if the latter supports it). One example
9414 is running Linux binaries on NetBSD.</p> 9418 is running Linux binaries on NetBSD.</p>
9415<p>The <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/rpm2pkg/index.html" target="_top"><code class="filename">pkgtools/rpm2pkg</code></a> 9419<p>The <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/rpm2pkg/index.html" target="_top"><code class="filename">pkgtools/rpm2pkg</code></a>
9416 helps in extracting and packaging Linux rpm packages.</p> 9420 helps in extracting and packaging Linux rpm packages.</p>
9417<p>The <code class="varname">CHECK_SHLIBS</code> can be set to no to 9421<p>The <code class="varname">CHECK_SHLIBS</code> can be set to no to
9418 avoid the <span class="command"><strong>check-shlibs</strong></span> target, which tests 9422 avoid the <span class="command"><strong>check-shlibs</strong></span> target, which tests
9419 if all libraries for each installed executable can be found by 9423 if all libraries for each installed executable can be found by
9420 the dynamic linker. Since the standard dynamic linker is run, 9424 the dynamic linker. Since the standard dynamic linker is run,
9421 this fails for emulation packages, because the libraries used 9425 this fails for emulation packages, because the libraries used
9422 by the emulation are not in the standard directories.</p> 9426 by the emulation are not in the standard directories.</p>
9423</div> 9427</div>
9424<div class="sect2"> 9428<div class="sect2">
9425<div class="titlepage"><div><div><h3 class="title"> 9429<div class="titlepage"><div><div><h3 class="title">
9426<a name="hicolor-theme"></a>21.6.16. Packages installing hicolor icons</h3></div></div></div> 9430<a name="hicolor-theme"></a>21.6.16. Packages installing hicolor icons</h3></div></div></div>
9427<p>If a package installs images under the 9431<p>If a package installs images under the
9428 <code class="filename">share/icons/hicolor</code> and/or updates the 9432 <code class="filename">share/icons/hicolor</code> and/or updates the
9429 <code class="filename">share/icons/hicolor/icon-theme.cache</code> 9433 <code class="filename">share/icons/hicolor/icon-theme.cache</code>
9430 database, you need to take some extra steps to make sure that the 9434 database, you need to take some extra steps to make sure that the
9431 shared theme directory is handled appropriately and that the cache 9435 shared theme directory is handled appropriately and that the cache
9432 database is rebuilt:</p> 9436 database is rebuilt:</p>
9433<div class="orderedlist"><ol class="orderedlist" type="1"> 9437<div class="orderedlist"><ol class="orderedlist" type="1">
9434<li class="listitem"><p>Include 9438<li class="listitem"><p>Include
9435 <code class="filename">../../graphics/hicolor-icon-theme/buildlink3.mk</code>.</p></li> 9439 <code class="filename">../../graphics/hicolor-icon-theme/buildlink3.mk</code>.</p></li>
9436<li class="listitem"><p>Check the <code class="filename">PLIST</code> and remove the 9440<li class="listitem"><p>Check the <code class="filename">PLIST</code> and remove the
9437 entry that refers to the theme cache.</p></li> 9441 entry that refers to the theme cache.</p></li>
9438<li class="listitem"><p>Ensure that the PLIST does not remove the shared icon 9442<li class="listitem"><p>Ensure that the PLIST does not remove the shared icon
9439 directories from the <code class="filename">share/icons/hicolor</code> 9443 directories from the <code class="filename">share/icons/hicolor</code>
9440 hierarchy because they will be handled automatically.</p></li> 9444 hierarchy because they will be handled automatically.</p></li>
9441</ol></div> 9445</ol></div>
9442<p>The best way to verify that the PLIST is correct with 9446<p>The best way to verify that the PLIST is correct with
9443 respect to the last two points is to regenerate it using 9447 respect to the last two points is to regenerate it using
9444 <span class="command"><strong>make print-PLIST</strong></span>.</p> 9448 <span class="command"><strong>make print-PLIST</strong></span>.</p>
9445</div> 9449</div>
9446<div class="sect2"> 9450<div class="sect2">
9447<div class="titlepage"><div><div><h3 class="title"> 9451<div class="titlepage"><div><div><h3 class="title">
9448<a name="desktop-files"></a>21.6.17. Packages installing desktop files</h3></div></div></div> 9452<a name="desktop-files"></a>21.6.17. Packages installing desktop files</h3></div></div></div>
9449<p>If a package installs <code class="filename">.desktop</code> files 9453<p>If a package installs <code class="filename">.desktop</code> files
9450 under <code class="filename">share/applications</code> and these include 9454 under <code class="filename">share/applications</code> and these include
9451 MIME information (MimeType key), you need to take extra steps to 9455 MIME information (MimeType key), you need to take extra steps to
9452 ensure that they are registered into the MIME database:</p> 9456 ensure that they are registered into the MIME database:</p>
9453<div class="orderedlist"><ol class="orderedlist" type="1"> 9457<div class="orderedlist"><ol class="orderedlist" type="1">
9454<li class="listitem"><p>Include 9458<li class="listitem"><p>Include
9455 <code class="filename">../../sysutils/desktop-file-utils/desktopdb.mk</code>.</p></li> 9459 <code class="filename">../../sysutils/desktop-file-utils/desktopdb.mk</code>.</p></li>
9456<li class="listitem"><p>Check the PLIST and remove the entry that refers to the 9460<li class="listitem"><p>Check the PLIST and remove the entry that refers to the
9457 <code class="filename">share/applications/mimeinfo.cache</code> file. 9461 <code class="filename">share/applications/mimeinfo.cache</code> file.
9458 It will be handled automatically.</p></li> 9462 It will be handled automatically.</p></li>
9459</ol></div> 9463</ol></div>
9460<p>The best way to verify that the PLIST is correct with 9464<p>The best way to verify that the PLIST is correct with
9461 respect to the last point is to regenerate it using <span class="command"><strong>make 9465 respect to the last point is to regenerate it using <span class="command"><strong>make
9462 print-PLIST</strong></span>.</p> 9466 print-PLIST</strong></span>.</p>
9463</div> 9467</div>
9464</div> 9468</div>
9465<div class="sect1"> 9469<div class="sect1">
9466<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9470<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9467<a name="punting"></a>21.7. Marking packages as having problems</h2></div></div></div> 9471<a name="punting"></a>21.7. Marking packages as having problems</h2></div></div></div>
9468<p>In some cases one does not have the time to solve a problem 9472<p>In some cases one does not have the time to solve a problem
9469 immediately. In this case, one can plainly mark a package as broken. For 9473 immediately. In this case, one can plainly mark a package as broken. For
9470 this, one just sets the variable <code class="varname">BROKEN</code> to the 9474 this, one just sets the variable <code class="varname">BROKEN</code> to the
9471 reason why the package is broken (similar to the 9475 reason why the package is broken (similar to the
9472 <code class="varname">PKG_FAIL_REASON</code> variable). A user trying to build 9476 <code class="varname">PKG_FAIL_REASON</code> variable). A user trying to build
9473 the package will immediately be shown this message, and the build 9477 the package will immediately be shown this message, and the build
9474 will not be even tried.</p> 9478 will not be even tried.</p>
9475<p><code class="varname">BROKEN</code> packages are removed from pkgsrc in irregular 9479<p><code class="varname">BROKEN</code> packages are removed from pkgsrc in irregular
9476 intervals.</p> 9480 intervals.</p>
9477</div> 9481</div>
9478</div> 9482</div>
9479<div class="chapter"> 9483<div class="chapter">
9480<div class="titlepage"><div><div><h2 class="title"> 9484<div class="titlepage"><div><div><h2 class="title">
9481<a name="gnome"></a>Chapter 22. GNOME packaging and porting</h2></div></div></div> 9485<a name="gnome"></a>Chapter 22. GNOME packaging and porting</h2></div></div></div>
9482<div class="toc"> 9486<div class="toc">
9483<p><b>Table of Contents</b></p> 9487<p><b>Table of Contents</b></p>
9484<dl class="toc"> 9488<dl class="toc">
9485<dt><span class="sect1"><a href="#meta-packages">22.1. Meta packages</a></span></dt> 9489<dt><span class="sect1"><a href="#meta-packages">22.1. Meta packages</a></span></dt>
9486<dt><span class="sect1"><a href="#new-package">22.2. Packaging a GNOME application</a></span></dt> 9490<dt><span class="sect1"><a href="#new-package">22.2. Packaging a GNOME application</a></span></dt>
9487<dt><span class="sect1"><a href="#full-update">22.3. Updating GNOME to a newer version</a></span></dt> 9491<dt><span class="sect1"><a href="#full-update">22.3. Updating GNOME to a newer version</a></span></dt>
9488<dt><span class="sect1"><a href="#patching">22.4. Patching guidelines</a></span></dt> 9492<dt><span class="sect1"><a href="#patching">22.4. Patching guidelines</a></span></dt>
9489</dl> 9493</dl>
9490</div> 9494</div>
9491<p>Quoting <a class="ulink" href="https://www.gnome.org/" target="_top">GNOME's web 9495<p>Quoting <a class="ulink" href="https://www.gnome.org/" target="_top">GNOME's web
9492site</a>:</p> 9496site</a>:</p>
9493<div class="blockquote"><blockquote class="blockquote"><p>The GNOME project provides two things: The GNOME desktop 9497<div class="blockquote"><blockquote class="blockquote"><p>The GNOME project provides two things: The GNOME desktop
9494 environment, an intuitive and attractive desktop for users, and the 9498 environment, an intuitive and attractive desktop for users, and the
9495 GNOME development platform, an extensive framework for building 9499 GNOME development platform, an extensive framework for building
9496 applications that integrate into the rest of the desktop.</p></blockquote></div> 9500 applications that integrate into the rest of the desktop.</p></blockquote></div>
9497<p>pkgsrc provides a seamless way to automatically build and install 9501<p>pkgsrc provides a seamless way to automatically build and install
9498a complete GNOME environment <span class="emphasis"><em>under many different 9502a complete GNOME environment <span class="emphasis"><em>under many different
9499platforms</em></span>. We can say with confidence that pkgsrc is one of 9503platforms</em></span>. We can say with confidence that pkgsrc is one of
9500the most advanced build and packaging systems for GNOME due to its 9504the most advanced build and packaging systems for GNOME due to its
9501included technologies buildlink3, the wrappers and tools framework and 9505included technologies buildlink3, the wrappers and tools framework and
9502automatic configuration file management. Lots of efforts are put into 9506automatic configuration file management. Lots of efforts are put into
9503achieving a completely clean deinstallation of installed software 9507achieving a completely clean deinstallation of installed software
9504components.</p> 9508components.</p>
9505<p>Given that pkgsrc is <a class="ulink" href="https://www.NetBSD.org/" target="_top">NetBSD</a>'s official packaging system, 9509<p>Given that pkgsrc is <a class="ulink" href="https://www.NetBSD.org/" target="_top">NetBSD</a>'s official packaging system,
9506the above also means that great efforts are put into making GNOME work 9510the above also means that great efforts are put into making GNOME work
9507under this operating system.</p> 9511under this operating system.</p>
9508<p>This chapter is aimed at pkgsrc developers and other people 9512<p>This chapter is aimed at pkgsrc developers and other people
9509interested in helping our GNOME porting and packaging efforts. It 9513interested in helping our GNOME porting and packaging efforts. It
9510provides instructions on how to manage the existing packages and some 9514provides instructions on how to manage the existing packages and some
9511important information regarding their internals.</p> 9515important information regarding their internals.</p>
9512<div class="sect1"> 9516<div class="sect1">
9513<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9517<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9514<a name="meta-packages"></a>22.1. Meta packages</h2></div></div></div> 9518<a name="meta-packages"></a>22.1. Meta packages</h2></div></div></div>
9515<p>pkgsrc includes three GNOME-related meta packages:</p> 9519<p>pkgsrc includes three GNOME-related meta packages:</p>
9516<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9520<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9517<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-base/index.html" target="_top"><code class="filename">meta-pkgs/gnome-base</code></a>: Provides 9521<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-base/index.html" target="_top"><code class="filename">meta-pkgs/gnome-base</code></a>: Provides
9518 the core GNOME desktop environment. It only includes the necessary 9522 the core GNOME desktop environment. It only includes the necessary
9519 bits to get it to boot correctly, although it may lack important 9523 bits to get it to boot correctly, although it may lack important
9520 functionality for daily operation. The idea behind this package is 9524 functionality for daily operation. The idea behind this package is
9521 to let end users build their own configurations on top of this one, 9525 to let end users build their own configurations on top of this one,
9522 first installing this meta package to achieve a functional setup and 9526 first installing this meta package to achieve a functional setup and
9523 then adding individual applications.</p></li> 9527 then adding individual applications.</p></li>
9524<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome/index.html" target="_top"><code class="filename">meta-pkgs/gnome</code></a>: Provides a 9528<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome/index.html" target="_top"><code class="filename">meta-pkgs/gnome</code></a>: Provides a
9525 complete installation of the GNOME platform and desktop as defined 9529 complete installation of the GNOME platform and desktop as defined
9526 by the GNOME project; this is based on the components distributed in 9530 by the GNOME project; this is based on the components distributed in
9527 the <code class="filename">platform/x.y/x.y.z/sources</code> and 9531 the <code class="filename">platform/x.y/x.y.z/sources</code> and
9528 <code class="filename">desktop/x.y/x.y.z/sources</code> directories of the 9532 <code class="filename">desktop/x.y/x.y.z/sources</code> directories of the
9529 official FTP server. Developer-only tools found in those 9533 official FTP server. Developer-only tools found in those
9530 directories are not installed unless required by some other 9534 directories are not installed unless required by some other
9531 component to work properly. Similarly, packages from the bindings 9535 component to work properly. Similarly, packages from the bindings
9532 set (<code class="filename">bindings/x.y/x.y.z/sources</code>) are not pulled 9536 set (<code class="filename">bindings/x.y/x.y.z/sources</code>) are not pulled
9533 in unless required as a dependency for an end-user component. This 9537 in unless required as a dependency for an end-user component. This
9534 package "extends" <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-base/index.html" target="_top"><code class="filename">meta-pkgs/gnome-base</code></a>.</p></li> 9538 package "extends" <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-base/index.html" target="_top"><code class="filename">meta-pkgs/gnome-base</code></a>.</p></li>
9535<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-devel/index.html" target="_top"><code class="filename">meta-pkgs/gnome-devel</code></a>: 9539<li class="listitem"><p><a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/gnome-devel/index.html" target="_top"><code class="filename">meta-pkgs/gnome-devel</code></a>:
9536 Installs all the tools required to build a GNOME component when 9540 Installs all the tools required to build a GNOME component when
9537 fetched from the CVS repository. These are required to let the 9541 fetched from the CVS repository. These are required to let the
9538 <span class="command"><strong>autogen.sh</strong></span> scripts work appropriately.</p></li> 9542 <span class="command"><strong>autogen.sh</strong></span> scripts work appropriately.</p></li>
9539</ul></div> 9543</ul></div>
9540<p>In all these packages, the <code class="varname">DEPENDS</code> lines are 9544<p>In all these packages, the <code class="varname">DEPENDS</code> lines are
9541sorted in a way that eases updates: a package may depend on other 9545sorted in a way that eases updates: a package may depend on other
9542packages listed before it but not on any listed after it. It is very 9546packages listed before it but not on any listed after it. It is very
9543important to keep this order to ease updates so... <span class="emphasis"><em>do not 9547important to keep this order to ease updates so... <span class="emphasis"><em>do not
9544change it to alphabetical sorting!</em></span></p> 9548change it to alphabetical sorting!</em></span></p>
9545</div> 9549</div>
9546<div class="sect1"> 9550<div class="sect1">
9547<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 9551<div class="titlepage"><div><div><h2 class="title" style="clear: both">
9548<a name="new-package"></a>22.2. Packaging a GNOME application</h2></div></div></div> 9552<a name="new-package"></a>22.2. Packaging a GNOME application</h2></div></div></div>
9549<p>Almost all GNOME applications are written in C and use a common 9553<p>Almost all GNOME applications are written in C and use a common
9550set of tools as their build system. Things get different with the new 9554set of tools as their build system. Things get different with the new
9551bindings to other languages (such as Python), but the following will 9555bindings to other languages (such as Python), but the following will
9552give you a general idea on the minimum required tools:</p> 9556give you a general idea on the minimum required tools:</p>
9553<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 9557<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
9554<li class="listitem"> 9558<li class="listitem">
9555<p>Almost all GNOME applications use the GNU Autotools as their 9559<p>Almost all GNOME applications use the GNU Autotools as their
9556 build system. As a general rule you will need to tell this to your 9560 build system. As a general rule you will need to tell this to your
9557 package:</p> 9561 package:</p>
9558<pre class="programlisting"> 9562<pre class="programlisting">
9559GNU_CONFIGURE= yes 9563GNU_CONFIGURE= yes
9560USE_LIBTOOL= yes 9564USE_LIBTOOL= yes
9561USE_TOOLS+= gmake 9565USE_TOOLS+= gmake
9562</pre> 9566</pre>
9563</li> 9567</li>
9564<li class="listitem"> 9568<li class="listitem">
9565<p>If the package uses pkg-config to detect dependencies, add this 9569<p>If the package uses pkg-config to detect dependencies, add this
9566 tool to the list of required utilities:</p> 9570 tool to the list of required utilities:</p>
9567<pre class="programlisting"> 9571<pre class="programlisting">
9568USE_TOOLS+= pkg-config 9572USE_TOOLS+= pkg-config
9569</pre> 9573</pre>
9570<p>Also use <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/verifypc/index.html" target="_top"><code class="filename">pkgtools/verifypc</code></a> at 9574<p>Also use <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/verifypc/index.html" target="_top"><code class="filename">pkgtools/verifypc</code></a> at
9571 the end of the build process to ensure that you did not miss to 9575 the end of the build process to ensure that you did not miss to
9572 specify any dependency in your package and that the version 9576 specify any dependency in your package and that the version
9573 requirements are all correct.</p> 9577 requirements are all correct.</p>
9574</li> 9578</li>
9575<li class="listitem"><p>If the package uses intltool, be sure to add 9579<li class="listitem"><p>If the package uses intltool, be sure to add
9576 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code> 9580 <code class="literal">intltool</code> to the <code class="varname">USE_TOOLS</code>
9577 to handle dependencies and to force the package to use the latest 9581 to handle dependencies and to force the package to use the latest
9578 available version.</p></li> 9582 available version.</p></li>
9579<li class="listitem"> 9583<li class="listitem">
9580<p>If the package uses gtk-doc (a documentation generation 9584<p>If the package uses gtk-doc (a documentation generation
9581 utility), do <span class="emphasis"><em>not</em></span> add a dependency on it. The 9585 utility), do <span class="emphasis"><em>not</em></span> add a dependency on it. The
9582 tool is rather big and the distfile should come with pregenerated 9586 tool is rather big and the distfile should come with pregenerated
9583 documentation anyway; if it does not, it is a bug that you ought to 9587 documentation anyway; if it does not, it is a bug that you ought to
9584 report. For such packages you should disable gtk-doc (unless it is 9588 report. For such packages you should disable gtk-doc (unless it is
9585 the default):</p> 9589 the default):</p>
9586<pre class="programlisting"> 9590<pre class="programlisting">
9587CONFIGURE_ARGS+= --disable-gtk-doc 9591CONFIGURE_ARGS+= --disable-gtk-doc
9588</pre> 9592</pre>
9589<p>The default location of installed HTML files 9593<p>The default location of installed HTML files
9590 (<code class="filename">share/gtk-doc/&lt;package-name&gt;</code>) is correct 9594 (<code class="filename">share/gtk-doc/&lt;package-name&gt;</code>) is correct
9591 and should not be changed unless the package insists on installing 9595 and should not be changed unless the package insists on installing
9592 them somewhere else. Otherwise programs as 9596 them somewhere else. Otherwise programs as
9593 <span class="command"><strong>devhelp</strong></span> will not be able to open them. You can 9597 <span class="command"><strong>devhelp</strong></span> will not be able to open them. You can
9594 do that with an entry similar to:</p> 9598 do that with an entry similar to:</p>
9595<pre class="programlisting"> 9599<pre class="programlisting">
9596CONFIGURE_ARGS+= --with-html-dir=${PREFIX}/share/gtk-doc/... 9600CONFIGURE_ARGS+= --with-html-dir=${PREFIX}/share/gtk-doc/...
9597</pre> 9601</pre>
9598</li> 9602</li>
9599</ul></div> 9603</ul></div>
9600<p>GNOME uses multiple <span class="emphasis"><em>shared</em></span> directories and 9604<p>GNOME uses multiple <span class="emphasis"><em>shared</em></span> directories and
9601files under the installation prefix to maintain databases. In this 9605files under the installation prefix to maintain databases. In this
9602context, shared means that those exact same directories and files are 9606context, shared means that those exact same directories and files are
9603used among several different packages, leading to conflicts in the 9607used among several different packages, leading to conflicts in the
9604<code class="filename">PLIST</code>. pkgsrc currently includes functionality to 9608<code class="filename">PLIST</code>. pkgsrc currently includes functionality to
9605handle the most common cases, so you have to forget about using 9609handle the most common cases, so you have to forget about using
9606<code class="literal">@unexec ${RMDIR}</code> lines in your file lists and 9610<code class="literal">@unexec ${RMDIR}</code> lines in your file lists and
9607omitting shared files from them. If you find yourself doing those, 9611omitting shared files from them. If you find yourself doing those,
9608<span class="emphasis"><em>your package is most likely incorrect</em></span>.</p> 9612<span class="emphasis"><em>your package is most likely incorrect</em></span>.</p>
9609<p>The following table lists the common situations that result in 9613<p>The following table lists the common situations that result in
9610using shared directories or files. For each of them, the appropriate 9614using shared directories or files. For each of them, the appropriate
9611solution is given. After applying the solution be sure to 9615solution is given. After applying the solution be sure to
9612<span class="emphasis"><em>regenerate the package's file list</em></span> with 9616<span class="emphasis"><em>regenerate the package's file list</em></span> with
9613<span class="command"><strong>make print-PLIST</strong></span> and ensure it is correct.</p> 9617<span class="command"><strong>make print-PLIST</strong></span> and ensure it is correct.</p>
9614<div class="table"> 9618<div class="table">
9615<a name="plist-handling"></a><p class="title"><b>Table 22.1. PLIST handling for GNOME packages</b></p> 9619<a name="plist-handling"></a><p class="title"><b>Table 22.1. PLIST handling for GNOME packages</b></p>
9616<div class="table-contents"><table class="table" summary="PLIST handling for GNOME packages" border="1"> 9620<div class="table-contents"><table class="table" summary="PLIST handling for GNOME packages" border="1">
9617<colgroup> 9621<colgroup>
9618<col> 9622<col>
9619<col> 9623<col>
9620</colgroup> 9624</colgroup>
9621<thead><tr> 9625<thead><tr>
9622<th>If the package...</th> 9626<th>If the package...</th>
9623<th>Then...</th> 9627<th>Then...</th>
@@ -10796,4088 +10800,3956 @@ output_require "^[[:alpha:]+[[:space:]][ @@ -10796,4088 +10800,3956 @@ output_require "^[[:alpha:]+[[:space:]][
10796DISTNAME= bison-1.25 10800DISTNAME= bison-1.25
10797CATEGORIES= devel 10801CATEGORIES= devel
10798MASTER_SITES= ${MASTER_SITE_GNU:=bison/} 10802MASTER_SITES= ${MASTER_SITE_GNU:=bison/}
10799 10803
10800MAINTAINER= pkgsrc-users@NetBSD.org 10804MAINTAINER= pkgsrc-users@NetBSD.org
10801HOMEPAGE= https://www.gnu.org/software/bison/bison.html 10805HOMEPAGE= https://www.gnu.org/software/bison/bison.html
10802COMMENT= GNU yacc clone 10806COMMENT= GNU yacc clone
10803 10807
10804GNU_CONFIGURE= yes 10808GNU_CONFIGURE= yes
10805INFO_FILES= yes 10809INFO_FILES= yes
10806 10810
10807.include "../../mk/bsd.pkg.mk" 10811.include "../../mk/bsd.pkg.mk"
10808</pre> 10812</pre>
10809</div> 10813</div>
10810<div class="sect2"> 10814<div class="sect2">
10811<div class="titlepage"><div><div><h3 class="title"> 10815<div class="titlepage"><div><div><h3 class="title">
10812<a name="example-descr"></a>A.1.2. DESCR</h3></div></div></div> 10816<a name="example-descr"></a>A.1.2. DESCR</h3></div></div></div>
10813<pre class="programlisting"> 10817<pre class="programlisting">
10814GNU version of yacc. Can make re-entrant parsers, and numerous other 10818GNU version of yacc. Can make re-entrant parsers, and numerous other
10815improvements. Why you would want this when Berkeley <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/yacc.1"><span class="citerefentry"><span class="refentrytitle">yacc</span>(1)</span></a> is part 10819improvements. Why you would want this when Berkeley <a class="citerefentry" href="https://man.NetBSD.org/NetBSD-9.2/i386/yacc.1"><span class="citerefentry"><span class="refentrytitle">yacc</span>(1)</span></a> is part
10816of the NetBSD source tree is beyond me. 10820of the NetBSD source tree is beyond me.
10817</pre> 10821</pre>
10818</div> 10822</div>
10819<div class="sect2"> 10823<div class="sect2">
10820<div class="titlepage"><div><div><h3 class="title"> 10824<div class="titlepage"><div><div><h3 class="title">
10821<a name="example-plist"></a>A.1.3. PLIST</h3></div></div></div> 10825<a name="example-plist"></a>A.1.3. PLIST</h3></div></div></div>
10822<pre class="programlisting"> 10826<pre class="programlisting">
10823@comment $NetBSD$ 10827@comment $NetBSD$
10824bin/bison 10828bin/bison
10825man/man1/bison.1.gz 10829man/man1/bison.1.gz
10826share/bison.simple 10830share/bison.simple
10827share/bison.hairy 10831share/bison.hairy
10828</pre> 10832</pre>
10829</div> 10833</div>
10830<div class="sect2"> 10834<div class="sect2">
10831<div class="titlepage"><div><div><h3 class="title"> 10835<div class="titlepage"><div><div><h3 class="title">
10832<a name="checking-package-with-pkglint"></a>A.1.4. Checking a package with pkglint</h3></div></div></div> 10836<a name="checking-package-with-pkglint"></a>A.1.4. Checking a package with pkglint</h3></div></div></div>
10833<p>The NetBSD package system comes with 10837<p>The NetBSD package system comes with
10834 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/index.html" target="_top"><code class="filename">pkgtools/pkglint</code></a> 10838 <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/pkgtools/pkglint/index.html" target="_top"><code class="filename">pkgtools/pkglint</code></a>
10835 which helps to check the contents of these 10839 which helps to check the contents of these
10836 files. After installation it is quite easy to use, just change to the 10840 files. After installation it is quite easy to use, just change to the
10837 directory of the package you wish to examine and run 10841 directory of the package you wish to examine and run
10838 <span class="command"><strong>pkglint</strong></span>:</p> 10842 <span class="command"><strong>pkglint</strong></span>:</p>
10839<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>pkglint</code></strong> 10843<pre class="screen"><code class="prompt">$</code> <strong class="userinput"><code>pkglint</code></strong>
10840ERROR: Makefile: Each package must define its LICENSE. 10844ERROR: Makefile: Each package must define its LICENSE.
10841WARN: Makefile:9: HOMEPAGE should migrate from http to https. 10845WARN: Makefile:9: HOMEPAGE should migrate from http to https.
10842NOTE: PLIST:3: The .gz extension is unnecessary for manual pages. 10846NOTE: PLIST:3: The .gz extension is unnecessary for manual pages.
10843WARN: PLIST:5: "share/bison.hairy" should be sorted before "share/bison.simple". 10847WARN: PLIST:5: "share/bison.hairy" should be sorted before "share/bison.simple".
108441 error, 2 warnings and 1 note found. 108481 error, 2 warnings and 1 note found.
10845(Run "pkglint -e" to show explanations.) 10849(Run "pkglint -e" to show explanations.)
10846(Run "pkglint -fs" to show what can be fixed automatically.) 10850(Run "pkglint -fs" to show what can be fixed automatically.)
10847(Run "pkglint -F" to automatically fix some issues.)</pre> 10851(Run "pkglint -F" to automatically fix some issues.)</pre>
10848<p>Depending on the supplied command line arguments (see pkglint(1)), 10852<p>Depending on the supplied command line arguments (see pkglint(1)),
10849 more checks will be performed. Use e.g. <span class="command"><strong>pkglint 10853 more checks will be performed. Use e.g. <span class="command"><strong>pkglint
10850 -Wall</strong></span> for a very thorough check.</p> 10854 -Wall</strong></span> for a very thorough check.</p>
10851</div> 10855</div>
10852</div> 10856</div>
10853<div class="sect1"> 10857<div class="sect1">
10854<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 10858<div class="titlepage"><div><div><h2 class="title" style="clear: both">
10855<a name="steps-for-b-i-p"></a>A.2. Steps for building, installing, packaging</h2></div></div></div> 10859<a name="steps-for-b-i-p"></a>A.2. Steps for building, installing, packaging</h2></div></div></div>
10856<p>Create the directory where the package lives, 10860<p>Create the directory where the package lives,
10857 plus any auxiliary directories:</p> 10861 plus any auxiliary directories:</p>
10858<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cd /usr/pkgsrc/lang</code></strong> 10862<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>cd /usr/pkgsrc/lang</code></strong>
10859<code class="prompt">#</code> <strong class="userinput"><code>mkdir bison</code></strong> 10863<code class="prompt">#</code> <strong class="userinput"><code>mkdir bison</code></strong>
10860<code class="prompt">#</code> <strong class="userinput"><code>cd bison</code></strong> 10864<code class="prompt">#</code> <strong class="userinput"><code>cd bison</code></strong>
10861<code class="prompt">#</code> <strong class="userinput"><code>mkdir patches</code></strong></pre> 10865<code class="prompt">#</code> <strong class="userinput"><code>mkdir patches</code></strong></pre>
10862<p>Create <code class="filename">Makefile</code>, <code class="filename">DESCR</code> and 10866<p>Create <code class="filename">Makefile</code>, <code class="filename">DESCR</code> and
10863 <code class="filename">PLIST</code> (see <a class="xref" href="#components" title="Chapter 12. Package components - files, directories and contents">Chapter 12, <i>Package components - files, directories and contents</i></a>) 10867 <code class="filename">PLIST</code> (see <a class="xref" href="#components" title="Chapter 12. Package components - files, directories and contents">Chapter 12, <i>Package components - files, directories and contents</i></a>)
10864 then continue with fetching the distfile:</p> 10868 then continue with fetching the distfile:</p>
10865<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make fetch</code></strong> 10869<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make fetch</code></strong>
10866&gt;&gt; bison-1.25.tar.gz doesn't seem to exist on this system. 10870&gt;&gt; bison-1.25.tar.gz doesn't seem to exist on this system.
10867&gt;&gt; Attempting to fetch from ftp://prep.ai.mit.edu/pub/gnu//. 10871&gt;&gt; Attempting to fetch from ftp://prep.ai.mit.edu/pub/gnu//.
10868Requesting ftp://prep.ai.mit.edu/pub/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 10872Requesting ftp://prep.ai.mit.edu/pub/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
10869ftp: Error retrieving file: 500 Internal error 10873ftp: Error retrieving file: 500 Internal error
10870 10874
10871&gt;&gt; Attempting to fetch from ftp://wuarchive.wustl.edu/systems/gnu//. 10875&gt;&gt; Attempting to fetch from ftp://wuarchive.wustl.edu/systems/gnu//.
10872Requesting ftp://wuarchive.wustl.edu/systems/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 10876Requesting ftp://wuarchive.wustl.edu/systems/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
10873ftp: Error retrieving file: 500 Internal error 10877ftp: Error retrieving file: 500 Internal error
10874 10878
10875&gt;&gt; Attempting to fetch from ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//. 10879&gt;&gt; Attempting to fetch from ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//.
10876Requesting ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 10880Requesting ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
10877Successfully retrieved file.</pre> 10881Successfully retrieved file.</pre>
10878<p>Generate the checksum of the distfile into 10882<p>Generate the checksum of the distfile into
10879 <code class="filename">distinfo</code>:</p> 10883 <code class="filename">distinfo</code>:</p>
10880<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make makedistinfo</code></strong></pre> 10884<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make makedistinfo</code></strong></pre>
10881<p>Now compile:</p> 10885<p>Now compile:</p>
10882<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make</code></strong> 10886<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make</code></strong>
10883&gt;&gt; Checksum OK for bison-1.25.tar.gz. 10887&gt;&gt; Checksum OK for bison-1.25.tar.gz.
10884===&gt; Extracting for bison-1.25 10888===&gt; Extracting for bison-1.25
10885===&gt; Patching for bison-1.25 10889===&gt; Patching for bison-1.25
10886===&gt; Ignoring empty patch directory 10890===&gt; Ignoring empty patch directory
10887===&gt; Configuring for bison-1.25 10891===&gt; Configuring for bison-1.25
10888creating cache ./config.cache 10892creating cache ./config.cache
10889checking for gcc... cc 10893checking for gcc... cc
10890checking whether we are using GNU C... yes 10894checking whether we are using GNU C... yes
10891checking for a BSD compatible install... /usr/bin/install -c -o bin -g bin 10895checking for a BSD compatible install... /usr/bin/install -c -o bin -g bin
10892checking how to run the C preprocessor... cc -E 10896checking how to run the C preprocessor... cc -E
10893checking for minix/config.h... no 10897checking for minix/config.h... no
10894checking for POSIXized ISC... no 10898checking for POSIXized ISC... no
10895checking whether cross-compiling... no 10899checking whether cross-compiling... no
10896checking for ANSI C header files... yes 10900checking for ANSI C header files... yes
10897checking for string.h... yes 10901checking for string.h... yes
10898checking for stdlib.h... yes 10902checking for stdlib.h... yes
10899checking for memory.h... yes 10903checking for memory.h... yes
10900checking for working const... yes 10904checking for working const... yes
10901checking for working alloca.h... no 10905checking for working alloca.h... no
10902checking for alloca... yes 10906checking for alloca... yes
10903checking for strerror... yes 10907checking for strerror... yes
10904updating cache ./config.cache 10908updating cache ./config.cache
10905creating ./config.status 10909creating ./config.status
10906creating Makefile 10910creating Makefile
10907===&gt; Building for bison-1.25 10911===&gt; Building for bison-1.25
10908cc -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 10912cc -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
10909cc -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 10913cc -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
10910cc -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 10914cc -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
10911cc -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 10915cc -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
10912cc -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 10916cc -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
10913cc -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 10917cc -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
10914cc -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 10918cc -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
10915cc -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 10919cc -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
10916cc -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 10920cc -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
10917cc -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 10921cc -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
10918cc -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 10922cc -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
10919cc -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 10923cc -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
10920cc -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 10924cc -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
10921cc -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 10925cc -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
10922cc -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 10926cc -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
10923cc -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 10927cc -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
10924cc -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 10928cc -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
10925cc -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 10929cc -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
10926cc -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 10930cc -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
10927cc -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 10931cc -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
10928cc -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 10932cc -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
10929cc -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 10933cc -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
10930./files.c:240: warning: mktemp() possibly used unsafely, consider using mkstemp() 10934./files.c:240: warning: mktemp() possibly used unsafely, consider using mkstemp()
10931rm -f bison.s1 10935rm -f bison.s1
10932sed -e "/^#line/ s|bison|/usr/pkg/share/bison|" &lt; ./bison.simple &gt; bison.s1</pre> 10936sed -e "/^#line/ s|bison|/usr/pkg/share/bison|" &lt; ./bison.simple &gt; bison.s1</pre>
10933<p>Everything seems OK, so install the files:</p> 10937<p>Everything seems OK, so install the files:</p>
10934<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong> 10938<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong>
10935&gt;&gt; Checksum OK for bison-1.25.tar.gz. 10939&gt;&gt; Checksum OK for bison-1.25.tar.gz.
10936===&gt; Installing for bison-1.25 10940===&gt; Installing for bison-1.25
10937sh ./mkinstalldirs /usr/pkg/bin /usr/pkg/share /usr/pkg/info /usr/pkg/man/man1 10941sh ./mkinstalldirs /usr/pkg/bin /usr/pkg/share /usr/pkg/info /usr/pkg/man/man1
10938rm -f /usr/pkg/bin/bison 10942rm -f /usr/pkg/bin/bison
10939cd /usr/pkg/share; rm -f bison.simple bison.hairy 10943cd /usr/pkg/share; rm -f bison.simple bison.hairy
10940rm -f /usr/pkg/man/man1/bison.1 /usr/pkg/info/bison.info* 10944rm -f /usr/pkg/man/man1/bison.1 /usr/pkg/info/bison.info*
10941install -c -o bin -g bin -m 555 bison /usr/pkg/bin/bison 10945install -c -o bin -g bin -m 555 bison /usr/pkg/bin/bison
10942/usr/bin/install -c -o bin -g bin -m 644 bison.s1 /usr/pkg/share/bison.simple 10946/usr/bin/install -c -o bin -g bin -m 644 bison.s1 /usr/pkg/share/bison.simple
10943/usr/bin/install -c -o bin -g bin -m 644 ./bison.hairy /usr/pkg/share/bison.hairy 10947/usr/bin/install -c -o bin -g bin -m 644 ./bison.hairy /usr/pkg/share/bison.hairy
10944cd .; for f in bison.info*; do /usr/bin/install -c -o bin -g bin -m 644 $f /usr/pkg/info/$f; done 10948cd .; for f in bison.info*; do /usr/bin/install -c -o bin -g bin -m 644 $f /usr/pkg/info/$f; done
10945/usr/bin/install -c -o bin -g bin -m 644 ./bison.1 /usr/pkg/man/man1/bison.1 10949/usr/bin/install -c -o bin -g bin -m 644 ./bison.1 /usr/pkg/man/man1/bison.1
10946===&gt; Registering installation for bison-1.25</pre> 10950===&gt; Registering installation for bison-1.25</pre>
10947<p>You can now use bison, and also - if you decide so - remove it with 10951<p>You can now use bison, and also - if you decide so - remove it with
10948 <span class="command"><strong>pkg_delete bison</strong></span>. Should you decide that you want a 10952 <span class="command"><strong>pkg_delete bison</strong></span>. Should you decide that you want a
10949 binary package, do this now:</p> 10953 binary package, do this now:</p>
10950<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong> 10954<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong>
10951&gt;&gt; Checksum OK for bison-1.25.tar.gz. 10955&gt;&gt; Checksum OK for bison-1.25.tar.gz.
10952===&gt; Building package for bison-1.25 10956===&gt; Building package for bison-1.25
10953Creating package bison-1.25.tgz 10957Creating package bison-1.25.tgz
10954Registering depends:. 10958Registering depends:.
10955Creating gzip'd tar ball in '/u/pkgsrc/lang/bison/bison-1.25.tgz'</pre> 10959Creating gzip'd tar ball in '/u/pkgsrc/lang/bison/bison-1.25.tgz'</pre>
10956<p>Now that you don't need the source and object files 10960<p>Now that you don't need the source and object files
10957 any more, clean up:</p> 10961 any more, clean up:</p>
10958<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make clean</code></strong> 10962<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make clean</code></strong>
10959===&gt; Cleaning for bison-1.25</pre> 10963===&gt; Cleaning for bison-1.25</pre>
10960</div> 10964</div>
10961</div> 10965</div>
10962<div class="appendix"> 10966<div class="appendix">
10963<div class="titlepage"><div><div><h1 class="title"> 10967<div class="titlepage"><div><div><h1 class="title">
10964<a name="hardening"></a>Appendix B. Security hardening</h1></div></div></div> 10968<a name="hardening"></a>Appendix B. Security hardening</h1></div></div></div>
10965<div class="toc"> 10969<div class="toc">
10966<p><b>Table of Contents</b></p> 10970<p><b>Table of Contents</b></p>
10967<dl class="toc"> 10971<dl class="toc">
10968<dt><span class="sect1"><a href="#hardening.mechanisms">B.1. Mechanisms</a></span></dt> 10972<dt><span class="sect1"><a href="#hardening.mechanisms">B.1. Mechanisms</a></span></dt>
10969<dd><dl> 10973<dd><dl>
10970<dt><span class="sect2"><a href="#hardening.mechanisms.enabled">B.1.1. Enabled by default</a></span></dt> 10974<dt><span class="sect2"><a href="#hardening.mechanisms.enabled">B.1.1. Enabled by default</a></span></dt>
10971<dt><span class="sect2"><a href="#hardening.mechanisms.disabled">B.1.2. Not enabled by default</a></span></dt> 10975<dt><span class="sect2"><a href="#hardening.mechanisms.disabled">B.1.2. Not enabled by default</a></span></dt>
10972</dl></dd> 10976</dl></dd>
10973<dt><span class="sect1"><a href="#hardening.caveats">B.2. Caveats</a></span></dt> 10977<dt><span class="sect1"><a href="#hardening.caveats">B.2. Caveats</a></span></dt>
10974<dd><dl> 10978<dd><dl>
10975<dt><span class="sect2"><a href="#hardening.caveats.pie">B.2.1. Problems with PKGSRC_MKPIE</a></span></dt> 10979<dt><span class="sect2"><a href="#hardening.caveats.pie">B.2.1. Problems with PKGSRC_MKPIE</a></span></dt>
10976<dt><span class="sect2"><a href="#hardening.caveats.fortify">B.2.2. Problems with PKGSRC_USE_FORTIFY</a></span></dt> 10980<dt><span class="sect2"><a href="#hardening.caveats.fortify">B.2.2. Problems with PKGSRC_USE_FORTIFY</a></span></dt>
10977<dt><span class="sect2"><a href="#hardening.caveats.relro">B.2.3. Problems with PKGSRC_USE_RELRO</a></span></dt> 10981<dt><span class="sect2"><a href="#hardening.caveats.relro">B.2.3. Problems with PKGSRC_USE_RELRO</a></span></dt>
10978<dt><span class="sect2"><a href="#hardening.caveats.ssp">B.2.4. Problems with PKGSRC_USE_SSP</a></span></dt> 10982<dt><span class="sect2"><a href="#hardening.caveats.ssp">B.2.4. Problems with PKGSRC_USE_SSP</a></span></dt>
10979</dl></dd> 10983</dl></dd>
10980<dt><span class="sect1"><a href="#hardening.audit">B.3. Auditing the system</a></span></dt> 10984<dt><span class="sect1"><a href="#hardening.audit">B.3. Auditing the system</a></span></dt>
10981<dd><dl> 10985<dd><dl>
10982<dt><span class="sect2"><a href="#hardening.audit.pie">B.3.1. Checking for PIE</a></span></dt> 10986<dt><span class="sect2"><a href="#hardening.audit.pie">B.3.1. Checking for PIE</a></span></dt>
10983<dt><span class="sect2"><a href="#hardening.audit.relropartial">B.3.2. Checking for partial RELRO</a></span></dt> 10987<dt><span class="sect2"><a href="#hardening.audit.relropartial">B.3.2. Checking for partial RELRO</a></span></dt>
10984<dt><span class="sect2"><a href="#hardening.audit.relrofull">B.3.3. Checking for full RELRO</a></span></dt> 10988<dt><span class="sect2"><a href="#hardening.audit.relrofull">B.3.3. Checking for full RELRO</a></span></dt>
10985<dt><span class="sect2"><a href="#hardening.audit.ssp">B.3.4. Checking for SSP</a></span></dt> 10989<dt><span class="sect2"><a href="#hardening.audit.ssp">B.3.4. Checking for SSP</a></span></dt>
10986</dl></dd> 10990</dl></dd>
10987</dl> 10991</dl>
10988</div> 10992</div>
10989<p> 10993<p>
10990A number of mechanisms are available in pkgsrc to improve the security of the 10994A number of mechanisms are available in pkgsrc to improve the security of the
10991resulting system. This page describes the mechanisms, and gives hints 10995resulting system. This page describes the mechanisms, and gives hints
10992about detecting and fixing problems. 10996about detecting and fixing problems.
10993</p> 10997</p>
10994<p> 10998<p>
10995Mechanisms can be enabled individually in 10999Mechanisms can be enabled individually in
10996<code class="filename">mk.conf</code>, and are 11000<code class="filename">mk.conf</code>, and are
10997individually described below. 11001individually described below.
10998</p> 11002</p>
10999<p> 11003<p>
11000Typically, a feature will cause some programs to fail to build or work 11004Typically, a feature will cause some programs to fail to build or work
11001when first enabled. This can be due to latent problems in the 11005when first enabled. This can be due to latent problems in the
11002program, and can be due to other reasons. After enough testing to 11006program, and can be due to other reasons. After enough testing to
11003have confidence that user problems will be quite rare, individual 11007have confidence that user problems will be quite rare, individual
11004mechanisms will be enabled by default. 11008mechanisms will be enabled by default.
11005</p> 11009</p>
11006<p> 11010<p>
11007For each mechanism, see the Caveats section below for an explanation 11011For each mechanism, see the Caveats section below for an explanation
11008of what might go wrong at compile time and at run time, and how to 11012of what might go wrong at compile time and at run time, and how to
11009notice and address these problems. 11013notice and address these problems.
11010</p> 11014</p>
11011<div class="sect1"> 11015<div class="sect1">
11012<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 11016<div class="titlepage"><div><div><h2 class="title" style="clear: both">
11013<a name="hardening.mechanisms"></a>B.1. Mechanisms</h2></div></div></div> 11017<a name="hardening.mechanisms"></a>B.1. Mechanisms</h2></div></div></div>
11014<div class="sect2"> 11018<div class="sect2">
11015<div class="titlepage"><div><div><h3 class="title"> 11019<div class="titlepage"><div><div><h3 class="title">
11016<a name="hardening.mechanisms.enabled"></a>B.1.1. Enabled by default</h3></div></div></div> 11020<a name="hardening.mechanisms.enabled"></a>B.1.1. Enabled by default</h3></div></div></div>
11017<div class="sect3"> 11021<div class="sect3">
11018<div class="titlepage"><div><div><h4 class="title"> 11022<div class="titlepage"><div><div><h4 class="title">
11019<a name="hardening.mechanisms.enabled.fortify"></a>B.1.1.1. PKGSRC_USE_FORTIFY</h4></div></div></div> 11023<a name="hardening.mechanisms.enabled.fortify"></a>B.1.1.1. PKGSRC_USE_FORTIFY</h4></div></div></div>
11020<p> 11024<p>
11021This allows substitute wrappers to be used for some commonly used 11025This allows substitute wrappers to be used for some commonly used
11022library functions that do not have built-in bounds checking - but 11026library functions that do not have built-in bounds checking - but
11023could in some cases. 11027could in some cases.
11024</p> 11028</p>
11025<p> 11029<p>
11026Two mitigation levels are available: 11030Two mitigation levels are available:
11027</p> 11031</p>
11028<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 11032<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
11029<li class="listitem"><p>"weak" only enables checks at compile-time.</p></li> 11033<li class="listitem"><p>"weak" only enables checks at compile-time.</p></li>
11030<li class="listitem"><p>"strong" enables checks at compile-time and runtime.</p></li> 11034<li class="listitem"><p>"strong" enables checks at compile-time and runtime.</p></li>
11031</ul></div> 11035</ul></div>
11032<p> 11036<p>
11033"strong" has been enabled by default since pkgsrc-2017Q3. 11037"strong" has been enabled by default since pkgsrc-2017Q3.
11034</p> 11038</p>
11035</div> 11039</div>
11036<div class="sect3"> 11040<div class="sect3">
11037<div class="titlepage"><div><div><h4 class="title"> 11041<div class="titlepage"><div><div><h4 class="title">
11038<a name="hardening.mechanisms.enabled.ssp"></a>B.1.1.2. PKGSRC_USE_SSP</h4></div></div></div> 11042<a name="hardening.mechanisms.enabled.ssp"></a>B.1.1.2. PKGSRC_USE_SSP</h4></div></div></div>
11039<p> 11043<p>
11040This enables a stack-smashing protection mitigation. It is done by adding a 11044This enables a stack-smashing protection mitigation. It is done by adding a
11041guard variable to functions with vulnerable objects. The guards are initialized 11045guard variable to functions with vulnerable objects. The guards are initialized
11042when a function is entered and then checked when the function exits. The guard 11046when a function is entered and then checked when the function exits. The guard
11043check will fail and the program forcibly exited if the variable was modified in 11047check will fail and the program forcibly exited if the variable was modified in
11044the meantime. This can happen in case of buffer overflows or memory corruption, 11048the meantime. This can happen in case of buffer overflows or memory corruption,
11045and therefore exposing these bugs. 11049and therefore exposing these bugs.
11046</p> 11050</p>
11047<p> 11051<p>
11048Different mitigation levels are available: 11052Different mitigation levels are available:
11049</p> 11053</p>
11050<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 11054<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
11051<li class="listitem"><p>"yes", which will only protect functions considered vulnerable 11055<li class="listitem"><p>"yes", which will only protect functions considered vulnerable
11052by the compiler;</p></li> 11056by the compiler;</p></li>
11053<li class="listitem"><p>"all", which will protect every function;</p></li> 11057<li class="listitem"><p>"all", which will protect every function;</p></li>
11054<li class="listitem"><p>"strong", the default, which will apply a better balance between the 11058<li class="listitem"><p>"strong", the default, which will apply a better balance between the
11055two settings above.</p></li> 11059two settings above.</p></li>
11056</ul></div> 11060</ul></div>
11057<p> 11061<p>
11058This mitigation is supported by both GCC and clang. It may be supported in 11062This mitigation is supported by both GCC and clang. It may be supported in
11059additional compilers, possibly under a different name. It is particularly useful 11063additional compilers, possibly under a different name. It is particularly useful
11060for unsafe programming languages, such as C/C++. 11064for unsafe programming languages, such as C/C++.
11061</p> 11065</p>
11062<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 11066<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
11063<li class="listitem"><p>"yes" is enabled by default where known supported since pkgsrc-2017Q3.</p></li> 11067<li class="listitem"><p>"yes" is enabled by default where known supported since pkgsrc-2017Q3.</p></li>
11064<li class="listitem"><p>"strong" is enabled by default where known supported since pkgsrc-2021Q4.</p></li> 11068<li class="listitem"><p>"strong" is enabled by default where known supported since pkgsrc-2021Q4.</p></li>
11065</ul></div> 11069</ul></div>
11066<p>More details can be found here:</p> 11070<p>More details can be found here:</p>
11067<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> 11071<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
11068<a class="ulink" href="https://en.wikipedia.org/wiki/Buffer_overflow_protection" target="_top">Buffer overflow protection on Wikipedia</a> 11072<a class="ulink" href="https://en.wikipedia.org/wiki/Buffer_overflow_protection" target="_top">Buffer overflow protection on Wikipedia</a>
11069</p></li></ul></div> 11073</p></li></ul></div>
11070</div> 11074</div>
11071<div class="sect3"> 11075<div class="sect3">
11072<div class="titlepage"><div><div><h4 class="title"> 11076<div class="titlepage"><div><div><h4 class="title">
11073<a name="hardening.mechanisms.enabled.pie"></a>B.1.1.3. PKGSRC_MKPIE</h4></div></div></div> 11077<a name="hardening.mechanisms.enabled.pie"></a>B.1.1.3. PKGSRC_MKPIE</h4></div></div></div>
11074<p> 11078<p>
11075This requests the creation of PIE (Position Independent Executables) for all 11079This requests the creation of PIE (Position Independent Executables) for all
11076executables. The PIE mechanism is normally used for shared libraries, so that 11080executables. The PIE mechanism is normally used for shared libraries, so that
11077they can be loaded at differing addresses at runtime. PIE itself does not have 11081they can be loaded at differing addresses at runtime. PIE itself does not have
11078useful security properties; however, it is necessary to fully leverage some, 11082useful security properties; however, it is necessary to fully leverage some,
11079such as ASLR. Some operating systems support Address Space Layout Randomization 11083such as ASLR. Some operating systems support Address Space Layout Randomization
11080(ASLR), which causes different addresses to be used each time a program is run. 11084(ASLR), which causes different addresses to be used each time a program is run.
11081This makes it more difficult for an attacker to guess addresses and thus makes 11085This makes it more difficult for an attacker to guess addresses and thus makes
11082exploits harder to construct. With PIE, ASLR can really be applied to the entire 11086exploits harder to construct. With PIE, ASLR can really be applied to the entire
11083program, instead of the stack and heap only. 11087program, instead of the stack and heap only.
11084</p> 11088</p>
11085<p> 11089<p>
11086PIE executables will only be built for toolchains that are known to support PIE. 11090PIE executables will only be built for toolchains that are known to support PIE.
11087Currently, this means NetBSD on x86, ARM, SPARC64, m68k, and MIPS. 11091Currently, this means NetBSD on x86, ARM, SPARC64, m68k, and MIPS.
11088</p> 11092</p>
11089<p> 11093<p>
11090<code class="varname">PKGSRC_MKPIE</code> was enabled by default after the pkgsrc-2021Q3 branch. 11094<code class="varname">PKGSRC_MKPIE</code> was enabled by default after the pkgsrc-2021Q3 branch.
11091</p> 11095</p>
11092</div> 11096</div>
11093<div class="sect3"> 11097<div class="sect3">
11094<div class="titlepage"><div><div><h4 class="title"> 11098<div class="titlepage"><div><div><h4 class="title">
11095<a name="hardening.mechanisms.enabled.relro"></a>B.1.1.4. PKGSRC_USE_RELRO</h4></div></div></div> 11099<a name="hardening.mechanisms.enabled.relro"></a>B.1.1.4. PKGSRC_USE_RELRO</h4></div></div></div>
11096<p> 11100<p>
11097This also makes the exploitation of some security vulnerabilities more 11101This also makes the exploitation of some security vulnerabilities more
11098difficult in some cases. 11102difficult in some cases.
11099</p> 11103</p>
11100<p>Two different mitigation levels are available:</p> 11104<p>Two different mitigation levels are available:</p>
11101<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 11105<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
11102<li class="listitem"><p> 11106<li class="listitem"><p>
11103partial (the default): the ELF sections are reordered so that internal data sections 11107partial (the default): the ELF sections are reordered so that internal data sections
11104precede the program's own data sections, and non-PLT GOT is read-only; 11108precede the program's own data sections, and non-PLT GOT is read-only;
11105</p></li> 11109</p></li>
11106<li class="listitem"><p> 11110<li class="listitem"><p>
11107full: in addition to partial RELRO, every relocation is performed immediately 11111full: in addition to partial RELRO, every relocation is performed immediately
11108when starting the program, allowing the entire GOT to be read-only. This 11112when starting the program, allowing the entire GOT to be read-only. This
11109can greatly slow down startup of large programs. 11113can greatly slow down startup of large programs.
11110</p></li> 11114</p></li>
11111</ul></div> 11115</ul></div>
11112<p> 11116<p>
11113This is currently supported by GCC. Many software distributions now enable this 11117This is currently supported by GCC. Many software distributions now enable this
11114feature by default, at the "partial" level. 11118feature by default, at the "partial" level.
11115</p> 11119</p>
11116<p> 11120<p>
11117More details can be found here: 11121More details can be found here:
11118</p> 11122</p>
11119<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> 11123<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
11120<a class="ulink" href="https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro" target="_top">Hardening ELF binaries using Relocation Read-Only (RELRO)</a> 11124<a class="ulink" href="https://www.redhat.com/en/blog/hardening-elf-binaries-using-relocation-read-only-relro" target="_top">Hardening ELF binaries using Relocation Read-Only (RELRO)</a>
11121</p></li></ul></div> 11125</p></li></ul></div>
11122</div> 11126</div>
11123</div> 11127</div>
11124<div class="sect2"> 11128<div class="sect2">
11125<div class="titlepage"><div><div><h3 class="title"> 11129<div class="titlepage"><div><div><h3 class="title">
11126<a name="hardening.mechanisms.disabled"></a>B.1.2. Not enabled by default</h3></div></div></div> 11130<a name="hardening.mechanisms.disabled"></a>B.1.2. Not enabled by default</h3></div></div></div>
11127<div class="sect3"> 11131<div class="sect3">
11128<div class="titlepage"><div><div><h4 class="title"> 11132<div class="titlepage"><div><div><h4 class="title">
11129<a name="hardening.mechanisms.disabled.repro"></a>B.1.2.1. PKGSRC_MKREPRO</h4></div></div></div> 11133<a name="hardening.mechanisms.disabled.repro"></a>B.1.2.1. PKGSRC_MKREPRO</h4></div></div></div>
11130<p> 11134<p>
11131With this option, pkgsrc will try to build packages reproducibly. This allows 11135With this option, pkgsrc will try to build packages reproducibly. This allows
11132packages built from the same tree and with the same options, to produce 11136packages built from the same tree and with the same options, to produce
11133identical results bit by bit. This option should be combined with ASLR and 11137identical results bit by bit. This option should be combined with ASLR and
11134<code class="varname">PKGSRC_MKPIE</code> to avoid predictable address offsets for 11138<code class="varname">PKGSRC_MKPIE</code> to avoid predictable address offsets for
11135attackers attempting to exploit security vulnerabilities. 11139attackers attempting to exploit security vulnerabilities.
11136</p> 11140</p>
11137<p> 11141<p>
11138More details can be found here: 11142More details can be found here:
11139</p> 11143</p>
11140<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p> 11144<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
11141<a class="ulink" href="https://reproducible-builds.org/" target="_top">Reproducible Builds - a set of software development practices that create an independently-verifiable path from source to binary code</a> 11145<a class="ulink" href="https://reproducible-builds.org/" target="_top">Reproducible Builds - a set of software development practices that create an independently-verifiable path from source to binary code</a>
11142</p></li></ul></div> 11146</p></li></ul></div>
11143<p> 11147<p>
11144More work likely needs to be done before pkgsrc is fully reproducible. 11148More work likely needs to be done before pkgsrc is fully reproducible.
11145</p> 11149</p>
11146</div> 11150</div>
11147<div class="sect3"> 11151<div class="sect3">
11148<div class="titlepage"><div><div><h4 class="title"> 11152<div class="titlepage"><div><div><h4 class="title">
11149<a name="hardening.mechanisms.disabled.stackcheck"></a>B.1.2.2. PKGSRC_USE_STACK_CHECK</h4></div></div></div> 11153<a name="hardening.mechanisms.disabled.stackcheck"></a>B.1.2.2. PKGSRC_USE_STACK_CHECK</h4></div></div></div>
11150<p> 11154<p>
11151This uses <code class="literal">-fstack-check</code> with GCC for 11155This uses <code class="literal">-fstack-check</code> with GCC for
11152another stack protection mitigation. 11156another stack protection mitigation.
11153</p> 11157</p>
11154<p> 11158<p>
11155It asks the compiler to generate code verifying that it does not corrupt the 11159It asks the compiler to generate code verifying that it does not corrupt the
11156stack. According to GCC's manual page, this is really only useful for 11160stack. According to GCC's manual page, this is really only useful for
11157multi-threaded programs. 11161multi-threaded programs.
11158</p> 11162</p>
11159</div> 11163</div>
11160</div> 11164</div>
11161</div> 11165</div>
11162<div class="sect1"> 11166<div class="sect1">
11163<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 11167<div class="titlepage"><div><div><h2 class="title" style="clear: both">
11164<a name="hardening.caveats"></a>B.2. Caveats</h2></div></div></div> 11168<a name="hardening.caveats"></a>B.2. Caveats</h2></div></div></div>
11165<div class="sect2"> 11169<div class="sect2">
11166<div class="titlepage"><div><div><h3 class="title"> 11170<div class="titlepage"><div><div><h3 class="title">
11167<a name="hardening.caveats.pie"></a>B.2.1. Problems with PKGSRC_MKPIE</h3></div></div></div> 11171<a name="hardening.caveats.pie"></a>B.2.1. Problems with PKGSRC_MKPIE</h3></div></div></div>
11168<div class="sect3"> 11172<div class="sect3">
11169<div class="titlepage"><div><div><h4 class="title"> 11173<div class="titlepage"><div><div><h4 class="title">
11170<a name="hardening.caveats.pie.build"></a>B.2.1.1. Packages failing to build</h4></div></div></div> 11174<a name="hardening.caveats.pie.build"></a>B.2.1.1. Packages failing to build</h4></div></div></div>
11171<p> 11175<p>
11172A number of packages may fail to build with this option enabled. The 11176A number of packages may fail to build with this option enabled. The
11173failures are often related to the absence of the <code class="literal">-fPIC</code> 11177failures are often related to the absence of the <code class="literal">-fPIC</code>
11174compilation flag when building libraries or executables (or ideally 11178compilation flag when building libraries or executables (or ideally
11175<code class="literal">-fPIE</code> in the latter case). This flag is added to the 11179<code class="literal">-fPIE</code> in the latter case). This flag is added to the
11176<code class="varname">CFLAGS</code> already, but requires the package to 11180<code class="varname">CFLAGS</code> already, but requires the package to
11177actually support it. 11181actually support it.
11178</p> 11182</p>
11179<div class="sect4"> 11183<div class="sect4">
11180<div class="titlepage"><div><div><h5 class="title"> 11184<div class="titlepage"><div><div><h5 class="title">
11181<a name="hardening.caveats.pie.build.fix"></a>B.2.1.1.1. How to fix</h5></div></div></div> 11185<a name="hardening.caveats.pie.build.fix"></a>B.2.1.1.1. How to fix</h5></div></div></div>
11182<p> 11186<p>
11183These instructions are meant as a reference only; they likely need to be adapted 11187These instructions are meant as a reference only; they likely need to be adapted
11184for many packages individually. 11188for many packages individually.
11185</p> 11189</p>
11186<p> 11190<p>
11187For packages using <code class="filename">Makefiles</code>: 11191For packages using <code class="filename">Makefiles</code>:
11188</p> 11192</p>
11189<pre class="programlisting"> 11193<pre class="programlisting">
11190MAKE_FLAGS+= CFLAGS=${CFLAGS:Q} 11194MAKE_FLAGS+= CFLAGS=${CFLAGS:Q}
11191MAKE_FLAGS+= LDFLAGS=${LDFLAGS:Q} 11195MAKE_FLAGS+= LDFLAGS=${LDFLAGS:Q}
11192</pre> 11196</pre>
11193<p> 11197<p>
11194For packages using <code class="filename">Imakefiles</code>: 11198For packages using <code class="filename">Imakefiles</code>:
11195</p> 11199</p>
11196<pre class="programlisting"> 11200<pre class="programlisting">
11197MAKE_FLAGS+= CCOPTIONS=${CFLAGS:Q} 11201MAKE_FLAGS+= CCOPTIONS=${CFLAGS:Q}
11198MAKE_FLAGS+= LOCAL_LDFLAGS=${LDFLAGS:Q} 11202MAKE_FLAGS+= LOCAL_LDFLAGS=${LDFLAGS:Q}
11199</pre> 11203</pre>
11200</div> 11204</div>
11201</div> 11205</div>
11202<div class="sect3"> 11206<div class="sect3">
11203<div class="titlepage"><div><div><h4 class="title"> 11207<div class="titlepage"><div><div><h4 class="title">
11204<a name="hardening.caveats.pie.crash"></a>B.2.1.2. Run-time crashes</h4></div></div></div> 11208<a name="hardening.caveats.pie.crash"></a>B.2.1.2. Run-time crashes</h4></div></div></div>
11205<p> 11209<p>
11206Some programs may fail to run, or crash at random times once built as PIE. Two 11210Some programs may fail to run, or crash at random times once built as PIE. Two
11207scenarios are essentially possible. This is nearly always due to a bug in 11211scenarios are essentially possible. This is nearly always due to a bug in
11208the program being exposed due to ASLR. 11212the program being exposed due to ASLR.
11209</p> 11213</p>
11210</div> 11214</div>
11211<div class="sect3"> 11215<div class="sect3">
11212<div class="titlepage"><div><div><h4 class="title"> 11216<div class="titlepage"><div><div><h4 class="title">
11213<a name="hardening.caveats.pie.disable"></a>B.2.1.3. Disabling PKGSRC_MKPIE on a per-package basis</h4></div></div></div> 11217<a name="hardening.caveats.pie.disable"></a>B.2.1.3. Disabling PKGSRC_MKPIE on a per-package basis</h4></div></div></div>
11214<p> 11218<p>
11215Ideally, packages should be fixed for compatibility with MKPIE. 11219Ideally, packages should be fixed for compatibility with MKPIE.
11216However, in some cases this is very difficult, due to complex build systems, 11220However, in some cases this is very difficult, due to complex build systems,
11217packages using non-standard toolchains, or programming languages with odd 11221packages using non-standard toolchains, or programming languages with odd
11218bootstrapping mechanisms. 11222bootstrapping mechanisms.
11219</p> 11223</p>
11220<p> 11224<p>
11221To disable <code class="varname">PKGSRC_MKPIE</code> on a per-package basis, set 11225To disable <code class="varname">PKGSRC_MKPIE</code> on a per-package basis, set
11222<code class="varname">MKPIE_SUPPORTED= no</code> in the package's Makefile before 11226<code class="varname">MKPIE_SUPPORTED= no</code> in the package's Makefile before
11223<code class="filename">bsd.prefs.mk</code> is included. 11227<code class="filename">bsd.prefs.mk</code> is included.
11224</p> 11228</p>
11225</div> 11229</div>
11226</div> 11230</div>
11227<div class="sect2"> 11231<div class="sect2">
11228<div class="titlepage"><div><div><h3 class="title"> 11232<div class="titlepage"><div><div><h3 class="title">
11229<a name="hardening.caveats.fortify"></a>B.2.2. Problems with PKGSRC_USE_FORTIFY</h3></div></div></div> 11233<a name="hardening.caveats.fortify"></a>B.2.2. Problems with PKGSRC_USE_FORTIFY</h3></div></div></div>
11230<div class="sect3"> 11234<div class="sect3">
11231<div class="titlepage"><div><div><h4 class="title"> 11235<div class="titlepage"><div><div><h4 class="title">
11232<a name="hardening.caveats.fortify.build"></a>B.2.2.1. Packages failing to build</h4></div></div></div> 11236<a name="hardening.caveats.fortify.build"></a>B.2.2.1. Packages failing to build</h4></div></div></div>
11233<p> 11237<p>
11234This feature makes use of pre-processing directives to look for hardened, 11238This feature makes use of pre-processing directives to look for hardened,
11235alternative implementations of essential library calls. Some programs may fail 11239alternative implementations of essential library calls. Some programs may fail
11236to build as a result; this usually happens for those trying too hard to be 11240to build as a result; this usually happens for those trying too hard to be
11237portable, or otherwise abusing definitions in the standard library. 11241portable, or otherwise abusing definitions in the standard library.
11238</p> 11242</p>
11239</div> 11243</div>
11240<div class="sect3"> 11244<div class="sect3">
11241<div class="titlepage"><div><div><h4 class="title"> 11245<div class="titlepage"><div><div><h4 class="title">
11242<a name="hardening.caveats.fortify.crash"></a>B.2.2.2. Run-time crashes</h4></div></div></div> 11246<a name="hardening.caveats.fortify.crash"></a>B.2.2.2. Run-time crashes</h4></div></div></div>
11243<p> 11247<p>
11244This feature may cause some programs to crash, usually indicating an 11248This feature may cause some programs to crash, usually indicating an
11245actual bug in the program. The fix will typically involve patching the 11249actual bug in the program. The fix will typically involve patching the
11246original program's source code. 11250original program's source code.
11247</p> 11251</p>
11248</div> 11252</div>
11249<div class="sect3"> 11253<div class="sect3">
11250<div class="titlepage"><div><div><h4 class="title"> 11254<div class="titlepage"><div><div><h4 class="title">
11251<a name="hardening.caveats.fortify.opt"></a>B.2.2.3. Optimization is required</h4></div></div></div> 11255<a name="hardening.caveats.fortify.opt"></a>B.2.2.3. Optimization is required</h4></div></div></div>
11252<p> 11256<p>
11253At least in the case of GCC, FORTIFY will only be applied if optimization is 11257At least in the case of GCC, FORTIFY will only be applied if optimization is
11254applied while compiling. This means that the <code class="varname">CFLAGS</code> should 11258applied while compiling. This means that the <code class="varname">CFLAGS</code> should
11255also contain <code class="literal">-O</code>, <code class="literal">-O2</code> or another 11259also contain <code class="literal">-O</code>, <code class="literal">-O2</code> or another
11256optimization level. This cannot easily be applied globally, as some packages 11260optimization level. This cannot easily be applied globally, as some packages
11257may require specific optimization levels. 11261may require specific optimization levels.
11258</p> 11262</p>
11259</div> 11263</div>
11260<div class="sect3"> 11264<div class="sect3">
11261<div class="titlepage"><div><div><h4 class="title"> 11265<div class="titlepage"><div><div><h4 class="title">
11262<a name="hardening.caveats.fortify.disable"></a>B.2.2.4. Disabling FORTIFY on a per-package basis</h4></div></div></div> 11266<a name="hardening.caveats.fortify.disable"></a>B.2.2.4. Disabling FORTIFY on a per-package basis</h4></div></div></div>
11263<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 11267<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
11264<h3 class="title">Note</h3> 11268<h3 class="title">Note</h3>
11265<p>FORTIFY should not be disabled to work around runtime crashes in 11269<p>FORTIFY should not be disabled to work around runtime crashes in
11266the program! This is a very bad idea and will expose you to security 11270the program! This is a very bad idea and will expose you to security
11267vulnerabilities. 11271vulnerabilities.
11268</p> 11272</p>
11269</div> 11273</div>
11270<p> 11274<p>
11271To disable FORTIFY on a per-package basis, set the following 11275To disable FORTIFY on a per-package basis, set the following
11272in the package's <code class="filename">Makefile</code> 11276in the package's <code class="filename">Makefile</code>
11273before <code class="filename">bsd.prefs.mk</code> is included: 11277before <code class="filename">bsd.prefs.mk</code> is included:
11274</p> 11278</p>
11275<pre class="programlisting"> 11279<pre class="programlisting">
11276FORTIFY_SUPPORTED= no 11280FORTIFY_SUPPORTED= no
11277</pre> 11281</pre>
11278</div> 11282</div>
11279</div> 11283</div>
11280<div class="sect2"> 11284<div class="sect2">
11281<div class="titlepage"><div><div><h3 class="title"> 11285<div class="titlepage"><div><div><h3 class="title">
11282<a name="hardening.caveats.relro"></a>B.2.3. Problems with PKGSRC_USE_RELRO</h3></div></div></div> 11286<a name="hardening.caveats.relro"></a>B.2.3. Problems with PKGSRC_USE_RELRO</h3></div></div></div>
11283<div class="sect3"> 11287<div class="sect3">
11284<div class="titlepage"><div><div><h4 class="title"> 11288<div class="titlepage"><div><div><h4 class="title">
11285<a name="hardening.caveats.relro.performance"></a>B.2.3.1. Performance impact</h4></div></div></div> 11289<a name="hardening.caveats.relro.performance"></a>B.2.3.1. Performance impact</h4></div></div></div>
11286<p> 11290<p>
11287For better protection, full RELRO requires every symbol to be resolved when the 11291For better protection, full RELRO requires every symbol to be resolved when the
11288program starts, rather than simply when required at run-time. This will have 11292program starts, rather than simply when required at run-time. This will have
11289more impact on programs using a lot of symbols, or linked to libraries exposing 11293more impact on programs using a lot of symbols, or linked to libraries exposing
11290a lot of symbols. Therefore, daemons or programs otherwise running in 11294a lot of symbols. Therefore, daemons or programs otherwise running in
11291background are affected only when started. Programs loading plug-ins at 11295background are affected only when started. Programs loading plug-ins at
11292run-time are affected when loading the plug-ins. 11296run-time are affected when loading the plug-ins.
11293</p> 11297</p>
11294<p> 11298<p>
11295The impact is not expected to be noticeable on modern hardware, except in some 11299The impact is not expected to be noticeable on modern hardware, except in some
11296cases for big programs. 11300cases for big programs.
11297</p> 11301</p>
11298</div> 11302</div>
11299<div class="sect3"> 11303<div class="sect3">
11300<div class="titlepage"><div><div><h4 class="title"> 11304<div class="titlepage"><div><div><h4 class="title">
11301<a name="hardening.caveats.relro.crash"></a>B.2.3.2. Run-time crashes</h4></div></div></div> 11305<a name="hardening.caveats.relro.crash"></a>B.2.3.2. Run-time crashes</h4></div></div></div>
11302<p> 11306<p>
11303Some programs handle plug-ins and dependencies in a way that conflicts with 11307Some programs handle plug-ins and dependencies in a way that conflicts with
11304RELRO: for instance, with an initialization routine listing any other plug-in 11308RELRO: for instance, with an initialization routine listing any other plug-in
11305required. With full RELRO, the missing symbols are resolved before the 11309required. With full RELRO, the missing symbols are resolved before the
11306initialization routine can run, and the dynamic loader will not be able to find 11310initialization routine can run, and the dynamic loader will not be able to find
11307them directly and abort as a result. Unfortunately, this is how Xorg loads its 11311them directly and abort as a result. Unfortunately, this is how Xorg loads its
11308drivers. Partial RELRO can be applied instead in this case. 11312drivers. Partial RELRO can be applied instead in this case.
11309</p> 11313</p>
11310</div> 11314</div>
11311<div class="sect3"> 11315<div class="sect3">
11312<div class="titlepage"><div><div><h4 class="title"> 11316<div class="titlepage"><div><div><h4 class="title">
11313<a name="hardening.caveats.relro.disable"></a>B.2.3.3. Disabling RELRO on a per-package basis</h4></div></div></div> 11317<a name="hardening.caveats.relro.disable"></a>B.2.3.3. Disabling RELRO on a per-package basis</h4></div></div></div>
11314<p> 11318<p>
11315To disable RELRO on a per-package basis, set the following 11319To disable RELRO on a per-package basis, set the following
11316in the package's <code class="filename">Makefile</code> 11320in the package's <code class="filename">Makefile</code>
11317before <code class="filename">bsd.prefs.mk</code> is included: 11321before <code class="filename">bsd.prefs.mk</code> is included:
11318</p> 11322</p>
11319<pre class="programlisting"> 11323<pre class="programlisting">
11320RELRO_SUPPORTED= no 11324RELRO_SUPPORTED= no
11321</pre> 11325</pre>
11322<p> 11326<p>
11323It is also possible to at most enable partial RELRO, by 11327It is also possible to at most enable partial RELRO, by
11324setting <code class="varname">RELRO_SUPPORTED</code> to <code class="literal">partial</code>. 11328setting <code class="varname">RELRO_SUPPORTED</code> to <code class="literal">partial</code>.
11325</p> 11329</p>
11326</div> 11330</div>
11327</div> 11331</div>
11328<div class="sect2"> 11332<div class="sect2">
11329<div class="titlepage"><div><div><h3 class="title"> 11333<div class="titlepage"><div><div><h3 class="title">
11330<a name="hardening.caveats.ssp"></a>B.2.4. Problems with PKGSRC_USE_SSP</h3></div></div></div> 11334<a name="hardening.caveats.ssp"></a>B.2.4. Problems with PKGSRC_USE_SSP</h3></div></div></div>
11331<div class="sect3"> 11335<div class="sect3">
11332<div class="titlepage"><div><div><h4 class="title"> 11336<div class="titlepage"><div><div><h4 class="title">
11333<a name="hardening.caveats.ssp.build"></a>B.2.4.1. Packages failing to build</h4></div></div></div> 11337<a name="hardening.caveats.ssp.build"></a>B.2.4.1. Packages failing to build</h4></div></div></div>
11334<p> 11338<p>
11335The stack-smashing protection provided by this option does not work for some 11339The stack-smashing protection provided by this option does not work for some
11336programs. The most common situation in which this happens is when the program 11340programs. The most common situation in which this happens is when the program
11337allocates variables on the stack, with the size determined at run-time. 11341allocates variables on the stack, with the size determined at run-time.
11338</p> 11342</p>
11339</div> 11343</div>
11340<div class="sect3"> 11344<div class="sect3">
11341<div class="titlepage"><div><div><h4 class="title"> 11345<div class="titlepage"><div><div><h4 class="title">
11342<a name="hardening.caveats.ssp.crash"></a>B.2.4.2. Run-time crashes</h4></div></div></div> 11346<a name="hardening.caveats.ssp.crash"></a>B.2.4.2. Run-time crashes</h4></div></div></div>
11343<p> 11347<p>
11344Again, this feature may cause some programs to crash via a 11348Again, this feature may cause some programs to crash via a
11345<code class="varname">SIGABRT</code>, usually indicating an actual bug in the program. 11349<code class="varname">SIGABRT</code>, usually indicating an actual bug in the program.
11346</p> 11350</p>
11347<p> 11351<p>
11348On NetBSD <code class="varname">LOG_CRIT</code> level syslog 11352On NetBSD <code class="varname">LOG_CRIT</code> level syslog
11349messages are sent and - by default - 11353messages are sent and - by default -
11350appended to <code class="filename">/var/log/messages</code>, e.g.: 11354appended to <code class="filename">/var/log/messages</code>, e.g.:
11351</p> 11355</p>
11352<pre class="programlisting"> 11356<pre class="programlisting">
11353Jan 6 15:42:51 hostname -: hostname program - - - buffer overflow detected; terminated 11357Jan 6 15:42:51 hostname -: hostname program - - - buffer overflow detected; terminated
11354</pre> 11358</pre>
11355<p> 11359<p>
11356(where <code class="literal">hostname</code> is the hostname(1) and 11360(where <code class="literal">hostname</code> is the hostname(1) and
11357<code class="literal">program</code> is the basename(1) of the program crashed). 11361<code class="literal">program</code> is the basename(1) of the program crashed).
11358</p> 11362</p>
11359<p> 11363<p>
11360Patching the original program is then required. 11364Patching the original program is then required.
11361</p> 11365</p>
11362<p> 11366<p>
11363Rebuilding the package via: 11367Rebuilding the package via:
11364</p> 11368</p>
11365<pre class="programlisting"> 11369<pre class="programlisting">
11366<strong class="userinput"><code>% env CFLAGS=-g INSTALL_UNSTRIPPED=yes make replace</code></strong> 11370<strong class="userinput"><code>% env CFLAGS=-g INSTALL_UNSTRIPPED=yes make replace</code></strong>
11367</pre> 11371</pre>
11368<p> 11372<p>
11369and inspecting the backtrace of the coredump via the debugger 11373and inspecting the backtrace of the coredump via the debugger
11370should point out the problematic call by inspecting the frame 11374should point out the problematic call by inspecting the frame
11371calling the _chk() (SSP) function. 11375calling the _chk() (SSP) function.
11372</p> 11376</p>
11373</div> 11377</div>
11374<div class="sect3"> 11378<div class="sect3">
11375<div class="titlepage"><div><div><h4 class="title"> 11379<div class="titlepage"><div><div><h4 class="title">
11376<a name="hardening.caveats.ssp.performance"></a>B.2.4.3. Performance impact</h4></div></div></div> 11380<a name="hardening.caveats.ssp.performance"></a>B.2.4.3. Performance impact</h4></div></div></div>
11377<p> 11381<p>
11378The compiler emits extra code when using this feature: a check for buffer 11382The compiler emits extra code when using this feature: a check for buffer
11379overflows is performed when entering and exiting functions, requiring an extra 11383overflows is performed when entering and exiting functions, requiring an extra
11380variable on the stack. The level of protection can otherwise be adjusted to 11384variable on the stack. The level of protection can otherwise be adjusted to
11381affect only those functions considered more sensitive by the compiler (with 11385affect only those functions considered more sensitive by the compiler (with
11382-fstack-protector instead of -fstack-protector-all). 11386-fstack-protector instead of -fstack-protector-all).
11383</p> 11387</p>
11384<p> 11388<p>
11385The impact is not expected to be noticeable on modern hardware. However, 11389The impact is not expected to be noticeable on modern hardware. However,
11386programs with a hard requirement to run at the fastest possible speed should 11390programs with a hard requirement to run at the fastest possible speed should
11387avoid using this feature, or using libraries built with this feature. 11391avoid using this feature, or using libraries built with this feature.
11388</p> 11392</p>
11389</div> 11393</div>
11390<div class="sect3"> 11394<div class="sect3">
11391<div class="titlepage"><div><div><h4 class="title"> 11395<div class="titlepage"><div><div><h4 class="title">
11392<a name="hardening.caveats.ssp.disable"></a>B.2.4.4. Disabling SSP on a per-package basis</h4></div></div></div> 11396<a name="hardening.caveats.ssp.disable"></a>B.2.4.4. Disabling SSP on a per-package basis</h4></div></div></div>
11393<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 11397<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
11394<h3 class="title">Note</h3> 11398<h3 class="title">Note</h3>
11395<p>SSP should not be disabled to work around runtime crashes in 11399<p>SSP should not be disabled to work around runtime crashes in
11396the program! This is a very bad idea and will expose you to security 11400the program! This is a very bad idea and will expose you to security
11397vulnerabilities.</p> 11401vulnerabilities.</p>
11398</div> 11402</div>
11399<p> 11403<p>
11400To disable SSP on a per-package basis, set the following 11404To disable SSP on a per-package basis, set the following
11401in the package's <code class="filename">Makefile</code> 11405in the package's <code class="filename">Makefile</code>
11402before <code class="filename">bsd.prefs.mk</code> is included: 11406before <code class="filename">bsd.prefs.mk</code> is included:
11403</p> 11407</p>
11404<pre class="programlisting"> 11408<pre class="programlisting">
11405SSP_SUPPORTED= no 11409SSP_SUPPORTED= no
11406</pre> 11410</pre>
11407</div> 11411</div>
11408</div> 11412</div>
11409</div> 11413</div>
11410<div class="sect1"> 11414<div class="sect1">
11411<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 11415<div class="titlepage"><div><div><h2 class="title" style="clear: both">
11412<a name="hardening.audit"></a>B.3. Auditing the system</h2></div></div></div> 11416<a name="hardening.audit"></a>B.3. Auditing the system</h2></div></div></div>
11413<p> 11417<p>
11414The illusion of security is worse than having no security at all. This section 11418The illusion of security is worse than having no security at all. This section
11415lists a number of ways to ensure the security features requested are actually 11419lists a number of ways to ensure the security features requested are actually
11416effective. 11420effective.
11417</p> 11421</p>
11418<p> 11422<p>
11419These instructions were obtained and tested on a system derived from NetBSD 7 11423These instructions were obtained and tested on a system derived from NetBSD 7
11420(amd64). YMMV. 11424(amd64). YMMV.
11421</p> 11425</p>
11422<div class="sect2"> 11426<div class="sect2">
11423<div class="titlepage"><div><div><h3 class="title"> 11427<div class="titlepage"><div><div><h3 class="title">
11424<a name="hardening.audit.pie"></a>B.3.1. Checking for PIE</h3></div></div></div> 11428<a name="hardening.audit.pie"></a>B.3.1. Checking for PIE</h3></div></div></div>
11425<p> 11429<p>
11426The ELF executable type in use changes for binaries built as PIE; without: 11430The ELF executable type in use changes for binaries built as PIE; without:
11427</p> 11431</p>
11428<pre class="programlisting"> 11432<pre class="programlisting">
11429<strong class="userinput"><code>$ file /path/to/bin/ary</code></strong> 11433<strong class="userinput"><code>$ file /path/to/bin/ary</code></strong>
11430/path/to/bin/ary: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for NetBSD 7.0, not stripped 11434/path/to/bin/ary: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for NetBSD 7.0, not stripped
11431</pre> 11435</pre>
11432<p>as opposed to the following binary, built as PIE:</p> 11436<p>as opposed to the following binary, built as PIE:</p>
11433<pre class="programlisting"> 11437<pre class="programlisting">
11434<strong class="userinput"><code>$ file /path/to/pie/bin/ary</code></strong> 11438<strong class="userinput"><code>$ file /path/to/pie/bin/ary</code></strong>
11435/path/to/pie/bin/ary: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for NetBSD 7.0, not stripped 11439/path/to/pie/bin/ary: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for NetBSD 7.0, not stripped
11436</pre> 11440</pre>
11437<p> 11441<p>
11438The latter result is then what is expected. 11442The latter result is then what is expected.
11439</p> 11443</p>
11440</div> 11444</div>
11441<div class="sect2"> 11445<div class="sect2">
11442<div class="titlepage"><div><div><h3 class="title"> 11446<div class="titlepage"><div><div><h3 class="title">
11443<a name="hardening.audit.relropartial"></a>B.3.2. Checking for partial RELRO</h3></div></div></div> 11447<a name="hardening.audit.relropartial"></a>B.3.2. Checking for partial RELRO</h3></div></div></div>
11444<p> 11448<p>
11445The following command should list a section called RELRO: 11449The following command should list a section called RELRO:
11446</p> 11450</p>
11447<pre class="programlisting"> 11451<pre class="programlisting">
11448<strong class="userinput"><code>$ objdump -p /path/to/bin/ary</code></strong> 11452<strong class="userinput"><code>$ objdump -p /path/to/bin/ary</code></strong>
11449 11453
11450/path/to/bin/ary: file format elf64-x86-64 11454/path/to/bin/ary: file format elf64-x86-64
11451 11455
11452Program Header: 11456Program Header:
11453[...] 11457[...]
11454 RELRO off 0x0000000000000d78 vaddr 0x0000000000600d78 paddr 0x0000000000600d78 align 2**0 11458 RELRO off 0x0000000000000d78 vaddr 0x0000000000600d78 paddr 0x0000000000600d78 align 2**0
11455</pre> 11459</pre>
11456<p> 11460<p>
11457This check is now performed automatically if 11461This check is now performed automatically if
11458<code class="varname">PKG_DEVELOPER</code> is set and RELRO is enabled. 11462<code class="varname">PKG_DEVELOPER</code> is set and RELRO is enabled.
11459</p> 11463</p>
11460</div> 11464</div>
11461<div class="sect2"> 11465<div class="sect2">
11462<div class="titlepage"><div><div><h3 class="title"> 11466<div class="titlepage"><div><div><h3 class="title">
11463<a name="hardening.audit.relrofull"></a>B.3.3. Checking for full RELRO</h3></div></div></div> 11467<a name="hardening.audit.relrofull"></a>B.3.3. Checking for full RELRO</h3></div></div></div>
11464<p> 11468<p>
11465The dynamic loader will apply RELRO immediately when detecting the presence of 11469The dynamic loader will apply RELRO immediately when detecting the presence of
11466the <code class="varname">BIND_NOW</code> flag: 11470the <code class="varname">BIND_NOW</code> flag:
11467</p> 11471</p>
11468<pre class="programlisting"> 11472<pre class="programlisting">
11469<strong class="userinput"><code>$ objdump -x /path/to/bin/ary</code></strong> 11473<strong class="userinput"><code>$ objdump -x /path/to/bin/ary</code></strong>
11470 11474
11471/path/to/bin/ary: file format elf64-x86-64 11475/path/to/bin/ary: file format elf64-x86-64
11472 11476
11473Dynamic Section: 11477Dynamic Section:
11474[...] 11478[...]
11475 BIND_NOW 0x0000000000000000 11479 BIND_NOW 0x0000000000000000
11476</pre> 11480</pre>
11477<p> 11481<p>
11478This has to be combined with partial RELRO (see above) to be fully efficient. 11482This has to be combined with partial RELRO (see above) to be fully efficient.
11479</p> 11483</p>
11480<p> 11484<p>
11481This check is now performed automatically (where supported) if 11485This check is now performed automatically (where supported) if
11482<code class="varname">PKG_DEVELOPER</code> is set. 11486<code class="varname">PKG_DEVELOPER</code> is set.
11483</p> 11487</p>
11484</div> 11488</div>
11485<div class="sect2"> 11489<div class="sect2">
11486<div class="titlepage"><div><div><h3 class="title"> 11490<div class="titlepage"><div><div><h3 class="title">
11487<a name="hardening.audit.ssp"></a>B.3.4. Checking for SSP</h3></div></div></div> 11491<a name="hardening.audit.ssp"></a>B.3.4. Checking for SSP</h3></div></div></div>
11488<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 11492<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
11489<h3 class="title">Note</h3> 11493<h3 class="title">Note</h3>
11490<p> 11494<p>
11491Checking for SSP using this method only works where the operating system 11495Checking for SSP using this method only works where the operating system
11492uses <code class="literal">libssp</code>. <code class="literal">libssp</code> is not used 11496uses <code class="literal">libssp</code>. <code class="literal">libssp</code> is not used
11493on recent NetBSD/FreeBSD/Linux versions. 11497on recent NetBSD/FreeBSD/Linux versions.
11494</p> 11498</p>
11495</div> 11499</div>
11496<p> 11500<p>
11497Building objects, binaries and libraries with SSP will affect the presence of 11501Building objects, binaries and libraries with SSP will affect the presence of
11498additional symbols in the resulting file: 11502additional symbols in the resulting file:
11499</p> 11503</p>
11500<pre class="programlisting"> 11504<pre class="programlisting">
11501<strong class="userinput"><code>$ nm /path/to/bin/ary</code></strong> 11505<strong class="userinput"><code>$ nm /path/to/bin/ary</code></strong>
11502[...] 11506[...]
11503 U __stack_chk_fail 11507 U __stack_chk_fail
115040000000000600ea0 B __stack_chk_guard 115080000000000600ea0 B __stack_chk_guard
11505</pre> 11509</pre>
11506<p> 11510<p>
11507This is an indicator that the program was indeed built with support for SSP. 11511This is an indicator that the program was indeed built with support for SSP.
11508</p> 11512</p>
11509<p> 11513<p>
11510This check is now performed automatically (where supported) if 11514This check is now performed automatically (where supported) if
11511<code class="varname">PKG_DEVELOPER</code> is set and SSP is enabled. 11515<code class="varname">PKG_DEVELOPER</code> is set and SSP is enabled.
11512</p> 11516</p>
11513</div> 11517</div>
11514</div> 11518</div>
11515</div> 11519</div>
11516<div class="appendix"> 11520<div class="appendix">
11517<div class="titlepage"><div><div><h1 class="title"> 11521<div class="titlepage"><div><div><h1 class="title">
11518<a name="logs"></a>Appendix C. Build logs</h1></div></div></div> 11522<a name="logs"></a>Appendix C. Build logs</h1></div></div></div>
11519<div class="toc"> 11523<div class="toc">
11520<p><b>Table of Contents</b></p> 11524<p><b>Table of Contents</b></p>
11521<dl class="toc"> 11525<dl class="toc">
11522<dt><span class="sect1"><a href="#logs.building">C.1. Building figlet</a></span></dt> 11526<dt><span class="sect1"><a href="#logs.building">C.1. Building figlet</a></span></dt>
11523<dt><span class="sect1"><a href="#logs.package">C.2. Packaging figlet</a></span></dt> 11527<dt><span class="sect1"><a href="#logs.package">C.2. Packaging figlet</a></span></dt>
11524</dl> 11528</dl>
11525</div> 11529</div>
11526<div class="sect1"> 11530<div class="sect1">
11527<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 11531<div class="titlepage"><div><div><h2 class="title" style="clear: both">
11528<a name="logs.building"></a>C.1. Building figlet</h2></div></div></div> 11532<a name="logs.building"></a>C.1. Building figlet</h2></div></div></div>
11529<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make</code></strong> 11533<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make</code></strong>
11530===&gt; Checking for vulnerabilities in figlet-2.2.1nb2 11534===&gt; Checking for vulnerabilities in figlet-2.2.1nb2
11531=&gt; figlet221.tar.gz doesn't seem to exist on this system. 11535=&gt; figlet221.tar.gz doesn't seem to exist on this system.
11532=&gt; Attempting to fetch figlet221.tar.gz from ftp://ftp.figlet.org/pub/figlet/program/unix/. 11536=&gt; Attempting to fetch figlet221.tar.gz from ftp://ftp.figlet.org/pub/figlet/program/unix/.
11533=&gt; [172219 bytes] 11537=&gt; [172219 bytes]
11534Connected to ftp.plig.net. 11538Connected to ftp.plig.net.
11535220 ftp.plig.org NcFTPd Server (licensed copy) ready. 11539220 ftp.plig.org NcFTPd Server (licensed copy) ready.
11536331 Guest login ok, send your complete e-mail address as password. 11540331 Guest login ok, send your complete e-mail address as password.
11537230-You are user #5 of 500 simultaneous users allowed. 11541230-You are user #5 of 500 simultaneous users allowed.
11538230- 11542230-
11539230- ___ _ _ _ 11543230- ___ _ _ _
11540230- | _| |_ ___ ___| |_|___ ___ ___ ___ 11544230- | _| |_ ___ ___| |_|___ ___ ___ ___
11541230- | _| _| . |_| . | | | . |_| . | _| . | 11545230- | _| _| . |_| . | | | . |_| . | _| . |
11542230- |_| |_| | _|_| _|_|_|_ |_|___|_| |_ | 11546230- |_| |_| | _|_| _|_|_|_ |_|___|_| |_ |
11543230- |_| |_| |___| |___| 11547230- |_| |_| |___| |___|
11544230- 11548230-
11545230-** Welcome to ftp.plig.org ** 11549230-** Welcome to ftp.plig.org **
11546230- 11550230-
11547230-Please note that all transfers from this FTP site are logged. If you 11551230-Please note that all transfers from this FTP site are logged. If you
11548230-do not like this, please disconnect now. 11552230-do not like this, please disconnect now.
11549230- 11553230-
11550230-This archive is available via 11554230-This archive is available via
11551230- 11555230-
11552230-HTTP: http://ftp.plig.org/ 11556230-HTTP: http://ftp.plig.org/
11553230-FTP: ftp://ftp.plig.org/ (max 500 connections) 11557230-FTP: ftp://ftp.plig.org/ (max 500 connections)
11554230-RSYNC: rsync://ftp.plig.org/ (max 30 connections) 11558230-RSYNC: rsync://ftp.plig.org/ (max 30 connections)
11555230- 11559230-
11556230-Please email comments, bug reports and requests for packages to be 11560230-Please email comments, bug reports and requests for packages to be
11557230-mirrored to ftp-admin@plig.org. 11561230-mirrored to ftp-admin@plig.org.
11558230- 11562230-
11559230- 11563230-
11560230 Logged in anonymously. 11564230 Logged in anonymously.
11561Remote system type is UNIX. 11565Remote system type is UNIX.
11562Using binary mode to transfer files. 11566Using binary mode to transfer files.
11563200 Type okay. 11567200 Type okay.
11564250 "/pub" is new cwd. 11568250 "/pub" is new cwd.
11565250-"/pub/figlet" is new cwd. 11569250-"/pub/figlet" is new cwd.
11566250- 11570250-
11567250-Welcome to the figlet archive at ftp.figlet.org 11571250-Welcome to the figlet archive at ftp.figlet.org
11568250- 11572250-
11569250- ftp://ftp.figlet.org/pub/figlet/ 11573250- ftp://ftp.figlet.org/pub/figlet/
11570250- 11574250-
11571250-The official FIGlet web page is: 11575250-The official FIGlet web page is:
11572250- http://www.figlet.org/ 11576250- http://www.figlet.org/
11573250- 11577250-
11574250-If you have questions, please mailto:info@figlet.org. If you want to 11578250-If you have questions, please mailto:info@figlet.org. If you want to
11575250-contribute a font or something else, you can email us. 11579250-contribute a font or something else, you can email us.
11576250 11580250
11577250 "/pub/figlet/program" is new cwd. 11581250 "/pub/figlet/program" is new cwd.
11578250 "/pub/figlet/program/unix" is new cwd. 11582250 "/pub/figlet/program/unix" is new cwd.
11579local: figlet221.tar.gz remote: figlet221.tar.gz 11583local: figlet221.tar.gz remote: figlet221.tar.gz
11580502 Unimplemented command. 11584502 Unimplemented command.
11581227 Entering Passive Mode (195,40,6,41,246,104) 11585227 Entering Passive Mode (195,40,6,41,246,104)
11582150 Data connection accepted from 84.128.86.72:65131; transfer starting for figlet221.tar.gz (172219 bytes). 11586150 Data connection accepted from 84.128.86.72:65131; transfer starting for figlet221.tar.gz (172219 bytes).
1158338% |************** | 65800 64.16 KB/s 00:01 ETA 1158738% |************** | 65800 64.16 KB/s 00:01 ETA
11584226 Transfer completed. 11588226 Transfer completed.
11585172219 bytes received in 00:02 (75.99 KB/s) 11589172219 bytes received in 00:02 (75.99 KB/s)
11586221 Goodbye. 11590221 Goodbye.
11587=&gt; Checksum OK for figlet221.tar.gz. 11591=&gt; Checksum OK for figlet221.tar.gz.
11588===&gt; Extracting for figlet-2.2.1nb2 11592===&gt; Extracting for figlet-2.2.1nb2
11589===&gt; Required installed package ccache-[0-9]*: ccache-2.3nb1 found 11593===&gt; Required installed package ccache-[0-9]*: ccache-2.3nb1 found
11590===&gt; Patching for figlet-2.2.1nb2 11594===&gt; Patching for figlet-2.2.1nb2
11591===&gt; Applying pkgsrc patches for figlet-2.2.1nb2 11595===&gt; Applying pkgsrc patches for figlet-2.2.1nb2
11592===&gt; Overriding tools for figlet-2.2.1nb2 11596===&gt; Overriding tools for figlet-2.2.1nb2
11593===&gt; Creating toolchain wrappers for figlet-2.2.1nb2 11597===&gt; Creating toolchain wrappers for figlet-2.2.1nb2
11594===&gt; Configuring for figlet-2.2.1nb2 11598===&gt; Configuring for figlet-2.2.1nb2
11595===&gt; Building for figlet-2.2.1nb2 11599===&gt; Building for figlet-2.2.1nb2
11596gcc -O2 -DDEFAULTFONTDIR=\"/usr/pkg/share/figlet\" -DDEFAULTFONTFILE=\"standard.flf\" figlet.c zipio.c crc.c inflate.c -o figlet 11600gcc -O2 -DDEFAULTFONTDIR=\"/usr/pkg/share/figlet\" -DDEFAULTFONTFILE=\"standard.flf\" figlet.c zipio.c crc.c inflate.c -o figlet
11597chmod a+x figlet 11601chmod a+x figlet
11598gcc -O2 -o chkfont chkfont.c 11602gcc -O2 -o chkfont chkfont.c
11599=&gt; Unwrapping files-to-be-installed. 11603=&gt; Unwrapping files-to-be-installed.
11600<code class="prompt">#</code> 11604<code class="prompt">#</code>
11601<code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong> 11605<code class="prompt">#</code> <strong class="userinput"><code>make install</code></strong>
11602===&gt; Checking for vulnerabilities in figlet-2.2.1nb2 11606===&gt; Checking for vulnerabilities in figlet-2.2.1nb2
11603===&gt; Installing for figlet-2.2.1nb2 11607===&gt; Installing for figlet-2.2.1nb2
11604install -d -o root -g wheel -m 755 /usr/pkg/bin 11608install -d -o root -g wheel -m 755 /usr/pkg/bin
11605install -d -o root -g wheel -m 755 /usr/pkg/man/man6 11609install -d -o root -g wheel -m 755 /usr/pkg/man/man6
11606mkdir -p /usr/pkg/share/figlet 11610mkdir -p /usr/pkg/share/figlet
11607cp figlet /usr/pkg/bin 11611cp figlet /usr/pkg/bin
11608cp chkfont /usr/pkg/bin 11612cp chkfont /usr/pkg/bin
11609chmod 555 figlist showfigfonts 11613chmod 555 figlist showfigfonts
11610cp figlist /usr/pkg/bin 11614cp figlist /usr/pkg/bin
11611cp showfigfonts /usr/pkg/bin 11615cp showfigfonts /usr/pkg/bin
11612cp fonts/*.flf /usr/pkg/share/figlet 11616cp fonts/*.flf /usr/pkg/share/figlet
11613cp fonts/*.flc /usr/pkg/share/figlet 11617cp fonts/*.flc /usr/pkg/share/figlet
11614cp figlet.6 /usr/pkg/man/man6 11618cp figlet.6 /usr/pkg/man/man6
11615===&gt; Registering installation for figlet-2.2.1nb2 11619===&gt; Registering installation for figlet-2.2.1nb2
11616<code class="prompt">#</code></pre> 11620<code class="prompt">#</code></pre>
11617</div> 11621</div>
11618<div class="sect1"> 11622<div class="sect1">
11619<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 11623<div class="titlepage"><div><div><h2 class="title" style="clear: both">
11620<a name="logs.package"></a>C.2. Packaging figlet</h2></div></div></div> 11624<a name="logs.package"></a>C.2. Packaging figlet</h2></div></div></div>
11621<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong> 11625<pre class="screen"><code class="prompt">#</code> <strong class="userinput"><code>make package</code></strong>
11622===&gt; Checking for vulnerabilities in figlet-2.2.1nb2 11626===&gt; Checking for vulnerabilities in figlet-2.2.1nb2
11623===&gt; Packaging figlet-2.2.1nb2 11627===&gt; Packaging figlet-2.2.1nb2
11624===&gt; Building binary package for figlet-2.2.1nb2 11628===&gt; Building binary package for figlet-2.2.1nb2
11625Creating package /home/cvs/pkgsrc/packages/i386/All/figlet-2.2.1nb2.tgz 11629Creating package /home/cvs/pkgsrc/packages/i386/All/figlet-2.2.1nb2.tgz
11626Using SrcDir value of /usr/pkg 11630Using SrcDir value of /usr/pkg
11627Registering depends:. 11631Registering depends:.
11628<code class="prompt">#</code></pre> 11632<code class="prompt">#</code></pre>
11629</div> 11633</div>
11630</div> 11634</div>
11631<div class="appendix"> 11635<div class="appendix">
11632<div class="titlepage"><div><div><h1 class="title"> 11636<div class="titlepage"><div><div><h1 class="title">
11633<a name="ftp-layout"></a>Appendix D. Directory layout of the pkgsrc FTP server</h1></div></div></div> 11637<a name="ftp-layout"></a>Appendix D. Directory layout of the pkgsrc FTP server</h1></div></div></div>
11634<div class="toc"> 11638<div class="toc">
11635<p><b>Table of Contents</b></p> 11639<p><b>Table of Contents</b></p>
11636<dl class="toc"> 11640<dl class="toc">
11637<dt><span class="sect1"><a href="#ftp-distfiles">D.1. <code class="filename">distfiles</code>: The distributed source files</a></span></dt> 11641<dt><span class="sect1"><a href="#ftp-distfiles">D.1. <code class="filename">distfiles</code>: The distributed source files</a></span></dt>
11638<dt><span class="sect1"><a href="#ftp-misc">D.2. <code class="filename">misc</code>: Miscellaneous things</a></span></dt> 11642<dt><span class="sect1"><a href="#ftp-misc">D.2. <code class="filename">misc</code>: Miscellaneous things</a></span></dt>
11639<dt><span class="sect1"><a href="#ftp-packages">D.3. <code class="filename">packages</code>: Binary packages</a></span></dt> 11643<dt><span class="sect1"><a href="#ftp-packages">D.3. <code class="filename">packages</code>: Binary packages</a></span></dt>
11640<dt><span class="sect1"><a href="#ftp-reports">D.4. <code class="filename">reports</code>: Bulk build reports</a></span></dt> 11644<dt><span class="sect1"><a href="#ftp-reports">D.4. <code class="filename">reports</code>: Bulk build reports</a></span></dt>
11641<dt><span class="sect1"><a href="#ftp-source">D.5. <code class="filename">current</code>, 11645<dt><span class="sect1"><a href="#ftp-source">D.5. <code class="filename">current</code>,
11642<code class="filename">stable</code>, 11646<code class="filename">stable</code>,
11643<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>: 11647<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>:
11644source packages</a></span></dt> 11648source packages</a></span></dt>
11645</dl> 11649</dl>
11646</div> 11650</div>
11647<p>As in other big projects, the directory layout of pkgsrc 11651<p>As in other big projects, the directory layout of pkgsrc
11648 is quite complex for newbies. This chapter explains where you 11652 is quite complex for newbies. This chapter explains where you
11649 find things on the FTP server. The base directory on 11653 find things on the FTP server. The base directory on
11650 <code class="filename">ftp.NetBSD.org</code> is <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/" target="_top"><code class="filename">/pub/pkgsrc/</code></a>. 11654 <code class="filename">ftp.NetBSD.org</code> is <a class="ulink" href="ftp://ftp.NetBSD.org/pub/pkgsrc/" target="_top"><code class="filename">/pub/pkgsrc/</code></a>.
11651 On other servers it may be different, but inside this directory, 11655 On other servers it may be different, but inside this directory,
11652 everything should look the same, no matter on which server you 11656 everything should look the same, no matter on which server you
11653 are. This directory contains some subdirectories, which are 11657 are. This directory contains some subdirectories, which are
11654 explained below.</p> 11658 explained below.</p>
11655<div class="sect1"> 11659<div class="sect1">
11656<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 11660<div class="titlepage"><div><div><h2 class="title" style="clear: both">
11657<a name="ftp-distfiles"></a>D.1. <code class="filename">distfiles</code>: The distributed source files</h2></div></div></div> 11661<a name="ftp-distfiles"></a>D.1. <code class="filename">distfiles</code>: The distributed source files</h2></div></div></div>
11658<p>The directory <code class="filename">distfiles</code> contains lots 11662<p>The directory <code class="filename">distfiles</code> contains lots
11659 of archive files from all pkgsrc packages, which are mirrored 11663 of archive files from all pkgsrc packages, which are mirrored
11660 here. The subdirectories are called after their package names 11664 here. The subdirectories are called after their package names
11661 and are used when the distributed files have names that don't 11665 and are used when the distributed files have names that don't
11662 explicitly contain a version number or are otherwise too generic 11666 explicitly contain a version number or are otherwise too generic
11663 (for example <code class="filename">release.tar.gz</code>).</p> 11667 (for example <code class="filename">release.tar.gz</code>).</p>
11664</div> 11668</div>
11665<div class="sect1"> 11669<div class="sect1">
11666<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 11670<div class="titlepage"><div><div><h2 class="title" style="clear: both">
11667<a name="ftp-misc"></a>D.2. <code class="filename">misc</code>: Miscellaneous things</h2></div></div></div> 11671<a name="ftp-misc"></a>D.2. <code class="filename">misc</code>: Miscellaneous things</h2></div></div></div>
11668<p>This directory contains things that individual pkgsrc 11672<p>This directory contains things that individual pkgsrc
11669 developers find worth publishing.</p> 11673 developers find worth publishing.</p>
11670</div> 11674</div>
11671<div class="sect1"> 11675<div class="sect1">
11672<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 11676<div class="titlepage"><div><div><h2 class="title" style="clear: both">
11673<a name="ftp-packages"></a>D.3. <code class="filename">packages</code>: Binary packages</h2></div></div></div> 11677<a name="ftp-packages"></a>D.3. <code class="filename">packages</code>: Binary packages</h2></div></div></div>
11674<p>This directory contains binary packages for the various 11678<p>This directory contains binary packages for the various
11675 platforms that are supported by pkgsrc. 11679 platforms that are supported by pkgsrc.
11676 Each subdirectory is of the form <em class="replaceable"><code>OPSYS</code></em>/<em class="replaceable"><code>ARCH</code></em>/<em class="replaceable"><code>OSVERSION_TAG</code></em>. The meaning of these variables is:</p> 11680 Each subdirectory is of the form <em class="replaceable"><code>OPSYS</code></em>/<em class="replaceable"><code>ARCH</code></em>/<em class="replaceable"><code>OSVERSION_TAG</code></em>. The meaning of these variables is:</p>
11677<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 11681<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
11678<li class="listitem"><p><code class="varname">OPSYS</code> is the name of the 11682<li class="listitem"><p><code class="varname">OPSYS</code> is the name of the
11679 operating system for which the packages have been built. The 11683 operating system for which the packages have been built. The
11680 name is taken from the output of the <span class="command"><strong>uname</strong></span> 11684 name is taken from the output of the <span class="command"><strong>uname</strong></span>
11681 command, so it may differ from the one you are used to 11685 command, so it may differ from the one you are used to
11682 hear.</p></li> 11686 hear.</p></li>
11683<li class="listitem"><p><code class="varname">ARCH</code> is the hardware 11687<li class="listitem"><p><code class="varname">ARCH</code> is the hardware
11684 architecture of the platform for which the packages have been 11688 architecture of the platform for which the packages have been
11685 built. It also includes the <code class="varname">ABI</code> (Application 11689 built. It also includes the <code class="varname">ABI</code> (Application
11686 Binary Interface) for platforms that have several of 11690 Binary Interface) for platforms that have several of
11687 them.</p></li> 11691 them.</p></li>
11688<li class="listitem"><p><code class="varname">OSVERSION</code> is the version of 11692<li class="listitem"><p><code class="varname">OSVERSION</code> is the version of
11689 the operating system. For version numbers that change often (for 11693 the operating system. For version numbers that change often (for
11690 example NetBSD-current), the often-changing part should be 11694 example NetBSD-current), the often-changing part should be
11691 replaced with an <code class="literal">x</code>, for example 11695 replaced with an <code class="literal">x</code>, for example
11692 <code class="literal">4.99.x</code>.</p></li> 11696 <code class="literal">4.99.x</code>.</p></li>
11693<li class="listitem"><p><code class="varname">TAG</code> is either 11697<li class="listitem"><p><code class="varname">TAG</code> is either
11694 <code class="literal">20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code> 11698 <code class="literal">20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>
11695 for a stable branch, or <code class="literal">head</code> for packages 11699 for a stable branch, or <code class="literal">head</code> for packages
11696 built from the HEAD branch. The latter should only be used when 11700 built from the HEAD branch. The latter should only be used when
11697 the packages are updated on a regular basis. Otherwise the date 11701 the packages are updated on a regular basis. Otherwise the date
11698 from checking out pkgsrc should be appended, for example 11702 from checking out pkgsrc should be appended, for example
11699 <code class="literal">head_20071015</code>.</p></li> 11703 <code class="literal">head_20071015</code>.</p></li>
11700</ul></div> 11704</ul></div>
11701<p>The rationale for exactly this scheme is that the pkgsrc users looking for binary packages 11705<p>The rationale for exactly this scheme is that the pkgsrc users looking for binary packages
11702 can quickly click through the directories on the 11706 can quickly click through the directories on the
11703 server and find the best binary packages for their machines. Since they 11707 server and find the best binary packages for their machines. Since they
11704 usually know the operating system and the hardware architecture, OPSYS 11708 usually know the operating system and the hardware architecture, OPSYS
11705 and ARCH are placed first. After these choices, they can select the 11709 and ARCH are placed first. After these choices, they can select the
11706 best combination of OSVERSION and TAG together, since it is usually the 11710 best combination of OSVERSION and TAG together, since it is usually the
11707 case that packages stay compatible between different version of the 11711 case that packages stay compatible between different version of the
11708 operating system.</p> 11712 operating system.</p>
11709<p>In each of these directories, there is a 11713<p>In each of these directories, there is a
11710 whole binary packages collection for a specific platform. It has a directory called 11714 whole binary packages collection for a specific platform. It has a directory called
11711 <code class="filename">All</code> which contains all binary packages. 11715 <code class="filename">All</code> which contains all binary packages.
11712 Besides that, there are various category directories that 11716 Besides that, there are various category directories that
11713 contain symbolic links to the real binary packages.</p> 11717 contain symbolic links to the real binary packages.</p>
11714</div> 11718</div>
11715<div class="sect1"> 11719<div class="sect1">
11716<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 11720<div class="titlepage"><div><div><h2 class="title" style="clear: both">
11717<a name="ftp-reports"></a>D.4. <code class="filename">reports</code>: Bulk build reports</h2></div></div></div> 11721<a name="ftp-reports"></a>D.4. <code class="filename">reports</code>: Bulk build reports</h2></div></div></div>
11718<p>Here are the reports from bulk builds, for those who want 11722<p>Here are the reports from bulk builds, for those who want
11719 to fix packages that didn't build on some of the platforms. The 11723 to fix packages that didn't build on some of the platforms. The
11720 structure of subdirectories should look like the one in <a class="xref" href="#ftp-packages" title="D.3. packages: Binary packages">Section D.3, &#8220;<code class="filename">packages</code>: Binary packages&#8221;</a>.</p> 11724 structure of subdirectories should look like the one in <a class="xref" href="#ftp-packages" title="D.3. packages: Binary packages">Section D.3, &#8220;<code class="filename">packages</code>: Binary packages&#8221;</a>.</p>
11721</div> 11725</div>
11722<div class="sect1"> 11726<div class="sect1">
11723<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 11727<div class="titlepage"><div><div><h2 class="title" style="clear: both">
11724<a name="ftp-source"></a>D.5. <code class="filename">current</code>, 11728<a name="ftp-source"></a>D.5. <code class="filename">current</code>,
11725<code class="filename">stable</code>, 11729<code class="filename">stable</code>,
11726<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>: 11730<code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>:
11727source packages</h2></div></div></div> 11731source packages</h2></div></div></div>
11728<p>These directories contain the <span class="quote">&#8220;<span class="quote">real</span>&#8221;</span> pkgsrc, 11732<p>These directories contain the <span class="quote">&#8220;<span class="quote">real</span>&#8221;</span> pkgsrc,
11729 that is the files that define how to create binary packages from 11733 that is the files that define how to create binary packages from
11730 source archives.</p> 11734 source archives.</p>
11731<p>Each of the <code class="filename">current</code>, 11735<p>Each of the <code class="filename">current</code>,
11732 <code class="filename">stable</code> and 11736 <code class="filename">stable</code> and
11733 <code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code> 11737 <code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>
11734 directories share the same structure. They each contain a 11738 directories share the same structure. They each contain a
11735 <code class="filename">pkgsrc</code> directory and 11739 <code class="filename">pkgsrc</code> directory and
11736 <code class="filename">pkgsrc.tar.{bz,gz,xz}</code> file.</p> 11740 <code class="filename">pkgsrc.tar.{bz,gz,xz}</code> file.</p>
11737<p>The directory <code class="filename">pkgsrc</code> contains a 11741<p>The directory <code class="filename">pkgsrc</code> contains a
11738 snapshot of the CVS repository, which is updated regularly. The 11742 snapshot of the CVS repository, which is updated regularly. The
11739 file <code class="filename">pkgsrc.tar.{bz,gz,xz}</code> contains the same 11743 file <code class="filename">pkgsrc.tar.{bz,gz,xz}</code> contains the same
11740 as the directory, ready to be downloaded as a whole.</p> 11744 as the directory, ready to be downloaded as a whole.</p>
11741<p>The <code class="filename">current</code> directory contains files 11745<p>The <code class="filename">current</code> directory contains files
11742 related to the HEAD branch of the CVS repository. 11746 related to the HEAD branch of the CVS repository.
11743 In this directory there is an additional file called 11747 In this directory there is an additional file called
11744 <code class="filename">pkgsrc-readmes.tar.{bz,gz,xz}</code> that contains 11748 <code class="filename">pkgsrc-readmes.tar.{bz,gz,xz}</code> that contains
11745 all pkgsrc <code class="filename">README</code>s with information about 11749 all pkgsrc <code class="filename">README</code>s with information about
11746 categories and packages. 11750 categories and packages.
11747 </p> 11751 </p>
11748<p>The <code class="filename">stable</code> directory is a symlink to 11752<p>The <code class="filename">stable</code> directory is a symlink to
11749 the latest  11753 the latest
11750 <code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>. 11754 <code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>.
11751 </p> 11755 </p>
11752<p>The 11756<p>The
11753 <code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>. 11757 <code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>.
11754 directories contain files related to the  11758 directories contain files related to the
11755 <code class="filename">-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code> 11759 <code class="filename">-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em></code>
11756 stable branch of the CVS repository. In these directories there is 11760 stable branch of the CVS repository. In these directories there is
11757 an additional file called 11761 an additional file called
11758 <code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em>.tar.{bz,gz,xz}</code>, 11762 <code class="filename">pkgsrc-20<em class="replaceable"><code>xx</code></em>Q<em class="replaceable"><code>y</code></em>.tar.{bz,gz,xz}</code>,
11759 which contains the state of pkgsrc when it was branched.</p> 11763 which contains the state of pkgsrc when it was branched.</p>
11760</div> 11764</div>
11761</div> 11765</div>
11762<div class="appendix"> 11766<div class="appendix">
11763<div class="titlepage"><div><div><h1 class="title"> 11767<div class="titlepage"><div><div><h1 class="title">
11764<a name="help-topics"></a>Appendix E. Help topics</h1></div></div></div> 11768<a name="help-topics"></a>Appendix E. Help topics</h1></div></div></div>
11765<p> 11769<p>
11766 The following list contains all help topics that are available 11770 The following list contains all help topics that are available
11767 when running <span class="command"><strong>bmake help topic=:index</strong></span>. 11771 when running <span class="command"><strong>bmake help topic=:index</strong></span>.
11768</p> 11772</p>
11769<table border="0" summary="Simple list" class="simplelist"> 11773<table border="0" summary="Simple list" class="simplelist">
11770<tr> 11774<tr>
11771<td>#!</td> 11775<td>#!</td>
11772<td>-lintl</td> 11776<td>-lintl</td>
11773</tr> 11777</tr>
11774<tr> 11778<tr>
11775<td>32bit</td> 11779<td>32bit</td>
11776<td>64bit</td> 11780<td>64bit</td>
11777</tr> 11781</tr>
11778<tr> 11782<tr>
11779<td>ABI</td> 11783<td>ABI</td>
11780<td>ACCEPTABLE_LICENSES</td> 11784<td>ACCEPTABLE_LICENSES</td>
11781</tr> 11785</tr>
11782<tr> 11786<tr>
11783<td>ACROREAD_FONTPATH</td> 11787<td>ACROREAD_FONTPATH</td>
11784<td>ADDITIONAL</td> 11788<td>ADDITIONAL</td>
11785</tr> 11789</tr>
11786<tr> 11790<tr>
11787<td>AFAIK</td> 11791<td>AFAIK</td>
11788<td>AIX</td> 11792<td>AIX</td>
11789</tr> 11793</tr>
11790<tr> 11794<tr>
11791<td>ALLOW_VULNERABLE_PACKAGES</td> 11795<td>ALLOW_VULNERABLE_PACKAGES</td>
11792<td>ALL_ENV</td> 11796<td>ALL_ENV</td>
11793</tr> 11797</tr>
11794<tr> 11798<tr>
11795<td>ALSA_PC</td> 
11796<td>ALTERNATIVES_SRC</td> 11799<td>ALTERNATIVES_SRC</td>
11797</tr> 
11798<tr> 
11799<td>AMANDA_TMP</td> 11800<td>AMANDA_TMP</td>
11800<td>AMANDA_USER</td> 
11801</tr> 11801</tr>
11802<tr> 11802<tr>
 11803<td>AMANDA_USER</td>
11803<td>AMANDA_VAR</td> 11804<td>AMANDA_VAR</td>
11804<td>APACHE_GROUP</td> 
11805</tr> 11805</tr>
11806<tr> 11806<tr>
 11807<td>APACHE_GROUP</td>
11807<td>APACHE_MODULE_NAME</td> 11808<td>APACHE_MODULE_NAME</td>
11808<td>APACHE_MODULE_SRC</td> 
11809</tr> 11809</tr>
11810<tr> 11810<tr>
 11811<td>APACHE_MODULE_SRC</td>
11811<td>APACHE_MODULE_SRCDIR</td> 11812<td>APACHE_MODULE_SRCDIR</td>
11812<td>APACHE_PKG_PREFIX</td> 
11813</tr> 11813</tr>
11814<tr> 11814<tr>
 11815<td>APACHE_PKG_PREFIX</td>
11815<td>APACHE_SUEXEC_CONFIGURE_ARGS</td> 11816<td>APACHE_SUEXEC_CONFIGURE_ARGS</td>
11816<td>APACHE_SUEXEC_DOCROOT</td> 
11817</tr> 11817</tr>
11818<tr> 11818<tr>
 11819<td>APACHE_SUEXEC_DOCROOT</td>
11819<td>APACHE_USER</td> 11820<td>APACHE_USER</td>
11820<td>APPEND_ABI</td> 
11821</tr> 11821</tr>
11822<tr> 11822<tr>
 11823<td>APPEND_ABI</td>
11823<td>APPEND_ELF</td> 11824<td>APPEND_ELF</td>
11824<td>ARLA_CACHE</td> 
11825</tr> 11825</tr>
11826<tr> 11826<tr>
 11827<td>ARLA_CACHE</td>
11827<td>AUDIT_PACKAGES_FLAGS</td> 11828<td>AUDIT_PACKAGES_FLAGS</td>
11828<td>AUTOCONF_REQD</td> 
11829</tr> 11829</tr>
11830<tr> 11830<tr>
 11831<td>AUTOCONF_REQD</td>
11831<td>AUTOMAKE_OVERRIDE</td> 11832<td>AUTOMAKE_OVERRIDE</td>
11832<td>AUTOMAKE_REQD</td> 
11833</tr> 11833</tr>
11834<tr> 11834<tr>
 11835<td>AUTOMAKE_REQD</td>
11835<td>AUTO_MKDIRS</td> 11836<td>AUTO_MKDIRS</td>
11836<td>BDB185_DEFAULT</td> 
11837</tr> 11837</tr>
11838<tr> 11838<tr>
 11839<td>BDB185_DEFAULT</td>
11839<td>BDBBASE</td> 11840<td>BDBBASE</td>
11840<td>BDB_ACCEPTED</td> 
11841</tr> 11841</tr>
11842<tr> 11842<tr>
 11843<td>BDB_ACCEPTED</td>
11843<td>BDB_DEFAULT</td> 11844<td>BDB_DEFAULT</td>
11844<td>BDB_LIBS</td> 
11845</tr> 11845</tr>
11846<tr> 11846<tr>
 11847<td>BDB_LIBS</td>
11847<td>BDB_TYPE</td> 11848<td>BDB_TYPE</td>
11848<td>BINCIMAP_GROUP</td> 
11849</tr> 11849</tr>
11850<tr> 11850<tr>
 11851<td>BINCIMAP_GROUP</td>
11851<td>BINCIMAP_USER</td> 11852<td>BINCIMAP_USER</td>
11852<td>BIND_DIR</td> 
11853</tr> 11853</tr>
11854<tr> 11854<tr>
 11855<td>BIND_DIR</td>
11855<td>BIND_GROUP</td> 11856<td>BIND_GROUP</td>
11856<td>BIND_USER</td> 
11857</tr> 11857</tr>
11858<tr> 11858<tr>
 11859<td>BIND_USER</td>
11859<td>BINOWN</td> 11860<td>BINOWN</td>
11860<td>BINPKG_SITES</td> 
11861</tr> 11861</tr>
11862<tr> 11862<tr>
 11863<td>BINPKG_SITES</td>
11863<td>BIN_INSTALL_FLAGS</td> 11864<td>BIN_INSTALL_FLAGS</td>
11864<td>BISON_PKGDATADIR</td> 
11865</tr> 11865</tr>
11866<tr> 11866<tr>
 11867<td>BISON_PKGDATADIR</td>
11867<td>BLAS</td> 11868<td>BLAS</td>
11868<td>BLAS_ACCEPTED</td> 
11869</tr> 11869</tr>
11870<tr> 11870<tr>
 11871<td>BLAS_ACCEPTED</td>
11871<td>BLAS_C_INTERFACE</td> 11872<td>BLAS_C_INTERFACE</td>
11872<td>BLAS_INCLUDES</td> 
11873</tr> 11873</tr>
11874<tr> 11874<tr>
 11875<td>BLAS_INCLUDES</td>
11875<td>BLAS_INDEX64</td> 11876<td>BLAS_INDEX64</td>
11876<td>BLAS_LIBS</td> 
11877</tr> 11877</tr>
11878<tr> 11878<tr>
 11879<td>BLAS_LIBS</td>
11879<td>BLAS_TYPE</td> 11880<td>BLAS_TYPE</td>
11880<td>BOOTSTRAP_DEPENDS</td> 
11881</tr> 11881</tr>
11882<tr> 11882<tr>
 11883<td>BOOTSTRAP_DEPENDS</td>
11883<td>BROKEN</td> 11884<td>BROKEN</td>
11884<td>BROKEN_EXCEPT_ON_PLATFORM</td> 
11885</tr> 11885</tr>
11886<tr> 11886<tr>
 11887<td>BROKEN_EXCEPT_ON_PLATFORM</td>
11887<td>BROKEN_ON_PLATFORM</td> 11888<td>BROKEN_ON_PLATFORM</td>
11888<td>BSDSRCDIR</td> 
11889</tr> 11889</tr>
11890<tr> 11890<tr>
 11891<td>BSDSRCDIR</td>
11891<td>BSDXSRCDIR</td> 11892<td>BSDXSRCDIR</td>
11892<td>BSD_MAKE_ENV</td> 
11893</tr> 11893</tr>
11894<tr> 11894<tr>
 11895<td>BSD_MAKE_ENV</td>
11895<td>BUILDLINK_AUTO_DIRS</td> 11896<td>BUILDLINK_AUTO_DIRS</td>
11896<td>BUILDLINK_AUTO_VARS</td> 
11897</tr> 11897</tr>
11898<tr> 11898<tr>
 11899<td>BUILDLINK_AUTO_VARS</td>
11899<td>BUILDLINK_CFLAGS</td> 11900<td>BUILDLINK_CFLAGS</td>
11900<td>BUILDLINK_CONTENTS_FILTER</td> 
11901</tr> 11901</tr>
11902<tr> 11902<tr>
 11903<td>BUILDLINK_CONTENTS_FILTER</td>
11903<td>BUILDLINK_CPPFLAGS</td> 11904<td>BUILDLINK_CPPFLAGS</td>
11904<td>BUILDLINK_DEPMETHOD</td> 
11905</tr> 11905</tr>
11906<tr> 11906<tr>
11907<td>BUILDLINK_FILES</td> 11907<td>BUILDLINK_FILES</td>
11908<td>BUILDLINK_FILES_CMD</td> 11908<td>BUILDLINK_FILES_CMD</td>
11909</tr> 11909</tr>
11910<tr> 11910<tr>
11911<td>BUILDLINK_FNAME_TRANSFORM</td> 11911<td>BUILDLINK_FNAME_TRANSFORM</td>
11912<td>BUILDLINK_LDFLAGS</td> 11912<td>BUILDLINK_LDFLAGS</td>
11913</tr> 11913</tr>
11914<tr> 11914<tr>
11915<td>BUILDLINK_LIBS</td> 11915<td>BUILDLINK_LIBS</td>
11916<td>BUILDLINK_OPSYS_SUPPORT_PTHREAD</td> 11916<td>BUILDLINK_OPSYS_SUPPORT_PTHREAD</td>
11917</tr> 11917</tr>
11918<tr> 11918<tr>
11919<td>BUILDLINK_PKGNAME</td> 11919<td>BUILDLINK_PKGNAME</td>
11920<td>BUILDLINK_PREFIX</td> 11920<td>BUILDLINK_PREFIX</td>
11921</tr> 11921</tr>
11922<tr> 11922<tr>
11923<td>BUILDLINK_RPATHDIRS</td> 11923<td>BUILDLINK_RPATHDIRS</td>
11924<td>BUILDLINK_TREE</td> 11924<td>BUILDLINK_TREE</td>
11925</tr> 11925</tr>
11926<tr> 11926<tr>
11927<td>BUILD_DEFS</td> 11927<td>BUILD_DEFS</td>
11928<td>BUILD_DEFS_EFFECTS</td> 11928<td>BUILD_DEFS_EFFECTS</td>
11929</tr> 11929</tr>
11930<tr> 11930<tr>
11931<td>BUILD_DEPENDS</td> 11931<td>BUILD_DEPENDS</td>
11932<td>BUILD_DIRS</td> 11932<td>BUILD_DIRS</td>
11933</tr> 11933</tr>
11934<tr> 11934<tr>
11935<td>BUILD_ENV_SHELL</td> 11935<td>BUILD_ENV_SHELL</td>
11936<td>BUILD_MAKE_CMD</td> 11936<td>BUILD_MAKE_CMD</td>
11937</tr> 11937</tr>
11938<tr> 11938<tr>
11939<td>BUILD_MAKE_FLAGS</td> 11939<td>BUILD_MAKE_FLAGS</td>
11940<td>BUILD_TARGET</td> 11940<td>BUILD_TARGET</td>
11941</tr> 11941</tr>
11942<tr> 11942<tr>
11943<td>BUILTIN_FIND_FILES</td> 11943<td>BUILTIN_FIND_FILES</td>
11944<td>BUILTIN_FIND_FILES_VAR</td> 11944<td>BUILTIN_FIND_FILES_VAR</td>
11945</tr> 11945</tr>
11946<tr> 11946<tr>
11947<td>BUILTIN_FIND_GREP</td> 11947<td>BUILTIN_FIND_GREP</td>
11948<td>BUILTIN_FIND_HEADERS</td> 11948<td>BUILTIN_FIND_HEADERS</td>
11949</tr> 11949</tr>
11950<tr> 11950<tr>
11951<td>BUILTIN_FIND_HEADERS_VAR</td> 11951<td>BUILTIN_FIND_HEADERS_VAR</td>
11952<td>BUILTIN_FIND_PKGCONFIG</td> 11952<td>BUILTIN_FIND_PKGCONFIG</td>
11953</tr> 11953</tr>
11954<tr> 11954<tr>
11955<td>BUILTIN_FIND_PKGCONFIG_VAR</td> 11955<td>BUILTIN_FIND_PKGCONFIG_VAR</td>
11956<td>BUILTIN_PKG</td> 11956<td>BUILTIN_PKG</td>
11957</tr> 11957</tr>
11958<tr> 11958<tr>
11959<td>BUILTIN_TEST_CURSES_DEFINES</td> 11959<td>BUILTIN_TEST_CURSES_DEFINES</td>
11960<td>BUILTIN_TEST_CURSES_FUNCS</td> 11960<td>BUILTIN_TEST_CURSES_FUNCS</td>
11961</tr> 11961</tr>
11962<tr> 11962<tr>
11963<td>BUILTIN_VERSION_SCRIPT</td> 11963<td>BUILTIN_VERSION_SCRIPT</td>
11964<td>BUILTIN_X11_TYPE</td> 11964<td>BUILTIN_X11_TYPE</td>
11965</tr> 11965</tr>
11966<tr> 11966<tr>
11967<td>BUILTIN_X11_VERSION</td> 11967<td>BUILTIN_X11_VERSION</td>
11968<td>CACTI_GROUP</td> 11968<td>CACTI_GROUP</td>
11969</tr> 11969</tr>
11970<tr> 11970<tr>
11971<td>CACTI_USER</td> 11971<td>CACTI_USER</td>
11972<td>CANNA_GROUP</td> 11972<td>CANNA_GROUP</td>
11973</tr> 11973</tr>
11974<tr> 11974<tr>
11975<td>CANNA_USER</td> 11975<td>CANNA_USER</td>
11976<td>CAT</td> 11976<td>CAT</td>
11977</tr> 11977</tr>
11978<tr> 11978<tr>
11979<td>CBLAS_LIBS</td> 11979<td>CBLAS_LIBS</td>
11980<td>CCACHE_BASE</td> 11980<td>CCACHE_BASE</td>
11981</tr> 11981</tr>
11982<tr> 11982<tr>
11983<td>CCACHE_DIR</td> 11983<td>CCACHE_DIR</td>
11984<td>CCACHE_LOGFILE</td> 11984<td>CCACHE_LOGFILE</td>
11985</tr> 11985</tr>
11986<tr> 11986<tr>
11987<td>CC_VERSION</td> 11987<td>CC_VERSION</td>
11988<td>CC_VERSION_STRING</td> 11988<td>CC_VERSION_STRING</td>
11989</tr> 11989</tr>
11990<tr> 11990<tr>
11991<td>CDRECORD_CONF</td> 11991<td>CDRECORD_CONF</td>
11992<td>CDROM_PKG_URL_DIR</td> 11992<td>CDROM_PKG_URL_DIR</td>
11993</tr> 11993</tr>
11994<tr> 11994<tr>
11995<td>CDROM_PKG_URL_HOST</td> 11995<td>CDROM_PKG_URL_HOST</td>
11996<td>CHECKOUT_DATE</td> 
11997</tr> 
11998<tr> 
11999<td>CHECK_COMPILER</td> 11996<td>CHECK_COMPILER</td>
12000<td>CHECK_FAKEHOME</td> 
12001</tr> 11997</tr>
12002<tr> 11998<tr>
 11999<td>CHECK_FAKEHOME</td>
12003<td>CHECK_FILES</td> 12000<td>CHECK_FILES</td>
12004<td>CHECK_FILES_SKIP</td> 
12005</tr> 12001</tr>
12006<tr> 12002<tr>
 12003<td>CHECK_FILES_SKIP</td>
12007<td>CHECK_FILES_STRICT</td> 12004<td>CHECK_FILES_STRICT</td>
12008<td>CHECK_HEADERS</td> 
12009</tr> 12005</tr>
12010<tr> 12006<tr>
 12007<td>CHECK_HEADERS</td>
12011<td>CHECK_HEADERS_SKIP</td> 12008<td>CHECK_HEADERS_SKIP</td>
12012<td>CHECK_INTERPRETER</td> 
12013</tr> 12009</tr>
12014<tr> 12010<tr>
 12011<td>CHECK_INTERPRETER</td>
12015<td>CHECK_INTERPRETER_SKIP</td> 12012<td>CHECK_INTERPRETER_SKIP</td>
12016<td>CHECK_PERMS</td> 
12017</tr> 12013</tr>
12018<tr> 12014<tr>
 12015<td>CHECK_PERMS</td>
12019<td>CHECK_PERMS_AUTOFIX</td> 12016<td>CHECK_PERMS_AUTOFIX</td>
12020<td>CHECK_PERMS_SKIP</td> 
12021</tr> 12017</tr>
12022<tr> 12018<tr>
 12019<td>CHECK_PERMS_SKIP</td>
12023<td>CHECK_PIE</td> 12020<td>CHECK_PIE</td>
12024<td>CHECK_PIE_SKIP</td> 
12025</tr> 12021</tr>
12026<tr> 12022<tr>
 12023<td>CHECK_PIE_SKIP</td>
12027<td>CHECK_PIE_SUPPORTED</td> 12024<td>CHECK_PIE_SUPPORTED</td>
12028<td>CHECK_PORTABILITY</td> 
12029</tr> 12025</tr>
12030<tr> 12026<tr>
 12027<td>CHECK_PORTABILITY</td>
12031<td>CHECK_PORTABILITY_EXPERIMENTAL</td> 12028<td>CHECK_PORTABILITY_EXPERIMENTAL</td>
12032<td>CHECK_PORTABILITY_SKIP</td> 
12033</tr> 12029</tr>
12034<tr> 12030<tr>
 12031<td>CHECK_PORTABILITY_SKIP</td>
12035<td>CHECK_RELRO</td> 12032<td>CHECK_RELRO</td>
12036<td>CHECK_RELRO_SKIP</td> 
12037</tr> 12033</tr>
12038<tr> 12034<tr>
 12035<td>CHECK_RELRO_SKIP</td>
12039<td>CHECK_RELRO_SUPPORTED</td> 12036<td>CHECK_RELRO_SUPPORTED</td>
12040<td>CHECK_SHLIBS</td> 
12041</tr> 12037</tr>
12042<tr> 12038<tr>
 12039<td>CHECK_SHLIBS</td>
12043<td>CHECK_SHLIBS_SKIP</td> 12040<td>CHECK_SHLIBS_SKIP</td>
12044<td>CHECK_SHLIBS_SUPPORTED</td> 
12045</tr> 12041</tr>
12046<tr> 12042<tr>
 12043<td>CHECK_SHLIBS_SUPPORTED</td>
12047<td>CHECK_SHLIBS_TOXIC</td> 12044<td>CHECK_SHLIBS_TOXIC</td>
12048<td>CHECK_SSP</td> 
12049</tr> 12045</tr>
12050<tr> 12046<tr>
 12047<td>CHECK_SSP</td>
12051<td>CHECK_SSP_SKIP</td> 12048<td>CHECK_SSP_SKIP</td>
12052<td>CHECK_SSP_SUPPORTED</td> 
12053</tr> 12049</tr>
12054<tr> 12050<tr>
 12051<td>CHECK_SSP_SUPPORTED</td>
12055<td>CHECK_STRIPPED</td> 12052<td>CHECK_STRIPPED</td>
12056<td>CHECK_STRIPPED_SKIP</td> 
12057</tr> 12053</tr>
12058<tr> 12054<tr>
 12055<td>CHECK_STRIPPED_SKIP</td>
12059<td>CHECK_WRKREF</td> 12056<td>CHECK_WRKREF</td>
12060<td>CHECK_WRKREF_EXTRA_DIRS</td> 
12061</tr> 12057</tr>
12062<tr> 12058<tr>
 12059<td>CHECK_WRKREF_EXTRA_DIRS</td>
12063<td>CHECK_WRKREF_SKIP</td> 12060<td>CHECK_WRKREF_SKIP</td>
12064<td>CLAMAV_DBDIR</td> 
12065</tr> 12061</tr>
12066<tr> 12062<tr>
 12063<td>CLAMAV_DBDIR</td>
12067<td>CLAMAV_GROUP</td> 12064<td>CLAMAV_GROUP</td>
12068<td>CLAMAV_USER</td> 
12069</tr> 12065</tr>
12070<tr> 12066<tr>
 12067<td>CLAMAV_USER</td>
12071<td>CLANGBASE</td> 12068<td>CLANGBASE</td>
12072<td>CLEANDEPENDS</td> 
12073</tr> 12069</tr>
12074<tr> 12070<tr>
 12071<td>CLEANDEPENDS</td>
12075<td>CMAKE_DEPENDENCIES_REWRITE</td> 12072<td>CMAKE_DEPENDENCIES_REWRITE</td>
12076<td>CMAKE_INSTALL_NAME_DIR</td> 
12077</tr> 12073</tr>
12078<tr> 12074<tr>
 12075<td>CMAKE_INSTALL_NAME_DIR</td>
12079<td>CMAKE_INSTALL_PREFIX</td> 12076<td>CMAKE_INSTALL_PREFIX</td>
12080<td>CMAKE_MODULE_PATH_OVERRIDE</td> 
12081</tr> 12077</tr>
12082<tr> 12078<tr>
 12079<td>CMAKE_MODULE_PATH_OVERRIDE</td>
12083<td>CMAKE_PKGSRC_BUILD_FLAGS</td> 12080<td>CMAKE_PKGSRC_BUILD_FLAGS</td>
12084<td>CMAKE_PREFIX_PATH</td> 
12085</tr> 12081</tr>
12086<tr> 12082<tr>
 12083<td>CMAKE_PREFIX_PATH</td>
12087<td>CMAKE_USE_GNU_INSTALL_DIRS</td> 12084<td>CMAKE_USE_GNU_INSTALL_DIRS</td>
12088<td>COMMON_LISP_DOCFILES</td> 
12089</tr> 
12090<tr> 
12091<td>COMMON_LISP_EXAMPLES</td> 
12092<td>COMMON_LISP_EXTRAFILES</td> 
12093</tr> 
12094<tr> 
12095<td>COMMON_LISP_PACKAGES</td> 
12096<td>COMMON_LISP_SYSTEM</td> 
12097</tr> 12085</tr>
12098<tr> 12086<tr>
12099<td>COMPILER_RPATH_FLAG</td> 12087<td>COMPILER_RPATH_FLAG</td>
12100<td>COMPILER_USE_SYMLINKS</td> 12088<td>COMPILER_USE_SYMLINKS</td>
12101</tr> 12089</tr>
12102<tr> 12090<tr>
12103<td>CONFIGURE_ARGS</td> 12091<td>CONFIGURE_ARGS</td>
12104<td>CONFIGURE_DIRS</td> 12092<td>CONFIGURE_DIRS</td>
12105</tr> 12093</tr>
12106<tr> 12094<tr>
12107<td>CONFIGURE_ENV</td> 12095<td>CONFIGURE_ENV</td>
12108<td>CONFIGURE_ENV_SHELL</td> 12096<td>CONFIGURE_ENV_SHELL</td>
12109</tr> 12097</tr>
12110<tr> 12098<tr>
12111<td>CONFIGURE_HAS_INFODIR</td> 12099<td>CONFIGURE_HAS_INFODIR</td>
12112<td>CONFIGURE_HAS_MANDIR</td> 12100<td>CONFIGURE_HAS_MANDIR</td>
12113</tr> 12101</tr>
12114<tr> 12102<tr>
12115<td>CONFIGURE_SCRIPT</td> 12103<td>CONFIGURE_SCRIPT</td>
12116<td>CONFIG_SHELL</td> 12104<td>CONFIG_SHELL</td>
12117</tr> 12105</tr>
12118<tr> 12106<tr>
12119<td>CONFIG_SHELL_FLAGS</td> 12107<td>CONFIG_SHELL_FLAGS</td>
12120<td>CONF_FILES</td> 12108<td>CONF_FILES</td>
12121</tr> 12109</tr>
12122<tr> 12110<tr>
12123<td>CONF_FILES_MODE</td> 12111<td>CONF_FILES_MODE</td>
12124<td>CONF_FILES_PERMS</td> 12112<td>CONF_FILES_PERMS</td>
12125</tr> 12113</tr>
12126<tr> 12114<tr>
12127<td>CONSERVER_DEFAULTHOST</td> 12115<td>CONSERVER_DEFAULTHOST</td>
12128<td>CONSERVER_DEFAULTPORT</td> 12116<td>CONSERVER_DEFAULTPORT</td>
12129</tr> 12117</tr>
12130<tr> 12118<tr>
12131<td>CP</td> 12119<td>CP</td>
12132<td>CPP</td> 12120<td>CPP</td>
12133</tr> 12121</tr>
12134<tr> 12122<tr>
12135<td>CPP_PRECOMP_FLAGS</td> 12123<td>CPP_PRECOMP_FLAGS</td>
12136<td>CREATE_WRKDIR_SYMLINK</td> 12124<td>CREATE_WRKDIR_SYMLINK</td>
12137</tr> 12125</tr>
12138<tr> 12126<tr>
12139<td>CROSSBASE</td> 12127<td>CROSSBASE</td>
12140<td>CTFCONVERT</td> 12128<td>CTFCONVERT</td>
12141</tr> 12129</tr>
12142<tr> 12130<tr>
12143<td>CTF_FILES_SKIP</td> 12131<td>CTF_FILES_SKIP</td>
12144<td>CTF_SUPPORTED</td> 12132<td>CTF_SUPPORTED</td>
12145</tr> 12133</tr>
12146<tr> 12134<tr>
12147<td>CTYPE</td> 12135<td>CTYPE</td>
12148<td>CUPS_GROUP</td> 12136<td>CUPS_GROUP</td>
12149</tr> 12137</tr>
12150<tr> 12138<tr>
12151<td>CUPS_SYSTEM_GROUPS</td> 12139<td>CUPS_SYSTEM_GROUPS</td>
12152<td>CUPS_USER</td> 12140<td>CUPS_USER</td>
12153</tr> 12141</tr>
12154<tr> 12142<tr>
12155<td>CURSES_DEFAULT</td> 12143<td>CURSES_DEFAULT</td>
12156<td>CURSES_TYPE</td> 12144<td>CURSES_TYPE</td>
12157</tr> 12145</tr>
12158<tr> 12146<tr>
12159<td>CVS_EXTRACTDIR</td> 
12160<td>CVS_MODULE</td> 
12161</tr> 
12162<tr> 
12163<td>CVS_PROJECT</td> 
12164<td>CVS_REPOSITORIES</td> 
12165</tr> 
12166<tr> 
12167<td>CVS_ROOT</td> 
12168<td>CVS_ROOT_GNU</td> 
12169</tr> 
12170<tr> 
12171<td>CVS_ROOT_NONGNU</td> 
12172<td>CVS_ROOT_SOURCEFORGE</td> 
12173</tr> 
12174<tr> 
12175<td>CVS_TAG</td> 
12176<td>CXX</td> 12147<td>CXX</td>
12177</tr> 
12178<tr> 
12179<td>CYRUS_GROUP</td> 12148<td>CYRUS_GROUP</td>
12180<td>CYRUS_IDLE</td> 
12181</tr> 12149</tr>
12182<tr> 12150<tr>
 12151<td>CYRUS_IDLE</td>
12183<td>CYRUS_USER</td> 12152<td>CYRUS_USER</td>
12184<td>DAEMONTOOLS_GROUP</td> 
12185</tr> 12153</tr>
12186<tr> 12154<tr>
 12155<td>DAEMONTOOLS_GROUP</td>
12187<td>DAEMONTOOLS_LOG_USER</td> 12156<td>DAEMONTOOLS_LOG_USER</td>
12188<td>DARWIN_NO_SYSTEM_LIBS</td> 
12189</tr> 12157</tr>
12190<tr> 12158<tr>
 12159<td>DARWIN_NO_SYSTEM_LIBS</td>
12191<td>DARWIN_REQUIRES_FILTER</td> 12160<td>DARWIN_REQUIRES_FILTER</td>
12192<td>DBUS_GROUP</td> 
12193</tr> 12161</tr>
12194<tr> 12162<tr>
 12163<td>DBUS_GROUP</td>
12195<td>DBUS_USER</td> 12164<td>DBUS_USER</td>
12196<td>DEFANG_GROUP</td> 
12197</tr> 12165</tr>
12198<tr> 12166<tr>
 12167<td>DEFANG_GROUP</td>
12199<td>DEFANG_USER</td> 12168<td>DEFANG_USER</td>
12200<td>DEFAULT_ACCEPTABLE_LICENSES</td> 
12201</tr> 12169</tr>
12202<tr> 12170<tr>
 12171<td>DEFAULT_ACCEPTABLE_LICENSES</td>
12203<td>DEFAULT_DISTFILES</td> 12172<td>DEFAULT_DISTFILES</td>
12204<td>DEFAULT_IRC_SERVER</td> 
12205</tr> 12173</tr>
12206<tr> 12174<tr>
 12175<td>DEFAULT_IRC_SERVER</td>
12207<td>DEFAULT_SERIAL_DEVICE</td> 12176<td>DEFAULT_SERIAL_DEVICE</td>
12208<td>DEF_UMASK</td> 
12209</tr> 12177</tr>
12210<tr> 12178<tr>
 12179<td>DEF_UMASK</td>
12211<td>DEINSTALLDEPENDS</td> 12180<td>DEINSTALLDEPENDS</td>
12212<td>DEINSTALL_SRC</td> 
12213</tr> 12181</tr>
12214<tr> 12182<tr>
 12183<td>DEINSTALL_SRC</td>
12215<td>DEINSTALL_TEMPLATES</td> 12184<td>DEINSTALL_TEMPLATES</td>
12216<td>DELAYED_ERROR_MSG</td> 
12217</tr> 12185</tr>
12218<tr> 12186<tr>
 12187<td>DELAYED_ERROR_MSG</td>
12219<td>DELAYED_WARNING_MSG</td> 12188<td>DELAYED_WARNING_MSG</td>
12220<td>DEPENDS</td> 
12221</tr> 12189</tr>
12222<tr> 12190<tr>
 12191<td>DEPENDS</td>
12223<td>DEPENDS_TARGET</td> 12192<td>DEPENDS_TARGET</td>
12224<td>DEPENDS_TYPE</td> 
12225</tr> 12193</tr>
12226<tr> 12194<tr>
 12195<td>DEPENDS_TYPE</td>
12227<td>DESTDIR</td> 12196<td>DESTDIR</td>
12228<td>DESTDIR_VARNAME</td> 
12229</tr> 12197</tr>
12230<tr> 12198<tr>
 12199<td>DESTDIR_VARNAME</td>
12231<td>DIALER_GROUP</td> 12200<td>DIALER_GROUP</td>
12232<td>DIGEST_REQD</td> 
12233</tr> 12201</tr>
12234<tr> 12202<tr>
 12203<td>DIGEST_REQD</td>
12235<td>DISTDIR</td> 12204<td>DISTDIR</td>
12236<td>DISTFILES</td> 
12237</tr> 12205</tr>
12238<tr> 12206<tr>
 12207<td>DISTFILES</td>
12239<td>DISTINFO_FILE</td> 12208<td>DISTINFO_FILE</td>
12240<td>DISTNAME</td> 
12241</tr> 12209</tr>
12242<tr> 12210<tr>
 12211<td>DISTNAME</td>
12243<td>DIST_PATH</td> 12212<td>DIST_PATH</td>
12244<td>DIST_SUBDIR</td> 
12245</tr> 12213</tr>
12246<tr> 12214<tr>
 12215<td>DIST_SUBDIR</td>
12247<td>DJBDNS_AXFR_USER</td> 12216<td>DJBDNS_AXFR_USER</td>
12248<td>DJBDNS_CACHE_USER</td> 
12249</tr> 12217</tr>
12250<tr> 12218<tr>
 12219<td>DJBDNS_CACHE_USER</td>
12251<td>DJBDNS_DJBDNS_GROUP</td> 12220<td>DJBDNS_DJBDNS_GROUP</td>
12252<td>DJBDNS_LOG_USER</td> 
12253</tr> 12221</tr>
12254<tr> 12222<tr>
 12223<td>DJBDNS_LOG_USER</td>
12255<td>DJBDNS_RBL_USER</td> 12224<td>DJBDNS_RBL_USER</td>
12256<td>DJBDNS_TINY_USER</td> 
12257</tr> 12225</tr>
12258<tr> 12226<tr>
 12227<td>DJBDNS_TINY_USER</td>
12259<td>DLOPEN_REQUIRE_PTHREADS</td> 12228<td>DLOPEN_REQUIRE_PTHREADS</td>
12260<td>DL_AUTO_VARS</td> 
12261</tr> 12229</tr>
12262<tr> 12230<tr>
 12231<td>DL_AUTO_VARS</td>
12263<td>DL_CFLAGS</td> 12232<td>DL_CFLAGS</td>
12264<td>DL_LDFLAGS</td> 
12265</tr> 12233</tr>
12266<tr> 12234<tr>
 12235<td>DL_LDFLAGS</td>
12267<td>DL_LIBS</td> 12236<td>DL_LIBS</td>
12268<td>DNS</td> 
12269</tr> 12237</tr>
12270<tr> 12238<tr>
 12239<td>DNS</td>
12271<td>DOCOWN</td> 12240<td>DOCOWN</td>
12272<td>DOWNLOADED_DISTFILE</td> 
12273</tr> 12241</tr>
12274<tr> 12242<tr>
 12243<td>DOWNLOADED_DISTFILE</td>
12275<td>DQCACHE_GROUP</td> 12244<td>DQCACHE_GROUP</td>
12276<td>DQCACHE_USER</td> 
12277</tr> 12245</tr>
12278<tr> 12246<tr>
 12247<td>DQCACHE_USER</td>
12279<td>DT_LAYOUT</td> 12248<td>DT_LAYOUT</td>
12280<td>DYNAMIC_SITES_CMD</td> 
12281</tr> 12249</tr>
12282<tr> 12250<tr>
 12251<td>DYNAMIC_SITES_CMD</td>
12283<td>DYNAMIC_SITES_SCRIPT</td> 12252<td>DYNAMIC_SITES_SCRIPT</td>
12284<td>ECHO</td> 
12285</tr> 12253</tr>
12286<tr> 12254<tr>
 12255<td>ECHO</td>
12287<td>ECHO_N</td> 12256<td>ECHO_N</td>
12288<td>ELK_GUI</td> 
12289</tr> 12257</tr>
12290<tr> 12258<tr>
 12259<td>ELK_GUI</td>
12291<td>EMACS_TYPE</td> 12260<td>EMACS_TYPE</td>
12292<td>EMULDIR</td> 
12293</tr> 12261</tr>
12294<tr> 12262<tr>
 12263<td>EMULDIR</td>
12295<td>EMULSUBDIR</td> 12264<td>EMULSUBDIR</td>
12296<td>EMULSUBDIRSLASH</td> 
12297</tr> 12265</tr>
12298<tr> 12266<tr>
 12267<td>EMULSUBDIRSLASH</td>
12299<td>EMUL_ARCH</td> 12268<td>EMUL_ARCH</td>
12300<td>EMUL_DISTRO</td> 
12301</tr> 12269</tr>
12302<tr> 12270<tr>
 12271<td>EMUL_DISTRO</td>
12303<td>EMUL_EXEC_FMT</td> 12272<td>EMUL_EXEC_FMT</td>
12304<td>EMUL_IS_NATIVE</td> 
12305</tr> 12273</tr>
12306<tr> 12274<tr>
 12275<td>EMUL_IS_NATIVE</td>
12307<td>EMUL_MODULES</td> 12276<td>EMUL_MODULES</td>
12308<td>EMUL_OPSYS</td> 
12309</tr> 12277</tr>
12310<tr> 12278<tr>
 12279<td>EMUL_OPSYS</td>
12311<td>EMUL_PKG_FMT</td> 12280<td>EMUL_PKG_FMT</td>
12312<td>EMUL_PLATFORM</td> 
12313</tr> 12281</tr>
12314<tr> 12282<tr>
 12283<td>EMUL_PLATFORM</td>
12315<td>EMUL_PLATFORMS</td> 12284<td>EMUL_PLATFORMS</td>
12316<td>EMUL_PREFER</td> 
12317</tr> 12285</tr>
12318<tr> 12286<tr>
 12287<td>EMUL_PREFER</td>
12319<td>EMUL_REQD</td> 12288<td>EMUL_REQD</td>
12320<td>EMUL_TYPE</td> 
12321</tr> 12289</tr>
12322<tr> 12290<tr>
 12291<td>EMUL_TYPE</td>
12323<td>ERROR_MSG</td> 12292<td>ERROR_MSG</td>
12324<td>EXIM_GROUP</td> 
12325</tr> 12293</tr>
12326<tr> 12294<tr>
 12295<td>EXIM_GROUP</td>
12327<td>EXIM_USER</td> 12296<td>EXIM_USER</td>
12328<td>EXPORT_SYMBOLS_LDFLAGS</td> 
12329</tr> 12297</tr>
12330<tr> 12298<tr>
 12299<td>EXPORT_SYMBOLS_LDFLAGS</td>
12331<td>EXTRACTOR</td> 12300<td>EXTRACTOR</td>
12332<td>EXTRACT_CMD</td> 
12333</tr> 12301</tr>
12334<tr> 12302<tr>
 12303<td>EXTRACT_CMD</td>
12335<td>EXTRACT_CMD_DEFAULT</td> 12304<td>EXTRACT_CMD_DEFAULT</td>
12336<td>EXTRACT_DIR</td> 
12337</tr> 12305</tr>
12338<tr> 12306<tr>
 12307<td>EXTRACT_DIR</td>
12339<td>EXTRACT_ELEMENTS</td> 12308<td>EXTRACT_ELEMENTS</td>
12340<td>EXTRACT_ENV</td> 
12341</tr> 12309</tr>
12342<tr> 12310<tr>
 12311<td>EXTRACT_ENV</td>
12343<td>EXTRACT_ONLY</td> 12312<td>EXTRACT_ONLY</td>
12344<td>EXTRACT_OPTS</td> 
12345</tr> 12313</tr>
12346<tr> 12314<tr>
 12315<td>EXTRACT_OPTS</td>
12347<td>EXTRACT_SUFX</td> 12316<td>EXTRACT_SUFX</td>
12348<td>EXTRACT_USING</td> 
12349</tr> 12317</tr>
12350<tr> 12318<tr>
 12319<td>EXTRACT_USING</td>
12351<td>FAIL</td> 12320<td>FAIL</td>
12352<td>FAILOVER_FETCH</td> 
12353</tr> 12321</tr>
12354<tr> 12322<tr>
 12323<td>FAILOVER_FETCH</td>
12355<td>FAIL_MSG</td> 12324<td>FAIL_MSG</td>
12356<td>FAKE_NCURSES</td> 
12357</tr> 12325</tr>
12358<tr> 12326<tr>
 12327<td>FAKE_NCURSES</td>
12359<td>FAM</td> 12328<td>FAM</td>
12360<td>FAM_ACCEPTED</td> 
12361</tr> 12329</tr>
12362<tr> 12330<tr>
 12331<td>FAM_ACCEPTED</td>
12363<td>FAM_DEFAULT</td> 12332<td>FAM_DEFAULT</td>
12364<td>FAM_SERVER</td> 
12365</tr> 12333</tr>
12366<tr> 12334<tr>
 12335<td>FAM_SERVER</td>
12367<td>FCPATH</td> 12336<td>FCPATH</td>
12368<td>FEATURE_CPPFLAGS</td> 
12369</tr> 12337</tr>
12370<tr> 12338<tr>
 12339<td>FEATURE_CPPFLAGS</td>
12371<td>FEATURE_LDFLAGS</td> 12340<td>FEATURE_LDFLAGS</td>
12372<td>FEATURE_LIBS</td> 
12373</tr> 12341</tr>
12374<tr> 12342<tr>
 12343<td>FEATURE_LIBS</td>
12375<td>FETCH_AFTER_ARGS</td> 12344<td>FETCH_AFTER_ARGS</td>
12376<td>FETCH_BEFORE_ARGS</td> 
12377</tr> 12345</tr>
12378<tr> 12346<tr>
 12347<td>FETCH_BEFORE_ARGS</td>
12379<td>FETCH_CMD</td> 12348<td>FETCH_CMD</td>
12380<td>FETCH_OUTPUT_ARGS</td> 
12381</tr> 12349</tr>
12382<tr> 12350<tr>
 12351<td>FETCH_OUTPUT_ARGS</td>
12383<td>FETCH_PROXY</td> 12352<td>FETCH_PROXY</td>
12384<td>FETCH_RESUME_ARGS</td> 
12385</tr> 12353</tr>
12386<tr> 12354<tr>
 12355<td>FETCH_RESUME_ARGS</td>
12387<td>FETCH_TIMEOUT</td> 12356<td>FETCH_TIMEOUT</td>
12388<td>FETCH_USE_IPV4_ONLY</td> 
12389</tr> 12357</tr>
12390<tr> 12358<tr>
 12359<td>FETCH_USE_IPV4_ONLY</td>
12391<td>FETCH_USING</td> 12360<td>FETCH_USING</td>
12392<td>FILES_SUBST</td> 
12393</tr> 12361</tr>
12394<tr> 12362<tr>
 12363<td>FILES_SUBST</td>
12395<td>FILES_SUBST_SED</td> 12364<td>FILES_SUBST_SED</td>
12396<td>FIX_SYSTEM_HEADERS</td> 
12397</tr> 12365</tr>
12398<tr> 12366<tr>
12399<td>FONTDIR</td> 12367<td>FIX_SYSTEM_HEADERS</td>
12400<td>FONTS_DIRS</td> 12368<td>FONTS_DIRS</td>
12401</tr> 12369</tr>
12402<tr> 12370<tr>
12403<td>FONTS_VERBOSE</td> 12371<td>FONTS_VERBOSE</td>
12404<td>FOO_HACKS_MK</td> 12372<td>FOO_HACKS_MK</td>
12405</tr> 12373</tr>
12406<tr> 12374<tr>
12407<td>FOSSIL_EXTRACTDIR</td> 
12408<td>FOSSIL_REPO</td> 
12409</tr> 
12410<tr> 
12411<td>FOSSIL_REPOSITORIES</td> 
12412<td>FOSSIL_VERSION</td> 
12413</tr> 
12414<tr> 
12415<td>FOX_USE_XUNICODE</td> 12375<td>FOX_USE_XUNICODE</td>
12416<td>FREEWNN_GROUP</td> 12376<td>FREEWNN_GROUP</td>
12417</tr> 12377</tr>
12418<tr> 12378<tr>
12419<td>FREEWNN_USER</td> 12379<td>FREEWNN_USER</td>
12420<td>FTP_PKG_URL_DIR</td> 12380<td>FTP_PKG_URL_DIR</td>
12421</tr> 12381</tr>
12422<tr> 12382<tr>
12423<td>FTP_PKG_URL_HOST</td> 12383<td>FTP_PKG_URL_HOST</td>
12424<td>GAMEDATAMODE</td> 12384<td>GAMEDATAMODE</td>
12425</tr> 12385</tr>
12426<tr> 12386<tr>
12427<td>GAMEDATA_PERMS</td> 12387<td>GAMEDATA_PERMS</td>
12428<td>GAMEDIRMODE</td> 12388<td>GAMEDIRMODE</td>
12429</tr> 12389</tr>
12430<tr> 12390<tr>
12431<td>GAMEDIR_PERMS</td> 12391<td>GAMEDIR_PERMS</td>
12432<td>GAMEGRP</td> 12392<td>GAMEGRP</td>
12433</tr> 12393</tr>
12434<tr> 12394<tr>
12435<td>GAMEMODE</td> 12395<td>GAMEMODE</td>
12436<td>GAMEOWN</td> 12396<td>GAMEOWN</td>
12437</tr> 12397</tr>
12438<tr> 12398<tr>
12439<td>GAMES_GROUP</td> 12399<td>GAMES_GROUP</td>
12440<td>GAMES_USER</td> 12400<td>GAMES_USER</td>
12441</tr> 12401</tr>
12442<tr> 12402<tr>
12443<td>GCC</td> 12403<td>GCC</td>
12444<td>GCCBASE</td> 12404<td>GCCBASE</td>
12445</tr> 12405</tr>
12446<tr> 12406<tr>
12447<td>GCC_REQD</td> 12407<td>GCC_REQD</td>
12448<td>GCC_VERSION_SUFFIX</td> 12408<td>GCC_VERSION_SUFFIX</td>
12449</tr> 12409</tr>
12450<tr> 12410<tr>
12451<td>GEM_BUILD</td> 12411<td>GEM_BUILD</td>
12452<td>GEM_CLEANBUILD</td> 12412<td>GEM_CLEANBUILD</td>
12453</tr> 12413</tr>
12454<tr> 12414<tr>
12455<td>GEM_CLEANBUILD_EXTENSIONS</td> 12415<td>GEM_CLEANBUILD_EXTENSIONS</td>
12456<td>GEM_DOCDIR</td> 12416<td>GEM_DOCDIR</td>
12457</tr> 12417</tr>
12458<tr> 12418<tr>
12459<td>GEM_EXTSDIR</td> 12419<td>GEM_EXTSDIR</td>
12460<td>GEM_HOME</td> 12420<td>GEM_HOME</td>
12461</tr> 12421</tr>
12462<tr> 12422<tr>
12463<td>GEM_KEEPBUILD</td> 12423<td>GEM_KEEPBUILD</td>
12464<td>GEM_LIBDIR</td> 12424<td>GEM_LIBDIR</td>
12465</tr> 12425</tr>
12466<tr> 12426<tr>
12467<td>GEM_NAME</td> 12427<td>GEM_NAME</td>
12468<td>GEM_PATH</td> 12428<td>GEM_PATH</td>
12469</tr> 12429</tr>
12470<tr> 12430<tr>
12471<td>GEM_PLUGINSDIR</td> 12431<td>GEM_PLUGINSDIR</td>
12472<td>GEM_SPECFILE</td> 12432<td>GEM_SPECFILE</td>
12473</tr> 12433</tr>
12474<tr> 12434<tr>
12475<td>GENERATE_PLIST</td> 12435<td>GENERATE_PLIST</td>
12476<td>GHC</td> 12436<td>GHC</td>
12477</tr> 12437</tr>
12478<tr> 12438<tr>
12479<td>GHOSTSCRIPT_REQD</td> 12439<td>GHOSTSCRIPT_REQD</td>
12480<td>GITHUB_PROJECT</td> 12440<td>GITHUB_PROJECT</td>
12481</tr> 12441</tr>
12482<tr> 12442<tr>
12483<td>GITHUB_RELEASE</td> 12443<td>GITHUB_RELEASE</td>
12484<td>GITHUB_SUBMODULES</td> 12444<td>GITHUB_SUBMODULES</td>
12485</tr> 12445</tr>
12486<tr> 12446<tr>
12487<td>GITHUB_TAG</td> 12447<td>GITHUB_TAG</td>
12488<td>GITHUB_TYPE</td> 12448<td>GITHUB_TYPE</td>
12489</tr> 12449</tr>
12490<tr> 12450<tr>
12491<td>GITLAB_PROJECT</td> 12451<td>GITLAB_PROJECT</td>
12492<td>GITLAB_TAG</td> 12452<td>GITLAB_RELEASE</td>
12493</tr> 12453</tr>
12494<tr> 12454<tr>
12495<td>GITLAB_TYPE</td> 12455<td>GITLAB_SUBMODULES</td>
12496<td>GIT_BRANCH</td> 12456<td>GITLAB_TAG</td>
12497</tr> 
12498<tr> 
12499<td>GIT_ENV</td> 
12500<td>GIT_EXTRACTDIR</td> 
12501</tr> 
12502<tr> 
12503<td>GIT_REPO</td> 
12504<td>GIT_REPOSITORIES</td> 
12505</tr> 
12506<tr> 
12507<td>GIT_REVISION</td> 
12508<td>GIT_TAG</td> 
12509</tr> 12457</tr>
12510<tr> 12458<tr>
 12459<td>GITLAB_TYPE</td>
12511<td>GNU</td> 12460<td>GNU</td>
12512<td>GNU_CONFIGURE</td> 
12513</tr> 12461</tr>
12514<tr> 12462<tr>
 12463<td>GNU_CONFIGURE</td>
12515<td>GNU_CONFIGURE_INFODIR</td> 12464<td>GNU_CONFIGURE_INFODIR</td>
12516<td>GNU_CONFIGURE_MANDIR</td> 
12517</tr> 12465</tr>
12518<tr> 12466<tr>
 12467<td>GNU_CONFIGURE_MANDIR</td>
12519<td>GNU_CONFIGURE_QUIET</td> 12468<td>GNU_CONFIGURE_QUIET</td>
12520<td>GNU_CONFIGURE_STRICT</td> 
12521</tr> 12469</tr>
12522<tr> 12470<tr>
 12471<td>GNU_CONFIGURE_STRICT</td>
12523<td>GODEP_REDIRECTS</td> 12472<td>GODEP_REDIRECTS</td>
12524<td>GO_BUILD_PATTERN</td> 
12525</tr> 12473</tr>
12526<tr> 12474<tr>
 12475<td>GO_BUILD_PATTERN</td>
12527<td>GO_DEPS</td> 12476<td>GO_DEPS</td>
12528<td>GO_DIST_BASE</td> 
12529</tr> 12477</tr>
12530<tr> 12478<tr>
 12479<td>GO_DIST_BASE</td>
12531<td>GO_EXTRA_MOD_DIRS</td> 12480<td>GO_EXTRA_MOD_DIRS</td>
12532<td>GO_MODULE_FILES</td> 
12533</tr> 12481</tr>
12534<tr> 12482<tr>
 12483<td>GO_MODULE_FILES</td>
12535<td>GO_SRCPATH</td> 12484<td>GO_SRCPATH</td>
12536<td>GO_VERSION_DEFAULT</td> 
12537</tr> 12485</tr>
12538<tr> 12486<tr>
 12487<td>GO_VERSION_DEFAULT</td>
12539<td>GROUP_SPECIFIC_PKGS</td> 12488<td>GROUP_SPECIFIC_PKGS</td>
12540<td>GRUB_NETWORK_CARDS</td> 
12541</tr> 12489</tr>
12542<tr> 12490<tr>
 12491<td>GRUB_NETWORK_CARDS</td>
12543<td>GRUB_PRESET_COMMAND</td> 12492<td>GRUB_PRESET_COMMAND</td>
12544<td>GRUB_SCAN_ARGS</td> 
12545</tr> 12493</tr>
12546<tr> 12494<tr>
 12495<td>GRUB_SCAN_ARGS</td>
12547<td>GZIP</td> 12496<td>GZIP</td>
12548<td>HASKELL_COMPILER</td> 
12549</tr> 12497</tr>
12550<tr> 12498<tr>
12551<td>HASKELL_ENABLE_DYNAMIC_EXECUTABLE</td> 12499<td>HASKELL_ENABLE_DYNAMIC_EXECUTABLE</td>
12552<td>HASKELL_ENABLE_HADDOCK_DOCUMENTATION</td> 12500<td>HASKELL_ENABLE_HADDOCK_DOCUMENTATION</td>
12553</tr> 12501</tr>
12554<tr> 12502<tr>
12555<td>HASKELL_ENABLE_LIBRARY_PROFILING</td> 12503<td>HASKELL_ENABLE_LIBRARY_PROFILING</td>
12556<td>HASKELL_ENABLE_SHARED_LIBRARY</td> 12504<td>HASKELL_ENABLE_SHARED_LIBRARY</td>
12557</tr> 12505</tr>
12558<tr> 12506<tr>
12559<td>HASKELL_OPTIMIZATION_LEVEL</td> 12507<td>HASKELL_OPTIMIZATION_LEVEL</td>
12560<td>HAS_CONFIGURE</td> 12508<td>HAS_CONFIGURE</td>
12561</tr> 12509</tr>
12562<tr> 12510<tr>
12563<td>HEADER_TEMPLATES</td> 12511<td>HEADER_TEMPLATES</td>
12564<td>HG_REPO</td> 
12565</tr> 
12566<tr> 
12567<td>HG_REPOSITORIES</td> 
12568<td>HG_TAG</td> 
12569</tr> 
12570<tr> 
12571<td>HOMEPAGE</td> 12512<td>HOMEPAGE</td>
12572<td>HOST_PKGTOOLS_ARGS</td> 
12573</tr> 12513</tr>
12574<tr> 12514<tr>
 12515<td>HOST_PKGTOOLS_ARGS</td>
12575<td>HOST_SPECIFIC_PKGS</td> 12516<td>HOST_SPECIFIC_PKGS</td>
12576<td>HOWL_GROUP</td> 
12577</tr> 12517</tr>
12578<tr> 12518<tr>
 12519<td>HOWL_GROUP</td>
12579<td>HOWL_USER</td> 12520<td>HOWL_USER</td>
12580<td>ICCBASE</td> 
12581</tr> 12521</tr>
12582<tr> 12522<tr>
 12523<td>ICCBASE</td>
12583<td>ICECAST_CHROOTDIR</td> 12524<td>ICECAST_CHROOTDIR</td>
12584<td>ICON_THEMES</td> 
12585</tr> 12525</tr>
12586<tr> 12526<tr>
 12527<td>ICON_THEMES</td>
12587<td>IDOBASE</td> 12528<td>IDOBASE</td>
12588<td>IGNORE_CCACHE</td> 
12589</tr> 12529</tr>
12590<tr> 12530<tr>
 12531<td>IGNORE_CCACHE</td>
12591<td>IGNORE_INFO_DIRS</td> 12532<td>IGNORE_INFO_DIRS</td>
12592<td>IGNORE_INTERACTIVE_FETCH</td> 
12593</tr> 12533</tr>
12594<tr> 12534<tr>
 12535<td>IGNORE_INTERACTIVE_FETCH</td>
12595<td>IMAKE</td> 12536<td>IMAKE</td>
12596<td>IMAKEOPTS</td> 
12597</tr> 12537</tr>
12598<tr> 12538<tr>
 12539<td>IMAKEOPTS</td>
12599<td>IMAKE_MAKE</td> 12540<td>IMAKE_MAKE</td>
12600<td>IMAKE_MANINSTALL</td> 
12601</tr> 12541</tr>
12602<tr> 12542<tr>
 12543<td>IMAKE_MANINSTALL</td>
12603<td>IMAP_UW_CCLIENT_MBOX_FMT</td> 12544<td>IMAP_UW_CCLIENT_MBOX_FMT</td>
12604<td>IMDICTDIR</td> 
12605</tr> 12545</tr>
12606<tr> 12546<tr>
 12547<td>IMDICTDIR</td>
12607<td>INCOMPAT_CURSES</td> 12548<td>INCOMPAT_CURSES</td>
12608<td>INFO_DIR</td> 
12609</tr> 12549</tr>
12610<tr> 12550<tr>
 12551<td>INFO_DIR</td>
12611<td>INFO_FILES</td> 12552<td>INFO_FILES</td>
12612<td>INFO_FILES_VERBOSE</td> 
12613</tr> 12553</tr>
12614<tr> 12554<tr>
 12555<td>INFO_FILES_VERBOSE</td>
12615<td>INFO_MSG</td> 12556<td>INFO_MSG</td>
12616<td>INIT_SYSTEM</td> 
12617</tr> 12557</tr>
12618<tr> 12558<tr>
 12559<td>INIT_SYSTEM</td>
12619<td>INN_DATA_DIR</td> 12560<td>INN_DATA_DIR</td>
12620<td>INN_GROUP</td> 
12621</tr> 12561</tr>
12622<tr> 12562<tr>
 12563<td>INN_GROUP</td>
12623<td>INN_USER</td> 12564<td>INN_USER</td>
12624<td>INSTALLATION_DIRS</td> 
12625</tr> 12565</tr>
12626<tr> 12566<tr>
 12567<td>INSTALLATION_DIRS</td>
12627<td>INSTALLATION_DIRS_FROM_PLIST</td> 12568<td>INSTALLATION_DIRS_FROM_PLIST</td>
12628<td>INSTALL_ENV</td> 
12629</tr> 12569</tr>
12630<tr> 12570<tr>
 12571<td>INSTALL_ENV</td>
12631<td>INSTALL_SH_OVERRIDE</td> 12572<td>INSTALL_SH_OVERRIDE</td>
12632<td>INSTALL_SRC</td> 
12633</tr> 12573</tr>
12634<tr> 12574<tr>
 12575<td>INSTALL_SRC</td>
12635<td>INSTALL_TEMPLATES</td> 12576<td>INSTALL_TEMPLATES</td>
12636<td>INSTALL_UNSTRIPPED</td> 
12637</tr> 12577</tr>
12638<tr> 12578<tr>
 12579<td>INSTALL_UNSTRIPPED</td>
12639<td>IRCD_HYBRID_IRC_GROUP</td> 12580<td>IRCD_HYBRID_IRC_GROUP</td>
12640<td>IRCD_HYBRID_IRC_USER</td> 
12641</tr> 12581</tr>
12642<tr> 12582<tr>
 12583<td>IRCD_HYBRID_IRC_USER</td>
12643<td>IRCD_HYBRID_MAXCONN</td> 12584<td>IRCD_HYBRID_MAXCONN</td>
12644<td>IRCD_HYBRID_NICLEN</td> 
12645</tr> 12585</tr>
12646<tr> 12586<tr>
 12587<td>IRCD_HYBRID_NICLEN</td>
12647<td>IRCD_HYBRID_SYSLOG_EVENTS</td> 12588<td>IRCD_HYBRID_SYSLOG_EVENTS</td>
12648<td>IRCD_HYBRID_SYSLOG_FACILITY</td> 
12649</tr> 12589</tr>
12650<tr> 12590<tr>
 12591<td>IRCD_HYBRID_SYSLOG_FACILITY</td>
12651<td>IRCD_HYBRID_TOPICLEN</td> 12592<td>IRCD_HYBRID_TOPICLEN</td>
12652<td>IRIX</td> 
12653</tr> 12593</tr>
12654<tr> 12594<tr>
 12595<td>IRIX</td>
12655<td>IRRD_USE_PGP</td> 12596<td>IRRD_USE_PGP</td>
12656<td>JABBERD_GROUP</td> 
12657</tr> 12597</tr>
12658<tr> 12598<tr>
 12599<td>JABBERD_GROUP</td>
12659<td>JABBERD_LOGDIR</td> 12600<td>JABBERD_LOGDIR</td>
12660<td>JABBERD_PIDDIR</td> 
12661</tr> 12601</tr>
12662<tr> 12602<tr>
 12603<td>JABBERD_PIDDIR</td>
12663<td>JABBERD_SPOOLDIR</td> 12604<td>JABBERD_SPOOLDIR</td>
12664<td>JABBERD_USER</td> 
12665</tr> 
12666<tr> 
12667<td>JAVA_APP_PATH</td> 
12668<td>JAVA_APP_TARGETS</td> 
12669</tr> 12605</tr>
12670<tr> 12606<tr>
 12607<td>JABBERD_USER</td>
12671<td>JAVA_BINPREFIX</td> 12608<td>JAVA_BINPREFIX</td>
12672<td>JAVA_CLASSPATH</td> 
12673</tr> 12609</tr>
12674<tr> 12610<tr>
 12611<td>JAVA_CLASSPATH</td>
12675<td>JAVA_HOME</td> 12612<td>JAVA_HOME</td>
12676<td>JAVA_LD_LIBRARY_PATH</td> 
12677</tr> 12613</tr>
12678<tr> 12614<tr>
 12615<td>JAVA_LD_LIBRARY_PATH</td>
12679<td>JAVA_NAME</td> 12616<td>JAVA_NAME</td>
12680<td>JAVA_UNLIMIT</td> 
12681</tr> 12617</tr>
12682<tr> 12618<tr>
 12619<td>JAVA_UNLIMIT</td>
12683<td>JAVA_WRAPPERS</td> 12620<td>JAVA_WRAPPERS</td>
12684<td>JPEG_ACCEPTED</td> 
12685</tr> 12621</tr>
12686<tr> 12622<tr>
 12623<td>JPEG_ACCEPTED</td>
12687<td>JPEG_DEFAULT</td> 12624<td>JPEG_DEFAULT</td>
12688<td>KERBEROS</td> 
12689</tr> 12625</tr>
12690<tr> 12626<tr>
 12627<td>KERBEROS</td>
12691<td>KERMIT_SUID_UUCP</td> 12628<td>KERMIT_SUID_UUCP</td>
12692<td>KJS_USE_PCRE</td> 
12693</tr> 12629</tr>
12694<tr> 12630<tr>
 12631<td>KJS_USE_PCRE</td>
12695<td>KNEWS_DOMAIN_FILE</td> 12632<td>KNEWS_DOMAIN_FILE</td>
12696<td>KNEWS_DOMAIN_NAME</td> 
12697</tr> 12633</tr>
12698<tr> 12634<tr>
 12635<td>KNEWS_DOMAIN_NAME</td>
12699<td>KRB5_ACCEPTED</td> 12636<td>KRB5_ACCEPTED</td>
12700<td>KRB5_DEFAULT</td> 
12701</tr> 12637</tr>
12702<tr> 12638<tr>
 12639<td>KRB5_DEFAULT</td>
12703<td>LANGUAGES</td> 12640<td>LANGUAGES</td>
12704<td>LAPACKE_LIBS</td> 
12705</tr> 12641</tr>
12706<tr> 12642<tr>
 12643<td>LAPACKE_LIBS</td>
12707<td>LAPACK_LIBS</td> 12644<td>LAPACK_LIBS</td>
12708<td>LATEX2HTML_ICONPATH</td> 
12709</tr> 12645</tr>
12710<tr> 12646<tr>
 12647<td>LATEX2HTML_ICONPATH</td>
12711<td>LDCONFIG_ADD_CMD</td> 12648<td>LDCONFIG_ADD_CMD</td>
12712<td>LDCONFIG_REMOVE_CMD</td> 
12713</tr> 12649</tr>
12714<tr> 12650<tr>
 12651<td>LDCONFIG_REMOVE_CMD</td>
12715<td>LDD</td> 12652<td>LDD</td>
12716<td>LEAFNODE_DATA_DIR</td> 
12717</tr> 12653</tr>
12718<tr> 12654<tr>
 12655<td>LEAFNODE_DATA_DIR</td>
12719<td>LEAFNODE_GROUP</td> 12656<td>LEAFNODE_GROUP</td>
12720<td>LEAFNODE_USER</td> 
12721</tr> 12657</tr>
12722<tr> 12658<tr>
 12659<td>LEAFNODE_USER</td>
12723<td>LIBDVDCSS_HOMEPAGE</td> 12660<td>LIBDVDCSS_HOMEPAGE</td>
12724<td>LIBDVDCSS_MASTER_SITES</td> 
12725</tr> 12661</tr>
12726<tr> 12662<tr>
 12663<td>LIBDVDCSS_MASTER_SITES</td>
12727<td>LIBRSVG_TYPE</td> 12664<td>LIBRSVG_TYPE</td>
12728<td>LIBTOOL</td> 
12729</tr> 12665</tr>
12730<tr> 12666<tr>
 12667<td>LIBTOOL</td>
12731<td>LIBTOOLIZE_PLIST</td> 12668<td>LIBTOOLIZE_PLIST</td>
12732<td>LIBTOOL_M4_OVERRIDE</td> 
12733</tr> 12669</tr>
12734<tr> 12670<tr>
 12671<td>LIBTOOL_M4_OVERRIDE</td>
12735<td>LIBUSB_TYPE</td> 12672<td>LIBUSB_TYPE</td>
12736<td>LICENSE</td> 
12737</tr> 12673</tr>
12738<tr> 12674<tr>
 12675<td>LICENSE</td>
12739<td>LINKER_RPATH_FLAG</td> 12676<td>LINKER_RPATH_FLAG</td>
12740<td>LINK_RPATH_FLAG</td> 
12741</tr> 
12742<tr> 
12743<td>LINUX_BASE_NODEPS</td> 
12744<td>LINUX_BASE_PREFERRED</td> 
12745</tr> 12677</tr>
12746<tr> 12678<tr>
12747<td>LINUX_BASE_REQUIRED</td> 12679<td>LINK_RPATH_FLAG</td>
12748<td>LINUX_LOCALES</td> 12680<td>LINUX_LOCALES</td>
12749</tr> 12681</tr>
12750<tr> 12682<tr>
12751<td>LOCALBASE</td> 12683<td>LOCALBASE</td>
12752<td>LOCALBASE_LOCKTYPE</td> 12684<td>LOCALBASE_LOCKTYPE</td>
12753</tr> 12685</tr>
12754<tr> 12686<tr>
12755<td>LOCALPATCHES</td> 12687<td>LOCALPATCHES</td>
12756<td>LOVE_DATA</td> 12688<td>LOVE_DATA</td>
12757</tr> 12689</tr>
12758<tr> 12690<tr>
12759<td>LOVE_GAME</td> 12691<td>LOVE_GAME</td>
12760<td>LOVE_VERSION</td> 12692<td>LOVE_VERSION</td>
12761</tr> 12693</tr>
12762<tr> 12694<tr>
12763<td>LP32PLATFORMS</td> 12695<td>LP32PLATFORMS</td>
12764<td>LP64PLATFORMS</td> 12696<td>LP64PLATFORMS</td>
12765</tr> 12697</tr>
12766<tr> 12698<tr>
12767<td>LUA_BUSTED_ARGS</td> 12699<td>LUA_BUSTED_ARGS</td>
12768<td>LUA_CDIR</td> 12700<td>LUA_CDIR</td>
12769</tr> 12701</tr>
12770<tr> 12702<tr>
12771<td>LUA_COMPILER</td> 12703<td>LUA_COMPILER</td>
12772<td>LUA_DOCDIR</td> 12704<td>LUA_DOCDIR</td>
12773</tr> 12705</tr>
12774<tr> 12706<tr>
12775<td>LUA_EXAMPLESDIR</td> 12707<td>LUA_EXAMPLESDIR</td>
12776<td>LUA_INCDIR</td> 12708<td>LUA_INCDIR</td>
12777</tr> 12709</tr>
12778<tr> 12710<tr>
12779<td>LUA_INTERPRETER</td> 12711<td>LUA_INTERPRETER</td>
12780<td>LUA_LDIR</td> 12712<td>LUA_LDIR</td>
12781</tr> 12713</tr>
12782<tr> 12714<tr>
12783<td>LUA_LINKER_MAGIC</td> 12715<td>LUA_LINKER_MAGIC</td>
12784<td>LUA_PKGPREFIX</td> 12716<td>LUA_PKGPREFIX</td>
12785</tr> 12717</tr>
12786<tr> 12718<tr>
12787<td>LUA_SELF_CONFLICT</td> 12719<td>LUA_SELF_CONFLICT</td>
12788<td>LUA_USE_BUSTED</td> 12720<td>LUA_USE_BUSTED</td>
12789</tr> 12721</tr>
12790<tr> 12722<tr>
12791<td>LUA_VERSIONS_ACCEPTED</td> 12723<td>LUA_VERSIONS_ACCEPTED</td>
12792<td>LUA_VERSIONS_INCOMPATIBLE</td> 12724<td>LUA_VERSIONS_INCOMPATIBLE</td>
12793</tr> 12725</tr>
12794<tr> 12726<tr>
12795<td>LUA_VERSION_DEFAULT</td> 12727<td>LUA_VERSION_DEFAULT</td>
12796<td>LUA_VERSION_REQD</td> 12728<td>LUA_VERSION_REQD</td>
12797</tr> 12729</tr>
12798<tr> 12730<tr>
12799<td>Lua</td> 12731<td>Lua</td>
12800<td>MACHINE_PLATFORM</td> 12732<td>MACHINE_PLATFORM</td>
12801</tr> 12733</tr>
12802<tr> 12734<tr>
12803<td>MAILAGENT_DOMAIN</td> 12735<td>MAILAGENT_DOMAIN</td>
12804<td>MAILAGENT_EMAIL</td> 12736<td>MAILAGENT_EMAIL</td>
12805</tr> 12737</tr>
12806<tr> 12738<tr>
12807<td>MAILAGENT_FQDN</td> 12739<td>MAILAGENT_FQDN</td>
12808<td>MAILAGENT_ORGANIZATION</td> 12740<td>MAILAGENT_ORGANIZATION</td>
12809</tr> 12741</tr>
12810<tr> 12742<tr>
12811<td>MAJORDOMO_HOMEDIR</td> 12743<td>MAJORDOMO_HOMEDIR</td>
12812<td>MAJOR_OS_VERSION</td> 
12813</tr> 
12814<tr> 
12815<td>MAKEINFO_ARGS</td> 12744<td>MAKEINFO_ARGS</td>
12816<td>MAKE_DIRS</td> 
12817</tr> 12745</tr>
12818<tr> 12746<tr>
 12747<td>MAKE_DIRS</td>
12819<td>MAKE_DIRS_PERMS</td> 12748<td>MAKE_DIRS_PERMS</td>
12820<td>MAKE_ENV</td> 
12821</tr> 12749</tr>
12822<tr> 12750<tr>
 12751<td>MAKE_ENV</td>
12823<td>MAKE_FILE</td> 12752<td>MAKE_FILE</td>
12824<td>MAKE_FLAGS</td> 
12825</tr> 12753</tr>
12826<tr> 12754<tr>
 12755<td>MAKE_FLAGS</td>
12827<td>MAKE_JOBS</td> 12756<td>MAKE_JOBS</td>
12828<td>MAKE_JOBS_SAFE</td> 
12829</tr> 12757</tr>
12830<tr> 12758<tr>
 12759<td>MAKE_JOBS_SAFE</td>
12831<td>MAKE_PROGRAM</td> 12760<td>MAKE_PROGRAM</td>
12832<td>MANCOMPRESSED_IF_MANZ</td> 
12833</tr> 12761</tr>
12834<tr> 12762<tr>
 12763<td>MANCOMPRESSED_IF_MANZ</td>
12835<td>MANINSTALL</td> 12764<td>MANINSTALL</td>
12836<td>MANZ</td> 
12837</tr> 12765</tr>
12838<tr> 12766<tr>
 12767<td>MANZ</td>
12839<td>MASTER_SITES</td> 12768<td>MASTER_SITES</td>
12840<td>MASTER_SITE_BACKUP</td> 
12841</tr> 12769</tr>
12842<tr> 12770<tr>
 12771<td>MASTER_SITE_BACKUP</td>
12843<td>MASTER_SITE_LOCAL</td> 12772<td>MASTER_SITE_LOCAL</td>
12844<td>MASTER_SITE_MOZILLA</td> 
12845</tr> 12773</tr>
12846<tr> 12774<tr>
 12775<td>MASTER_SITE_MOZILLA</td>
12847<td>MASTER_SITE_OVERRIDE</td> 12776<td>MASTER_SITE_OVERRIDE</td>
12848<td>MASTER_SITE_PERL_CPAN</td> 
12849</tr> 12777</tr>
12850<tr> 12778<tr>
 12779<td>MASTER_SITE_PERL_CPAN</td>
12851<td>MASTER_SORT</td> 12780<td>MASTER_SORT</td>
12852<td>MASTER_SORT_RANDOM</td> 
12853</tr> 12781</tr>
12854<tr> 12782<tr>
 12783<td>MASTER_SORT_RANDOM</td>
12855<td>MASTER_SORT_REGEX</td> 12784<td>MASTER_SORT_REGEX</td>
12856<td>MECAB_CHARSET</td> 
12857</tr> 12785</tr>
12858<tr> 12786<tr>
 12787<td>MECAB_CHARSET</td>
12859<td>MEDIATOMB_GROUP</td> 12788<td>MEDIATOMB_GROUP</td>
12860<td>MEDIATOMB_USER</td> 
12861</tr> 12789</tr>
12862<tr> 12790<tr>
 12791<td>MEDIATOMB_USER</td>
12863<td>MIPSPROBASE</td> 12792<td>MIPSPROBASE</td>
12864<td>MIREDO_GROUP</td> 
12865</tr> 12793</tr>
12866<tr> 12794<tr>
 12795<td>MIREDO_GROUP</td>
12867<td>MIREDO_USER</td> 12796<td>MIREDO_USER</td>
12868<td>MISSING_FEATURES</td> 
12869</tr> 12797</tr>
12870<tr> 12798<tr>
 12799<td>MISSING_FEATURES</td>
12871<td>MKDIR</td> 12800<td>MKDIR</td>
12872<td>MKPIE_SUPPORTED</td> 
12873</tr> 12801</tr>
12874<tr> 12802<tr>
 12803<td>MKPIE_SUPPORTED</td>
12875<td>MLDONKEY_GROUP</td> 12804<td>MLDONKEY_GROUP</td>
12876<td>MLDONKEY_HOME</td> 
12877</tr> 12805</tr>
12878<tr> 12806<tr>
 12807<td>MLDONKEY_HOME</td>
12879<td>MLDONKEY_USER</td> 12808<td>MLDONKEY_USER</td>
12880<td>MONOTONE_GROUP</td> 
12881</tr> 12809</tr>
12882<tr> 12810<tr>
 12811<td>MONOTONE_GROUP</td>
12883<td>MONOTONE_USER</td> 12812<td>MONOTONE_USER</td>
12884<td>MOTIFBASE</td> 
12885</tr> 12813</tr>
12886<tr> 12814<tr>
 12815<td>MOTIFBASE</td>
12887<td>MOTIF_TYPE</td> 12816<td>MOTIF_TYPE</td>
12888<td>MOTIF_TYPE_DEFAULT</td> 
12889</tr> 12817</tr>
12890<tr> 12818<tr>
 12819<td>MOTIF_TYPE_DEFAULT</td>
12891<td>MPI_TYPE</td> 12820<td>MPI_TYPE</td>
12892<td>MSGFMT_STRIP_MSGCTXT</td> 
12893</tr> 12821</tr>
12894<tr> 12822<tr>
 12823<td>MSGFMT_STRIP_MSGCTXT</td>
12895<td>MSGFMT_STRIP_MSGID_PLURAL</td> 12824<td>MSGFMT_STRIP_MSGID_PLURAL</td>
12896<td>MTOOLS_ENABLE_FLOPPYD</td> 
12897</tr> 12825</tr>
12898<tr> 12826<tr>
12899<td>MUST</td> 12827<td>MTOOLS_ENABLE_FLOPPYD</td>
12900<td>MV</td> 12828<td>MV</td>
12901</tr> 12829</tr>
12902<tr> 12830<tr>
12903<td>MYSQL_CHARSET</td> 12831<td>MYSQL_CHARSET</td>
12904<td>MYSQL_DATADIR</td> 12832<td>MYSQL_DATADIR</td>
12905</tr> 12833</tr>
12906<tr> 12834<tr>
12907<td>MYSQL_EXTRA_CHARSET</td> 12835<td>MYSQL_EXTRA_CHARSET</td>
12908<td>MYSQL_GROUP</td> 12836<td>MYSQL_GROUP</td>
12909</tr> 12837</tr>
12910<tr> 12838<tr>
12911<td>MYSQL_USER</td> 12839<td>MYSQL_USER</td>
12912<td>MYSQL_VERSION</td> 12840<td>MYSQL_VERSION</td>
12913</tr> 12841</tr>
12914<tr> 12842<tr>
12915<td>MYSQL_VERSIONS_ACCEPTED</td> 12843<td>MYSQL_VERSIONS_ACCEPTED</td>
12916<td>MYSQL_VERSIONS_ALL</td> 12844<td>MYSQL_VERSIONS_ALL</td>
12917</tr> 12845</tr>
12918<tr> 12846<tr>
12919<td>MYSQL_VERSION_DEFAULT</td> 12847<td>MYSQL_VERSION_DEFAULT</td>
12920<td>NAGIOSCMD_GROUP</td> 12848<td>NAGIOSCMD_GROUP</td>
12921</tr> 12849</tr>
12922<tr> 12850<tr>
12923<td>NAGIOSDIR</td> 12851<td>NAGIOSDIR</td>
12924<td>NAGIOS_GROUP</td> 12852<td>NAGIOS_GROUP</td>
12925</tr> 12853</tr>
12926<tr> 12854<tr>
12927<td>NAGIOS_USER</td> 12855<td>NAGIOS_USER</td>
12928<td>NATIVE_APPEND_ABI</td> 12856<td>NATIVE_APPEND_ABI</td>
12929</tr> 12857</tr>
12930<tr> 12858<tr>
12931<td>NATIVE_APPEND_ELF</td> 12859<td>NATIVE_APPEND_ELF</td>
12932<td>NATIVE_EXEC_FMT</td> 12860<td>NATIVE_EXEC_FMT</td>
12933</tr> 12861</tr>
12934<tr> 12862<tr>
12935<td>NATIVE_MACHINE_PLATFORM</td> 12863<td>NATIVE_MACHINE_PLATFORM</td>
12936<td>NATIVE_OBJECT_FMT</td> 12864<td>NATIVE_OBJECT_FMT</td>
12937</tr> 12865</tr>
12938<tr> 12866<tr>
12939<td>NBPAX_PROGRAM_PREFIX</td> 12867<td>NBPAX_PROGRAM_PREFIX</td>
12940<td>NETBSD_LOGIN_NAME</td> 12868<td>NETBSD_LOGIN_NAME</td>
12941</tr> 12869</tr>
12942<tr> 12870<tr>
12943<td>NMH_EDITOR</td> 12871<td>NMH_EDITOR</td>
12944<td>NMH_MTA</td> 12872<td>NMH_MTA</td>
12945</tr> 12873</tr>
12946<tr> 12874<tr>
12947<td>NMH_PAGER</td> 12875<td>NMH_PAGER</td>
12948<td>NODE_VERSIONS_ACCEPTED</td> 12876<td>NODE_VERSIONS_ACCEPTED</td>
12949</tr> 12877</tr>
12950<tr> 12878<tr>
12951<td>NODE_VERSIONS_INCOMPATIBLE</td> 12879<td>NODE_VERSIONS_INCOMPATIBLE</td>
12952<td>NODE_VERSION_DEFAULT</td> 12880<td>NODE_VERSION_DEFAULT</td>
12953</tr> 12881</tr>
12954<tr> 12882<tr>
12955<td>NODE_VERSION_REQD</td> 12883<td>NODE_VERSION_REQD</td>
12956<td>NOLOGIN</td> 12884<td>NOLOGIN</td>
12957</tr> 12885</tr>
12958<tr> 12886<tr>
12959<td>NOTE</td> 12887<td>NOTE</td>
12960<td>NOT_FOR_PLATFORM</td> 12888<td>NOT_FOR_PLATFORM</td>
12961</tr> 12889</tr>
12962<tr> 12890<tr>
12963<td>NOT_PAX_ASLR_SAFE</td> 12891<td>NOT_PAX_ASLR_SAFE</td>
12964<td>NOT_PAX_MPROTECT_SAFE</td> 12892<td>NOT_PAX_MPROTECT_SAFE</td>
12965</tr> 12893</tr>
12966<tr> 12894<tr>
12967<td>NO_BUILD</td> 12895<td>NO_BUILD</td>
12968<td>NO_CHECKSUM</td> 12896<td>NO_CHECKSUM</td>
12969</tr> 12897</tr>
12970<tr> 12898<tr>
12971<td>NO_CONFIGURE</td> 12899<td>NO_CONFIGURE</td>
12972<td>NO_SKIP</td> 12900<td>NO_SKIP</td>
12973</tr> 12901</tr>
12974<tr> 12902<tr>
12975<td>NS_PREFERRED</td> 12903<td>NS_PREFERRED</td>
12976<td>NULLMAILER_GROUP</td> 12904<td>NULLMAILER_GROUP</td>
12977</tr> 12905</tr>
12978<tr> 12906<tr>
12979<td>NULLMAILER_USER</td> 12907<td>NULLMAILER_USER</td>
12980<td>OASIS</td> 12908<td>OASIS</td>
12981</tr> 12909</tr>
12982<tr> 12910<tr>
12983<td>OASIS_BUILD_ARGS</td> 12911<td>OASIS_BUILD_ARGS</td>
12984<td>OBJHOSTNAME</td> 12912<td>OBJHOSTNAME</td>
12985</tr> 12913</tr>
12986<tr> 12914<tr>
12987<td>OBJMACHINE</td> 12915<td>OBJMACHINE</td>
12988<td>OCAML_FINDLIB_DIRS</td> 12916<td>OCAML_FINDLIB_DIRS</td>
12989</tr> 12917</tr>
12990<tr> 12918<tr>
12991<td>OCAML_FINDLIB_REGISTER</td> 12919<td>OCAML_FINDLIB_REGISTER</td>
12992<td>OCAML_FINDLIB_REGISTER_VERBOSE</td> 12920<td>OCAML_FINDLIB_REGISTER_VERBOSE</td>
12993</tr> 12921</tr>
12994<tr> 12922<tr>
12995<td>OCAML_SITELIBDIR</td> 12923<td>OCAML_SITELIBDIR</td>
12996<td>OCAML_TOPKG_DOCDIR</td> 12924<td>OCAML_TOPKG_DOCDIR</td>
12997</tr> 12925</tr>
12998<tr> 12926<tr>
12999<td>OCAML_USE_DUNE</td> 12927<td>OCAML_USE_DUNE</td>
13000<td>OCAML_USE_FINDLIB</td> 12928<td>OCAML_USE_FINDLIB</td>
13001</tr> 12929</tr>
13002<tr> 12930<tr>
13003<td>OCAML_USE_OASIS</td> 12931<td>OCAML_USE_OASIS</td>
13004<td>OCAML_USE_OASIS_DYNRUN</td> 12932<td>OCAML_USE_OASIS_DYNRUN</td>
13005</tr> 12933</tr>
13006<tr> 12934<tr>
13007<td>OCAML_USE_OPAM</td> 12935<td>OCAML_USE_OPAM</td>
13008<td>OCAML_USE_OPT_COMPILER</td> 
13009</tr> 
13010<tr> 
13011<td>OCAML_USE_TOPKG</td> 12936<td>OCAML_USE_TOPKG</td>
13012<td>OMF</td> 
13013</tr> 12937</tr>
13014<tr> 12938<tr>
 12939<td>OMF</td>
13015<td>ONLY_FOR_COMPILER</td> 12940<td>ONLY_FOR_COMPILER</td>
13016<td>ONLY_FOR_PLATFORM</td> 
13017</tr> 12941</tr>
13018<tr> 12942<tr>
 12943<td>ONLY_FOR_PLATFORM</td>
13019<td>OPENSSH_CHROOT</td> 12944<td>OPENSSH_CHROOT</td>
13020<td>OPENSSH_GROUP</td> 
13021</tr> 12945</tr>
13022<tr> 12946<tr>
 12947<td>OPENSSH_GROUP</td>
13023<td>OPENSSH_USER</td> 12948<td>OPENSSH_USER</td>
13024<td>OPSYS</td> 
13025</tr> 12949</tr>
13026<tr> 12950<tr>
 12951<td>OPSYS</td>
13027<td>OPSYS_EMULDIR</td> 12952<td>OPSYS_EMULDIR</td>
13028<td>OPSYS_VERSION</td> 
13029</tr> 12953</tr>
13030<tr> 12954<tr>
 12955<td>OPSYS_VERSION</td>
13031<td>OS</td> 12956<td>OS</td>
13032<td>OSS_TYPE</td> 
13033</tr> 12957</tr>
13034<tr> 12958<tr>
 12959<td>OSS_TYPE</td>
13035<td>OSX</td> 12960<td>OSX</td>
13036<td>OSX_TOLERATE_SDK_SKEW</td> 
13037</tr> 
13038<tr> 
13039<td>OS_HAVE_ALSA</td> 
13040<td>OS_HAVE_RCD</td> 
13041</tr> 12961</tr>
13042<tr> 12962<tr>
 12963<td>OSX_TOLERATE_SDK_SKEW</td>
13043<td>OS_VARIANT</td> 12964<td>OS_VARIANT</td>
13044<td>OS_VERSION</td> 
13045</tr> 12965</tr>
13046<tr> 12966<tr>
 12967<td>OS_VERSION</td>
13047<td>OTF_FONTS_DIR</td> 12968<td>OTF_FONTS_DIR</td>
13048<td>OVERRIDE_DIRDEPTH</td> 
13049</tr> 12969</tr>
13050<tr> 12970<tr>
 12971<td>OVERRIDE_DIRDEPTH</td>
13051<td>OVERRIDE_GEMSPEC</td> 12972<td>OVERRIDE_GEMSPEC</td>
13052<td>OVERRIDE_GNU_CONFIG_SCRIPTS</td> 
13053</tr> 12973</tr>
13054<tr> 12974<tr>
13055<td>OVERRIDE_ROCKSPEC</td> 12975<td>OVERRIDE_GNU_CONFIG_SCRIPTS</td>
13056<td>OWN_DIRS</td> 12976<td>OWN_DIRS</td>
13057</tr> 12977</tr>
13058<tr> 12978<tr>
13059<td>OWN_DIRS_PERMS</td> 12979<td>OWN_DIRS_PERMS</td>
13060<td>P4GROUP</td> 12980<td>P4GROUP</td>
13061</tr> 12981</tr>
13062<tr> 12982<tr>
13063<td>P4PORT</td> 12983<td>P4PORT</td>
13064<td>P4ROOT</td> 12984<td>P4ROOT</td>
13065</tr> 12985</tr>
13066<tr> 12986<tr>
13067<td>P4USER</td> 12987<td>P4USER</td>
13068<td>PACKAGES</td> 12988<td>PACKAGES</td>
13069</tr> 12989</tr>
13070<tr> 12990<tr>
13071<td>PALMOS_DEFAULT_SDK</td> 12991<td>PALMOS_DEFAULT_SDK</td>
13072<td>PAMBASE</td> 12992<td>PAMBASE</td>
13073</tr> 12993</tr>
13074<tr> 12994<tr>
13075<td>PAM_DEFAULT</td> 12995<td>PAM_DEFAULT</td>
13076<td>PAPERSIZE</td> 12996<td>PAPERSIZE</td>
13077</tr> 12997</tr>
13078<tr> 12998<tr>
13079<td>PASSIVE_FETCH</td> 12999<td>PASSIVE_FETCH</td>
13080<td>PATCHDIR</td> 13000<td>PATCHDIR</td>
13081</tr> 13001</tr>
13082<tr> 13002<tr>
13083<td>PATCHFILES</td> 13003<td>PATCHFILES</td>
13084<td>PATCH_ARGS</td> 13004<td>PATCH_ARGS</td>
13085</tr> 13005</tr>
13086<tr> 13006<tr>
13087<td>PATCH_DEBUG</td> 13007<td>PATCH_DEBUG</td>
13088<td>PATCH_DIST_ARGS</td> 13008<td>PATCH_DIST_ARGS</td>
13089</tr> 13009</tr>
13090<tr> 13010<tr>
13091<td>PATCH_DIST_CAT</td> 13011<td>PATCH_DIST_CAT</td>
13092<td>PATCH_DIST_STRIP</td> 13012<td>PATCH_DIST_STRIP</td>
13093</tr> 13013</tr>
13094<tr> 13014<tr>
13095<td>PATCH_FUZZ_FACTOR</td> 13015<td>PATCH_FUZZ_FACTOR</td>
13096<td>PATCH_STRIP</td> 13016<td>PATCH_STRIP</td>
13097</tr> 13017</tr>
13098<tr> 13018<tr>
13099<td>PATH</td> 13019<td>PATH</td>
13100<td>PCCBASE</td> 13020<td>PCCBASE</td>
13101</tr> 13021</tr>
13102<tr> 13022<tr>
13103<td>PEAR</td> 
13104<td>PEAR_CHANNEL</td> 
13105</tr> 
13106<tr> 
13107<td>PEAR_CHANNEL_ALIAS</td> 
13108<td>PEAR_CHANNEL_VERSION</td> 
13109</tr> 
13110<tr> 
13111<td>PEAR_CMD</td> 13023<td>PEAR_CMD</td>
13112<td>PEAR_LIB</td> 13024<td>PEAR_LIB</td>
13113</tr> 13025</tr>
13114<tr> 13026<tr>
13115<td>PEAR_PACKAGE_XML</td> 13027<td>PEAR_PACKAGE_XML</td>
13116<td>PERL5</td> 13028<td>PERL5</td>
13117</tr> 13029</tr>
13118<tr> 13030<tr>
13119<td>PERL5_CONFIGURE</td> 13031<td>PERL5_CONFIGURE</td>
13120<td>PERL5_CONFIGURE_DIRS</td> 13032<td>PERL5_CONFIGURE_DIRS</td>
13121</tr> 13033</tr>
13122<tr> 13034<tr>
13123<td>PERL5_LDFLAGS</td> 13035<td>PERL5_LDFLAGS</td>
13124<td>PERL5_LICENSE</td> 13036<td>PERL5_LICENSE</td>
13125</tr> 13037</tr>
13126<tr> 13038<tr>
13127<td>PERL5_MODULE_TYPE</td> 13039<td>PERL5_MODULE_TYPE</td>
13128<td>PERL5_PACKLIST</td> 13040<td>PERL5_PACKLIST</td>
13129</tr> 13041</tr>
13130<tr> 13042<tr>
13131<td>PERL5_PACKLIST_DIR</td> 13043<td>PERL5_PACKLIST_DIR</td>
13132<td>PERL5_PERLBASE</td> 13044<td>PERL5_PERLBASE</td>
13133</tr> 13045</tr>
13134<tr> 13046<tr>
13135<td>PERL5_SITEBASE</td> 13047<td>PERL5_SITEBASE</td>
13136<td>PERL5_USE_PACKLIST</td> 13048<td>PERL5_USE_PACKLIST</td>
13137</tr> 13049</tr>
13138<tr> 13050<tr>
13139<td>PERL5_VENDORBASE</td> 13051<td>PERL5_VENDORBASE</td>
13140<td>PFCTL</td> 13052<td>PFCTL</td>
13141</tr> 13053</tr>
13142<tr> 13054<tr>
13143<td>PFVAR_H</td> 13055<td>PFVAR_H</td>
13144<td>PF_VERSION</td> 13056<td>PF_VERSION</td>
13145</tr> 13057</tr>
13146<tr> 13058<tr>
13147<td>PGGROUP</td> 13059<td>PGGROUP</td>
13148<td>PGHOME</td> 13060<td>PGHOME</td>
13149</tr> 13061</tr>
13150<tr> 13062<tr>
13151<td>PGPKGSRCDIR</td> 13063<td>PGPKGSRCDIR</td>
13152<td>PGSQL_TYPE</td> 13064<td>PGSQL_TYPE</td>
13153</tr> 13065</tr>
13154<tr> 13066<tr>
13155<td>PGSQL_VERSION</td> 13067<td>PGSQL_VERSION</td>
13156<td>PGSQL_VERSIONS_ACCEPTED</td> 13068<td>PGSQL_VERSIONS_ACCEPTED</td>
13157</tr> 13069</tr>
13158<tr> 13070<tr>
13159<td>PGSQL_VERSION_DEFAULT</td> 13071<td>PGSQL_VERSION_DEFAULT</td>
13160<td>PGUSER</td> 13072<td>PGUSER</td>
13161</tr> 13073</tr>
13162<tr> 13074<tr>
13163<td>PG_LIB_EXT</td> 13075<td>PG_LIB_EXT</td>
13164<td>PHP</td> 13076<td>PHP</td>
13165</tr> 13077</tr>
13166<tr> 13078<tr>
13167<td>PHPCOMMON_MK</td> 13079<td>PHPCOMMON_MK</td>
13168<td>PHPPKGSRCDIR</td> 13080<td>PHPPKGSRCDIR</td>
13169</tr> 13081</tr>
13170<tr> 13082<tr>
13171<td>PHP_BASE_VERS</td> 13083<td>PHP_BASE_VERS</td>
13172<td>PHP_CHECK_INSTALLED</td> 13084<td>PHP_CHECK_INSTALLED</td>
13173</tr> 13085</tr>
13174<tr> 13086<tr>
13175<td>PHP_EXTENSION_DIR</td> 13087<td>PHP_EXTENSION_DIR</td>
13176<td>PHP_INITIAL_TEENY</td> 13088<td>PHP_INITIAL_TEENY</td>
13177</tr> 13089</tr>
13178<tr> 13090<tr>
13179<td>PHP_PKG_PREFIX</td> 13091<td>PHP_PKG_PREFIX</td>
13180<td>PHP_VERSION</td> 13092<td>PHP_VERSION</td>
13181</tr> 13093</tr>
13182<tr> 13094<tr>
13183<td>PHP_VERSIONS_ACCEPTED</td> 13095<td>PHP_VERSIONS_ACCEPTED</td>
13184<td>PHP_VERSIONS_INCOMPATIBLE</td> 13096<td>PHP_VERSIONS_INCOMPATIBLE</td>
13185</tr> 13097</tr>
13186<tr> 13098<tr>
13187<td>PHP_VERSION_DEFAULT</td> 13099<td>PHP_VERSION_DEFAULT</td>
13188<td>PHP_VERSION_REQD</td> 13100<td>PHP_VERSION_REQD</td>
13189</tr> 13101</tr>
13190<tr> 13102<tr>
13191<td>PILRC_USE_GTK</td> 13103<td>PILRC_USE_GTK</td>
13192<td>PKGCONFIG_BASE</td> 13104<td>PKGCONFIG_BASE</td>
13193</tr> 13105</tr>
13194<tr> 13106<tr>
13195<td>PKGCONFIG_FILE</td> 13107<td>PKGCONFIG_FILE</td>
13196<td>PKGCONFIG_OVERRIDE</td> 13108<td>PKGCONFIG_OVERRIDE</td>
13197</tr> 13109</tr>
13198<tr> 13110<tr>
13199<td>PKGCONFIG_OVERRIDE_STAGE</td> 13111<td>PKGCONFIG_OVERRIDE_STAGE</td>
13200<td>PKGDIR</td> 13112<td>PKGDIR</td>
13201</tr> 13113</tr>
13202<tr> 13114<tr>
13203<td>PKGGNUDIR</td> 13115<td>PKGGNUDIR</td>
13204<td>PKGINFODIR</td> 13116<td>PKGINFODIR</td>
13205</tr> 13117</tr>
13206<tr> 13118<tr>
13207<td>PKGLOCALEDIR</td> 13119<td>PKGLOCALEDIR</td>
13208<td>PKGMANDIR</td> 13120<td>PKGMANDIR</td>
13209</tr> 13121</tr>
13210<tr> 13122<tr>
13211<td>PKGNAME</td> 13123<td>PKGNAME</td>
13212<td>PKGNAME_REQD</td> 13124<td>PKGNAME_REQD</td>
13213</tr> 13125</tr>
13214<tr> 13126<tr>
13215<td>PKGPATH</td> 13127<td>PKGPATH</td>
13216<td>PKGREVISION</td> 13128<td>PKGREVISION</td>
13217</tr> 13129</tr>
13218<tr> 13130<tr>
13219<td>PKGSRC_BLAS_TYPES</td> 13131<td>PKGSRC_BLAS_TYPES</td>
13220<td>PKGSRC_CHANGES</td> 13132<td>PKGSRC_CHANGES</td>
13221</tr> 13133</tr>
13222<tr> 13134<tr>
13223<td>PKGSRC_COMPILER</td> 13135<td>PKGSRC_COMPILER</td>
13224<td>PKGSRC_KEEP_BIN_PKGS</td> 13136<td>PKGSRC_KEEP_BIN_PKGS</td>
13225</tr> 13137</tr>
13226<tr> 13138<tr>
13227<td>PKGSRC_LOCKTYPE</td> 13139<td>PKGSRC_LOCKTYPE</td>
13228<td>PKGSRC_MAKE_ENV</td> 13140<td>PKGSRC_MAKE_ENV</td>
13229</tr> 13141</tr>
13230<tr> 13142<tr>
13231<td>PKGSRC_MESSAGE_RECIPIENTS</td> 13143<td>PKGSRC_MESSAGE_RECIPIENTS</td>
13232<td>PKGSRC_MKPIE</td> 13144<td>PKGSRC_MKPIE</td>
13233</tr> 13145</tr>
13234<tr> 13146<tr>
13235<td>PKGSRC_MKREPRO</td> 13147<td>PKGSRC_MKREPRO</td>
13236<td>PKGSRC_OVERRIDE_MKPIE</td> 13148<td>PKGSRC_OVERRIDE_MKPIE</td>
13237</tr> 13149</tr>
13238<tr> 13150<tr>
13239<td>PKGSRC_RUN_TEST</td> 13151<td>PKGSRC_RUN_TEST</td>
13240<td>PKGSRC_SETENV</td> 13152<td>PKGSRC_SETENV</td>
13241</tr> 13153</tr>
13242<tr> 13154<tr>
13243<td>PKGSRC_SLEEPSECS</td> 13155<td>PKGSRC_SLEEPSECS</td>
13244<td>PKGSRC_TODO</td> 13156<td>PKGSRC_TODO</td>
13245</tr> 13157</tr>
13246<tr> 13158<tr>
13247<td>PKGSRC_USE_CTF</td> 13159<td>PKGSRC_USE_CTF</td>
13248<td>PKGSRC_USE_FORTIFY</td> 13160<td>PKGSRC_USE_FORTIFY</td>
13249</tr> 13161</tr>
13250<tr> 13162<tr>
13251<td>PKGSRC_USE_RELRO</td> 13163<td>PKGSRC_USE_RELRO</td>
13252<td>PKGSRC_USE_SSP</td> 13164<td>PKGSRC_USE_SSP</td>
13253</tr> 13165</tr>
13254<tr> 13166<tr>
13255<td>PKGSRC_USE_STACK_CHECK</td> 13167<td>PKGSRC_USE_STACK_CHECK</td>
13256<td>PKGTASKS_DATAFILE</td> 13168<td>PKGTASKS_DATAFILE</td>
13257</tr> 13169</tr>
13258<tr> 13170<tr>
13259<td>PKGTOOLS_ARGS</td> 13171<td>PKGTOOLS_ARGS</td>
13260<td>PKGTOOLS_ENV</td> 13172<td>PKGTOOLS_ENV</td>
13261</tr> 13173</tr>
13262<tr> 13174<tr>
13263<td>PKG_ALTERNATIVES</td> 13175<td>PKG_ALTERNATIVES</td>
13264<td>PKG_APACHE</td> 13176<td>PKG_APACHE</td>
13265</tr> 13177</tr>
13266<tr> 13178<tr>
13267<td>PKG_APACHE_ACCEPTED</td> 13179<td>PKG_APACHE_ACCEPTED</td>
13268<td>PKG_APACHE_DEFAULT</td> 13180<td>PKG_APACHE_DEFAULT</td>
13269</tr> 13181</tr>
13270<tr> 13182<tr>
13271<td>PKG_BEST_EXISTS</td> 13183<td>PKG_BEST_EXISTS</td>
13272<td>PKG_BUILD_OPTIONS</td> 13184<td>PKG_BUILD_OPTIONS</td>
13273</tr> 13185</tr>
13274<tr> 13186<tr>
13275<td>PKG_COMPRESSION</td> 13187<td>PKG_COMPRESSION</td>
13276<td>PKG_CONFIG</td> 13188<td>PKG_CONFIG</td>
13277</tr> 13189</tr>
13278<tr> 13190<tr>
13279<td>PKG_CONFIG_PERMS</td> 13191<td>PKG_CONFIG_PERMS</td>
13280<td>PKG_CREATE_USERGROUP</td> 13192<td>PKG_CREATE_USERGROUP</td>
13281</tr> 13193</tr>
13282<tr> 13194<tr>
13283<td>PKG_DB_TMPDIR</td> 13195<td>PKG_DB_TMPDIR</td>
13284<td>PKG_DEBUG_LEVEL</td> 13196<td>PKG_DEBUG_LEVEL</td>
13285</tr> 13197</tr>
13286<tr> 13198<tr>
13287<td>PKG_DEFAULT_OPTIONS</td> 13199<td>PKG_DEFAULT_OPTIONS</td>
13288<td>PKG_DESTDIR_SUPPORT</td> 13200<td>PKG_DESTDIR_SUPPORT</td>
13289</tr> 13201</tr>
13290<tr> 13202<tr>
13291<td>PKG_DEVELOPER</td> 13203<td>PKG_DEVELOPER</td>
13292<td>PKG_DISABLED_OPTIONS</td> 13204<td>PKG_DISABLED_OPTIONS</td>
13293</tr> 13205</tr>
13294<tr> 13206<tr>
13295<td>PKG_FATAL_ERRORS</td> 13207<td>PKG_FATAL_ERRORS</td>
13296<td>PKG_FC</td> 13208<td>PKG_FC</td>
13297</tr> 13209</tr>
13298<tr> 13210<tr>
13299<td>PKG_FILELIST_CMD</td> 13211<td>PKG_FILELIST_CMD</td>
13300<td>PKG_GECOS</td> 13212<td>PKG_GECOS</td>
13301</tr> 13213</tr>
13302<tr> 13214<tr>
13303<td>PKG_GID</td> 13215<td>PKG_GID</td>
13304<td>PKG_GROUPS</td> 13216<td>PKG_GROUPS</td>
13305</tr> 13217</tr>
13306<tr> 13218<tr>
13307<td>PKG_GROUPS_VARS</td> 13219<td>PKG_GROUPS_VARS</td>
13308<td>PKG_HOME</td> 13220<td>PKG_HOME</td>
13309</tr> 13221</tr>
13310<tr> 13222<tr>
13311<td>PKG_INIT_SCRIPTS</td> 13223<td>PKG_INIT_SCRIPTS</td>
13312<td>PKG_JAVA_HOME</td> 13224<td>PKG_JAVA_HOME</td>
13313</tr> 13225</tr>
13314<tr> 13226<tr>
13315<td>PKG_JVM</td> 13227<td>PKG_JVM</td>
13316<td>PKG_JVMS_ACCEPTED</td> 13228<td>PKG_JVMS_ACCEPTED</td>
13317</tr> 13229</tr>
13318<tr> 13230<tr>
13319<td>PKG_JVM_DEFAULT</td> 13231<td>PKG_JVM_DEFAULT</td>
13320<td>PKG_LEGACY_OPTIONS</td> 13232<td>PKG_LEGACY_OPTIONS</td>
13321</tr> 13233</tr>
13322<tr> 13234<tr>
13323<td>PKG_LIBTOOL</td> 13235<td>PKG_LIBTOOL</td>
13324<td>PKG_OPTIONS</td> 13236<td>PKG_OPTIONS</td>
13325</tr> 13237</tr>
13326<tr> 13238<tr>
13327<td>PKG_OPTIONS_DEPRECATED_WARNINGS</td> 13239<td>PKG_OPTIONS_DEPRECATED_WARNINGS</td>
13328<td>PKG_OPTIONS_LEGACY_OPTS</td> 13240<td>PKG_OPTIONS_LEGACY_OPTS</td>
13329</tr> 13241</tr>
13330<tr> 13242<tr>
13331<td>PKG_OPTIONS_LEGACY_VARS</td> 13243<td>PKG_OPTIONS_LEGACY_VARS</td>
13332<td>PKG_OPTIONS_NONEMPTY_SETS</td> 13244<td>PKG_OPTIONS_NONEMPTY_SETS</td>
13333</tr> 13245</tr>
13334<tr> 13246<tr>
13335<td>PKG_OPTIONS_OPTIONAL_GROUPS</td> 13247<td>PKG_OPTIONS_OPTIONAL_GROUPS</td>
13336<td>PKG_OPTIONS_REQUIRED_GROUPS</td> 13248<td>PKG_OPTIONS_REQUIRED_GROUPS</td>
13337</tr> 13249</tr>
13338<tr> 13250<tr>
13339<td>PKG_OPTIONS_VAR</td> 13251<td>PKG_OPTIONS_VAR</td>
13340<td>PKG_PHP</td> 13252<td>PKG_PHP</td>
13341</tr> 13253</tr>
13342<tr> 13254<tr>
13343<td>PKG_PHP_MAJOR_VERS</td> 13255<td>PKG_PHP_MAJOR_VERS</td>
13344<td>PKG_PHP_VERSION</td> 13256<td>PKG_PHP_VERSION</td>
13345</tr> 13257</tr>
13346<tr> 13258<tr>
13347<td>PKG_RCD_SCRIPTS</td> 13259<td>PKG_RCD_SCRIPTS</td>
13348<td>PKG_REFCOUNT_DBDIR</td> 13260<td>PKG_REFCOUNT_DBDIR</td>
13349</tr> 13261</tr>
13350<tr> 13262<tr>
13351<td>PKG_REGISTER_SHELLS</td> 13263<td>PKG_REGISTER_SHELLS</td>
13352<td>PKG_RESUME_TRANSFERS</td> 13264<td>PKG_RESUME_TRANSFERS</td>
13353</tr> 13265</tr>
13354<tr> 13266<tr>
13355<td>PKG_SHELL</td> 13267<td>PKG_SHELL</td>
13356<td>PKG_SUGGESTED_OPTIONS</td> 13268<td>PKG_SUGGESTED_OPTIONS</td>
13357</tr> 13269</tr>
13358<tr> 13270<tr>
13359<td>PKG_SUPPORTED_OPTIONS</td> 13271<td>PKG_SUPPORTED_OPTIONS</td>
13360<td>PKG_SYSCONFBASE</td> 13272<td>PKG_SYSCONFBASE</td>
13361</tr> 13273</tr>
13362<tr> 13274<tr>
13363<td>PKG_SYSCONFBASEDIR</td> 13275<td>PKG_SYSCONFBASEDIR</td>
13364<td>PKG_SYSCONFDIR</td> 13276<td>PKG_SYSCONFDIR</td>
13365</tr> 13277</tr>
13366<tr> 13278<tr>
13367<td>PKG_SYSCONFDIR_PERMS</td> 13279<td>PKG_SYSCONFDIR_PERMS</td>
13368<td>PKG_SYSCONFSUBDIR</td> 13280<td>PKG_SYSCONFSUBDIR</td>
13369</tr> 13281</tr>
13370<tr> 13282<tr>
13371<td>PKG_SYSCONFVAR</td> 13283<td>PKG_SYSCONFVAR</td>
13372<td>PKG_TOOLS_BIN</td> 13284<td>PKG_TOOLS_BIN</td>
13373</tr> 13285</tr>
13374<tr> 13286<tr>
13375<td>PKG_UID</td> 13287<td>PKG_UID</td>
13376<td>PKG_UPDATE_FONTS_DB</td> 13288<td>PKG_UPDATE_FONTS_DB</td>
13377</tr> 13289</tr>
13378<tr> 13290<tr>
13379<td>PKG_USERS</td> 13291<td>PKG_USERS</td>
13380<td>PKG_USERS_VARS</td> 13292<td>PKG_USERS_VARS</td>
13381</tr> 13293</tr>
13382<tr> 13294<tr>
13383<td>PKG_VERBOSE</td> 13295<td>PKG_VERBOSE</td>
13384<td>PLEASE</td> 13296<td>PLEASE</td>
13385</tr> 13297</tr>
13386<tr> 13298<tr>
13387<td>PLIST</td> 13299<td>PLIST</td>
13388<td>PLIST_AWK</td> 13300<td>PLIST_AWK</td>
13389</tr> 13301</tr>
13390<tr> 13302<tr>
13391<td>PLIST_AWK_ENV</td> 13303<td>PLIST_AWK_ENV</td>
13392<td>PLIST_SRC</td> 13304<td>PLIST_SRC</td>
13393</tr> 13305</tr>
13394<tr> 13306<tr>
13395<td>PLIST_SUBST</td> 13307<td>PLIST_SUBST</td>
13396<td>PLIST_TYPE</td> 13308<td>PLIST_TYPE</td>
13397</tr> 13309</tr>
13398<tr> 13310<tr>
13399<td>PLIST_VARS</td> 13311<td>PLIST_VARS</td>
13400<td>POPTOP_USE_MPPE</td> 13312<td>POPTOP_USE_MPPE</td>
13401</tr> 13313</tr>
13402<tr> 13314<tr>
13403<td>POSSIBLE_GFORTRAN_VERSION</td> 13315<td>POSSIBLE_GFORTRAN_VERSION</td>
13404<td>POST_FETCH_HOOK</td> 13316<td>POST_FETCH_HOOK</td>
13405</tr> 13317</tr>
13406<tr> 13318<tr>
13407<td>PREFER</td> 13319<td>PREFER</td>
13408<td>PREFER_NATIVE</td> 13320<td>PREFER_NATIVE</td>
13409</tr> 13321</tr>
13410<tr> 13322<tr>
13411<td>PREFER_NATIVE_PTHREADS</td> 13323<td>PREFER_NATIVE_PTHREADS</td>
13412<td>PREFER_PKGSRC</td> 13324<td>PREFER_PKGSRC</td>
13413</tr> 13325</tr>
13414<tr> 13326<tr>
13415<td>PREFIX</td> 13327<td>PREFIX</td>
13416<td>PREPEND_PATH</td> 13328<td>PREPEND_PATH</td>
13417</tr> 13329</tr>
13418<tr> 13330<tr>
13419<td>PRE_ROOT_CMD</td> 13331<td>PRE_ROOT_CMD</td>
13420<td>PRIVILEGED_STAGES</td> 13332<td>PRIVILEGED_STAGES</td>
13421</tr> 13333</tr>
13422<tr> 13334<tr>
13423<td>PS</td> 13335<td>PS</td>
13424<td>PTHREAD_AUTO_VARS</td> 13336<td>PTHREAD_AUTO_VARS</td>
13425</tr> 13337</tr>
13426<tr> 13338<tr>
13427<td>PTHREAD_CFLAGS</td> 13339<td>PTHREAD_CFLAGS</td>
13428<td>PTHREAD_LDFLAGS</td> 13340<td>PTHREAD_LDFLAGS</td>
13429</tr> 13341</tr>
13430<tr> 13342<tr>
13431<td>PTHREAD_LIBS</td> 13343<td>PTHREAD_LIBS</td>
13432<td>PTHREAD_OPTS</td> 13344<td>PTHREAD_OPTS</td>
13433</tr> 13345</tr>
13434<tr> 13346<tr>
13435<td>PTHREAD_TYPE</td> 13347<td>PTHREAD_TYPE</td>
13436<td>PVM_SSH</td> 13348<td>PVM_SSH</td>
13437</tr> 13349</tr>
13438<tr> 13350<tr>
13439<td>PYPKGPREFIX</td> 13351<td>PYPKGPREFIX</td>
13440<td>PYTHON_FOR_BUILD_ONLY</td> 13352<td>PYTHON_FOR_BUILD_ONLY</td>
13441</tr> 13353</tr>
13442<tr> 13354<tr>
13443<td>PYTHON_SELF_CONFLICT</td> 13355<td>PYTHON_SELF_CONFLICT</td>
13444<td>PYTHON_VERSIONED_DEPENDENCIES</td> 13356<td>PYTHON_VERSIONED_DEPENDENCIES</td>
13445</tr> 13357</tr>
13446<tr> 13358<tr>
13447<td>PYTHON_VERSIONS_ACCEPTED</td> 13359<td>PYTHON_VERSIONS_ACCEPTED</td>
13448<td>PYTHON_VERSIONS_INCOMPATIBLE</td> 13360<td>PYTHON_VERSIONS_INCOMPATIBLE</td>
13449</tr> 13361</tr>
13450<tr> 13362<tr>
13451<td>PYTHON_VERSION_DEFAULT</td> 13363<td>PYTHON_VERSION_DEFAULT</td>
13452<td>PYTHON_VERSION_REQD</td> 13364<td>PYTHON_VERSION_REQD</td>
13453</tr> 13365</tr>
13454<tr> 13366<tr>
13455<td>PYVERSSUFFIX</td> 13367<td>PYVERSSUFFIX</td>
13456<td>QMAILDIR</td> 13368<td>QMAILDIR</td>
13457</tr> 13369</tr>
13458<tr> 13370<tr>
13459<td>QMAIL_ALIAS_USER</td> 13371<td>QMAIL_ALIAS_USER</td>
13460<td>QMAIL_DAEMON_USER</td> 13372<td>QMAIL_DAEMON_USER</td>
13461</tr> 13373</tr>
13462<tr> 13374<tr>
13463<td>QMAIL_LOG_USER</td> 13375<td>QMAIL_LOG_USER</td>
13464<td>QMAIL_NOFILES_GROUP</td> 13376<td>QMAIL_NOFILES_GROUP</td>
13465</tr> 13377</tr>
13466<tr> 13378<tr>
13467<td>QMAIL_PASSWD_USER</td> 13379<td>QMAIL_PASSWD_USER</td>
13468<td>QMAIL_QMAIL_GROUP</td> 13380<td>QMAIL_QMAIL_GROUP</td>
13469</tr> 13381</tr>
13470<tr> 13382<tr>
13471<td>QMAIL_QUEUE_DIR</td> 13383<td>QMAIL_QUEUE_DIR</td>
13472<td>QMAIL_QUEUE_EXTRA</td> 13384<td>QMAIL_QUEUE_EXTRA</td>
13473</tr> 13385</tr>
13474<tr> 13386<tr>
13475<td>QMAIL_QUEUE_USER</td> 13387<td>QMAIL_QUEUE_USER</td>
13476<td>QMAIL_REMOTE_USER</td> 13388<td>QMAIL_REMOTE_USER</td>
13477</tr> 13389</tr>
13478<tr> 13390<tr>
13479<td>QMAIL_ROOT_USER</td> 13391<td>QMAIL_ROOT_USER</td>
13480<td>QMAIL_SEND_USER</td> 13392<td>QMAIL_SEND_USER</td>
13481</tr> 13393</tr>
13482<tr> 13394<tr>
13483<td>QORE_LATEST_MODULE_API</td> 13395<td>QORE_LATEST_MODULE_API</td>
13484<td>QORE_MODULE_API</td> 13396<td>QORE_MODULE_API</td>
13485</tr> 13397</tr>
13486<tr> 13398<tr>
13487<td>QORE_MODULE_DIR</td> 13399<td>QORE_MODULE_DIR</td>
13488<td>QORE_USER_MODULE_DIR</td> 13400<td>QORE_USER_MODULE_DIR</td>
13489</tr> 13401</tr>
13490<tr> 13402<tr>
13491<td>QORE_VERSION</td> 13403<td>QORE_VERSION</td>
13492<td>QPOPPER_FAC</td> 13404<td>QPOPPER_FAC</td>
13493</tr> 13405</tr>
13494<tr> 13406<tr>
13495<td>QPOPPER_SPOOL_DIR</td> 13407<td>QPOPPER_SPOOL_DIR</td>
13496<td>QPOPPER_USER</td> 13408<td>QPOPPER_USER</td>
13497</tr> 13409</tr>
13498<tr> 13410<tr>
13499<td>RAKE_NAME</td> 13411<td>RAKE_NAME</td>
13500<td>RASMOL_DEPTH</td> 13412<td>RASMOL_DEPTH</td>
13501</tr> 13413</tr>
13502<tr> 13414<tr>
13503<td>RCD_DIR</td> 
13504<td>RCD_ORDER</td> 
13505</tr> 
13506<tr> 
13507<td>RCD_SCRIPTS</td> 13415<td>RCD_SCRIPTS</td>
13508<td>RCD_SCRIPTS_DIR</td> 13416<td>RCD_SCRIPTS_DIR</td>
13509</tr> 13417</tr>
13510<tr> 13418<tr>
13511<td>RCD_SCRIPTS_EXAMPLEDIR</td> 13419<td>RCD_SCRIPTS_EXAMPLEDIR</td>
13512<td>RCD_SCRIPTS_MODE</td> 13420<td>RCD_SCRIPTS_MODE</td>
13513</tr> 13421</tr>
13514<tr> 13422<tr>
13515<td>RCD_SCRIPTS_SHELL</td> 13423<td>RCD_SCRIPTS_SHELL</td>
13516<td>RCD_SCRIPT_SRC</td> 13424<td>RCD_SCRIPT_SRC</td>
13517</tr> 13425</tr>
13518<tr> 13426<tr>
13519<td>RCD_SUBR</td> 
13520<td>RDOC</td> 13427<td>RDOC</td>
13521</tr> 
13522<tr> 
13523<td>READLINE_DEFAULT</td> 13428<td>READLINE_DEFAULT</td>
13524<td>READLINE_TYPE</td> 
13525</tr> 13429</tr>
13526<tr> 13430<tr>
 13431<td>READLINE_TYPE</td>
13527<td>REAL_ROOT_GROUP</td> 13432<td>REAL_ROOT_GROUP</td>
13528<td>REAL_ROOT_USER</td> 
13529</tr> 13433</tr>
13530<tr> 13434<tr>
 13435<td>REAL_ROOT_USER</td>
13531<td>RECURSIVE_MAKE</td> 13436<td>RECURSIVE_MAKE</td>
13532<td>RELAY_CTRL_DIR</td> 
13533</tr> 13437</tr>
13534<tr> 13438<tr>
 13439<td>RELAY_CTRL_DIR</td>
13535<td>RELRO_SUPPORTED</td> 13440<td>RELRO_SUPPORTED</td>
13536<td>REPLACE_AWK</td> 
13537</tr> 13441</tr>
13538<tr> 13442<tr>
 13443<td>REPLACE_AWK</td>
13539<td>REPLACE_BASH</td> 13444<td>REPLACE_BASH</td>
13540<td>REPLACE_CSH</td> 
13541</tr> 13445</tr>
13542<tr> 13446<tr>
 13447<td>REPLACE_CSH</td>
13543<td>REPLACE_KSH</td> 13448<td>REPLACE_KSH</td>
13544<td>REPLACE_LUA</td> 
13545</tr> 13449</tr>
13546<tr> 13450<tr>
 13451<td>REPLACE_LUA</td>
13547<td>REPLACE_NODEJS</td> 13452<td>REPLACE_NODEJS</td>
13548<td>REPLACE_OCTAVE</td> 
13549</tr> 13453</tr>
13550<tr> 13454<tr>
 13455<td>REPLACE_OCTAVE</td>
13551<td>REPLACE_PERL</td> 13456<td>REPLACE_PERL</td>
13552<td>REPLACE_PERL6</td> 
13553</tr> 13457</tr>
13554<tr> 13458<tr>
 13459<td>REPLACE_PERL6</td>
13555<td>REPLACE_PHP</td> 13460<td>REPLACE_PHP</td>
13556<td>REPLACE_PYTHON</td> 
13557</tr> 13461</tr>
13558<tr> 13462<tr>
 13463<td>REPLACE_PYTHON</td>
13559<td>REPLACE_QORE</td> 13464<td>REPLACE_QORE</td>
13560<td>REPLACE_R</td> 
13561</tr> 13465</tr>
13562<tr> 13466<tr>
 13467<td>REPLACE_R</td>
13563<td>REPLACE_RUBY</td> 13468<td>REPLACE_RUBY</td>
13564<td>REPLACE_RUBY_DIRS</td> 
13565</tr> 13469</tr>
13566<tr> 13470<tr>
 13471<td>REPLACE_RUBY_DIRS</td>
13567<td>REPLACE_RUBY_PAT</td> 13472<td>REPLACE_RUBY_PAT</td>
13568<td>REPLACE_SH</td> 
13569</tr> 13473</tr>
13570<tr> 13474<tr>
 13475<td>REPLACE_SH</td>
13571<td>REPLACE_TEXLUA</td> 13476<td>REPLACE_TEXLUA</td>
13572<td>REPLACE_WISH</td> 
13573</tr> 13477</tr>
13574<tr> 13478<tr>
 13479<td>REPLACE_WISH</td>
13575<td>REQD_DIRS</td> 13480<td>REQD_DIRS</td>
13576<td>REQD_DIRS_PERMS</td> 
13577</tr> 13481</tr>
13578<tr> 13482<tr>
 13483<td>REQD_DIRS_PERMS</td>
13579<td>REQD_FILES</td> 13484<td>REQD_FILES</td>
13580<td>REQD_FILES_MODE</td> 
13581</tr> 13485</tr>
13582<tr> 13486<tr>
 13487<td>REQD_FILES_MODE</td>
13583<td>REQD_FILES_PERMS</td> 13488<td>REQD_FILES_PERMS</td>
13584<td>RESOLV_AUTO_VARS</td> 
13585</tr> 13489</tr>
13586<tr> 13490<tr>
 13491<td>RESOLV_AUTO_VARS</td>
13587<td>RESOLV_LDFLAGS</td> 13492<td>RESOLV_LDFLAGS</td>
13588<td>RESOLV_LIBS</td> 
13589</tr> 13493</tr>
13590<tr> 13494<tr>
 13495<td>RESOLV_LIBS</td>
13591<td>RM</td> 13496<td>RM</td>
13592<td>ROCKSPEC_NAME</td> 
13593</tr> 13497</tr>
13594<tr> 13498<tr>
13595<td>ROCKSPEC_SPECFILE</td> 
13596<td>ROOT_CMD</td> 13499<td>ROOT_CMD</td>
13597</tr> 
13598<tr> 
13599<td>ROOT_GROUP</td> 13500<td>ROOT_GROUP</td>
13600<td>ROOT_USER</td> 
13601</tr> 13501</tr>
13602<tr> 13502<tr>
 13503<td>ROOT_USER</td>
13603<td>RPCGEN</td> 13504<td>RPCGEN</td>
13604<td>RPM</td> 
13605</tr> 13505</tr>
13606<tr> 13506<tr>
 13507<td>RPM</td>
13607<td>RPM2PKG_PLIST</td> 13508<td>RPM2PKG_PLIST</td>
13608<td>RPM2PKG_PREFIX</td> 
13609</tr> 13509</tr>
13610<tr> 13510<tr>
 13511<td>RPM2PKG_PREFIX</td>
13611<td>RPM2PKG_STAGE</td> 13512<td>RPM2PKG_STAGE</td>
13612<td>RPM2PKG_STRIP</td> 
13613</tr> 13513</tr>
13614<tr> 13514<tr>
 13515<td>RPM2PKG_STRIP</td>
13615<td>RPM2PKG_SUBPREFIX</td> 13516<td>RPM2PKG_SUBPREFIX</td>
13616<td>RPMFILES</td> 
13617</tr> 13517</tr>
13618<tr> 13518<tr>
 13519<td>RPMFILES</td>
13619<td>RPMIGNOREPATH</td> 13520<td>RPMIGNOREPATH</td>
13620<td>RPM_DB_PREFIX</td> 
13621</tr> 13521</tr>
13622<tr> 13522<tr>
 13523<td>RPM_DB_PREFIX</td>
13623<td>RSSH_CVS_PATH</td> 13524<td>RSSH_CVS_PATH</td>
13624<td>RSSH_RDIST_PATH</td> 
13625</tr> 13525</tr>
13626<tr> 13526<tr>
 13527<td>RSSH_RDIST_PATH</td>
13627<td>RSSH_RSYNC_PATH</td> 13528<td>RSSH_RSYNC_PATH</td>
13628<td>RSSH_SCP_PATH</td> 
13629</tr> 13529</tr>
13630<tr> 13530<tr>
 13531<td>RSSH_SCP_PATH</td>
13631<td>RSSH_SFTP_SERVER_PATH</td> 13532<td>RSSH_SFTP_SERVER_PATH</td>
13632<td>RUBY</td> 
13633</tr> 13533</tr>
13634<tr> 13534<tr>
 13535<td>RUBY</td>
13635<td>RUBYGEM</td> 13536<td>RUBYGEM</td>
13636<td>RUBYGEM_NAME</td> 
13637</tr> 13537</tr>
13638<tr> 13538<tr>
 13539<td>RUBYGEM_NAME</td>
13639<td>RUBYGEM_OPTIONS</td> 13540<td>RUBYGEM_OPTIONS</td>
13640<td>RUBYGEM_VERBOSE</td> 
13641</tr> 13541</tr>
13642<tr> 13542<tr>
 13543<td>RUBYGEM_VERBOSE</td>
13643<td>RUBY_ABI_VERSION</td> 13544<td>RUBY_ABI_VERSION</td>
13644<td>RUBY_ARCH</td> 
13645</tr> 13545</tr>
13646<tr> 13546<tr>
 13547<td>RUBY_ARCH</td>
13647<td>RUBY_ARCHINC</td> 13548<td>RUBY_ARCHINC</td>
13648<td>RUBY_ARCHLIB</td> 
13649</tr> 13549</tr>
13650<tr> 13550<tr>
 13551<td>RUBY_ARCHLIB</td>
13651<td>RUBY_BASE</td> 13552<td>RUBY_BASE</td>
13652<td>RUBY_BASERIDIR</td> 
13653</tr> 13553</tr>
13654<tr> 13554<tr>
 13555<td>RUBY_BASERIDIR</td>
13655<td>RUBY_BUILD_DOCUMENT</td> 13556<td>RUBY_BUILD_DOCUMENT</td>
13656<td>RUBY_DLEXT</td> 
13657</tr> 13557</tr>
13658<tr> 13558<tr>
 13559<td>RUBY_DLEXT</td>
13659<td>RUBY_DOC</td> 13560<td>RUBY_DOC</td>
13660<td>RUBY_DYNAMIC_DIRS</td> 
13661</tr> 13561</tr>
13662<tr> 13562<tr>
 13563<td>RUBY_DYNAMIC_DIRS</td>
13663<td>RUBY_EG</td> 13564<td>RUBY_EG</td>
13664<td>RUBY_ENCODING_ARG</td> 
13665</tr> 13565</tr>
13666<tr> 13566<tr>
 13567<td>RUBY_ENCODING_ARG</td>
13667<td>RUBY_EXTCONF</td> 13568<td>RUBY_EXTCONF</td>
13668<td>RUBY_EXTCONF_CHECK</td> 
13669</tr> 13569</tr>
13670<tr> 13570<tr>
 13571<td>RUBY_EXTCONF_CHECK</td>
13671<td>RUBY_EXTCONF_DEBUG</td> 13572<td>RUBY_EXTCONF_DEBUG</td>
13672<td>RUBY_EXTCONF_MAKEFILE</td> 
13673</tr> 13573</tr>
13674<tr> 13574<tr>
 13575<td>RUBY_EXTCONF_MAKEFILE</td>
13675<td>RUBY_GEM_ARCH</td> 13576<td>RUBY_GEM_ARCH</td>
13676<td>RUBY_GEM_BASE</td> 
13677</tr> 13577</tr>
13678<tr> 13578<tr>
 13579<td>RUBY_GEM_BASE</td>
13679<td>RUBY_INC</td> 13580<td>RUBY_INC</td>
13680<td>RUBY_LIB</td> 
13681</tr> 13581</tr>
13682<tr> 13582<tr>
 13583<td>RUBY_LIB</td>
13683<td>RUBY_LIB_BASE</td> 13584<td>RUBY_LIB_BASE</td>
13684<td>RUBY_NAME</td> 
13685</tr> 13585</tr>
13686<tr> 13586<tr>
 13587<td>RUBY_NAME</td>
13687<td>RUBY_NOVERSION</td> 13588<td>RUBY_NOVERSION</td>
13688<td>RUBY_PKGPREFIX</td> 
13689</tr> 13589</tr>
13690<tr> 13590<tr>
 13591<td>RUBY_PKGPREFIX</td>
13691<td>RUBY_RAILS</td> 13592<td>RUBY_RAILS</td>
13692<td>RUBY_RAILS52_VERSION</td> 
13693</tr> 13593</tr>
13694<tr> 13594<tr>
 13595<td>RUBY_RAILS52_VERSION</td>
13695<td>RUBY_RAILS60_VERSION</td> 13596<td>RUBY_RAILS60_VERSION</td>
13696<td>RUBY_RAILS61_VERSION</td> 
13697</tr> 13597</tr>
13698<tr> 13598<tr>
 13599<td>RUBY_RAILS61_VERSION</td>
13699<td>RUBY_RAILS70_VERSION</td> 13600<td>RUBY_RAILS70_VERSION</td>
13700<td>RUBY_RAILS_ACCEPTED</td> 
13701</tr> 13601</tr>
13702<tr> 13602<tr>
 13603<td>RUBY_RAILS_ACCEPTED</td>
13703<td>RUBY_RAILS_DEFAULT</td> 13604<td>RUBY_RAILS_DEFAULT</td>
13704<td>RUBY_RAILS_REQD</td> 
13705</tr> 13605</tr>
13706<tr> 13606<tr>
 13607<td>RUBY_RAILS_REQD</td>
13707<td>RUBY_RAILS_STRICT_DEP</td> 13608<td>RUBY_RAILS_STRICT_DEP</td>
13708<td>RUBY_RIDIR</td> 
13709</tr> 13609</tr>
13710<tr> 13610<tr>
 13611<td>RUBY_RIDIR</td>
13711<td>RUBY_SETUP</td> 13612<td>RUBY_SETUP</td>
13712<td>RUBY_SHLIB</td> 
13713</tr> 13613</tr>
13714<tr> 13614<tr>
 13615<td>RUBY_SHLIB</td>
13715<td>RUBY_SHLIBALIAS</td> 13616<td>RUBY_SHLIBALIAS</td>
13716<td>RUBY_SHLIBVER</td> 
13717</tr> 13617</tr>
13718<tr> 13618<tr>
 13619<td>RUBY_SHLIBVER</td>
13719<td>RUBY_SIMPLE_INSTALL</td> 13620<td>RUBY_SIMPLE_INSTALL</td>
13720<td>RUBY_SITEARCHLIB</td> 
13721</tr> 13621</tr>
13722<tr> 13622<tr>
 13623<td>RUBY_SITEARCHLIB</td>
13723<td>RUBY_SITELIB</td> 13624<td>RUBY_SITELIB</td>
13724<td>RUBY_SITELIB_BASE</td> 
13725</tr> 13625</tr>
13726<tr> 13626<tr>
 13627<td>RUBY_SITELIB_BASE</td>
13727<td>RUBY_SITERIDIR</td> 13628<td>RUBY_SITERIDIR</td>
13728<td>RUBY_SLEXT</td> 
13729</tr> 13629</tr>
13730<tr> 13630<tr>
 13631<td>RUBY_SLEXT</td>
13731<td>RUBY_SRCDIR</td> 13632<td>RUBY_SRCDIR</td>
13732<td>RUBY_STATICLIB</td> 
13733</tr> 13633</tr>
13734<tr> 13634<tr>
 13635<td>RUBY_STATICLIB</td>
13735<td>RUBY_SUFFIX</td> 13636<td>RUBY_SUFFIX</td>
13736<td>RUBY_SYSRIDIR</td> 
13737</tr> 13637</tr>
13738<tr> 13638<tr>
 13639<td>RUBY_SYSRIDIR</td>
13739<td>RUBY_USE_PTHREAD</td> 13640<td>RUBY_USE_PTHREAD</td>
13740<td>RUBY_VENDORARCHLIB</td> 
13741</tr> 13641</tr>
13742<tr> 13642<tr>
 13643<td>RUBY_VENDORARCHLIB</td>
13743<td>RUBY_VENDORLIB</td> 13644<td>RUBY_VENDORLIB</td>
13744<td>RUBY_VENDORLIB_BASE</td> 
13745</tr> 13645</tr>
13746<tr> 13646<tr>
 13647<td>RUBY_VENDORLIB_BASE</td>
13747<td>RUBY_VER</td> 13648<td>RUBY_VER</td>
13748<td>RUBY_VERSION</td> 
13749</tr> 13649</tr>
13750<tr> 13650<tr>
 13651<td>RUBY_VERSION</td>
13751<td>RUBY_VERSIONS_ACCEPTED</td> 13652<td>RUBY_VERSIONS_ACCEPTED</td>
13752<td>RUBY_VERSIONS_INCOMPATIBLE</td> 
13753</tr> 13653</tr>
13754<tr> 13654<tr>
 13655<td>RUBY_VERSIONS_INCOMPATIBLE</td>
13755<td>RUBY_VERSION_DEFAULT</td> 13656<td>RUBY_VERSION_DEFAULT</td>
13756<td>RUBY_VERSION_REQD</td> 
13757</tr> 13657</tr>
13758<tr> 13658<tr>
 13659<td>RUBY_VERSION_REQD</td>
13759<td>RUBY_VER_DIR</td> 13660<td>RUBY_VER_DIR</td>
13760<td>RUN</td> 
13761</tr> 13661</tr>
13762<tr> 13662<tr>
 13663<td>RUN</td>
13763<td>RUN_LDCONFIG</td> 13664<td>RUN_LDCONFIG</td>
13764<td>RUST_TYPE</td> 
13765</tr> 13665</tr>
13766<tr> 13666<tr>
 13667<td>RUST_TYPE</td>
13767<td>SCO</td> 13668<td>SCO</td>
13768<td>SCREWS_GROUP</td> 
13769</tr> 13669</tr>
13770<tr> 13670<tr>
 13671<td>SCREWS_GROUP</td>
13771<td>SCREWS_USER</td> 13672<td>SCREWS_USER</td>
13772<td>SCRIPTS_ENV</td> 
13773</tr> 13673</tr>
13774<tr> 13674<tr>
 13675<td>SCRIPTS_ENV</td>
13775<td>SCROLLKEEPER_DATADIR</td> 13676<td>SCROLLKEEPER_DATADIR</td>
13776<td>SCROLLKEEPER_REBUILDDB</td> 
13777</tr> 13677</tr>
13778<tr> 13678<tr>
 13679<td>SCROLLKEEPER_REBUILDDB</td>
13779<td>SCROLLKEEPER_UPDATEDB</td> 13680<td>SCROLLKEEPER_UPDATEDB</td>
13780<td>SDIST_PAWD</td> 
13781</tr> 13681</tr>
13782<tr> 13682<tr>
 13683<td>SDIST_PAWD</td>
13783<td>SDL12_TYPE</td> 13684<td>SDL12_TYPE</td>
13784<td>SERIAL_DEVICES</td> 
13785</tr> 13685</tr>
13786<tr> 13686<tr>
 13687<td>SERIAL_DEVICES</td>
13787<td>SETGIDGAME</td> 13688<td>SETGIDGAME</td>
13788<td>SETGID_GAMES_PERMS</td> 
13789</tr> 13689</tr>
13790<tr> 13690<tr>
 13691<td>SETGID_GAMES_PERMS</td>
13791<td>SETUID_ROOT_PERMS</td> 13692<td>SETUID_ROOT_PERMS</td>
13792<td>SH</td> 
13793</tr> 13693</tr>
13794<tr> 13694<tr>
 13695<td>SH</td>
13795<td>SHLIB</td> 13696<td>SHLIB</td>
13796<td>SHORTNAME</td> 
13797</tr> 13697</tr>
13798<tr> 13698<tr>
13799<td>SIGN_PACKAGES</td> 13699<td>SIGN_PACKAGES</td>
13800<td>SILC_CLIENT_WITH_PERL</td> 13700<td>SILC_CLIENT_WITH_PERL</td>
13801</tr> 13701</tr>
13802<tr> 13702<tr>
13803<td>SITE_SPECIFIC_PKGS</td> 13703<td>SITE_SPECIFIC_PKGS</td>
13804<td>SKIP_DEPENDS</td> 13704<td>SKIP_DEPENDS</td>
13805</tr> 13705</tr>
13806<tr> 13706<tr>
13807<td>SMF_INSTANCES</td> 13707<td>SMF_INSTANCES</td>
13808<td>SMF_MANIFEST</td> 13708<td>SMF_MANIFEST</td>
13809</tr> 13709</tr>
13810<tr> 13710<tr>
13811<td>SMF_METHODS</td> 13711<td>SMF_METHODS</td>
13812<td>SMF_METHOD_SHELL</td> 13712<td>SMF_METHOD_SHELL</td>
13813</tr> 13713</tr>
13814<tr> 13714<tr>
13815<td>SMF_METHOD_SRC</td> 13715<td>SMF_METHOD_SRC</td>
13816<td>SMF_NAME</td> 13716<td>SMF_NAME</td>
13817</tr> 13717</tr>
13818<tr> 13718<tr>
13819<td>SMF_PREFIX</td> 13719<td>SMF_PREFIX</td>
13820<td>SMF_SRCDIR</td> 13720<td>SMF_SRCDIR</td>
13821</tr> 13721</tr>
13822<tr> 13722<tr>
13823<td>SNIPROXY_GROUP</td> 13723<td>SNIPROXY_GROUP</td>
13824<td>SNIPROXY_USER</td> 13724<td>SNIPROXY_USER</td>
13825</tr> 13725</tr>
13826<tr> 13726<tr>
13827<td>SOURCE_BUFFSIZE</td> 13727<td>SOURCE_BUFFSIZE</td>
13828<td>SPECIAL_PERMS</td> 13728<td>SPECIAL_PERMS</td>
13829</tr> 13729</tr>
13830<tr> 13730<tr>
13831<td>SPECIFIC_PKGS</td> 13731<td>SPECIFIC_PKGS</td>
13832<td>SSH_SUID</td> 13732<td>SSH_SUID</td>
13833</tr> 13733</tr>
13834<tr> 13734<tr>
13835<td>SSP_SUPPORTED</td> 13735<td>SSP_SUPPORTED</td>
13836<td>SSYNC_PAWD</td> 13736<td>SSYNC_PAWD</td>
13837</tr> 13737</tr>
13838<tr> 13738<tr>
13839<td>STEP_MSG</td> 13739<td>STEP_MSG</td>
13840<td>STRIP</td> 13740<td>STRIP</td>
13841</tr> 13741</tr>
13842<tr> 13742<tr>
13843<td>STRIP_DBG</td> 13743<td>STRIP_DBG</td>
13844<td>STRIP_DEBUG</td> 13744<td>STRIP_DEBUG</td>
13845</tr> 13745</tr>
13846<tr> 13746<tr>
13847<td>STRIP_DEBUG_SUPPORTED</td> 13747<td>STRIP_DEBUG_SUPPORTED</td>
13848<td>STRIP_FILES_SKIP</td> 13748<td>STRIP_FILES_SKIP</td>
13849</tr> 13749</tr>
13850<tr> 13750<tr>
13851<td>SU</td> 13751<td>SU</td>
13852<td>SUBDIR</td> 13752<td>SUBDIR</td>
13853</tr> 13753</tr>
13854<tr> 13754<tr>
13855<td>SUBST</td> 13755<td>SUBST</td>
13856<td>SUBST_CLASSES</td> 13756<td>SUBST_CLASSES</td>
13857</tr> 13757</tr>
13858<tr> 13758<tr>
13859<td>SUBST_FILES</td> 13759<td>SUBST_FILES</td>
13860<td>SUBST_FILTER_CMD</td> 13760<td>SUBST_FILTER_CMD</td>
13861</tr> 13761</tr>
13862<tr> 13762<tr>
13863<td>SUBST_MESSAGE</td> 13763<td>SUBST_MESSAGE</td>
13864<td>SUBST_NOOP_OK</td> 13764<td>SUBST_NOOP_OK</td>
13865</tr> 13765</tr>
13866<tr> 13766<tr>
13867<td>SUBST_SED</td> 13767<td>SUBST_SED</td>
13868<td>SUBST_SHOW_DIFF</td> 13768<td>SUBST_SHOW_DIFF</td>
13869</tr> 13769</tr>
13870<tr> 13770<tr>
13871<td>SUBST_SKIP_TEXT_CHECK</td> 13771<td>SUBST_SKIP_TEXT_CHECK</td>
13872<td>SUBST_STAGE</td> 13772<td>SUBST_STAGE</td>
13873</tr> 13773</tr>
13874<tr> 13774<tr>
13875<td>SUBST_VARS</td> 13775<td>SUBST_VARS</td>
13876<td>SUNWSPROBASE</td> 13776<td>SUNWSPROBASE</td>
13877</tr> 13777</tr>
13878<tr> 13778<tr>
13879<td>SUSE_PREFER</td> 13779<td>SUSE_PREFER</td>
13880<td>SU_CMD</td> 13780<td>SU_CMD</td>
13881</tr> 13781</tr>
13882<tr> 13782<tr>
13883<td>SVN_EXTRACTDIR</td> 
13884<td>SVN_REPO</td> 
13885</tr> 
13886<tr> 
13887<td>SVN_REPOSITORIES</td> 
13888<td>SVN_REVISION</td> 
13889</tr> 
13890<tr> 
13891<td>SYSCONFBASE</td> 13783<td>SYSCONFBASE</td>
13892<td>TARGET_ARCH</td> 13784<td>TARGET_ARCH</td>
13893</tr> 13785</tr>
13894<tr> 13786<tr>
13895<td>TBL</td> 13787<td>TBL</td>
13896<td>TERMCAP_TYPE</td> 13788<td>TERMCAP_TYPE</td>
13897</tr> 13789</tr>
13898<tr> 13790<tr>
13899<td>TERMINFO_DEFAULT</td> 13791<td>TERMINFO_DEFAULT</td>
13900<td>TERMINFO_TYPE</td> 13792<td>TERMINFO_TYPE</td>
13901</tr> 13793</tr>
13902<tr> 13794<tr>
13903<td>TEST</td> 13795<td>TEST</td>
13904<td>TEST_DEPENDS</td> 13796<td>TEST_DEPENDS</td>
13905</tr> 13797</tr>
13906<tr> 13798<tr>
13907<td>TEST_DIRS</td> 13799<td>TEST_DIRS</td>
13908<td>TEST_ENV</td> 13800<td>TEST_ENV</td>
13909</tr> 13801</tr>
13910<tr> 13802<tr>
13911<td>TEST_ENV_SHELL</td> 13803<td>TEST_ENV_SHELL</td>
13912<td>TEST_MAKE_CMD</td> 13804<td>TEST_MAKE_CMD</td>
13913</tr> 13805</tr>
13914<tr> 13806<tr>
13915<td>TEST_MAKE_FLAGS</td> 13807<td>TEST_MAKE_FLAGS</td>
13916<td>TEST_TARGET</td> 13808<td>TEST_TARGET</td>
13917</tr> 13809</tr>
13918<tr> 13810<tr>
13919<td>TEXLIVE_IGNORE_PATTERNS</td> 13811<td>TEXLIVE_IGNORE_PATTERNS</td>
13920<td>TEXLIVE_REV</td> 13812<td>TEXLIVE_REV</td>
13921</tr> 13813</tr>
13922<tr> 13814<tr>
13923<td>TEXLIVE_UNVERSIONED</td> 13815<td>TEXLIVE_UNVERSIONED</td>
13924<td>TEXMFSITE</td> 13816<td>TEXMFSITE</td>
13925</tr> 13817</tr>
13926<tr> 13818<tr>
13927<td>TEX_FORMATS</td> 13819<td>TEX_FORMATS</td>
13928<td>TEX_HYPHEN_DAT</td> 13820<td>TEX_HYPHEN_DAT</td>
13929</tr> 13821</tr>
13930<tr> 13822<tr>
13931<td>TEX_HYPHEN_DEF</td> 13823<td>TEX_HYPHEN_DEF</td>
13932<td>TEX_TEXMF_DIRS</td> 13824<td>TEX_TEXMF_DIRS</td>
13933</tr> 13825</tr>
13934<tr> 13826<tr>
13935<td>THTTPD_LOG_FACILITY</td> 13827<td>THTTPD_LOG_FACILITY</td>
13936<td>TINYDYN_USER</td> 13828<td>TINYDYN_USER</td>
13937</tr> 13829</tr>
13938<tr> 13830<tr>
13939<td>TLSWRAPPER_CHROOT</td> 13831<td>TLSWRAPPER_CHROOT</td>
13940<td>TO</td> 13832<td>TO</td>
13941</tr> 13833</tr>
13942<tr> 13834<tr>
13943<td>TOOLS_ALIASES</td> 13835<td>TOOLS_ALIASES</td>
13944<td>TOOLS_ALWAYS_WRAP</td> 13836<td>TOOLS_ALWAYS_WRAP</td>
13945</tr> 13837</tr>
13946<tr> 13838<tr>
13947<td>TOOLS_ARGS</td> 13839<td>TOOLS_ARGS</td>
13948<td>TOOLS_BROKEN</td> 13840<td>TOOLS_BROKEN</td>
13949</tr> 13841</tr>
13950<tr> 13842<tr>
13951<td>TOOLS_CMD</td> 13843<td>TOOLS_CMD</td>
13952<td>TOOLS_CMDLINE_SED</td> 13844<td>TOOLS_CMDLINE_SED</td>
13953</tr> 13845</tr>
13954<tr> 13846<tr>
13955<td>TOOLS_CREATE</td> 13847<td>TOOLS_CREATE</td>
13956<td>TOOLS_CROSS_DESTDIR</td> 13848<td>TOOLS_CROSS_DESTDIR</td>
13957</tr> 13849</tr>
13958<tr> 13850<tr>
13959<td>TOOLS_DIR</td> 13851<td>TOOLS_DIR</td>
13960<td>TOOLS_FAIL</td> 13852<td>TOOLS_FAIL</td>
13961</tr> 13853</tr>
13962<tr> 13854<tr>
13963<td>TOOLS_GNU_MISSING</td> 13855<td>TOOLS_GNU_MISSING</td>
13964<td>TOOLS_LDCONFIG</td> 13856<td>TOOLS_LDCONFIG</td>
13965</tr> 13857</tr>
13966<tr> 13858<tr>
13967<td>TOOLS_NOOP</td> 13859<td>TOOLS_NOOP</td>
13968<td>TOOLS_PATH</td> 13860<td>TOOLS_PATH</td>
13969</tr> 13861</tr>
13970<tr> 13862<tr>
13971<td>TOOLS_SCRIPT</td> 13863<td>TOOLS_SCRIPT</td>
13972<td>TOOLS_USE_CROSS_COMPILE</td> 13864<td>TOOLS_USE_CROSS_COMPILE</td>
13973</tr> 13865</tr>
13974<tr> 13866<tr>
13975<td>TOOL_DEPENDS</td> 13867<td>TOOL_DEPENDS</td>
13976<td>TTF_FONTDIR</td> 
13977</tr> 
13978<tr> 
13979<td>TTF_FONTS_DIR</td> 13868<td>TTF_FONTS_DIR</td>
13980<td>TYPE</td> 
13981</tr> 13869</tr>
13982<tr> 13870<tr>
 13871<td>TYPE</td>
13983<td>UAC_REQD_EXECS</td> 13872<td>UAC_REQD_EXECS</td>
13984<td>UCSPI_SSL_GROUP</td> 
13985</tr> 13873</tr>
13986<tr> 13874<tr>
 13875<td>UCSPI_SSL_GROUP</td>
13987<td>UCSPI_SSL_USER</td> 13876<td>UCSPI_SSL_USER</td>
13988<td>UNLIMIT_RESOURCES</td> 
13989</tr> 13877</tr>
13990<tr> 13878<tr>
 13879<td>UNLIMIT_RESOURCES</td>
13991<td>UNPRIVILEGED</td> 13880<td>UNPRIVILEGED</td>
13992<td>UNPRIVILEGED_GROUP</td> 
13993</tr> 13881</tr>
13994<tr> 13882<tr>
 13883<td>UNPRIVILEGED_GROUP</td>
13995<td>UNPRIVILEGED_GROUPS</td> 13884<td>UNPRIVILEGED_GROUPS</td>
13996<td>UNPRIVILEGED_USER</td> 
13997</tr> 13885</tr>
13998<tr> 13886<tr>
 13887<td>UNPRIVILEGED_USER</td>
13999<td>UNWRAP_FILES</td> 13888<td>UNWRAP_FILES</td>
14000<td>UNWRAP_PATTERNS</td> 
14001</tr> 13889</tr>
14002<tr> 13890<tr>
 13891<td>UNWRAP_PATTERNS</td>
14003<td>UPDATE_GEMSPEC</td> 13892<td>UPDATE_GEMSPEC</td>
14004<td>UPDATE_TARGET</td> 
14005</tr> 13893</tr>
14006<tr> 13894<tr>
 13895<td>UPDATE_TARGET</td>
14007<td>URI</td> 13896<td>URI</td>
14008<td>USERGROUP_PHASE</td> 
14009</tr> 13897</tr>
14010<tr> 13898<tr>
 13899<td>USERGROUP_PHASE</td>
14011<td>USERPPP_GROUP</td> 13900<td>USERPPP_GROUP</td>
14012<td>USER_SPECIFIC_PKGS</td> 
14013</tr> 13901</tr>
14014<tr> 13902<tr>
 13903<td>USER_SPECIFIC_PKGS</td>
14015<td>USE_ABI_DEPENDS</td> 13904<td>USE_ABI_DEPENDS</td>
14016<td>USE_APR</td> 
14017</tr> 13905</tr>
14018<tr> 13906<tr>
 13907<td>USE_APR</td>
14019<td>USE_BSD_MAKEFILE</td> 13908<td>USE_BSD_MAKEFILE</td>
14020<td>USE_BUILTIN</td> 
14021</tr> 13909</tr>
14022<tr> 13910<tr>
 13911<td>USE_BUILTIN</td>
14023<td>USE_CROSS_COMPILE</td> 13912<td>USE_CROSS_COMPILE</td>
14024<td>USE_CURSES</td> 
14025</tr> 13913</tr>
14026<tr> 13914<tr>
 13915<td>USE_CURSES</td>
14027<td>USE_CWRAPPERS</td> 13916<td>USE_CWRAPPERS</td>
14028<td>USE_DB185</td> 
14029</tr> 13917</tr>
14030<tr> 13918<tr>
 13919<td>USE_DB185</td>
14031<td>USE_FEATURES</td> 13920<td>USE_FEATURES</td>
14032<td>USE_GAMESGROUP</td> 
14033</tr> 13921</tr>
14034<tr> 13922<tr>
 13923<td>USE_GAMESGROUP</td>
14035<td>USE_GCC_RUNTIME</td> 13924<td>USE_GCC_RUNTIME</td>
14036<td>USE_IMAKE</td> 
14037</tr> 13925</tr>
14038<tr> 13926<tr>
 13927<td>USE_IMAKE</td>
14039<td>USE_JAVA</td> 13928<td>USE_JAVA</td>
14040<td>USE_JAVA2</td> 
14041</tr> 13929</tr>
14042<tr> 13930<tr>
 13931<td>USE_JAVA2</td>
14043<td>USE_LANGUAGES</td> 13932<td>USE_LANGUAGES</td>
14044<td>USE_LIBTOOL</td> 
14045</tr> 13933</tr>
14046<tr> 13934<tr>
 13935<td>USE_LIBTOOL</td>
14047<td>USE_NATIVE_GCC</td> 13936<td>USE_NATIVE_GCC</td>
14048<td>USE_NETBSD_REPO</td> 
14049</tr> 13937</tr>
14050<tr> 13938<tr>
 13939<td>USE_NETBSD_REPO</td>
14051<td>USE_PKGSRC_GCC</td> 13940<td>USE_PKGSRC_GCC</td>
14052<td>USE_PKGSRC_GCC_RUNTIME</td> 
14053</tr> 13941</tr>
14054<tr> 13942<tr>
 13943<td>USE_PKGSRC_GCC_RUNTIME</td>
14055<td>USE_PKGTASKS</td> 13944<td>USE_PKGTASKS</td>
14056<td>USE_PKG_ADMIN_DIGEST</td> 
14057</tr> 13945</tr>
14058<tr> 13946<tr>
 13947<td>USE_PKG_ADMIN_DIGEST</td>
14059<td>USE_RUBY_EXTCONF</td> 13948<td>USE_RUBY_EXTCONF</td>
14060<td>USE_RUBY_INSTALL</td> 
14061</tr> 13949</tr>
14062<tr> 13950<tr>
 13951<td>USE_RUBY_INSTALL</td>
14063<td>USE_RUBY_SETUP</td> 13952<td>USE_RUBY_SETUP</td>
14064<td>USE_RUBY_SETUP_PKG</td> 
14065</tr> 13953</tr>
14066<tr> 13954<tr>
 13955<td>USE_RUBY_SETUP_PKG</td>
14067<td>USE_TOOLS</td> 13956<td>USE_TOOLS</td>
14068<td>UUCP_GROUP</td> 
14069</tr> 13957</tr>
14070<tr> 13958<tr>
 13959<td>UUCP_GROUP</td>
14071<td>UUCP_USER</td> 13960<td>UUCP_USER</td>
14072<td>VARBASE</td> 
14073</tr> 13961</tr>
14074<tr> 13962<tr>
 13963<td>VARBASE</td>
14075<td>VARNAME</td> 13964<td>VARNAME</td>
14076<td>VIM_EXTRA_OPTS</td> 
14077</tr> 13965</tr>
14078<tr> 13966<tr>
 13967<td>VIM_EXTRA_OPTS</td>
14079<td>WARNING_MSG</td> 13968<td>WARNING_MSG</td>
14080<td>WCALC_CGIDIR</td> 
14081</tr> 13969</tr>
14082<tr> 13970<tr>
 13971<td>WCALC_CGIDIR</td>
14083<td>WCALC_CGIPATH</td> 13972<td>WCALC_CGIPATH</td>
14084<td>WCALC_HTMLDIR</td> 
14085</tr> 13973</tr>
14086<tr> 13974<tr>
 13975<td>WCALC_HTMLDIR</td>
14087<td>WCALC_HTMLPATH</td> 13976<td>WCALC_HTMLPATH</td>
14088<td>WDM_MANAGERS</td> 
14089</tr> 13977</tr>
14090<tr> 13978<tr>
 13979<td>WDM_MANAGERS</td>
14091<td>WRAPPER_CC</td> 13980<td>WRAPPER_CC</td>
14092<td>WRAPPER_REORDER_CMDS</td> 
14093</tr> 13981</tr>
14094<tr> 13982<tr>
 13983<td>WRAPPER_REORDER_CMDS</td>
14095<td>WRKDIR</td> 13984<td>WRKDIR</td>
14096<td>WRKDIR_BASENAME</td> 
14097</tr> 13985</tr>
14098<tr> 13986<tr>
 13987<td>WRKDIR_BASENAME</td>
14099<td>WRKDIR_LOCKTYPE</td> 13988<td>WRKDIR_LOCKTYPE</td>
14100<td>WRKLOG</td> 
14101</tr> 13989</tr>
14102<tr> 13990<tr>
 13991<td>WRKLOG</td>
14103<td>WRKOBJDIR</td> 13992<td>WRKOBJDIR</td>
14104<td>WRKSRC</td> 
14105</tr> 13993</tr>
14106<tr> 13994<tr>
 13995<td>WRKSRC</td>
14107<td>X10_PORT</td> 13996<td>X10_PORT</td>
14108<td>X11</td> 
14109</tr> 13997</tr>
14110<tr> 13998<tr>
 13999<td>X11</td>
14111<td>X11BASE</td> 14000<td>X11BASE</td>
14112<td>X11_PKGSRCDIR</td> 
14113</tr> 14001</tr>
14114<tr> 14002<tr>
 14003<td>X11_PKGSRCDIR</td>
14115<td>X11_TYPE</td> 14004<td>X11_TYPE</td>
14116<td>X509_CERTIFICATE</td> 
14117</tr> 14005</tr>
14118<tr> 14006<tr>
 14007<td>X509_CERTIFICATE</td>
14119<td>X509_KEY</td> 14008<td>X509_KEY</td>
14120<td>XAW_TYPE</td> 
14121</tr> 14009</tr>
14122<tr> 14010<tr>
 14011<td>XAW_TYPE</td>
14123<td>XLOCK_DEFAULT_MODE</td> 14012<td>XLOCK_DEFAULT_MODE</td>
14124<td>XMKMF</td> 
14125</tr> 14013</tr>
14126<tr> 14014<tr>
 14015<td>XMKMF</td>
14127<td>XMKMF_FLAGS</td> 14016<td>XMKMF_FLAGS</td>
14128<td>XXX</td> 
14129</tr> 14017</tr>
14130<tr> 14018<tr>
14131<td>XXXX</td> 14019<td>XXX</td>
14132<td>YES</td> 14020<td>YES</td>
14133</tr> 14021</tr>
14134<tr> 14022<tr>
14135<td>ZSH_STATIC</td> 14023<td>ZSH_STATIC</td>
14136<td>__stdc__</td> 14024<td>__stdc__</td>
14137</tr> 14025</tr>
14138<tr> 14026<tr>
14139<td>_vargroups</td> 14027<td>_vargroups</td>
14140<td>accept</td> 14028<td>accept</td>
14141</tr> 14029</tr>
14142<tr> 14030<tr>
14143<td>acquire-localbase-lock</td> 14031<td>acquire-localbase-lock</td>
14144<td>acquire-lock</td> 14032<td>acquire-lock</td>
14145</tr> 14033</tr>
14146<tr> 14034<tr>
14147<td>add</td> 14035<td>add</td>
14148<td>administrator</td> 14036<td>administrator</td>
14149</tr> 14037</tr>
14150<tr> 14038<tr>
14151<td>alloca</td> 14039<td>alloca</td>
14152<td>alternatives</td> 14040<td>alternatives</td>
14153</tr> 14041</tr>
14154<tr> 14042<tr>
14155<td>aslr</td> 14043<td>aslr</td>
14156<td>asprintf</td> 14044<td>asprintf</td>
14157</tr> 14045</tr>
14158<tr> 14046<tr>
14159<td>atlas</td> 14047<td>atlas</td>
14160<td>autoconf</td> 14048<td>autoconf</td>
14161</tr> 14049</tr>
14162<tr> 14050<tr>
14163<td>automake</td> 14051<td>automake</td>
14164<td>autoreconf</td> 14052<td>autoreconf</td>
14165</tr> 14053</tr>
14166<tr> 14054<tr>
14167<td>awk</td> 14055<td>awk</td>
14168<td>bash</td> 14056<td>bash</td>
14169</tr> 14057</tr>
14170<tr> 14058<tr>
14171<td>big-endian</td> 14059<td>big-endian</td>
14172<td>bin-install</td> 14060<td>bin-install</td>
14173</tr> 14061</tr>
14174<tr> 14062<tr>
14175<td>bind</td> 14063<td>bind</td>
14176<td>binpkg-list</td> 14064<td>binpkg-list</td>
14177</tr> 14065</tr>
14178<tr> 14066<tr>
14179<td>blas</td> 14067<td>blas</td>
14180<td>bootstrap-depends</td> 14068<td>bootstrap-depends</td>
14181</tr> 14069</tr>
14182<tr> 14070<tr>
14183<td>broken</td> 14071<td>broken</td>
14184<td>broken_on_platform</td> 14072<td>broken_on_platform</td>
14185</tr> 14073</tr>
14186<tr> 14074<tr>
14187<td>bsd</td> 14075<td>bsd</td>
14188<td>bsd.prog.mk</td> 14076<td>bsd.prog.mk</td>
14189</tr> 14077</tr>
14190<tr> 14078<tr>
14191<td>build</td> 14079<td>build</td>
14192<td>build-env</td> 14080<td>build-env</td>
14193</tr> 14081</tr>
14194<tr> 14082<tr>
14195<td>buildlink-directories</td> 14083<td>buildlink-directories</td>
14196<td>buildlink-oss-soundcard-h</td> 14084<td>buildlink-oss-soundcard-h</td>
14197</tr> 14085</tr>
14198<tr> 14086<tr>
14199<td>c</td> 14087<td>c</td>
14200<td>c++</td> 14088<td>c++</td>
14201</tr> 14089</tr>
14202<tr> 14090<tr>
14203<td>ccache</td> 14091<td>ccache</td>
14204<td>cce</td> 14092<td>cce</td>
14205</tr> 14093</tr>
14206<tr> 14094<tr>
14207<td>cdefs</td> 14095<td>cdefs</td>
14208<td>ceil</td> 14096<td>ceil</td>
14209</tr> 14097</tr>
14210<tr> 14098<tr>
14211<td>changes</td> 14099<td>changes</td>
14212<td>changes-entry</td> 14100<td>changes-entry</td>
14213</tr> 14101</tr>
14214<tr> 14102<tr>
14215<td>changes-entry-noupdate</td> 14103<td>changes-entry-noupdate</td>
14216<td>check</td> 14104<td>check</td>
14217</tr> 14105</tr>
14218<tr> 14106<tr>
14219<td>check-clean</td> 14107<td>check-clean</td>
14220<td>check-files</td> 14108<td>check-files</td>
14221</tr> 14109</tr>
14222<tr> 14110<tr>
14223<td>check-files-clean</td> 14111<td>check-files-clean</td>
14224<td>check-vulnerable</td> 14112<td>check-vulnerable</td>
14225</tr> 14113</tr>
14226<tr> 14114<tr>
14227<td>checksum</td> 14115<td>checksum</td>
14228<td>checksum-phase</td> 14116<td>checksum-phase</td>
14229</tr> 14117</tr>
14230<tr> 14118<tr>
14231<td>clean</td> 14119<td>clean</td>
14232<td>clean-depends</td> 14120<td>clean-depends</td>
14233</tr> 14121</tr>
14234<tr> 14122<tr>
14235<td>cleandir</td> 14123<td>cleandir</td>
14236<td>commit</td> 14124<td>commit</td>
14237</tr> 14125</tr>
14238<tr> 14126<tr>
14239<td>commit-changes-entry</td> 14127<td>commit-changes-entry</td>
14240<td>compact</td> 14128<td>compact</td>
14241</tr> 14129</tr>
14242<tr> 14130<tr>
14243<td>compiler</td> 14131<td>compiler</td>
14244<td>conf</td> 14132<td>conf</td>
14245</tr> 14133</tr>
14246<tr> 14134<tr>
14247<td>config.guess</td> 14135<td>config.guess</td>
14248<td>config.sub</td> 14136<td>config.sub</td>
14249</tr> 14137</tr>
14250<tr> 14138<tr>
14251<td>configuration</td> 14139<td>configuration</td>
14252<td>configure</td> 14140<td>configure</td>
14253</tr> 14141</tr>
14254<tr> 14142<tr>
14255<td>configure-env</td> 14143<td>configure-env</td>
14256<td>configure-help</td> 14144<td>configure-help</td>
14257</tr> 14145</tr>
14258<tr> 14146<tr>
14259<td>configure_args</td> 14147<td>configure_args</td>
14260<td>connect</td> 14148<td>connect</td>
14261</tr> 14149</tr>
14262<tr> 14150<tr>
14263<td>cos</td> 14151<td>cos</td>
14264<td>cputime</td> 14152<td>cputime</td>
14265</tr> 14153</tr>
14266<tr> 14154<tr>
14267<td>create-usergroup</td> 14155<td>create-usergroup</td>
14268<td>csh</td> 14156<td>csh</td>
14269</tr> 14157</tr>
14270<tr> 14158<tr>
14271<td>ctf</td> 14159<td>ctf</td>
14272<td>cvs</td> 
14273</tr> 
14274<tr> 
14275<td>debug</td> 14160<td>debug</td>
14276<td>declaration</td> 
14277</tr> 14161</tr>
14278<tr> 14162<tr>
 14163<td>declaration</td>
14279<td>declare</td> 14164<td>declare</td>
14280<td>defined</td> 
14281</tr> 14165</tr>
14282<tr> 14166<tr>
 14167<td>defined</td>
14283<td>depend</td> 14168<td>depend</td>
14284<td>dependencies</td> 
14285</tr> 14169</tr>
14286<tr> 14170<tr>
 14171<td>dependencies</td>
14287<td>depends</td> 14172<td>depends</td>
14288<td>depends-checksum</td> 
14289</tr> 14173</tr>
14290<tr> 14174<tr>
 14175<td>depends-checksum</td>
14291<td>depends-fetch</td> 14176<td>depends-fetch</td>
14292<td>deps</td> 
14293</tr> 14177</tr>
14294<tr> 14178<tr>
 14179<td>deps</td>
14295<td>describe</td> 14180<td>describe</td>
14296<td>destdir</td> 
14297</tr> 14181</tr>
14298<tr> 14182<tr>
 14183<td>destdir</td>
14299<td>disable</td> 14184<td>disable</td>
14300<td>distclean</td> 
14301</tr> 14185</tr>
14302<tr> 14186<tr>
 14187<td>distclean</td>
14303<td>distinfo</td> 14188<td>distinfo</td>
14304<td>dl</td> 
14305</tr> 14189</tr>
14306<tr> 14190<tr>
 14191<td>dl</td>
14307<td>dlopen</td> 14192<td>dlopen</td>
14308<td>do-buildlink</td> 
14309</tr> 14193</tr>
14310<tr> 14194<tr>
 14195<td>do-buildlink</td>
14311<td>do-clean</td> 14196<td>do-clean</td>
14312<td>do-configure</td> 
14313</tr> 14197</tr>
14314<tr> 14198<tr>
 14199<td>do-configure</td>
14315<td>do-configure-post-hook</td> 14200<td>do-configure-post-hook</td>
14316<td>do-extract</td> 
14317</tr> 14201</tr>
14318<tr> 14202<tr>
 14203<td>do-extract</td>
14319<td>do-fetch</td> 14204<td>do-fetch</td>
14320<td>do-install</td> 
14321</tr> 14205</tr>
14322<tr> 14206<tr>
 14207<td>do-install</td>
14323<td>emul</td> 14208<td>emul</td>
14324<td>emul-distinfo</td> 
14325</tr> 14209</tr>
14326<tr> 14210<tr>
 14211<td>emul-distinfo</td>
14327<td>emul-fetch</td> 14212<td>emul-fetch</td>
14328<td>emulation</td> 
14329</tr> 14213</tr>
14330<tr> 14214<tr>
 14215<td>emulation</td>
14331<td>emulator</td> 14216<td>emulator</td>
14332<td>enable</td> 
14333</tr> 14217</tr>
14334<tr> 14218<tr>
 14219<td>enable</td>
14335<td>endian</td> 14220<td>endian</td>
14336<td>endif</td> 
14337</tr> 14221</tr>
14338<tr> 14222<tr>
14339<td>enomem</td> 14223<td>enomem</td>
14340<td>ensurepip</td> 14224<td>ensurepip</td>
14341</tr> 14225</tr>
14342<tr> 14226<tr>
14343<td>err</td> 14227<td>err</td>
14344<td>errx</td> 14228<td>errx</td>
14345</tr> 14229</tr>
14346<tr> 14230<tr>
14347<td>etc</td> 14231<td>etc</td>
14348<td>exp</td> 14232<td>exp</td>
14349</tr> 14233</tr>
14350<tr> 14234<tr>
14351<td>extract-rpm</td> 14235<td>extract-rpm</td>
14352<td>fabs</td> 14236<td>fabs</td>
14353</tr> 14237</tr>
14354<tr> 14238<tr>
14355<td>feature</td> 14239<td>feature</td>
14356<td>features</td> 14240<td>features</td>
14357</tr> 14241</tr>
14358<tr> 14242<tr>
14359<td>fetch</td> 14243<td>fetch</td>
14360<td>fetch-list</td> 14244<td>fetch-list</td>
14361</tr> 14245</tr>
14362<tr> 14246<tr>
14363<td>follows</td> 14247<td>follows</td>
14364<td>forbids</td> 14248<td>forbids</td>
14365</tr> 14249</tr>
14366<tr> 14250<tr>
14367<td>form</td> 14251<td>form</td>
14368<td>format</td> 14252<td>format</td>
14369</tr> 14253</tr>
14370<tr> 14254<tr>
14371<td>fortify</td> 14255<td>fortify</td>
14372<td>fortify_source</td> 14256<td>fortify_source</td>
14373</tr> 14257</tr>
14374<tr> 14258<tr>
14375<td>fossil</td> 
14376<td>friend</td> 14259<td>friend</td>
14377</tr> 
14378<tr> 
14379<td>fts</td> 14260<td>fts</td>
14380<td>fts_close</td> 
14381</tr> 14261</tr>
14382<tr> 14262<tr>
 14263<td>fts_close</td>
14383<td>fts_open</td> 14264<td>fts_open</td>
14384<td>fts_read</td> 
14385</tr> 14265</tr>
14386<tr> 14266<tr>
 14267<td>fts_read</td>
14387<td>fts_set</td> 14268<td>fts_set</td>
14388<td>gcc</td> 
14389</tr> 14269</tr>
14390<tr> 14270<tr>
 14271<td>gcc</td>
14391<td>gethostbyaddr</td> 14272<td>gethostbyaddr</td>
14392<td>gethostbyname</td> 
14393</tr> 14273</tr>
14394<tr> 14274<tr>
 14275<td>gethostbyname</td>
14395<td>gethostbyname2</td> 14276<td>gethostbyname2</td>
14396<td>getopt_long</td> 
14397</tr> 14277</tr>
14398<tr> 14278<tr>
 14279<td>getopt_long</td>
14399<td>getprogname</td> 14280<td>getprogname</td>
14400<td>getservbyname</td> 
14401</tr> 14281</tr>
14402<tr> 14282<tr>
 14283<td>getservbyname</td>
14403<td>getservbyport</td> 14284<td>getservbyport</td>
14404<td>getservent</td> 
14405</tr> 14285</tr>
14406<tr> 14286<tr>
 14287<td>getservent</td>
14407<td>gettext</td> 14288<td>gettext</td>
14408<td>git</td> 
14409</tr> 14289</tr>
14410<tr> 14290<tr>
14411<td>github</td> 14291<td>github</td>
14412<td>gitlab</td> 14292<td>gitlab</td>
14413</tr> 14293</tr>
14414<tr> 14294<tr>
14415<td>glob</td> 14295<td>glob</td>
14416<td>gnu</td> 14296<td>gnu</td>
14417</tr> 14297</tr>
14418<tr> 14298<tr>
14419<td>gnu_configure_strict</td> 14299<td>gnu_configure_strict</td>
14420<td>go</td> 14300<td>go</td>
14421</tr> 14301</tr>
14422<tr> 14302<tr>
14423<td>go-deps</td> 14303<td>go-deps</td>
14424<td>golang</td> 14304<td>golang</td>
14425</tr> 14305</tr>
14426<tr> 14306<tr>
14427<td>guess-license</td> 14307<td>guess-license</td>
14428<td>hashbang</td> 14308<td>hashbang</td>
14429</tr> 14309</tr>
14430<tr> 14310<tr>
14431<td>heimdal</td> 14311<td>heimdal</td>
14432<td>help</td> 14312<td>help</td>
14433</tr> 14313</tr>
14434<tr> 14314<tr>
14435<td>hg</td> 
14436<td>imake</td> 14315<td>imake</td>
14437</tr> 
14438<tr> 
14439<td>increment</td> 14316<td>increment</td>
14440<td>indirect</td> 
14441</tr> 14317</tr>
14442<tr> 14318<tr>
 14319<td>indirect</td>
14443<td>inet_aton</td> 14320<td>inet_aton</td>
14444<td>interp</td> 
14445</tr> 14321</tr>
14446<tr> 14322<tr>
 14323<td>interp</td>
14447<td>interpreter</td> 14324<td>interpreter</td>
14448<td>intl</td> 
14449</tr> 14325</tr>
14450<tr> 14326<tr>
 14327<td>intl</td>
14451<td>ip4</td> 14328<td>ip4</td>
14452<td>ip6</td> 
14453</tr> 14329</tr>
14454<tr> 14330<tr>
 14331<td>ip6</td>
14455<td>ipv4</td> 14332<td>ipv4</td>
14456<td>ipv6</td> 
14457</tr> 14333</tr>
14458<tr> 14334<tr>
 14335<td>ipv6</td>
14459<td>iso</td> 14336<td>iso</td>
14460<td>kerberos</td> 
14461</tr> 14337</tr>
14462<tr> 14338<tr>
 14339<td>kerberos</td>
14463<td>krb</td> 14340<td>krb</td>
14464<td>krb5</td> 
14465</tr> 14341</tr>
14466<tr> 14342<tr>
 14343<td>krb5</td>
14467<td>ksh</td> 14344<td>ksh</td>
14468<td>lapack</td> 
14469</tr> 14345</tr>
14470<tr> 14346<tr>
 14347<td>lapack</td>
14471<td>latex</td> 14348<td>latex</td>
14472<td>libintl_bindtextdomain</td> 
14473</tr> 14349</tr>
14474<tr> 14350<tr>
 14351<td>libintl_bindtextdomain</td>
14475<td>libintl_gettext</td> 14352<td>libintl_gettext</td>
14476<td>libintl_textdomain</td> 
14477</tr> 14353</tr>
14478<tr> 14354<tr>
 14355<td>libintl_textdomain</td>
14479<td>libnbcompat</td> 14356<td>libnbcompat</td>
14480<td>libs</td> 
14481</tr> 14357</tr>
14482<tr> 14358<tr>
 14359<td>libs</td>
14483<td>libtool</td> 14360<td>libtool</td>
14484<td>licence</td> 
14485</tr> 14361</tr>
14486<tr> 14362<tr>
 14363<td>licence</td>
14487<td>license</td> 14364<td>license</td>
14488<td>lintl</td> 
14489</tr> 14365</tr>
14490<tr> 14366<tr>
 14367<td>lintl</td>
14491<td>little-endian</td> 14368<td>little-endian</td>
14492<td>lock</td> 
14493</tr> 14369</tr>
14494<tr> 14370<tr>
 14371<td>lock</td>
14495<td>locking</td> 14372<td>locking</td>
14496<td>lua</td> 
14497</tr> 14373</tr>
14498<tr> 14374<tr>
 14375<td>lua</td>
14499<td>lvalue</td> 14376<td>lvalue</td>
14500<td>make</td> 
14501</tr> 14377</tr>
14502<tr> 14378<tr>
 14379<td>make</td>
14503<td>makesum</td> 14380<td>makesum</td>
14504<td>memory</td> 
14505</tr> 14381</tr>
14506<tr> 14382<tr>
14507<td>mercurial</td> 14383<td>memory</td>
14508<td>meta</td> 14384<td>meta</td>
14509</tr> 14385</tr>
14510<tr> 14386<tr>
14511<td>meta-package</td> 14387<td>meta-package</td>
14512<td>meta_package</td> 14388<td>meta_package</td>
14513</tr> 14389</tr>
14514<tr> 14390<tr>
14515<td>mit-krb5</td> 14391<td>mit-krb5</td>
14516<td>mk.conf</td> 14392<td>mk.conf</td>
14517</tr> 14393</tr>
14518<tr> 14394<tr>
14519<td>mkl</td> 14395<td>mkl</td>
14520<td>mount</td> 14396<td>mount</td>
14521</tr> 14397</tr>
14522<tr> 14398<tr>
14523<td>mprotect</td> 14399<td>mprotect</td>
14524<td>mremap</td> 14400<td>mremap</td>
14525</tr> 14401</tr>
14526<tr> 14402<tr>
14527<td>nb</td> 14403<td>nb</td>
14528<td>nbcompat</td> 14404<td>nbcompat</td>
14529</tr> 14405</tr>
14530<tr> 14406<tr>
14531<td>netlib</td> 14407<td>netlib</td>
14532<td>node</td> 14408<td>node</td>
14533</tr> 14409</tr>
14534<tr> 14410<tr>
14535<td>node.js</td> 14411<td>node.js</td>
14536<td>nodejs</td> 14412<td>nodejs</td>
14537</tr> 14413</tr>
14538<tr> 14414<tr>
14539<td>obstack</td> 14415<td>obstack</td>
14540<td>obstack_ptr_grow</td> 14416<td>obstack_ptr_grow</td>
14541</tr> 14417</tr>
14542<tr> 14418<tr>
14543<td>occurs</td> 14419<td>occurs</td>
14544<td>only</td> 14420<td>only</td>
14545</tr> 14421</tr>
14546<tr> 14422<tr>
14547<td>openblas</td> 14423<td>openblas</td>
14548<td>options</td> 14424<td>options</td>
14549</tr> 14425</tr>
14550<tr> 14426<tr>
14551<td>options.mk</td> 14427<td>options.mk</td>
14552<td>order</td> 14428<td>order</td>
14553</tr> 14429</tr>
14554<tr> 14430<tr>
14555<td>override</td> 14431<td>override</td>
14556<td>override-intltool</td> 14432<td>override-intltool</td>
14557</tr> 14433</tr>
14558<tr> 14434<tr>
14559<td>override-message-intltool</td> 14435<td>override-message-intltool</td>
14560<td>package</td> 14436<td>package</td>
14561</tr> 14437</tr>
14562<tr> 14438<tr>
14563<td>parallel</td> 14439<td>parallel</td>
14564<td>path</td> 14440<td>path</td>
14565</tr> 14441</tr>
14566<tr> 14442<tr>
14567<td>pax</td> 14443<td>pax</td>
14568<td>paxctl</td> 14444<td>paxctl</td>
14569</tr> 14445</tr>
14570<tr> 14446<tr>
14571<td>pbulk-index</td> 14447<td>pbulk-index</td>
14572<td>pc</td> 14448<td>pc</td>
14573</tr> 14449</tr>
14574<tr> 14450<tr>
14575<td>perl</td> 14451<td>perl</td>
14576<td>perl5</td> 14452<td>perl5</td>
14577</tr> 14453</tr>
14578<tr> 14454<tr>
14579<td>perms</td> 14455<td>perms</td>
14580<td>php</td> 14456<td>php</td>
14581</tr> 14457</tr>
14582<tr> 14458<tr>
14583<td>pkg-build-options</td> 14459<td>pkg-build-options</td>
14584<td>pkg-config</td> 14460<td>pkg-config</td>
14585</tr> 14461</tr>
14586<tr> 14462<tr>
14587<td>pkg_build_options</td> 14463<td>pkg_build_options</td>
14588<td>platform</td> 14464<td>platform</td>
14589</tr> 14465</tr>
14590<tr> 14466<tr>
14591<td>plist</td> 14467<td>plist</td>
14592<td>post-extract</td> 14468<td>post-extract</td>
14593</tr> 14469</tr>
14594<tr> 14470<tr>
14595<td>post-fetch</td> 14471<td>post-fetch</td>
14596<td>post-wrapper</td> 14472<td>post-wrapper</td>
14597</tr> 14473</tr>
14598<tr> 14474<tr>
14599<td>pre-build-checks-hook</td> 14475<td>pre-build-checks-hook</td>
14600<td>pre-configure</td> 14476<td>pre-configure</td>
14601</tr> 14477</tr>
14602<tr> 14478<tr>
14603<td>pre-configure-checks-hook</td> 14479<td>pre-configure-checks-hook</td>
14604<td>pre-extract</td> 14480<td>pre-extract</td>
14605</tr> 14481</tr>
14606<tr> 14482<tr>
14607<td>pre-fetch</td> 14483<td>pre-fetch</td>
14608<td>print-go-deps</td> 14484<td>print-go-deps</td>
14609</tr> 14485</tr>
14610<tr> 14486<tr>
14611<td>print-plist</td> 14487<td>print-plist</td>
14612<td>print-summary-data</td> 14488<td>print-summary-data</td>
14613</tr> 14489</tr>
14614<tr> 14490<tr>
14615<td>privileged-install-hook</td> 14491<td>privileged-install-hook</td>
14616<td>pypi</td> 14492<td>pypi</td>
14617</tr> 14493</tr>
14618<tr> 14494<tr>
14619<td>python</td> 14495<td>python</td>
14620<td>r</td> 14496<td>r</td>
14621</tr> 14497</tr>
14622<tr> 14498<tr>
14623<td>readme-all</td> 14499<td>readme-all</td>
14624<td>recursive</td> 14500<td>recursive</td>
14625</tr> 14501</tr>
14626<tr> 14502<tr>
14627<td>recv</td> 14503<td>recv</td>
14628<td>recvfrom</td> 14504<td>recvfrom</td>
14629</tr> 14505</tr>
14630<tr> 14506<tr>
14631<td>regcomp</td> 14507<td>regcomp</td>
14632<td>release-localbase-lock</td> 14508<td>release-localbase-lock</td>
14633</tr> 14509</tr>
14634<tr> 14510<tr>
14635<td>release-lock</td> 14511<td>release-lock</td>
14636<td>relro</td> 14512<td>relro</td>
14637</tr> 14513</tr>
14638<tr> 14514<tr>
14639<td>rename</td> 14515<td>rename</td>
14640<td>reorder</td> 14516<td>reorder</td>
14641</tr> 14517</tr>
14642<tr> 14518<tr>
14643<td>replace</td> 14519<td>replace</td>
14644<td>replace_interpreter</td> 14520<td>replace_interpreter</td>
14645</tr> 14521</tr>
14646<tr> 14522<tr>
14647<td>reproducible</td> 14523<td>reproducible</td>
14648<td>resolv</td> 14524<td>resolv</td>
14649</tr> 14525</tr>
14650<tr> 14526<tr>
14651<td>root</td> 14527<td>root</td>
14652<td>ruby</td> 14528<td>ruby</td>
14653</tr> 14529</tr>
14654<tr> 14530<tr>
14655<td>send</td> 14531<td>send</td>
14656<td>sendfile</td> 14532<td>sendfile</td>
14657</tr> 14533</tr>
14658<tr> 14534<tr>
14659<td>sendto</td> 14535<td>sendto</td>
14660<td>setenv</td> 14536<td>setenv</td>
14661</tr> 14537</tr>
14662<tr> 14538<tr>
14663<td>setgid</td> 14539<td>setgid</td>
14664<td>setprogname</td> 14540<td>setprogname</td>
14665</tr> 14541</tr>
14666<tr> 14542<tr>
14667<td>setuid</td> 14543<td>setuid</td>
14668<td>sh</td> 14544<td>sh</td>
14669</tr> 14545</tr>
14670<tr> 14546<tr>
14671<td>shebang</td> 14547<td>shebang</td>
14672<td>show</td> 14548<td>show</td>
14673</tr> 14549</tr>
14674<tr> 14550<tr>
14675<td>show-all</td> 14551<td>show-all</td>
14676<td>show-build-defs</td> 14552<td>show-build-defs</td>
14677</tr> 14553</tr>
14678<tr> 14554<tr>
14679<td>show-depends</td> 14555<td>show-depends</td>
14680<td>show-depends-dirs</td> 14556<td>show-depends-dirs</td>
14681</tr> 14557</tr>
14682<tr> 14558<tr>
14683<td>show-depends-pkgpaths</td> 14559<td>show-depends-pkgpaths</td>
14684<td>show-depends-recursive</td> 14560<td>show-depends-recursive</td>
14685</tr> 14561</tr>
14686<tr> 14562<tr>
14687<td>show-deps</td> 14563<td>show-deps</td>
14688<td>show-distfiles</td> 14564<td>show-distfiles</td>
14689</tr> 14565</tr>
14690<tr> 14566<tr>
14691<td>show-downlevel</td> 14567<td>show-downlevel</td>
14692<td>show-subdir-var</td> 14568<td>show-subdir-var</td>
14693</tr> 14569</tr>
14694<tr> 14570<tr>
14695<td>show-tools</td> 14571<td>show-tools</td>
14696<td>show-var</td> 14572<td>show-var</td>
14697</tr> 14573</tr>
14698<tr> 14574<tr>
14699<td>show-vars</td> 14575<td>show-vars</td>
14700<td>snprintf</td> 14576<td>snprintf</td>
14701</tr> 14577</tr>
14702<tr> 14578<tr>
14703<td>socket</td> 14579<td>socket</td>
14704<td>ssp</td> 14580<td>ssp</td>
14705</tr> 14581</tr>
14706<tr> 14582<tr>
14707<td>st_mode</td> 14583<td>st_mode</td>
14708<td>stage-install</td> 14584<td>stage-install</td>
14709</tr> 14585</tr>
14710<tr> 14586<tr>
14711<td>strcasestr</td> 14587<td>strcasestr</td>
14712<td>strict</td> 14588<td>strict</td>
14713</tr> 14589</tr>
14714<tr> 14590<tr>
14715<td>strip</td> 14591<td>strip</td>
14716<td>strndup</td> 14592<td>strndup</td>
14717</tr> 14593</tr>
14718<tr> 14594<tr>
14719<td>strnlen</td> 14595<td>strnlen</td>
14720<td>strsep</td> 14596<td>strsep</td>
14721</tr> 14597</tr>
14722<tr> 14598<tr>
14723<td>subst</td> 14599<td>subst</td>
14724<td>substitutions</td> 14600<td>substitutions</td>
14725</tr> 14601</tr>
14726<tr> 14602<tr>
14727<td>subversion</td> 
14728<td>sun</td> 14603<td>sun</td>
14729</tr> 
14730<tr> 
14731<td>sunpro</td> 14604<td>sunpro</td>
14732<td>sunwspro</td> 
14733</tr> 14605</tr>
14734<tr> 14606<tr>
14735<td>svn</td> 14607<td>sunwspro</td>
14736<td>symlink</td> 14608<td>symlink</td>
14737</tr> 14609</tr>
14738<tr> 14610<tr>
14739<td>test</td> 14611<td>test</td>
14740<td>test-env</td> 14612<td>test-env</td>
14741</tr> 14613</tr>
14742<tr> 14614<tr>
14743<td>tex</td> 14615<td>tex</td>
14744<td>texlive</td> 14616<td>texlive</td>
14745</tr> 14617</tr>
14746<tr> 14618<tr>
14747<td>tmp</td> 14619<td>tmp</td>
14748<td>tool</td> 14620<td>tool</td>
14749</tr> 14621</tr>
14750<tr> 14622<tr>
14751<td>tools</td> 14623<td>tools</td>
14752<td>tools-libtool-m4-override</td> 14624<td>tools-libtool-m4-override</td>
14753</tr> 14625</tr>
14754<tr> 14626<tr>
14755<td>transitive</td> 14627<td>transitive</td>
14756<td>type</td> 14628<td>type</td>
14757</tr> 14629</tr>
14758<tr> 14630<tr>
14759<td>ulimit</td> 14631<td>ulimit</td>
14760<td>undefined</td> 14632<td>undefined</td>
14761</tr> 14633</tr>
14762<tr> 14634<tr>
14763<td>undo-replace</td> 14635<td>undo-replace</td>
14764<td>unlimit</td> 14636<td>unlimit</td>
14765</tr> 14637</tr>
14766<tr> 14638<tr>
14767<td>unprivileged</td> 14639<td>unprivileged</td>
14768<td>unprivileged-install-hook</td> 14640<td>unprivileged-install-hook</td>
14769</tr> 14641</tr>
14770<tr> 14642<tr>
14771<td>unstripped</td> 14643<td>unstripped</td>
14772<td>update</td> 14644<td>update</td>
14773</tr> 14645</tr>
14774<tr> 14646<tr>
14775<td>upload</td> 14647<td>upload</td>
14776<td>upload-distfiles</td> 14648<td>upload-distfiles</td>
14777</tr> 14649</tr>
14778<tr> 14650<tr>
14779<td>use_tools</td> 14651<td>use_tools</td>
14780<td>user</td> 14652<td>user</td>
14781</tr> 14653</tr>
14782<tr> 14654<tr>
14783<td>utimes</td> 14655<td>utimes</td>
14784<td>vasprintf</td> 14656<td>vasprintf</td>
14785</tr> 14657</tr>
14786<tr> 14658<tr>
14787<td>verbose</td> 14659<td>verbose</td>
14788<td>vsnprintf</td> 14660<td>vsnprintf</td>
14789</tr> 14661</tr>
14790<tr> 14662<tr>
14791<td>warn</td> 14663<td>warn</td>
14792<td>warning</td> 14664<td>warning</td>
14793</tr> 14665</tr>
14794<tr> 14666<tr>
14795<td>warnings</td> 14667<td>warnings</td>
14796<td>warnx</td> 14668<td>warnx</td>
14797</tr> 14669</tr>
14798<tr> 14670<tr>
14799<td>wattr_off</td> 14671<td>wattr_off</td>
14800<td>wattr_on</td> 14672<td>wattr_on</td>
14801</tr> 14673</tr>
14802<tr> 14674<tr>
14803<td>work</td> 14675<td>work</td>
14804<td>wrapper</td> 14676<td>wrapper</td>
14805</tr> 14677</tr>
14806<tr> 14678<tr>
14807<td>wrkdir</td> 14679<td>wrkdir</td>
14808<td> </td> 14680<td> </td>
14809</tr> 14681</tr>
14810</table> 14682</table>
14811</div> 14683</div>
14812<div class="appendix"> 14684<div class="appendix">
14813<div class="titlepage"><div><div><h1 class="title"> 14685<div class="titlepage"><div><div><h1 class="title">
14814<a name="editing"></a>Appendix F. Editing guidelines for the pkgsrc guide</h1></div></div></div> 14686<a name="editing"></a>Appendix F. Editing guidelines for the pkgsrc guide</h1></div></div></div>
14815<div class="toc"> 14687<div class="toc">
14816<p><b>Table of Contents</b></p> 14688<p><b>Table of Contents</b></p>
14817<dl class="toc"> 14689<dl class="toc">
14818<dt><span class="sect1"><a href="#targets">F.1. Make targets</a></span></dt> 14690<dt><span class="sect1"><a href="#targets">F.1. Make targets</a></span></dt>
14819<dt><span class="sect1"><a href="#procedure">F.2. Procedure</a></span></dt> 14691<dt><span class="sect1"><a href="#procedure">F.2. Procedure</a></span></dt>
14820</dl> 14692</dl>
14821</div> 14693</div>
14822<p>This section contains information on editing the pkgsrc 14694<p>This section contains information on editing the pkgsrc
14823 guide itself.</p> 14695 guide itself.</p>
14824<div class="sect1"> 14696<div class="sect1">
14825<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 14697<div class="titlepage"><div><div><h2 class="title" style="clear: both">
14826<a name="targets"></a>F.1. Make targets</h2></div></div></div> 14698<a name="targets"></a>F.1. Make targets</h2></div></div></div>
14827<p>The pkgsrc guide's source code is stored in 14699<p>The pkgsrc guide's source code is stored in
14828 <code class="filename">pkgsrc/doc/guide/files</code>, and several files 14700 <code class="filename">pkgsrc/doc/guide/files</code>, and several files
14829 are created from it:</p> 14701 are created from it:</p>
14830<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 14702<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
14831<li class="listitem"><p><code class="filename">pkgsrc/doc/pkgsrc.txt</code></p></li> 14703<li class="listitem"><p><code class="filename">pkgsrc/doc/pkgsrc.txt</code></p></li>
14832<li class="listitem"><p><code class="filename">pkgsrc/doc/pkgsrc.html</code></p></li> 14704<li class="listitem"><p><code class="filename">pkgsrc/doc/pkgsrc.html</code></p></li>
14833<li class="listitem"><p><a class="ulink" href="https://www.NetBSD.org/docs/pkgsrc/" target="_top">https://www.NetBSD.org/docs/pkgsrc/</a></p></li> 14705<li class="listitem"><p><a class="ulink" href="https://www.NetBSD.org/docs/pkgsrc/" target="_top">https://www.NetBSD.org/docs/pkgsrc/</a></p></li>
14834<li class="listitem"><p><a class="ulink" href="https://www.NetBSD.org/docs/pkgsrc/pkgsrc.pdf" target="_top">https://www.NetBSD.org/docs/pkgsrc/pkgsrc.pdf</a>: 14706<li class="listitem"><p><a class="ulink" href="https://www.NetBSD.org/docs/pkgsrc/pkgsrc.pdf" target="_top">https://www.NetBSD.org/docs/pkgsrc/pkgsrc.pdf</a>:
14835 The PDF version of the pkgsrc guide.</p></li> 14707 The PDF version of the pkgsrc guide.</p></li>
14836<li class="listitem"><p><a class="ulink" href="https://www.NetBSD.org/docs/pkgsrc/pkgsrc.ps" target="_top">https://www.NetBSD.org/docs/pkgsrc/pkgsrc.ps</a>: 14708<li class="listitem"><p><a class="ulink" href="https://www.NetBSD.org/docs/pkgsrc/pkgsrc.ps" target="_top">https://www.NetBSD.org/docs/pkgsrc/pkgsrc.ps</a>:
14837 PostScript version of the pkgsrc guide.</p></li> 14709 PostScript version of the pkgsrc guide.</p></li>
14838</ul></div> 14710</ul></div>
14839</div> 14711</div>
14840<div class="sect1"> 14712<div class="sect1">
14841<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 14713<div class="titlepage"><div><div><h2 class="title" style="clear: both">
14842<a name="procedure"></a>F.2. Procedure</h2></div></div></div> 14714<a name="procedure"></a>F.2. Procedure</h2></div></div></div>
14843<p>The procedure to edit the pkgsrc guide is:</p> 14715<p>The procedure to edit the pkgsrc guide is:</p>
14844<div class="procedure"><ol class="procedure" type="1"> 14716<div class="procedure"><ol class="procedure" type="1">
14845<li class="step"><p>Make sure you have checked out the htdocs repository 14717<li class="step"><p>Make sure you have checked out the htdocs repository
14846 into a sibling directory of your pkgsrc directory. You will need 14718 into a sibling directory of your pkgsrc directory. You will need
14847 the ability to commit from both pkgsrc and htdocs.</p></li> 14719 the ability to commit from both pkgsrc and htdocs.</p></li>
14848<li class="step"><p>Make sure you have the packages needed to 14720<li class="step"><p>Make sure you have the packages needed to
14849 regenerate the pkgsrc guide (and other XML-based NetBSD 14721 regenerate the pkgsrc guide (and other XML-based NetBSD
14850 documentation) installed. These are automatically installed when 14722 documentation) installed. These are automatically installed when
14851 you install the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/pkgsrc-guide-tools/index.html" target="_top"><code class="filename">meta-pkgs/pkgsrc-guide-tools</code></a> package.</p></li> 14723 you install the <a href="https://cdn.NetBSD.org/pub/pkgsrc/current/pkgsrc/meta-pkgs/pkgsrc-guide-tools/index.html" target="_top"><code class="filename">meta-pkgs/pkgsrc-guide-tools</code></a> package.</p></li>
14852<li class="step"><p>Run <span class="command"><strong>cd doc/guide</strong></span> to get to the 14724<li class="step"><p>Run <span class="command"><strong>cd doc/guide</strong></span> to get to the
14853 right directory. All further steps will take place 14725 right directory. All further steps will take place
14854 here.</p></li> 14726 here.</p></li>
14855<li class="step"><p>Edit the XML file(s) in 14727<li class="step"><p>Edit the XML file(s) in
14856 <code class="filename">files/</code>.</p></li> 14728 <code class="filename">files/</code>.</p></li>
14857<li class="step"><p>Run <span class="command"><strong>bmake</strong></span> to check the pkgsrc 14729<li class="step"><p>Run <span class="command"><strong>bmake</strong></span> to check the pkgsrc
14858 guide for valid XML and to build the final output files. If you 14730 guide for valid XML and to build the final output files. If you
14859 get any errors at this stage, you can just edit the files, as 14731 get any errors at this stage, you can just edit the files, as
14860 there are only symbolic links in the working directory, pointing 14732 there are only symbolic links in the working directory, pointing
14861 to the files in <code class="filename">files/</code>.</p></li> 14733 to the files in <code class="filename">files/</code>.</p></li>
14862<li class="step"><p><span class="command"><strong>(cd files &amp;&amp; cvs 14734<li class="step"><p><span class="command"><strong>(cd files &amp;&amp; cvs
14863 commit)</strong></span></p></li> 14735 commit)</strong></span></p></li>
14864<li class="step"><p>Run <span class="command"><strong>bmake clean &amp;&amp; bmake</strong></span> to 14736<li class="step"><p>Run <span class="command"><strong>bmake clean &amp;&amp; bmake</strong></span> to
14865 regenerate the output files with the proper RCS 14737 regenerate the output files with the proper RCS
14866 Ids.</p></li> 14738 Ids.</p></li>
14867<li class="step"> 14739<li class="step">
14868<p>Run <span class="command"><strong>bmake regen</strong></span> to install and 14740<p>Run <span class="command"><strong>bmake regen</strong></span> to install and
14869 commit the files in both <code class="filename">pkgsrc/doc</code> and 14741 commit the files in both <code class="filename">pkgsrc/doc</code> and
14870 <code class="filename">htdocs</code>.</p> 14742 <code class="filename">htdocs</code>.</p>
14871<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> 14743<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
14872<h3 class="title">Note</h3> 14744<h3 class="title">Note</h3>
14873<p>If you have added, removed or renamed some chapters, 14745<p>If you have added, removed or renamed some chapters,
14874 you need to synchronize them using <span class="command"><strong>cvs add</strong></span> or 14746 you need to synchronize them using <span class="command"><strong>cvs add</strong></span> or
14875 <span class="command"><strong>cvs delete</strong></span> in the htdocs 14747 <span class="command"><strong>cvs delete</strong></span> in the htdocs
14876 directory.</p> 14748 directory.</p>
14877</div> 14749</div>
14878</li> 14750</li>
14879</ol></div> 14751</ol></div>
14880</div> 14752</div>
14881</div> 14753</div>
14882</div></body> 14754</div></body>
14883</html> 14755</html>

cvs diff -r1.337 -r1.338 pkgsrc/doc/pkgsrc.txt (switch to unified diff)

--- pkgsrc/doc/pkgsrc.txt 2022/05/21 15:41:23 1.337
+++ pkgsrc/doc/pkgsrc.txt 2022/06/02 21:24:51 1.338
@@ -2614,2015 +2614,2016 @@ If this database is installed, pkgsrc bu @@ -2614,2015 +2614,2016 @@ If this database is installed, pkgsrc bu
2614check before building any package. 2614check before building any package.
2615 2615
261610.15. Why do some packages ignore my CFLAGS? 261610.15. Why do some packages ignore my CFLAGS?
2617 2617
2618When you add your own preferences to the CFLAGS variable in your mk.conf, these 2618When you add your own preferences to the CFLAGS variable in your mk.conf, these
2619flags are passed in environment variables to the ./configure scripts and to 2619flags are passed in environment variables to the ./configure scripts and to
2620make(1). Some package authors ignore the CFLAGS from the environment variable 2620make(1). Some package authors ignore the CFLAGS from the environment variable
2621by overriding them in the Makefiles of their package. 2621by overriding them in the Makefiles of their package.
2622 2622
2623Currently there is no solution to this problem. If you really need the package 2623Currently there is no solution to this problem. If you really need the package
2624to use your CFLAGS you should run make patch in the package directory and then 2624to use your CFLAGS you should run make patch in the package directory and then
2625inspect any Makefile and Makefile.in for whether they define CFLAGS explicitly. 2625inspect any Makefile and Makefile.in for whether they define CFLAGS explicitly.
2626Usually you can remove these lines. But be aware that some "smart" programmers 2626Usually you can remove these lines. But be aware that some "smart" programmers
2627write so bad code that it only works for the specific combination of CFLAGS 2627write so bad code that it only works for the specific combination of CFLAGS
2628they have chosen. 2628they have chosen.
2629 2629
2630To find out where the CFLAGS are ignored, add the following lines to mk.conf: 2630To find out where the CFLAGS are ignored, add the following lines to mk.conf:
2631 2631
2632CPPFLAGS+= -Dpkgsrc___CPPFLAGS 2632CPPFLAGS+= -Dpkgsrc___CPPFLAGS
2633CFLAGS+= -Dpkgsrc___CFLAGS 2633CFLAGS+= -Dpkgsrc___CFLAGS
2634CXXFLAGS+= -Dpkgsrc___CXXFLAGS 2634CXXFLAGS+= -Dpkgsrc___CXXFLAGS
2635 2635
2636Then run bmake show-all-configure show-all-build to see whether the above flags 2636Then run bmake show-all-configure show-all-build to see whether the above flags
2637are passed to the actual build commands in general. 2637are passed to the actual build commands in general.
2638 2638
2639To find out whether the flags are passed to individual compiler commands, have 2639To find out whether the flags are passed to individual compiler commands, have
2640a look at the file work/.work.log. In most cases, the flags from the original 2640a look at the file work/.work.log. In most cases, the flags from the original
2641command lines (the lines starting with [*]) are passed unmodified to the actual 2641command lines (the lines starting with [*]) are passed unmodified to the actual
2642compiler (the lines starting with <.>). If the flag is missing from the actual 2642compiler (the lines starting with <.>). If the flag is missing from the actual
2643compiler command, it must have been removed by the pkgsrc compiler wrappers. 2643compiler command, it must have been removed by the pkgsrc compiler wrappers.
2644 2644
264510.16. A package does not build. What shall I do? 264510.16. A package does not build. What shall I do?
2646 2646
2647 1. Make sure that your copy of pkgsrc is consistent. A case that occurs often 2647 1. Make sure that your copy of pkgsrc is consistent. A case that occurs often
2648 is that people only update pkgsrc in parts, because of performance reasons. 2648 is that people only update pkgsrc in parts, because of performance reasons.
2649 Since pkgsrc is one large system, not a collection of many small systems, 2649 Since pkgsrc is one large system, not a collection of many small systems,
2650 there are sometimes changes that only work when the whole pkgsrc tree is 2650 there are sometimes changes that only work when the whole pkgsrc tree is
2651 updated. 2651 updated.
2652 2652
2653 2. Make sure that you don't have any CVS conflicts. Search for "<<<<<<" or " 2653 2. Make sure that you don't have any CVS conflicts. Search for "<<<<<<" or "
2654 >>>>>>" in all your pkgsrc files. 2654 >>>>>>" in all your pkgsrc files.
2655 2655
2656 3. Make sure that you don't have old copies of the packages extracted. Run  2656 3. Make sure that you don't have old copies of the packages extracted. Run
2657 make clean clean-depends to verify this. 2657 make clean clean-depends to verify this.
2658 2658
2659 4. If you are a package developer who wants to invest some work, have a look 2659 4. If you are a package developer who wants to invest some work, have a look
2660 at Chapter 21, Making your package work. 2660 at Chapter 21, Making your package work.
2661 2661
2662 5. If the problem still exists, write a mail to the pkgsrc-users mailing list. 2662 5. If the problem still exists, write a mail to the pkgsrc-users mailing list.
2663 2663
266410.17. What does "Makefile appears to contain unresolved cvs/rcs/??? merge 266410.17. What does "Makefile appears to contain unresolved cvs/rcs/??? merge
2665conflicts" mean? 2665conflicts" mean?
2666 2666
2667You have modified a file from pkgsrc, and someone else has modified that same 2667You have modified a file from pkgsrc, and someone else has modified that same
2668file afterwards in the CVS repository. Both changes are in the same region of 2668file afterwards in the CVS repository. Both changes are in the same region of
2669the file, so when you updated pkgsrc, the cvs command marked the conflicting 2669the file, so when you updated pkgsrc, the cvs command marked the conflicting
2670changes in the file. Because of these markers, the file is no longer a valid 2670changes in the file. Because of these markers, the file is no longer a valid
2671Makefile. 2671Makefile.
2672 2672
2673Have a look at that file, and if you don't need your local changes anymore, you 2673Have a look at that file, and if you don't need your local changes anymore, you
2674can remove that file and run cvs -q update -dP in that directory to download 2674can remove that file and run cvs -q update -dP in that directory to download
2675the current version. 2675the current version.
2676 2676
2677Part II. The pkgsrc developer's guide 2677Part II. The pkgsrc developer's guide
2678 2678
2679This part of the book deals with creating and modifying packages. It starts 2679This part of the book deals with creating and modifying packages. It starts
2680with a "HOWTO"-like guide on creating a new package. The remaining chapters are 2680with a "HOWTO"-like guide on creating a new package. The remaining chapters are
2681more like a reference manual for pkgsrc. 2681more like a reference manual for pkgsrc.
2682 2682
2683Table of Contents 2683Table of Contents
2684 2684
268511. Getting help 268511. Getting help
268612. Package components - files, directories and contents 268612. Package components - files, directories and contents
2687 2687
2688 12.1. Makefile 2688 12.1. Makefile
2689 12.2. distinfo 2689 12.2. distinfo
2690 12.3. patches/* 2690 12.3. patches/*
2691 2691
2692 12.3.1. Structure of a single patch file 2692 12.3.1. Structure of a single patch file
2693 12.3.2. Creating patch files 2693 12.3.2. Creating patch files
2694 12.3.3. Sources where the patch files come from 2694 12.3.3. Sources where the patch files come from
2695 12.3.4. Patching guidelines 2695 12.3.4. Patching guidelines
2696 12.3.5. Feedback to the author 2696 12.3.5. Feedback to the author
2697 2697
2698 12.4. Other mandatory files 2698 12.4. Other mandatory files
2699 12.5. Optional files 2699 12.5. Optional files
2700 2700
2701 12.5.1. Files affecting the binary package 2701 12.5.1. Files affecting the binary package
2702 12.5.2. Files affecting the build process 2702 12.5.2. Files affecting the build process
2703 12.5.3. Files affecting nothing at all 2703 12.5.3. Files affecting nothing at all
2704 2704
2705 12.6. work* 2705 12.6. work*
2706 12.7. files/* 2706 12.7. files/*
2707 2707
270813. The build process 270813. The build process
2709 2709
2710 13.1. Introduction 2710 13.1. Introduction
2711 13.2. Program location 2711 13.2. Program location
2712 13.3. Directories used during the build process 2712 13.3. Directories used during the build process
2713 13.4. Running a phase 2713 13.4. Running a phase
2714 13.5. The fetch phase 2714 13.5. The fetch phase
2715 2715
2716 13.5.1. What to fetch and where to get it from 2716 13.5.1. What to fetch and where to get it from
2717 13.5.2. How are the files fetched? 2717 13.5.2. How are the files fetched?
2718 2718
2719 13.6. The checksum phase 2719 13.6. The checksum phase
2720 13.7. The extract phase 2720 13.7. The extract phase
2721 13.8. The patch phase 2721 13.8. The patch phase
2722 13.9. The tools phase 2722 13.9. The tools phase
2723 13.10. The wrapper phase 2723 13.10. The wrapper phase
2724 13.11. The configure phase 2724 13.11. The configure phase
2725 13.12. The build phase 2725 13.12. The build phase
2726 13.13. The test phase 2726 13.13. The test phase
2727 13.14. The install phase 2727 13.14. The install phase
2728 13.15. The package phase 2728 13.15. The package phase
2729 13.16. Cleaning up 2729 13.16. Cleaning up
2730 13.17. Other helpful targets 2730 13.17. Other helpful targets
2731 2731
273214. Creating a new pkgsrc package from scratch 273214. Creating a new pkgsrc package from scratch
2733 2733
2734 14.1. Common types of packages 2734 14.1. Common types of packages
2735 2735
2736 14.1.1. Python modules and programs 2736 14.1.1. Python modules and programs
2737 14.1.2. R packages 2737 14.1.2. R packages
2738 14.1.3. TeXlive packages 2738 14.1.3. TeXlive packages
2739 2739
2740 14.2. Examples 2740 14.2. Examples
2741 2741
2742 14.2.1. How the www/nvu package came into pkgsrc 2742 14.2.1. How the www/nvu package came into pkgsrc
2743 2743
274415. Programming in Makefiles 274415. Programming in Makefiles
2745 2745
2746 15.1. Caveats 2746 15.1. Caveats
2747 15.2. Makefile variables 2747 15.2. Makefile variables
2748 2748
2749 15.2.1. Naming conventions 2749 15.2.1. Naming conventions
2750 2750
2751 15.3. Code snippets 2751 15.3. Code snippets
2752 2752
2753 15.3.1. Adding things to a list 2753 15.3.1. Adding things to a list
2754 15.3.2. Echoing a string exactly as-is 2754 15.3.2. Echoing a string exactly as-is
2755 15.3.3. Passing CFLAGS to GNU configure scripts 2755 15.3.3. Passing CFLAGS to GNU configure scripts
2756 15.3.4. Handling possibly empty variables 2756 15.3.4. Handling possibly empty variables
2757 2757
275816. Options handling 275816. Options handling
2759 2759
2760 16.1. Global default options 2760 16.1. Global default options
2761 16.2. Converting packages to use bsd.options.mk 2761 16.2. Converting packages to use bsd.options.mk
2762 16.3. Option Names 2762 16.3. Option Names
2763 16.4. Determining the options of dependencies 2763 16.4. Determining the options of dependencies
2764 2764
276517. Tools needed for building or running 276517. Tools needed for building or running
2766 2766
2767 17.1. Tools for pkgsrc builds 2767 17.1. Tools for pkgsrc builds
2768 17.2. Tools needed by packages 2768 17.2. Tools needed by packages
2769 17.3. Tools provided by platforms 2769 17.3. Tools provided by platforms
2770 2770
277118. Buildlink methodology 277118. Buildlink methodology
2772 2772
2773 18.1. Converting packages to use buildlink3 2773 18.1. Converting packages to use buildlink3
2774 18.2. Writing buildlink3.mk files 2774 18.2. Writing buildlink3.mk files
2775 2775
2776 18.2.1. Anatomy of a buildlink3.mk file 2776 18.2.1. Anatomy of a buildlink3.mk file
2777 18.2.2. Updating BUILDLINK_API_DEPENDS.pkg and BUILDLINK_ABI_DEPENDS. 2777 18.2.2. Updating BUILDLINK_API_DEPENDS.pkg and BUILDLINK_ABI_DEPENDS.
2778 pkg in buildlink3.mk files 2778 pkg in buildlink3.mk files
2779 2779
2780 18.3. Writing builtin.mk files 2780 18.3. Writing builtin.mk files
2781 2781
2782 18.3.1. Anatomy of a builtin.mk file 2782 18.3.1. Anatomy of a builtin.mk file
2783 18.3.2. Global preferences for native or pkgsrc software 2783 18.3.2. Global preferences for native or pkgsrc software
2784 2784
278519. PLIST issues 278519. PLIST issues
2786 2786
2787 19.1. RCS ID 2787 19.1. RCS ID
2788 19.2. Semi-automatic PLIST generation 2788 19.2. Semi-automatic PLIST generation
2789 19.3. Tweaking output of make print-PLIST 2789 19.3. Tweaking output of make print-PLIST
2790 19.4. Variable substitution in PLIST 2790 19.4. Variable substitution in PLIST
2791 19.5. Man page compression 2791 19.5. Man page compression
2792 19.6. Changing PLIST source with PLIST_SRC 2792 19.6. Changing PLIST source with PLIST_SRC
2793 19.7. Platform-specific and differing PLISTs 2793 19.7. Platform-specific and differing PLISTs
2794 19.8. Build-specific PLISTs 2794 19.8. Build-specific PLISTs
2795 19.9. Sharing directories between packages 2795 19.9. Sharing directories between packages
2796 2796
279720. The pkginstall framework 279720. The pkginstall framework
2798 2798
2799 20.1. Files and directories outside the installation prefix 2799 20.1. Files and directories outside the installation prefix
2800 2800
2801 20.1.1. Directory manipulation 2801 20.1.1. Directory manipulation
2802 20.1.2. File manipulation 2802 20.1.2. File manipulation
2803 2803
2804 20.2. Configuration files 2804 20.2. Configuration files
2805 2805
2806 20.2.1. How PKG_SYSCONFDIR is set 2806 20.2.1. How PKG_SYSCONFDIR is set
2807 20.2.2. Telling the software where configuration files are 2807 20.2.2. Telling the software where configuration files are
2808 20.2.3. Patching installations 2808 20.2.3. Patching installations
2809 20.2.4. Disabling handling of configuration files 2809 20.2.4. Disabling handling of configuration files
2810 2810
2811 20.3. System startup scripts 2811 20.3. System startup scripts
2812 2812
2813 20.3.1. Disabling handling of system startup scripts 2813 20.3.1. Disabling handling of system startup scripts
2814 2814
2815 20.4. System users and groups 2815 20.4. System users and groups
2816 20.5. System shells 2816 20.5. System shells
2817 2817
2818 20.5.1. Disabling shell registration 2818 20.5.1. Disabling shell registration
2819 2819
2820 20.6. Fonts 2820 20.6. Fonts
2821 2821
2822 20.6.1. Disabling automatic update of the fonts databases 2822 20.6.1. Disabling automatic update of the fonts databases
2823 2823
282421. Making your package work 282421. Making your package work
2825 2825
2826 21.1. General operation 2826 21.1. General operation
2827 2827
2828 21.1.1. How to pull in user-settable variables from mk.conf 2828 21.1.1. How to pull in user-settable variables from mk.conf
2829 21.1.2. User interaction 2829 21.1.2. User interaction
2830 21.1.3. Handling licenses 2830 21.1.3. Handling licenses
2831 21.1.4. Restricted packages 2831 21.1.4. Restricted packages
2832 21.1.5. Handling dependencies 2832 21.1.5. Handling dependencies
2833 21.1.6. Handling conflicts with other packages 2833 21.1.6. Handling conflicts with other packages
2834 21.1.7. Packages that cannot or should not be built 2834 21.1.7. Packages that cannot or should not be built
2835 21.1.8. Packages which should not be deleted, once installed 2835 21.1.8. Packages which should not be deleted, once installed
2836 21.1.9. Handling packages with security problems 2836 21.1.9. Handling packages with security problems
2837 21.1.10. How to handle incrementing versions when fixing an existing 2837 21.1.10. How to handle incrementing versions when fixing an existing
2838 package 2838 package
2839 21.1.11. Substituting variable text in the package files (the SUBST 2839 21.1.11. Substituting variable text in the package files (the SUBST
2840 framework) 2840 framework)
2841 2841
2842 21.2. The fetch phase 2842 21.2. The fetch phase
2843 2843
2844 21.2.1. Packages whose distfiles aren't available for plain downloading 2844 21.2.1. Packages whose distfiles aren't available for plain downloading
2845 21.2.2. How to handle modified distfiles with the 'old' name 2845 21.2.2. How to handle modified distfiles with the 'old' name
2846 21.2.3. Packages hosted on github.com 2846 21.2.3. Packages hosted on github.com
2847 2847
2848 21.3. The configure phase 2848 21.3. The configure phase
2849 2849
2850 21.3.1. Shared libraries - libtool 2850 21.3.1. Shared libraries - libtool
2851 21.3.2. Using libtool on GNU packages that already support libtool 2851 21.3.2. Using libtool on GNU packages that already support libtool
2852 21.3.3. GNU Autoconf/Automake 2852 21.3.3. GNU Autoconf/Automake
2853 21.3.4. Meson / ninja 2853 21.3.4. Meson / ninja
2854 2854
2855 21.4. Programming languages 2855 21.4. Programming languages
2856 2856
2857 21.4.1. C, C++, and Fortran 2857 21.4.1. C, C++, and Fortran
2858 21.4.2. Java 2858 21.4.2. Java
2859 21.4.3. Go 2859 21.4.3. Go
2860 21.4.4. Rust 2860 21.4.4. Rust
2861 21.4.5. Packages containing Perl scripts 2861 21.4.5. Packages containing Perl scripts
2862 21.4.6. Packages containing shell scripts 2862 21.4.6. Packages containing shell scripts
2863 21.4.7. Other programming languages 2863 21.4.7. Other programming languages
2864 2864
2865 21.5. The build phase 2865 21.5. The build phase
2866 2866
2867 21.5.1. Compiling C and C++ code conditionally 2867 21.5.1. Compiling C and C++ code conditionally
2868 21.5.2. How to handle compiler bugs 2868 21.5.2. How to handle compiler bugs
2869 21.5.3. No such file or directory 2869 21.5.3. No such file or directory
2870 21.5.4. Undefined reference to "..." 2870 21.5.4. Undefined reference to "..."
2871 21.5.5. Running out of memory 2871 21.5.5. Running out of memory
2872 2872
2873 21.6. The install phase 2873 21.6. The install phase
2874 2874
2875 21.6.1. Creating needed directories 2875 21.6.1. Creating needed directories
2876 21.6.2. Where to install documentation 2876 21.6.2. Where to install documentation
2877 21.6.3. Installing highscore files 2877 21.6.3. Installing highscore files
2878 21.6.4. Adding DESTDIR support to packages 2878 21.6.4. Adding DESTDIR support to packages
2879 21.6.5. Packages with hardcoded paths to other interpreters 2879 21.6.5. Packages with hardcoded paths to other interpreters
2880 21.6.6. Packages installing Perl modules 2880 21.6.6. Packages installing Perl modules
2881 21.6.7. Packages installing info files 2881 21.6.7. Packages installing info files
2882 21.6.8. Packages installing man pages 2882 21.6.8. Packages installing man pages
2883 21.6.9. Packages installing X11 fonts 2883 21.6.9. Packages installing X11 fonts
2884 21.6.10. Packages installing SGML or XML data 2884 21.6.10. Packages installing SGML or XML data
2885 21.6.11. Packages installing extensions to the MIME database 2885 21.6.11. Packages installing extensions to the MIME database
2886 21.6.12. Packages using intltool 2886 21.6.12. Packages using intltool
2887 21.6.13. Packages installing startup scripts 2887 21.6.13. Packages installing startup scripts
2888 21.6.14. Packages installing TeX modules 2888 21.6.14. Packages installing TeX modules
2889 21.6.15. Packages supporting running binaries in emulation 2889 21.6.15. Packages supporting running binaries in emulation
2890 21.6.16. Packages installing hicolor icons 2890 21.6.16. Packages installing hicolor icons
2891 21.6.17. Packages installing desktop files 2891 21.6.17. Packages installing desktop files
2892 2892
2893 21.7. Marking packages as having problems 2893 21.7. Marking packages as having problems
2894 2894
289522. GNOME packaging and porting 289522. GNOME packaging and porting
2896 2896
2897 22.1. Meta packages 2897 22.1. Meta packages
2898 22.2. Packaging a GNOME application 2898 22.2. Packaging a GNOME application
2899 22.3. Updating GNOME to a newer version 2899 22.3. Updating GNOME to a newer version
2900 22.4. Patching guidelines 2900 22.4. Patching guidelines
2901 2901
290223. Submitting and Committing 290223. Submitting and Committing
2903 2903
2904 23.1. Submitting binary packages 2904 23.1. Submitting binary packages
2905 23.2. Submitting source packages (for non-NetBSD-developers) 2905 23.2. Submitting source packages (for non-NetBSD-developers)
2906 23.3. General notes when adding, updating, or removing packages 2906 23.3. General notes when adding, updating, or removing packages
2907 23.4. Commit Messages 2907 23.4. Commit Messages
2908 23.5. Committing: Adding a package to CVS 2908 23.5. Committing: Adding a package to CVS
2909 23.6. Updating a package to a newer version 2909 23.6. Updating a package to a newer version
2910 23.7. Renaming a package in pkgsrc 2910 23.7. Renaming a package in pkgsrc
2911 23.8. Moving a package in pkgsrc 2911 23.8. Moving a package in pkgsrc
2912 2912
291324. Frequently Asked Questions 291324. Frequently Asked Questions
2914 2914
2915Chapter 11. Getting help 2915Chapter 11. Getting help
2916 2916
2917To get help when developing pkgsrc, the definitive source is this document, the 2917To get help when developing pkgsrc, the definitive source is this document, the
2918pkgsrc guide. If you don't find anything here, there are alternatives: 2918pkgsrc guide. If you don't find anything here, there are alternatives:
2919 2919
2920 * The built-in pkgsrc help, which is available after bootstrapping pkgsrc. 2920 * The built-in pkgsrc help, which is available after bootstrapping pkgsrc.
2921 Run bmake help topic=? to get help for any topic, such as a variable name 2921 Run bmake help topic=? to get help for any topic, such as a variable name
2922 like BUILD_DEFS, a make target like do-build, a missing C or C++ function 2922 like BUILD_DEFS, a make target like do-build, a missing C or C++ function
2923 like strcasecmp or any other topic. 2923 like strcasecmp or any other topic.
2924 2924
2925 The available help topics are listed in Appendix E, Help topics. 2925 The available help topics are listed in Appendix E, Help topics.
2926 2926
2927 * To see the value of a single variable, run bmake show-var VARNAME=X. 2927 * To see the value of a single variable, run bmake show-var VARNAME=X.
2928 2928
2929 * To see the values of the most common variables, run bmake show-all. These 2929 * To see the values of the most common variables, run bmake show-all. These
2930 variables are grouped by topic. To see the variables for a single topic, 2930 variables are grouped by topic. To see the variables for a single topic,
2931 run bmake show-all-topic, for example bmake show-all-fetch. 2931 run bmake show-all-topic, for example bmake show-all-fetch.
2932 2932
2933 * The tech-pkg mailing list, to which you can subscribe and then ask your 2933 * The tech-pkg mailing list, to which you can subscribe and then ask your
2934 questions. 2934 questions.
2935 2935
2936 * The #pkgsrc IRC channel, which is accessible via a web browser or by using 2936 * The #pkgsrc IRC channel, which is accessible via a web browser or by using
2937 a specialized chat program such as XChat. Pick any user name and join the 2937 a specialized chat program such as XChat. Pick any user name and join the
2938 channel #pkgsrc. 2938 channel #pkgsrc.
2939 2939
2940Chapter 12. Package components - files, directories and contents 2940Chapter 12. Package components - files, directories and contents
2941 2941
2942Table of Contents 2942Table of Contents
2943 2943
294412.1. Makefile 294412.1. Makefile
294512.2. distinfo 294512.2. distinfo
294612.3. patches/* 294612.3. patches/*
2947 2947
2948 12.3.1. Structure of a single patch file 2948 12.3.1. Structure of a single patch file
2949 12.3.2. Creating patch files 2949 12.3.2. Creating patch files
2950 12.3.3. Sources where the patch files come from 2950 12.3.3. Sources where the patch files come from
2951 12.3.4. Patching guidelines 2951 12.3.4. Patching guidelines
2952 12.3.5. Feedback to the author 2952 12.3.5. Feedback to the author
2953 2953
295412.4. Other mandatory files 295412.4. Other mandatory files
295512.5. Optional files 295512.5. Optional files
2956 2956
2957 12.5.1. Files affecting the binary package 2957 12.5.1. Files affecting the binary package
2958 12.5.2. Files affecting the build process 2958 12.5.2. Files affecting the build process
2959 12.5.3. Files affecting nothing at all 2959 12.5.3. Files affecting nothing at all
2960 2960
296112.6. work* 296112.6. work*
296212.7. files/* 296212.7. files/*
2963 2963
2964Whenever you're preparing a package, there are a number of files involved which 2964Whenever you're preparing a package, there are a number of files involved which
2965are described in the following sections. 2965are described in the following sections.
2966 2966
296712.1. Makefile 296712.1. Makefile
2968 2968
2969Building, installation and creation of a binary package are all controlled by 2969Building, installation and creation of a binary package are all controlled by
2970the package's Makefile. The Makefile describes various things about a package, 2970the package's Makefile. The Makefile describes various things about a package,
2971for example from where to get it, how to configure, build, and install it. 2971for example from where to get it, how to configure, build, and install it.
2972 2972
2973A package Makefile contains several sections that describe the package. 2973A package Makefile contains several sections that describe the package.
2974 2974
2975In the first section there are the following variables, which should appear 2975In the first section there are the following variables, which should appear
2976exactly in the order given here. The order and grouping of the variables is 2976exactly in the order given here. The order and grouping of the variables is
2977mostly historical and has no further meaning. 2977mostly historical and has no further meaning.
2978 2978
2979 * DISTNAME is the basename of the distribution file to be downloaded from the 2979 * DISTNAME is the basename of the distribution file to be downloaded from the
2980 package's website. 2980 package's website.
2981 2981
2982 * PKGNAME is the name of the package, as used by pkgsrc. You need to provide 2982 * PKGNAME is the name of the package, as used by pkgsrc. You need to provide
2983 it if DISTNAME (which is the default) is not a good name for the package in 2983 it if DISTNAME (which is the default) is not a good name for the package in
2984 pkgsrc or DISTNAME is not provided (no distribution file is required). 2984 pkgsrc or DISTNAME is not provided (no distribution file is required).
2985 Usually it is the pkgsrc directory name together with the version number. 2985 Usually it is the pkgsrc directory name together with the version number.
2986 It must match the regular expression ^[A-Za-z0-9][A-Za-z0-9-_.+]*$, that 2986 It must match the regular expression ^[A-Za-z0-9][A-Za-z0-9-_.+]*$, that
2987 is, it starts with a letter or digit, and contains only letters, digits, 2987 is, it starts with a letter or digit, and contains only letters, digits,
2988 dashes, underscores, dots and plus signs. New packages should have entirely 2988 dashes, underscores, dots and plus signs. New packages should have entirely
2989 lower-case names, with the exception of some that must follow pre-existing 2989 lower-case names, with the exception of some that must follow pre-existing
2990 conventions (e.g. R packages begin with R-). You can use the :tl variable 2990 conventions (e.g. R packages begin with R-). You can use the :tl variable
2991 modifier to lower-case the package name. 2991 modifier to lower-case the package name.
2992 2992
2993 * CATEGORIES is a list of categories which the package fits in. You can 2993 * CATEGORIES is a list of categories which the package fits in. You can
2994 choose any of the top-level directories of pkgsrc for it. 2994 choose any of the top-level directories of pkgsrc for it.
2995 2995
2996 Currently the following values are available for CATEGORIES. If more than 2996 Currently the following values are available for CATEGORIES. If more than
2997 one is used, they need to be separated by spaces: 2997 one is used, they need to be separated by spaces:
2998 2998
2999 archivers cross geography meta-pkgs security 2999 archivers cross geography meta-pkgs security
3000 audio databases graphics misc shells 3000 audio databases graphics misc shells
3001 benchmarks devel ham multimedia sysutils 3001 benchmarks devel ham multimedia sysutils
3002 biology editors inputmethod net textproc 3002 biology editors inputmethod net textproc
3003 cad emulators lang news time 3003 cad emulators lang news time
3004 chat finance mail parallel wm 3004 chat finance mail parallel wm
3005 comms fonts math pkgtools www 3005 comms fonts math pkgtools www
3006 converters games mbone print x11 3006 converters games mbone print x11
3007 3007
3008 * MASTER_SITES, DYNAMIC_MASTER_SITES, DIST_SUBDIR, EXTRACT_SUFX and DISTFILES 3008 * MASTER_SITES, DYNAMIC_MASTER_SITES, DIST_SUBDIR, EXTRACT_SUFX and DISTFILES
3009 are discussed in detail in Section 13.5, "The fetch phase". 3009 are discussed in detail in Section 13.5, "The fetch phase".
3010 3010
3011The second section contains information about separately downloaded patches, if 3011The second section contains information about separately downloaded patches, if
3012any. 3012any.
3013 3013
3014 * PATCHFILES: Name(s) of additional files that contain distribution patches. 3014 * PATCHFILES: Name(s) of additional files that contain distribution patches.
3015 There is no default. pkgsrc will look for them at PATCH_SITES. They will 3015 There is no default. pkgsrc will look for them at PATCH_SITES. They will
3016 automatically be uncompressed before patching if the names end with .gz or 3016 automatically be uncompressed before patching if the names end with .gz or
3017 .Z. 3017 .Z.
3018 3018
3019 * PATCH_SITES: Primary location(s) for distribution patch files (see 3019 * PATCH_SITES: Primary location(s) for distribution patch files (see
3020 PATCHFILES above) if not found locally. 3020 PATCHFILES above) if not found locally.
3021 3021
3022 * PATCH_DIST_STRIP: an argument to patch(1) that sets the pathname strip 3022 * PATCH_DIST_STRIP: an argument to patch(1) that sets the pathname strip
3023 count to help find the correct files to patch. It defaults to -p0. 3023 count to help find the correct files to patch. It defaults to -p0.
3024 3024
3025The third section contains the following variables. 3025The third section contains the following variables.
3026 3026
3027 * MAINTAINER is the email address of the person who feels responsible for 3027 * MAINTAINER is the email address of the person who feels responsible for
3028 this package, and who is most likely to look at problems or questions 3028 this package, and who is most likely to look at problems or questions
3029 regarding this package which have been reported with send-pr(1). Other 3029 regarding this package which have been reported with send-pr(1). Other
3030 developers may contact the MAINTAINER before making changes to the package, 3030 developers may contact the MAINTAINER before making changes to the package,
3031 but are not required to do so. When packaging a new program, set MAINTAINER 3031 but are not required to do so. When packaging a new program, set MAINTAINER
3032 to yourself. If you really can't maintain the package for future updates, 3032 to yourself. If you really can't maintain the package for future updates,
3033 set it to <pkgsrc-users@NetBSD.org>. 3033 set it to <pkgsrc-users@NetBSD.org>.
3034 3034
3035 * OWNER should be used instead of MAINTAINER when you do not want other 3035 * OWNER should be used instead of MAINTAINER when you do not want other
3036 developers to update or change the package without contacting you first. A 3036 developers to update or change the package without contacting you first. A
3037 package Makefile should contain one of MAINTAINER or OWNER, but not both. 3037 package Makefile should contain one of MAINTAINER or OWNER, but not both.
3038 3038
3039 * HOMEPAGE is a URL where users can find more information about the package. 3039 * HOMEPAGE is a URL where users can find more information about the package.
3040 3040
3041 * COMMENT is a one-line description of the package (should not include the 3041 * COMMENT is a one-line description of the package (should not include the
3042 package name). 3042 package name).
3043 3043
3044 * LICENSE indicates the license(s) applicable for the package. See 3044 * LICENSE indicates the license(s) applicable for the package. See
3045 Section 21.1.3, "Handling licenses" for further details. 3045 Section 21.1.3, "Handling licenses" for further details.
3046 3046
3047Other variables that affect the build: 3047Other variables that affect the build:
3048 3048
3049 * WRKSRC: The directory where the interesting distribution files of the 3049 * WRKSRC: The directory where the interesting distribution files of the
3050 package are found. The default is ${WRKDIR}/${DISTNAME}, which works for 3050 package are found. The default is ${WRKDIR}/${DISTNAME}, which works for
3051 most packages. 3051 most packages.
3052 3052
3053 If a package doesn't create a subdirectory for itself (most GNU software 3053 If a package doesn't create a subdirectory for itself (most GNU software
3054 does, for instance), but extracts itself in the current directory, you 3054 does, for instance), but extracts itself in the current directory, you
3055 should set WRKSRC=${WRKDIR}. 3055 should set WRKSRC=${WRKDIR}.
3056 3056
3057 If a package doesn't create a subdirectory with the name of DISTNAME but 3057 If a package doesn't create a subdirectory with the name of DISTNAME but
3058 some different name, set WRKSRC to point to the proper name in ${WRKDIR}, 3058 some different name, set WRKSRC to point to the proper name in ${WRKDIR},
3059 for example WRKSRC=${WRKDIR}/${DISTNAME}/unix. See lang/tcl and x11/tk for 3059 for example WRKSRC=${WRKDIR}/${DISTNAME}/unix. See lang/tcl and x11/tk for
3060 other examples. 3060 other examples.
3061 3061
3062 The name of the working directory created by pkgsrc is taken from the 3062 The name of the working directory created by pkgsrc is taken from the
3063 WRKDIR_BASENAME variable. By default, its value is work. If you want to use 3063 WRKDIR_BASENAME variable. By default, its value is work. If you want to use
3064 the same pkgsrc tree for building different kinds of binary packages, you 3064 the same pkgsrc tree for building different kinds of binary packages, you
3065 can change the variable according to your needs. Two other variables handle 3065 can change the variable according to your needs. Two other variables handle
3066 common cases of setting WRKDIR_BASENAME individually. If OBJHOSTNAME is 3066 common cases of setting WRKDIR_BASENAME individually. If OBJHOSTNAME is
3067 defined in mk.conf, the first component of the host's name is attached to 3067 defined in mk.conf, the first component of the host's name is attached to
3068 the directory name. If OBJMACHINE is defined, the platform name is 3068 the directory name. If OBJMACHINE is defined, the platform name is
3069 attached, which might look like work.i386 or work.sparc. 3069 attached, which might look like work.i386 or work.sparc.
3070 3070
3071Please pay attention to the following gotchas: 3071Please pay attention to the following gotchas:
3072 3072
3073 * Add MANCOMPRESSED if man pages are installed in compressed form by the 3073 * Add MANCOMPRESSED if man pages are installed in compressed form by the
3074 package. For packages using BSD-style makefiles which honor MANZ, there is 3074 package. For packages using BSD-style makefiles which honor MANZ, there is
3075 MANCOMPRESSED_IF_MANZ. 3075 MANCOMPRESSED_IF_MANZ.
3076 3076
3077 * Replace /usr/local with "${PREFIX}" in all files (see patches, below). 3077 * Replace /usr/local with "${PREFIX}" in all files (see patches, below).
3078 3078
3079 * If the package installs any info files, see Section 21.6.7, "Packages 3079 * If the package installs any info files, see Section 21.6.7, "Packages
3080 installing info files". 3080 installing info files".
3081 3081
308212.2. distinfo 308212.2. distinfo
3083 3083
3084The distinfo file contains the message digest, or checksum, of each distfile 3084The distinfo file contains the message digest, or checksum, of each distfile
3085needed for the package. This ensures that the distfiles retrieved from the 3085needed for the package. This ensures that the distfiles retrieved from the
3086Internet have not been corrupted during transfer or altered by a malign force 3086Internet have not been corrupted during transfer or altered by a malign force
3087to introduce a security hole. To provide maximum security, all distfiles are 3087to introduce a security hole. To provide maximum security, all distfiles are
3088protected using three different message digest algorithms (SHA1, RMD160, 3088protected using three different message digest algorithms (SHA1, RMD160,
3089SHA512), as well as the file size. 3089SHA512), as well as the file size.
3090 3090
3091The distinfo file also contains the checksums for all the patches found in the 3091The distinfo file also contains the checksums for all the patches found in the
3092patches directory (see Section 12.3, "patches/*"). These checksums ensure that 3092patches directory (see Section 12.3, "patches/*"). These checksums ensure that
3093patches are only applied intentionally and that they don't accidentally change, 3093patches are only applied intentionally and that they don't accidentally change,
3094e.g. when merging different changes together. They also make sure that new 3094e.g. when merging different changes together. They also make sure that new
3095patches are actually added to CVS and old ones are removed. Too see whether the 3095patches are actually added to CVS and old ones are removed. Too see whether the
3096patches and the distinfo file match, run pkglint after changing the patches. 3096patches and the distinfo file match, run pkglint after changing the patches.
3097 3097
3098To regenerate the distinfo file, use the make distinfo command. 3098To regenerate the distinfo file, use the make distinfo command.
3099 3099
3100Some packages have different sets of distfiles depending on the platform, for 3100Some packages have different sets of distfiles depending on the platform, for
3101example lang/openjdk8. These are kept in the same distinfo file and care should 3101example lang/openjdk8. These are kept in the same distinfo file and care should
3102be taken when upgrading such a package to ensure distfile information is not 3102be taken when upgrading such a package to ensure distfile information is not
3103lost. 3103lost.
3104 3104
310512.3. patches/* 310512.3. patches/*
3106 3106
3107Some packages don't work out-of-the box on the various platforms that are 3107Some packages don't work out-of-the box on the various platforms that are
3108supported by pkgsrc. These packages need to be patched to make them work. The 3108supported by pkgsrc. These packages need to be patched to make them work. The
3109patch files can be found in the patches/ directory. 3109patch files can be found in the patches/ directory.
3110 3110
3111In the patch phase, these patches are applied to the files in WRKSRC directory 3111In the patch phase, these patches are applied to the files in WRKSRC directory
3112after extracting them, in alphabetic order. 3112after extracting them, in alphabetic order.
3113 3113
311412.3.1. Structure of a single patch file 311412.3.1. Structure of a single patch file
3115 3115
3116The patch-* files should be in diff -bu format, and apply without a fuzz to 3116The patch-* files should be in diff -bu format, and apply without a fuzz to
3117avoid problems. (To force patches to apply with fuzz you can set 3117avoid problems. (To force patches to apply with fuzz you can set
3118PATCH_FUZZ_FACTOR=-F2). Furthermore, each patch should contain only changes for 3118PATCH_FUZZ_FACTOR=-F2). Furthermore, each patch should contain only changes for
3119a single file, and no file should be patched by more than one patch file. This 3119a single file, and no file should be patched by more than one patch file. This
3120helps to keep future modifications simple. 3120helps to keep future modifications simple.
3121 3121
3122Each patch file is structured as follows: In the first line, there is the RCS 3122Each patch file is structured as follows: In the first line, there is the RCS
3123Id of the patch itself. The second line should be empty for aesthetic reasons. 3123Id of the patch itself. The second line should be empty for aesthetic reasons.
3124After that, there should be a comment for each change that the patch does. 3124After that, there should be a comment for each change that the patch does.
3125There are a number of standard cases: 3125There are a number of standard cases:
3126 3126
3127 * Patches for commonly known vulnerabilities should mention the vulnerability 3127 * Patches for commonly known vulnerabilities should mention the vulnerability
3128 ID (CAN, CVE). 3128 ID (CAN, CVE).
3129 3129
3130 * Patches that change source code should mention the platform and other 3130 * Patches that change source code should mention the platform and other
3131 environment (for example, the compiler) that the patch is needed for. 3131 environment (for example, the compiler) that the patch is needed for.
3132 3132
3133The patch should be commented so that any developer who knows the code of the 3133The patch should be commented so that any developer who knows the code of the
3134application can make some use of the patch. Special care should be taken for 3134application can make some use of the patch. Special care should be taken for
3135the upstream developers, since we generally want that they accept our patches, 3135the upstream developers, since we generally want that they accept our patches,
3136so we have less work in the future. 3136so we have less work in the future.
3137 3137
313812.3.2. Creating patch files 313812.3.2. Creating patch files
3139 3139
3140One important thing to mention is to pay attention that no RCS IDs get stored 3140One important thing to mention is to pay attention that no RCS IDs get stored
3141in the patch files, as these will cause problems when later checked into the 3141in the patch files, as these will cause problems when later checked into the
3142NetBSD CVS tree. Use the pkgdiff command from the pkgtools/pkgdiff package to 3142NetBSD CVS tree. Use the pkgdiff command from the pkgtools/pkgdiff package to
3143avoid these problems. 3143avoid these problems.
3144 3144
3145For even more automation, we recommend using mkpatches from the same package to 3145For even more automation, we recommend using mkpatches from the same package to
3146make a whole set of patches. You just have to back up files before you edit 3146make a whole set of patches. You just have to back up files before you edit
3147them to filename.orig, e.g., with cp -p filename filename.orig or, easier, by 3147them to filename.orig, e.g., with cp -p filename filename.orig or, easier, by
3148using pkgvi again from the same package. If you upgrade a package this way, you 3148using pkgvi again from the same package. If you upgrade a package this way, you
3149can easily compare the new set of patches with the previously existing one with 3149can easily compare the new set of patches with the previously existing one with
3150patchdiff. The files in patches are replaced by new files, so carefully check 3150patchdiff. The files in patches are replaced by new files, so carefully check
3151if you want to take all the changes. 3151if you want to take all the changes.
3152 3152
3153When you have finished a package, remember to generate the checksums for the 3153When you have finished a package, remember to generate the checksums for the
3154patch files by using the make makepatchsum command, see Section 12.2, 3154patch files by using the make makepatchsum command, see Section 12.2,
3155"distinfo". 3155"distinfo".
3156 3156
3157When adding a patch that corrects a problem in the distfile (rather than e.g. 3157When adding a patch that corrects a problem in the distfile (rather than e.g.
3158enforcing pkgsrc's view of where man pages should go), send the patch as a bug 3158enforcing pkgsrc's view of where man pages should go), send the patch as a bug
3159report to the maintainer. This benefits non-pkgsrc users of the package, and 3159report to the maintainer. This benefits non-pkgsrc users of the package, and
3160usually makes it possible to remove the patch in future version. 3160usually makes it possible to remove the patch in future version.
3161 3161
3162The file names of the patch files are usually of the form patch- 3162The file names of the patch files are usually of the form patch-
3163path_to_file__with__underscores.c. Many packages still use the previous 3163path_to_file__with__underscores.c. Many packages still use the previous
3164convention patch-[a-z][a-z], but new patches should be of the form containing 3164convention patch-[a-z][a-z], but new patches should be of the form containing
3165the filename. mkpatches included in pkgtools/pkgdiff takes care of the name 3165the filename. mkpatches included in pkgtools/pkgdiff takes care of the name
3166automatically. 3166automatically.
3167 3167
3168When updating pre-existing patch files, if a file uses the old patch-[a-z][a-z] 3168When updating pre-existing patch files, if a file uses the old patch-[a-z][a-z]
3169convention, it's best not to change it to the new form, as that will just cause 3169convention, it's best not to change it to the new form, as that will just cause
3170churn that makes it harder to track changes to patching over time. Similarly, 3170churn that makes it harder to track changes to patching over time. Similarly,
3171if a patch now applies at different line offsets, but still applies cleanly 3171if a patch now applies at different line offsets, but still applies cleanly
3172as-is, there's no need to update it, as that also unnecessarily complicates the 3172as-is, there's no need to update it, as that also unnecessarily complicates the
3173patch history. 3173patch history.
3174 3174
317512.3.3. Sources where the patch files come from 317512.3.3. Sources where the patch files come from
3176 3176
3177If you want to share patches between multiple packages in pkgsrc, e.g. because 3177If you want to share patches between multiple packages in pkgsrc, e.g. because
3178they use the same distfiles, set PATCHDIR to the path where the patch files can 3178they use the same distfiles, set PATCHDIR to the path where the patch files can
3179be found, e.g.: 3179be found, e.g.:
3180 3180
3181PATCHDIR= ../../editors/xemacs/patches 3181PATCHDIR= ../../editors/xemacs/patches
3182 3182
3183Patch files that are distributed by the author or other maintainers can be 3183Patch files that are distributed by the author or other maintainers can be
3184listed in PATCHFILES. 3184listed in PATCHFILES.
3185 3185
3186If it is desired to store any patches that should not be committed into pkgsrc, 3186If it is desired to store any patches that should not be committed into pkgsrc,
3187they can be kept outside the pkgsrc tree in the $LOCALPATCHES directory. The 3187they can be kept outside the pkgsrc tree in the $LOCALPATCHES directory. The
3188directory tree there is expected to have the same "category/package" structure 3188directory tree there is expected to have the same "category/package" structure
3189as pkgsrc, and patches are expected to be stored inside these dirs (also known 3189as pkgsrc, and patches are expected to be stored inside these dirs (also known
3190as $LOCALPATCHES/$PKGPATH). For example, if you want to keep a private patch 3190as $LOCALPATCHES/$PKGPATH). For example, if you want to keep a private patch
3191for pkgsrc/graphics/png, keep it in $LOCALPATCHES/graphics/png/mypatch. All 3191for pkgsrc/graphics/png, keep it in $LOCALPATCHES/graphics/png/mypatch. All
3192files in the named directory are expected to be patch files, and they are 3192files in the named directory are expected to be patch files, and they are
3193applied after pkgsrc patches are applied. 3193applied after pkgsrc patches are applied.
3194 3194
319512.3.4. Patching guidelines 319512.3.4. Patching guidelines
3196 3196
3197When fixing a portability issue in the code do not use preprocessor magic to 3197When fixing a portability issue in the code do not use preprocessor magic to
3198check for the current operating system nor platform. Doing so hurts portability 3198check for the current operating system nor platform. Doing so hurts portability
3199to other platforms because the OS-specific details are not abstracted 3199to other platforms because the OS-specific details are not abstracted
3200appropriately. 3200appropriately.
3201 3201
3202The general rule to follow is: instead of checking for the operating system the 3202The general rule to follow is: instead of checking for the operating system the
3203application is being built on, check for the specific features you need. For 3203application is being built on, check for the specific features you need. For
3204example, instead of assuming that kqueue is available under NetBSD and using 3204example, instead of assuming that kqueue is available under NetBSD and using
3205the __NetBSD__ macro to conditionalize kqueue support, add a check that detects 3205the __NetBSD__ macro to conditionalize kqueue support, add a check that detects
3206kqueue itself -- yes, this generally involves patching the configure script. 3206kqueue itself -- yes, this generally involves patching the configure script.
3207There is absolutely nothing that prevents some OSes from adopting interfaces 3207There is absolutely nothing that prevents some OSes from adopting interfaces
3208from other OSes (e.g. Linux implementing kqueue), something that the above 3208from other OSes (e.g. Linux implementing kqueue), something that the above
3209checks cannot take into account. 3209checks cannot take into account.
3210 3210
3211Of course, checking for features generally involves more work on the 3211Of course, checking for features generally involves more work on the
3212developer's side, but the resulting changes are cleaner and there are chances 3212developer's side, but the resulting changes are cleaner and there are chances
3213they will work on many other platforms. Not to mention that there are higher 3213they will work on many other platforms. Not to mention that there are higher
3214chances of being later integrated into the mainstream sources. Remember: It 3214chances of being later integrated into the mainstream sources. Remember: It
3215doesn't work unless it is right! 3215doesn't work unless it is right!
3216 3216
3217Some typical examples: 3217Some typical examples:
3218 3218
3219Table 12.1. Patching examples 3219Table 12.1. Patching examples
3220 3220
3221+-------------------------------------------------------------------------------------------+ 3221+-------------------------------------------------------------------------------------------+
3222| Where | Incorrect | Correct | 3222| Where | Incorrect | Correct |
3223|---------+--------------------------+------------------------------------------------------| 3223|---------+--------------------------+------------------------------------------------------|
3224| |case ${target_os} in | | 3224| |case ${target_os} in | |
3225|configure|netbsd*) have_kvm=yes ;; |AC_CHECK_LIB(kvm, kvm_open, have_kvm=yes, have_kvm=no)| 3225|configure|netbsd*) have_kvm=yes ;; |AC_CHECK_LIB(kvm, kvm_open, have_kvm=yes, have_kvm=no)|
3226|script |*) have_kvm=no ;; | | 3226|script |*) have_kvm=no ;; | |
3227| |esac | | 3227| |esac | |
3228|---------+--------------------------+------------------------------------------------------| 3228|---------+--------------------------+------------------------------------------------------|
3229|C source |#if defined(__NetBSD__) |#if defined(HAVE_SYS_EVENT_H) | 3229|C source |#if defined(__NetBSD__) |#if defined(HAVE_SYS_EVENT_H) |
3230|file |# include <sys/event.h> |# include <sys/event.h> | 3230|file |# include <sys/event.h> |# include <sys/event.h> |
3231| |#endif |#endif | 3231| |#endif |#endif |
3232|---------+--------------------------+------------------------------------------------------| 3232|---------+--------------------------+------------------------------------------------------|
3233| |int |int | 3233| |int |int |
3234| |monitor_file(...) |monitor_file(...) | 3234| |monitor_file(...) |monitor_file(...) |
3235| |{ |{ | 3235| |{ |{ |
3236| |#if defined(__NetBSD__) |#if defined(HAVE_KQUEUE) | 3236| |#if defined(__NetBSD__) |#if defined(HAVE_KQUEUE) |
3237|C source | int fd = kqueue();| int fd = kqueue(); | 3237|C source | int fd = kqueue();| int fd = kqueue(); |
3238|file | ... | ... | 3238|file | ... | ... |
3239| |#else |#else | 3239| |#else |#else |
3240| | ... | ... | 3240| | ... | ... |
3241| |#endif |#endif | 3241| |#endif |#endif |
3242| |} |} | 3242| |} |} |
3243+-------------------------------------------------------------------------------------------+ 3243+-------------------------------------------------------------------------------------------+
3244 3244
3245 3245
324612.3.5. Feedback to the author 324612.3.5. Feedback to the author
3247 3247
3248Always, always, always feed back any portability fixes or improvements you do 3248Always, always, always feed back any portability fixes or improvements you do
3249to a package to the mainstream developers. This is the only way to get their 3249to a package to the mainstream developers. This is the only way to get their
3250attention on portability issues and to ensure that future versions can be built 3250attention on portability issues and to ensure that future versions can be built
3251out-of-the box on NetBSD. Furthermore, any user that gets newer distfiles will 3251out-of-the box on NetBSD. Furthermore, any user that gets newer distfiles will
3252get the fixes straight from the packaged code. 3252get the fixes straight from the packaged code.
3253 3253
3254This generally involves cleaning up the patches (because sometimes the patches 3254This generally involves cleaning up the patches (because sometimes the patches
3255that are added to pkgsrc are quick hacks), filing bug reports in the 3255that are added to pkgsrc are quick hacks), filing bug reports in the
3256appropriate trackers for the projects and working with the mainstream authors 3256appropriate trackers for the projects and working with the mainstream authors
3257to accept your changes. It is extremely important that you do it so that the 3257to accept your changes. It is extremely important that you do it so that the
3258packages in pkgsrc are kept simple and thus further changes can be done without 3258packages in pkgsrc are kept simple and thus further changes can be done without
3259much hassle. 3259much hassle.
3260 3260
3261When you have done this, please add a URL to the upstream bug report to the 3261When you have done this, please add a URL to the upstream bug report to the
3262patch comment. 3262patch comment.
3263 3263
3264Support the idea of free software! 3264Support the idea of free software!
3265 3265
326612.4. Other mandatory files 326612.4. Other mandatory files
3267 3267
3268DESCR 3268DESCR
3269 3269
3270 A multi-line description of the piece of software. This should include any 3270 A multi-line description of the piece of software. This should include any
3271 credits where they are due. Please bear in mind that others do not share 3271 credits where they are due. Please bear in mind that others do not share
3272 your sense of humour (or spelling idiosyncrasies), and that others will 3272 your sense of humour (or spelling idiosyncrasies), and that others will
3273 read everything that you write here. 3273 read everything that you write here.
3274 3274
3275PLIST 3275PLIST
3276 3276
3277 This file governs the files that are installed on your system: all the 3277 This file governs the files that are installed on your system: all the
3278 binaries, manual pages, etc. There are other directives which may be 3278 binaries, manual pages, etc. There are other directives which may be
3279 entered in this file, to control the creation and deletion of directories, 3279 entered in this file, to control the creation and deletion of directories,
3280 and the location of inserted files. See Chapter 19, PLIST issues for more 3280 and the location of inserted files. See Chapter 19, PLIST issues for more
3281 information. 3281 information.
3282 3282
328312.5. Optional files 328312.5. Optional files
3284 3284
328512.5.1. Files affecting the binary package 328512.5.1. Files affecting the binary package
3286 3286
3287INSTALL 3287INSTALL
3288 3288
3289 This shell script is invoked twice by pkg_add(1). First time after package 3289 This shell script is invoked twice by pkg_add(1). First time after package
3290 extraction and before files are moved in place, the second time after the 3290 extraction and before files are moved in place, the second time after the
3291 files to install are moved in place. This can be used to do any custom 3291 files to install are moved in place. This can be used to do any custom
3292 procedures not possible with @exec commands in PLIST. See pkg_add(1) and 3292 procedures not possible with @exec commands in PLIST. See pkg_add(1) and
3293 pkg_create(1) for more information. See also Section 20.1, "Files and 3293 pkg_create(1) for more information. See also Section 20.1, "Files and
3294 directories outside the installation prefix". Please note that you can 3294 directories outside the installation prefix". Please note that you can
3295 modify variables in it easily by using FILES_SUBST in the package's 3295 modify variables in it easily by using FILES_SUBST in the package's
3296 Makefile: 3296 Makefile:
3297 3297
3298 FILES_SUBST+= SOMEVAR="somevalue" 3298 FILES_SUBST+= SOMEVAR="somevalue"
3299 3299
3300 replaces "@SOMEVAR@" with "somevalue" in the INSTALL. By default, 3300 replaces "@SOMEVAR@" with "somevalue" in the INSTALL. By default,
3301 substitution is performed for PREFIX, LOCALBASE, X11BASE, VARBASE, and a 3301 substitution is performed for PREFIX, LOCALBASE, X11BASE, VARBASE, and a
3302 few others, type make help topic=FILES_SUBST for a complete list. 3302 few others, type make help topic=FILES_SUBST for a complete list.
3303 3303
3304DEINSTALL 3304DEINSTALL
3305 3305
3306 This script is executed before and after any files are removed. It is this 3306 This script is executed before and after any files are removed. It is this
3307 script's responsibility to clean up any additional messy details around the 3307 script's responsibility to clean up any additional messy details around the
3308 package's installation, since all pkg_delete knows is how to delete the 3308 package's installation, since all pkg_delete knows is how to delete the
3309 files created in the original distribution. See pkg_delete(1) and 3309 files created in the original distribution. See pkg_delete(1) and
3310 pkg_create(1) for more information. The same methods to replace variables 3310 pkg_create(1) for more information. The same methods to replace variables
3311 can be used as for the INSTALL file. 3311 can be used as for the INSTALL file.
3312 3312
3313MESSAGE 3313MESSAGE
3314 3314
3315 This file is displayed after installation of the package. While this was 3315 This file is displayed after installation of the package. While this was
3316 used often in the past, it has two problems: the display will be missed if 3316 used often in the past, it has two problems: the display will be missed if
3317 many packages are intalled at once, and the person installing the package 3317 many packages are intalled at once, and the person installing the package
3318 and the one using or configuring it may be different. It should therefore 3318 and the one using or configuring it may be different. It should therefore
3319 be used only in exceptional circumstances where lasting negative 3319 be used only in exceptional circumstances where lasting negative
3320 consequences would result from someone not reading it. 3320 consequences would result from someone not reading it.
3321 3321
3322 MESSAGE should not be used for: 3322 MESSAGE should not be used for:
3323 3323
3324 + exhortations to read the documentation 3324 + exhortations to read the documentation
3325 3325
3326 + reminders to install rc.d files and set variables 3326 + reminders to install rc.d files and set variables
3327 3327
3328 + anything that should be explained in the installation/configuration 3328 + anything that should be explained in the installation/configuration
3329 documentation that should come with the package 3329 documentation that should come with the package
3330 3330
3331 If the documentation provided by upstream needs enhancing, create e.g. 3331 If the documentation provided by upstream needs enhancing, create e.g.
3332 files/README.pkgsrc and install it in the package's documentation 3332 files/README.pkgsrc and install it in the package's documentation
3333 directory. 3333 directory.
3334 3334
3335 Note that MESSAGE is shown for all operating systems and all init systems. 3335 Note that MESSAGE is shown for all operating systems and all init systems.
3336 If a MESSAGE is necessary, it should be narrowed to only those operating 3336 If a MESSAGE is necessary, it should be narrowed to only those operating
3337 systems and init systems to which it applies. 3337 systems and init systems to which it applies.
3338 3338
3339 Note that you can modify variables in it easily by using MESSAGE_SUBST in 3339 Note that you can modify variables in it easily by using MESSAGE_SUBST in
3340 the package's Makefile: 3340 the package's Makefile:
3341 3341
3342 MESSAGE_SUBST+= SOMEVAR="somevalue" 3342 MESSAGE_SUBST+= SOMEVAR="somevalue"
3343 3343
3344 replaces "${SOMEVAR}" with "somevalue" in MESSAGE. By default, substitution 3344 replaces "${SOMEVAR}" with "somevalue" in MESSAGE. By default, substitution
3345 is performed for PKGNAME, PKGBASE, PREFIX, LOCALBASE, X11BASE, 3345 is performed for PKGNAME, PKGBASE, PREFIX, LOCALBASE, X11BASE,
3346 PKG_SYSCONFDIR, ROOT_GROUP, and ROOT_USER. 3346 PKG_SYSCONFDIR, ROOT_GROUP, and ROOT_USER.
3347 3347
3348 You can display a different or additional files by setting the MESSAGE_SRC 3348 You can display a different or additional files by setting the MESSAGE_SRC
3349 variable. Its default is MESSAGE, if the file exists. 3349 variable. Its default is MESSAGE, if the file exists.
3350 3350
3351ALTERNATIVES 3351ALTERNATIVES
3352 3352
3353 This file is used by the alternatives framework. It creates, configures, 3353 This file is used by the alternatives framework. It creates, configures,
3354 and destroys generic wrappers used to run programs with similar interfaces. 3354 and destroys generic wrappers used to run programs with similar interfaces.
3355 See pkg_alternatives(8) from pkgtools/pkg_alternatives for more 3355 See pkg_alternatives(8) from pkgtools/pkg_alternatives for more
3356 information. 3356 information.
3357 3357
3358 Each line of the file contains two filenames, first the wrapper and then 3358 Each line of the file contains two filenames, first the wrapper and then
3359 the alternative provided by the package. Both paths are relative to PREFIX. 3359 the alternative provided by the package. Both paths are relative to PREFIX.
3360 3360
336112.5.2. Files affecting the build process 336112.5.2. Files affecting the build process
3362 3362
3363Makefile.common 3363Makefile.common
3364 3364
3365 This file contains arbitrary things that could also go into a Makefile, but 3365 This file contains arbitrary things that could also go into a Makefile, but
3366 its purpose is to be used by more than one package. This file should only 3366 its purpose is to be used by more than one package. This file should only
3367 be used when the packages that will use the file are known in advance. For 3367 be used when the packages that will use the file are known in advance. For
3368 other purposes it is often better to write a *.mk file and give it a good 3368 other purposes it is often better to write a *.mk file and give it a good
3369 name that describes what it does. 3369 name that describes what it does.
3370 3370
3371buildlink3.mk 3371buildlink3.mk
3372 3372
3373 This file contains the dependency information for the buildlink3 framework 3373 This file contains the dependency information for the buildlink3 framework
3374 (see Chapter 18, Buildlink methodology). 3374 (see Chapter 18, Buildlink methodology).
3375 3375
3376hacks.mk 3376hacks.mk
3377 3377
3378 This file contains workarounds for compiler bugs and similar things. It is 3378 This file contains workarounds for compiler bugs and similar things. It is
3379 included automatically by the pkgsrc infrastructure, so you don't need an 3379 included automatically by the pkgsrc infrastructure, so you don't need an
3380 extra .include line for it. 3380 extra .include line for it.
3381 3381
3382options.mk 3382options.mk
3383 3383
3384 This file contains the code for the package-specific options (see 3384 This file contains the code for the package-specific options (see
3385 Chapter 16, Options handling) that can be selected by the user. If a 3385 Chapter 16, Options handling) that can be selected by the user. If a
3386 package has only one or two options, it is equally acceptable to put the 3386 package has only one or two options, it is equally acceptable to put the
3387 code directly into the Makefile. 3387 code directly into the Makefile.
3388 3388
338912.5.3. Files affecting nothing at all 338912.5.3. Files affecting nothing at all
3390 3390
3391README* 3391README*
3392 3392
3393 These files do not take place in the creation of a package and thus are 3393 These files do not take place in the creation of a package and thus are
3394 purely informative to the package developer. 3394 purely informative to the package developer.
3395 3395
3396TODO 3396TODO
3397 3397
3398 This file contains things that need to be done to make the package even 3398 This file contains things that need to be done to make the package even
3399 better. 3399 better.
3400 3400
340112.6. work* 340112.6. work*
3402 3402
3403When you type make, the distribution files are unpacked into the directory 3403When you type make, the distribution files are unpacked into the directory
3404denoted by WRKDIR. It can be removed by running make clean. Besides the 3404denoted by WRKDIR. It can be removed by running make clean. Besides the
3405sources, this directory is also used to keep various timestamp files. The 3405sources, this directory is also used to keep various timestamp files. The
3406directory gets removed completely on clean. The default is ${.CURDIR}/work or $ 3406directory gets removed completely on clean. The default is ${.CURDIR}/work or $
3407{.CURDIR}/work.${MACHINE_ARCH} if OBJMACHINE is set. 3407{.CURDIR}/work.${MACHINE_ARCH} if OBJMACHINE is set.
3408 3408
340912.7. files/* 340912.7. files/*
3410 3410
3411If you have any files that you wish to be placed in the package prior to 3411If you have any files that you wish to be placed in the package prior to
3412configuration or building, you can place these files here and use a ${CP} 3412configuration or building, you can place these files here and use a ${CP}
3413command in the "post-extract" target to achieve this. 3413command in the "post-extract" target to achieve this.
3414 3414
3415If you want to share files in this way with other packages, set the FILESDIR 3415If you want to share files in this way with other packages, set the FILESDIR
3416variable to point to the other package's files directory, e.g.: 3416variable to point to the other package's files directory, e.g.:
3417 3417
3418FILESDIR= ../../editors/xemacs/files 3418FILESDIR= ../../editors/xemacs/files
3419 3419
3420Chapter 13. The build process 3420Chapter 13. The build process
3421 3421
3422Table of Contents 3422Table of Contents
3423 3423
342413.1. Introduction 342413.1. Introduction
342513.2. Program location 342513.2. Program location
342613.3. Directories used during the build process 342613.3. Directories used during the build process
342713.4. Running a phase 342713.4. Running a phase
342813.5. The fetch phase 342813.5. The fetch phase
3429 3429
3430 13.5.1. What to fetch and where to get it from 3430 13.5.1. What to fetch and where to get it from
3431 13.5.2. How are the files fetched? 3431 13.5.2. How are the files fetched?
3432 3432
343313.6. The checksum phase 343313.6. The checksum phase
343413.7. The extract phase 343413.7. The extract phase
343513.8. The patch phase 343513.8. The patch phase
343613.9. The tools phase 343613.9. The tools phase
343713.10. The wrapper phase 343713.10. The wrapper phase
343813.11. The configure phase 343813.11. The configure phase
343913.12. The build phase 343913.12. The build phase
344013.13. The test phase 344013.13. The test phase
344113.14. The install phase 344113.14. The install phase
344213.15. The package phase 344213.15. The package phase
344313.16. Cleaning up 344313.16. Cleaning up
344413.17. Other helpful targets 344413.17. Other helpful targets
3445 3445
344613.1. Introduction 344613.1. Introduction
3447 3447
3448This chapter gives a detailed description on how a package is built. Building a 3448This chapter gives a detailed description on how a package is built. Building a
3449package is separated into different phases (for example fetch, build, install), 3449package is separated into different phases (for example fetch, build, install),
3450all of which are described in the following sections. Each phase is split into 3450all of which are described in the following sections. Each phase is split into
3451so-called stages, which take the name of the containing phase, prefixed by one 3451so-called stages, which take the name of the containing phase, prefixed by one
3452of pre-, do- or post-. (Examples are pre-configure, post-build.) Most of the 3452of pre-, do- or post-. (Examples are pre-configure, post-build.) Most of the
3453actual work is done in the do-* stages. 3453actual work is done in the do-* stages.
3454 3454
3455Never override the regular targets (like fetch), if you have to, override the 3455Never override the regular targets (like fetch), if you have to, override the
3456do-* ones instead. 3456do-* ones instead.
3457 3457
3458The basic steps for building a program are always the same. First the program's 3458The basic steps for building a program are always the same. First the program's
3459source (distfile) must be brought to the local system and then extracted. After 3459source (distfile) must be brought to the local system and then extracted. After
3460any pkgsrc-specific patches to compile properly are applied, the software can 3460any pkgsrc-specific patches to compile properly are applied, the software can
3461be configured, then built (usually by compiling), and finally the generated 3461be configured, then built (usually by compiling), and finally the generated
3462binaries, etc. can be put into place on the system. 3462binaries, etc. can be put into place on the system.
3463 3463
3464To get more details about what is happening at each step, you can set the 3464To get more details about what is happening at each step, you can set the
3465PKG_VERBOSE variable, or the PATCH_DEBUG variable if you are just interested in 3465PKG_VERBOSE variable, or the PATCH_DEBUG variable if you are just interested in
3466more details about the patch step. 3466more details about the patch step.
3467 3467
346813.2. Program location 346813.2. Program location
3469 3469
3470Before outlining the process performed by the NetBSD package system in the next 3470Before outlining the process performed by the NetBSD package system in the next
3471section, here's a brief discussion on where programs are installed, and which 3471section, here's a brief discussion on where programs are installed, and which
3472variables influence this. 3472variables influence this.
3473 3473
3474The automatic variable PREFIX indicates where all files of the final program 3474The automatic variable PREFIX indicates where all files of the final program
3475shall be installed. It is usually set to LOCALBASE (/usr/pkg), or CROSSBASE for 3475shall be installed. It is usually set to LOCALBASE (/usr/pkg), or CROSSBASE for
3476pkgs in the cross category. The value of PREFIX needs to be put into the 3476pkgs in the cross category. The value of PREFIX needs to be put into the
3477various places in the program's source where paths to these files are encoded. 3477various places in the program's source where paths to these files are encoded.
3478See Section 12.3, "patches/*" and Section 21.3.1, "Shared libraries - libtool" 3478See Section 12.3, "patches/*" and Section 21.3.1, "Shared libraries - libtool"
3479for more details. 3479for more details.
3480 3480
3481When choosing which of these variables to use, follow the following rules: 3481When choosing which of these variables to use, follow the following rules:
3482 3482
3483 * PREFIX always points to the location where the current pkg will be 3483 * PREFIX always points to the location where the current pkg will be
3484 installed. When referring to a pkg's own installation path, use "${PREFIX}" 3484 installed. When referring to a pkg's own installation path, use "${PREFIX}"
3485 . 3485 .
3486 3486
3487 * LOCALBASE is where all pkgs are installed. If you need to construct a -I or 3487 * LOCALBASE is where all pkgs are installed. If you need to construct a -I or
3488 -L argument to the compiler to find includes and libraries installed by 3488 -L argument to the compiler to find includes and libraries installed by
3489 another pkg, use "${LOCALBASE}". The name LOCALBASE stems from FreeBSD, 3489 another pkg, use "${LOCALBASE}". The name LOCALBASE stems from FreeBSD,
3490 which installed all packages in /usr/local. As pkgsrc leaves /usr/local for 3490 which installed all packages in /usr/local. As pkgsrc leaves /usr/local for
3491 the system administrator, this variable is a misnomer. 3491 the system administrator, this variable is a misnomer.
3492 3492
3493 * X11BASE is where the actual X11 distribution (from xsrc, etc.) is 3493 * X11BASE is where the actual X11 distribution (from xsrc, etc.) is
3494 installed. When looking for standard X11 includes (not those installed by a 3494 installed. When looking for standard X11 includes (not those installed by a
3495 package), use "${X11BASE}". 3495 package), use "${X11BASE}".
3496 3496
3497 * X11-based packages using imake must set USE_IMAKE to be installed correctly 3497 * X11-based packages using imake must set USE_IMAKE to be installed correctly
3498 under LOCALBASE. 3498 under LOCALBASE.
3499 3499
3500 * Within ${PREFIX}, packages should install files according to hier(7), with 3500 * Within ${PREFIX}, packages should install files according to hier(7), with
3501 the exception that manual pages go into ${PREFIX}/man, not ${PREFIX}/share/ 3501 the exception that manual pages go into ${PREFIX}/man, not ${PREFIX}/share/
3502 man. 3502 man.
3503 3503
350413.3. Directories used during the build process 350413.3. Directories used during the build process
3505 3505
3506When building a package, various directories are used to store source files, 3506When building a package, various directories are used to store source files,
3507temporary files, pkgsrc-internal files, and so on. These directories are 3507temporary files, pkgsrc-internal files, and so on. These directories are
3508explained here. 3508explained here.
3509 3509
3510Some of the directory variables contain relative pathnames. There are two 3510Some of the directory variables contain relative pathnames. There are two
3511common base directories for these relative directories: PKGSRCDIR/PKGPATH is 3511common base directories for these relative directories: PKGSRCDIR/PKGPATH is
3512used for directories that are pkgsrc-specific. WRKSRC is used for directories 3512used for directories that are pkgsrc-specific. WRKSRC is used for directories
3513inside the package itself. 3513inside the package itself.
3514 3514
3515PKGSRCDIR 3515PKGSRCDIR
3516 3516
3517 This is an absolute pathname that points to the pkgsrc root directory. 3517 This is an absolute pathname that points to the pkgsrc root directory.
3518 Generally, you don't need it. 3518 Generally, you don't need it.
3519 3519
3520PKGDIR 3520PKGDIR
3521 3521
3522 This is an absolute pathname that points to the current package. 3522 This is an absolute pathname that points to the current package.
3523 3523
3524PKGPATH 3524PKGPATH
3525 3525
3526 This is a pathname relative to PKGSRCDIR that points to the current 3526 This is a pathname relative to PKGSRCDIR that points to the current
3527 package. 3527 package.
3528 3528
3529WRKDIR 3529WRKDIR
3530 3530
3531 This is an absolute pathname pointing to the directory where all work takes 3531 This is an absolute pathname pointing to the directory where all work takes
3532 place. The distfiles are extracted to this directory. It also contains 3532 place. The distfiles are extracted to this directory. It also contains
3533 temporary directories and log files used by the various pkgsrc frameworks, 3533 temporary directories and log files used by the various pkgsrc frameworks,
3534 like buildlink or the wrappers. 3534 like buildlink or the wrappers.
3535 3535
3536WRKSRC 3536WRKSRC
3537 3537
3538 This is an absolute pathname pointing to the directory where the distfiles 3538 This is an absolute pathname pointing to the directory where the distfiles
3539 are extracted. It is usually a direct subdirectory of WRKDIR, and often 3539 are extracted. It is usually a direct subdirectory of WRKDIR, and often
3540 it's the only directory entry that isn't hidden. This variable may be 3540 it's the only directory entry that isn't hidden. This variable may be
3541 changed by a package Makefile. 3541 changed by a package Makefile.
3542 3542
3543The CREATE_WRKDIR_SYMLINK definition takes either the value yes or no and 3543The CREATE_WRKDIR_SYMLINK definition takes either the value yes or no and
3544defaults to no. It indicates whether a symbolic link to the WRKDIR is to be 3544defaults to no. It indicates whether a symbolic link to the WRKDIR is to be
3545created in the pkgsrc entry's directory. If users would like to have their 3545created in the pkgsrc entry's directory. If users would like to have their
3546pkgsrc trees behave in a read-only manner, then the value of 3546pkgsrc trees behave in a read-only manner, then the value of
3547CREATE_WRKDIR_SYMLINK should be set to no. 3547CREATE_WRKDIR_SYMLINK should be set to no.
3548 3548
354913.4. Running a phase 354913.4. Running a phase
3550 3550
3551You can run a particular phase by typing make phase, where phase is the name of 3551You can run a particular phase by typing make phase, where phase is the name of
3552the phase. This will automatically run all phases that are required for this 3552the phase. This will automatically run all phases that are required for this
3553phase. The default phase is build, that is, when you run make without 3553phase. The default phase is build, that is, when you run make without
3554parameters in a package directory, the package will be built, but not 3554parameters in a package directory, the package will be built, but not
3555installed. 3555installed.
3556 3556
355713.5. The fetch phase 355713.5. The fetch phase
3558 3558
3559The first step in building a package is to fetch the distribution files 3559The first step in building a package is to fetch the distribution files
3560(distfiles) from the sites that are providing them. This is the task of the  3560(distfiles) from the sites that are providing them. This is the task of the
3561fetch phase. 3561fetch phase.
3562 3562
356313.5.1. What to fetch and where to get it from 356313.5.1. What to fetch and where to get it from
3564 3564
3565In simple cases, MASTER_SITES defines all URLs from where the distfile, whose 3565In simple cases, MASTER_SITES defines all URLs from where the distfile, whose
3566name is derived from the DISTNAME variable, is fetched. The more complicated 3566name is derived from the DISTNAME variable, is fetched. The more complicated
3567cases are described below. 3567cases are described below.
3568 3568
3569The variable DISTFILES specifies the list of distfiles that have to be fetched. 3569The variable DISTFILES specifies the list of distfiles that have to be fetched.
3570Its value defaults to ${DEFAULT_DISTFILES} and its value is ${DISTNAME}$ 3570Its value defaults to ${DEFAULT_DISTFILES} and its value is ${DISTNAME}$
3571{EXTRACT_SUFX}, so that most packages don't need to define it at all. 3571{EXTRACT_SUFX}, so that most packages don't need to define it at all.
3572EXTRACT_SUFX is .tar.gz by default, but can be changed freely. Note that if 3572EXTRACT_SUFX is .tar.gz by default, but can be changed freely. Note that if
3573your package requires additional distfiles to the default one, you cannot just 3573your package requires additional distfiles to the default one, you cannot just
3574append the additional filenames using the += operator, but you have write for 3574append the additional filenames using the += operator, but you have write for
3575example: 3575example:
3576 3576
3577DISTFILES= ${DEFAULT_DISTFILES} additional-files.tar.gz 3577DISTFILES= ${DEFAULT_DISTFILES} additional-files.tar.gz
3578 3578
3579Each distfile is fetched from a list of sites, usually MASTER_SITES. If the 3579Each distfile is fetched from a list of sites, usually MASTER_SITES. If the
3580package has multiple DISTFILES or multiple PATCHFILES from different sites, you 3580package has multiple DISTFILES or multiple PATCHFILES from different sites, you
3581can set SITES.distfile to the list of URLs where the file distfile (including 3581can set SITES.distfile to the list of URLs where the file distfile (including
3582the suffix) can be found. 3582the suffix) can be found.
3583 3583
3584DISTFILES= ${DISTNAME}${EXTRACT_SUFX} 3584DISTFILES= ${DISTNAME}${EXTRACT_SUFX}
3585DISTFILES+= foo-file.tar.gz 3585DISTFILES+= foo-file.tar.gz
3586SITES.foo-file.tar.gz= \ 3586SITES.foo-file.tar.gz= \
3587https://www.somewhere.com/somehow/ \ 3587https://www.somewhere.com/somehow/ \
3588https://www.somewhereelse.com/mirror/somehow/ 3588https://www.somewhereelse.com/mirror/somehow/
3589 3589
3590When actually fetching the distfiles, each item from MASTER_SITES or SITES.* 3590When actually fetching the distfiles, each item from MASTER_SITES or SITES.*
3591gets the name of each distfile appended to it, without an intermediate slash. 3591gets the name of each distfile appended to it, without an intermediate slash.
3592Therefore, all site values have to end with a slash or other separator 3592Therefore, all site values have to end with a slash or other separator
3593character. This allows for example to set MASTER_SITES to a URL of a CGI script 3593character. This allows for example to set MASTER_SITES to a URL of a CGI script
3594that gets the name of the distfile as a parameter. In this case, the definition 3594that gets the name of the distfile as a parameter. In this case, the definition
3595would look like: 3595would look like:
3596 3596
3597MASTER_SITES= https://www.example.com/download.cgi?file= 3597MASTER_SITES= https://www.example.com/download.cgi?file=
3598 3598
3599The exception to this rule are URLs starting with a dash. In that case the URL 3599The exception to this rule are URLs starting with a dash. In that case the URL
3600is taken as is, fetched and the result stored under the name of the distfile. 3600is taken as is, fetched and the result stored under the name of the distfile.
3601You can use this style for the case when the download URL style does not match 3601You can use this style for the case when the download URL style does not match
3602the above common case. For example, if permanent download URL is a redirector 3602the above common case. For example, if permanent download URL is a redirector
3603to the real download URL, or the download file name is offered by an HTTP 3603to the real download URL, or the download file name is offered by an HTTP
3604Content-Disposition header. In the following example, foo-1.0.0.tar.gz will be 3604Content-Disposition header. In the following example, foo-1.0.0.tar.gz will be
3605created instead of the default v1.0.0.tar.gz. 3605created instead of the default v1.0.0.tar.gz.
3606 3606
3607DISTNAME= foo-1.0.0 3607DISTNAME= foo-1.0.0
3608MASTER_SITES= -https://www.example.com/archive/v1.0.0.tar.gz 3608MASTER_SITES= -https://www.example.com/archive/v1.0.0.tar.gz
3609 3609
3610There are some predefined values for MASTER_SITES, which can be used in 3610There are some predefined values for MASTER_SITES, which can be used in
3611packages. The names of the variables should speak for themselves. 3611packages. The names of the variables should speak for themselves.
3612 3612
3613MASTER_SITE_APACHE MASTER_SITE_BACKUP 3613MASTER_SITE_APACHE MASTER_SITE_BACKUP
3614MASTER_SITE_CRATESIO MASTER_SITE_CYGWIN 3614MASTER_SITE_CRATESIO MASTER_SITE_CYGWIN
3615MASTER_SITE_DEBIAN MASTER_SITE_FREEBSD 3615MASTER_SITE_DEBIAN MASTER_SITE_FREEBSD
3616MASTER_SITE_FREEBSD_LOCAL MASTER_SITE_GENTOO 3616MASTER_SITE_FREEBSD_LOCAL MASTER_SITE_GENTOO
3617MASTER_SITE_GITHUB MASTER_SITE_GNOME 3617MASTER_SITE_GITHUB MASTER_SITE_GITLAB
3618MASTER_SITE_GNU MASTER_SITE_GNUSTEP 3618MASTER_SITE_GNOME MASTER_SITE_GNU
3619MASTER_SITE_HASKELL_HACKAGE MASTER_SITE_IFARCHIVE 3619MASTER_SITE_GNUSTEP MASTER_SITE_HASKELL_HACKAGE
3620MASTER_SITE_KDE MASTER_SITE_MOZILLA 3620MASTER_SITE_IFARCHIVE MASTER_SITE_KDE
3621MASTER_SITE_MOZILLA_ALL MASTER_SITE_MYSQL 3621MASTER_SITE_MOZILLA MASTER_SITE_MOZILLA_ALL
3622MASTER_SITE_NETLIB MASTER_SITE_OPENBSD 3622MASTER_SITE_MYSQL MASTER_SITE_NETLIB
3623MASTER_SITE_OPENOFFICE MASTER_SITE_OSDN 3623MASTER_SITE_OPENBSD MASTER_SITE_OPENOFFICE
3624MASTER_SITE_PERL_CPAN MASTER_SITE_PGSQL 3624MASTER_SITE_OSDN MASTER_SITE_PERL_CPAN
3625MASTER_SITE_PYPI MASTER_SITE_RUBYGEMS 3625MASTER_SITE_PGSQL MASTER_SITE_PYPI
3626MASTER_SITE_R_CRAN MASTER_SITE_SOURCEFORGE 3626MASTER_SITE_RUBYGEMS MASTER_SITE_R_CRAN
3627MASTER_SITE_SUNSITE MASTER_SITE_SUSE 3627MASTER_SITE_SOURCEFORGE MASTER_SITE_SUNSITE
3628MASTER_SITE_TEX_CTAN MASTER_SITE_XCONTRIB 3628MASTER_SITE_SUSE MASTER_SITE_TEX_CTAN
3629MASTER_SITE_XEMACS MASTER_SITE_XORG 3629MASTER_SITE_XCONTRIB MASTER_SITE_XEMACS
 3630MASTER_SITE_XORG
3630 3631
3631Some explanations for the less self-explaining ones: MASTER_SITE_BACKUP 3632Some explanations for the less self-explaining ones: MASTER_SITE_BACKUP
3632contains backup sites for packages that are maintained in ftp://ftp.NetBSD.org/ 3633contains backup sites for packages that are maintained in ftp://ftp.NetBSD.org/
3633pub/pkgsrc/distfiles/${DIST_SUBDIR}. MASTER_SITE_LOCAL contains local package 3634pub/pkgsrc/distfiles/${DIST_SUBDIR}. MASTER_SITE_LOCAL contains local package
3634source distributions that are maintained in ftp://ftp.NetBSD.org/pub/pkgsrc/ 3635source distributions that are maintained in ftp://ftp.NetBSD.org/pub/pkgsrc/
3635distfiles/LOCAL_PORTS/. 3636distfiles/LOCAL_PORTS/.
3636 3637
3637If you choose one of these predefined sites, you may want to specify a 3638If you choose one of these predefined sites, you may want to specify a
3638subdirectory of that site. Since these macros may expand to more than one 3639subdirectory of that site. Since these macros may expand to more than one
3639actual site, you must use the following construct to specify a subdirectory: 3640actual site, you must use the following construct to specify a subdirectory:
3640 3641
3641MASTER_SITES= ${MASTER_SITE_GNU:=subdirectory/name/} 3642MASTER_SITES= ${MASTER_SITE_GNU:=subdirectory/name/}
3642MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=project_name/} 3643MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=project_name/}
3643 3644
3644Note the trailing slash after the subdirectory name. 3645Note the trailing slash after the subdirectory name.
3645 3646
364613.5.2. How are the files fetched? 364713.5.2. How are the files fetched?
3647 3648
3648The fetch phase makes sure that all the distfiles exist in a local directory 3649The fetch phase makes sure that all the distfiles exist in a local directory
3649(DISTDIR, which can be set by the pkgsrc user). If the files do not exist, they 3650(DISTDIR, which can be set by the pkgsrc user). If the files do not exist, they
3650are fetched using commands of the form 3651are fetched using commands of the form
3651 3652
3652${FETCH_CMD} ${FETCH_BEFORE_ARGS} ${site}${file} ${FETCH_AFTER_ARGS} 3653${FETCH_CMD} ${FETCH_BEFORE_ARGS} ${site}${file} ${FETCH_AFTER_ARGS}
3653 3654
3654where ${site} varies through several possibilities in turn: first, 3655where ${site} varies through several possibilities in turn: first,
3655MASTER_SITE_OVERRIDE is tried, then the sites specified in either SITES.file if 3656MASTER_SITE_OVERRIDE is tried, then the sites specified in either SITES.file if
3656defined, else MASTER_SITES or PATCH_SITES, as applies, then finally the value 3657defined, else MASTER_SITES or PATCH_SITES, as applies, then finally the value
3657of MASTER_SITE_BACKUP. The order of all except the first and the last can be 3658of MASTER_SITE_BACKUP. The order of all except the first and the last can be
3658optionally sorted by the user, via setting either MASTER_SORT_RANDOM, and 3659optionally sorted by the user, via setting either MASTER_SORT_RANDOM, and
3659MASTER_SORT_AWK or MASTER_SORT_REGEX. 3660MASTER_SORT_AWK or MASTER_SORT_REGEX.
3660 3661
3661The specific command and arguments used depend on the FETCH_USING parameter. 3662The specific command and arguments used depend on the FETCH_USING parameter.
3662The example above is for FETCH_USING=custom. 3663The example above is for FETCH_USING=custom.
3663 3664
3664The distfiles mirror run by the NetBSD Foundation uses the mirror-distfiles 3665The distfiles mirror run by the NetBSD Foundation uses the mirror-distfiles
3665target to mirror the distfiles, if they are freely distributable. Packages 3666target to mirror the distfiles, if they are freely distributable. Packages
3666setting NO_SRC_ON_FTP (usually to "${RESTRICTED}") will not have their 3667setting NO_SRC_ON_FTP (usually to "${RESTRICTED}") will not have their
3667distfiles mirrored. 3668distfiles mirrored.
3668 3669
366913.6. The checksum phase 367013.6. The checksum phase
3670 3671
3671After the distfile(s) are fetched, their checksum is generated and compared 3672After the distfile(s) are fetched, their checksum is generated and compared
3672with the checksums stored in the distinfo file. If the checksums don't match, 3673with the checksums stored in the distinfo file. If the checksums don't match,
3673the build is aborted. This is to ensure the same distfile is used for building, 3674the build is aborted. This is to ensure the same distfile is used for building,
3674and that the distfile wasn't changed, e.g. by some malign force, deliberately 3675and that the distfile wasn't changed, e.g. by some malign force, deliberately
3675changed distfiles on the master distribution site or network lossage. 3676changed distfiles on the master distribution site or network lossage.
3676 3677
367713.7. The extract phase 367813.7. The extract phase
3678 3679
3679When the distfiles are present on the local system, they need to be extracted, 3680When the distfiles are present on the local system, they need to be extracted,
3680as they usually come in the form of some compressed archive format. 3681as they usually come in the form of some compressed archive format.
3681 3682
3682By default, all DISTFILES are extracted. If you only need some of them, you can 3683By default, all DISTFILES are extracted. If you only need some of them, you can
3683set the EXTRACT_ONLY variable to the list of those files. 3684set the EXTRACT_ONLY variable to the list of those files.
3684 3685
3685Extracting the files is usually done by a little program, mk/extract/extract, 3686Extracting the files is usually done by a little program, mk/extract/extract,
3686which already knows how to extract various archive formats, so most likely you 3687which already knows how to extract various archive formats, so most likely you
3687will not need to change anything here. But if you need, the following variables 3688will not need to change anything here. But if you need, the following variables
3688may help you: 3689may help you:
3689 3690
3690EXTRACT_OPTS_{BIN,LHA,PAX,RAR,TAR,ZIP,ZOO} 3691EXTRACT_OPTS_{BIN,LHA,PAX,RAR,TAR,ZIP,ZOO}
3691 3692
3692 Use these variables to override the default options for an extract command, 3693 Use these variables to override the default options for an extract command,
3693 which are defined in mk/extract/extract. 3694 which are defined in mk/extract/extract.
3694 3695
3695EXTRACT_USING 3696EXTRACT_USING
3696 3697
3697 This variable can be set to bsdtar, gtar, nbtar (which is the default 3698 This variable can be set to bsdtar, gtar, nbtar (which is the default
3698 value), pax, or an absolute pathname pointing to the command with which tar 3699 value), pax, or an absolute pathname pointing to the command with which tar
3699 archives should be extracted. It is preferred to choose bsdtar over gtar if 3700 archives should be extracted. It is preferred to choose bsdtar over gtar if
3700 NetBSD's pax-as-tar is not good enough. 3701 NetBSD's pax-as-tar is not good enough.
3701 3702
3702If the extract program doesn't serve your needs, you can also override the 3703If the extract program doesn't serve your needs, you can also override the
3703EXTRACT_CMD variable, which holds the command used for extracting the files. 3704EXTRACT_CMD variable, which holds the command used for extracting the files.
3704This command is executed in the ${WRKSRC} directory. During execution of this 3705This command is executed in the ${WRKSRC} directory. During execution of this
3705command, the shell variable extract_file holds the absolute pathname of the 3706command, the shell variable extract_file holds the absolute pathname of the
3706file that is going to be extracted. 3707file that is going to be extracted.
3707 3708
3708And if that still does not suffice, you can override the do-extract target in 3709And if that still does not suffice, you can override the do-extract target in
3709the package Makefile. 3710the package Makefile.
3710 3711
371113.8. The patch phase 371213.8. The patch phase
3712 3713
3713After extraction, all the patches named by the PATCHFILES, those present in the 3714After extraction, all the patches named by the PATCHFILES, those present in the
3714patches subdirectory of the package as well as in $LOCALPATCHES/$PKGPATH (e.g. 3715patches subdirectory of the package as well as in $LOCALPATCHES/$PKGPATH (e.g.
3715/usr/local/patches/graphics/png) are applied. Patchfiles ending in .Z or .gz 3716/usr/local/patches/graphics/png) are applied. Patchfiles ending in .Z or .gz
3716are uncompressed before they are applied, files ending in .orig or .rej are 3717are uncompressed before they are applied, files ending in .orig or .rej are
3717ignored. Any special options to patch(1) can be handed in PATCH_DIST_ARGS. See 3718ignored. Any special options to patch(1) can be handed in PATCH_DIST_ARGS. See
3718Section 12.3, "patches/*" for more details. 3719Section 12.3, "patches/*" for more details.
3719 3720
3720By default patch(1) is given special arguments to make it fail if the expected 3721By default patch(1) is given special arguments to make it fail if the expected
3721text from the patch context is not found in the patched file. If that happens, 3722text from the patch context is not found in the patched file. If that happens,
3722fix the patch file by comparing it with the actual text in the file to be 3723fix the patch file by comparing it with the actual text in the file to be
3723patched. 3724patched.
3724 3725
372513.9. The tools phase 372613.9. The tools phase
3726 3727
3727This is covered in Chapter 17, Tools needed for building or running. 3728This is covered in Chapter 17, Tools needed for building or running.
3728 3729
372913.10. The wrapper phase 373013.10. The wrapper phase
3730 3731
3731This phase creates wrapper programs for the compilers and linkers. The 3732This phase creates wrapper programs for the compilers and linkers. The
3732following variables can be used to tweak the wrappers. 3733following variables can be used to tweak the wrappers.
3733 3734
3734ECHO_WRAPPER_MSG 3735ECHO_WRAPPER_MSG
3735 3736
3736 The command used to print progress messages. Does nothing by default. Set 3737 The command used to print progress messages. Does nothing by default. Set
3737 to ${ECHO} to see the progress messages. 3738 to ${ECHO} to see the progress messages.
3738 3739
3739WRAPPER_DEBUG 3740WRAPPER_DEBUG
3740 3741
3741 This variable can be set to yes (default) or no, depending on whether you 3742 This variable can be set to yes (default) or no, depending on whether you
3742 want additional information in the wrapper log file. 3743 want additional information in the wrapper log file.
3743 3744
3744WRAPPER_UPDATE_CACHE 3745WRAPPER_UPDATE_CACHE
3745 3746
3746 This variable can be set to yes or no, depending on whether the wrapper 3747 This variable can be set to yes or no, depending on whether the wrapper
3747 should use its cache, which will improve the speed. The default value is 3748 should use its cache, which will improve the speed. The default value is
3748 yes, but is forced to no if the platform does not support it. 3749 yes, but is forced to no if the platform does not support it.
3749 3750
3750WRAPPER_REORDER_CMDS 3751WRAPPER_REORDER_CMDS
3751 3752
3752 A list of reordering commands. A reordering command has the form reorder:l: 3753 A list of reordering commands. A reordering command has the form reorder:l:
3753 lib1:lib2. It ensures that that -llib1 occurs before -llib2. 3754 lib1:lib2. It ensures that that -llib1 occurs before -llib2.
3754 3755
375513.11. The configure phase 375613.11. The configure phase
3756 3757
3757Most pieces of software need information on the header files, system calls, and 3758Most pieces of software need information on the header files, system calls, and
3758library routines which are available on the platform they run on. The process 3759library routines which are available on the platform they run on. The process
3759of determining this information is known as configuration, and is usually 3760of determining this information is known as configuration, and is usually
3760automated. In most cases, a script is supplied with the distfiles, and its 3761automated. In most cases, a script is supplied with the distfiles, and its
3761invocation results in generation of header files, Makefiles, etc. 3762invocation results in generation of header files, Makefiles, etc.
3762 3763
3763If the package contains a configure script, this can be invoked by setting 3764If the package contains a configure script, this can be invoked by setting
3764HAS_CONFIGURE to "yes". If the configure script is a GNU autoconf script, you 3765HAS_CONFIGURE to "yes". If the configure script is a GNU autoconf script, you
3765should set GNU_CONFIGURE to "yes" instead. 3766should set GNU_CONFIGURE to "yes" instead.
3766 3767
3767In the do-configure stage, a rough equivalent of the following command is run. 3768In the do-configure stage, a rough equivalent of the following command is run.
3768See mk/configure/configure.mk, target do-configure-script for the exact 3769See mk/configure/configure.mk, target do-configure-script for the exact
3769definition. 3770definition.
3770 3771
3771.for dir in ${CONFIGURE_DIRS} 3772.for dir in ${CONFIGURE_DIRS}
3772 cd ${WRKSRC} && cd ${dir} \ 3773 cd ${WRKSRC} && cd ${dir} \
3773 && env ${CONFIGURE_ENV} \ 3774 && env ${CONFIGURE_ENV} \
3774 ${CONFIG_SHELL} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS} 3775 ${CONFIG_SHELL} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}
3775.endfor 3776.endfor
3776 3777
3777CONFIGURE_DIRS (default: ".") is a list of pathnames relative to WRKSRC. In 3778CONFIGURE_DIRS (default: ".") is a list of pathnames relative to WRKSRC. In
3778each of these directories, the configure script is run with the environment 3779each of these directories, the configure script is run with the environment
3779CONFIGURE_ENV and arguments CONFIGURE_ARGS. The variables CONFIGURE_ENV, 3780CONFIGURE_ENV and arguments CONFIGURE_ARGS. The variables CONFIGURE_ENV,
3780CONFIGURE_SCRIPT (default: "./configure") and CONFIGURE_ARGS may all be changed 3781CONFIGURE_SCRIPT (default: "./configure") and CONFIGURE_ARGS may all be changed
3781by the package. 3782by the package.
3782 3783
3783If the program uses the Perl way of configuration (mainly Perl modules, but not 3784If the program uses the Perl way of configuration (mainly Perl modules, but not
3784only), i.e. a file called Makefile.PL, it should include ../../lang/perl5/ 3785only), i.e. a file called Makefile.PL, it should include ../../lang/perl5/
3785module.mk. To set any parameter for Makefile.PL use the MAKE_PARAMS variable 3786module.mk. To set any parameter for Makefile.PL use the MAKE_PARAMS variable
3786(e.g., MAKE_PARAMS+=foo=bar 3787(e.g., MAKE_PARAMS+=foo=bar
3787 3788
3788If the program uses an Imakefile for configuration, the appropriate steps can 3789If the program uses an Imakefile for configuration, the appropriate steps can
3789be invoked by setting USE_IMAKE to "yes". If you only need xmkmf, add it to 3790be invoked by setting USE_IMAKE to "yes". If you only need xmkmf, add it to
3790USE_TOOLS. You can add variables to xmkmf's environment by adding them to the 3791USE_TOOLS. You can add variables to xmkmf's environment by adding them to the
3791SCRIPTS_ENV variable. 3792SCRIPTS_ENV variable.
3792 3793
3793If the program uses cmake for configuration, the appropriate steps can be 3794If the program uses cmake for configuration, the appropriate steps can be
3794invoked by setting USE_CMAKE to "yes". You can add variables to cmake's 3795invoked by setting USE_CMAKE to "yes". You can add variables to cmake's
3795environment by adding them to the CONFIGURE_ENV variable and arguments to cmake 3796environment by adding them to the CONFIGURE_ENV variable and arguments to cmake
3796by adding them to the CMAKE_ARGS variable. The top directory argument is given 3797by adding them to the CMAKE_ARGS variable. The top directory argument is given
3797by the CMAKE_ARG_PATH variable, that defaults to "." (relative to 3798by the CMAKE_ARG_PATH variable, that defaults to "." (relative to
3798CONFIGURE_DIRS) 3799CONFIGURE_DIRS)
3799 3800
3800If there is no configure step at all, set NO_CONFIGURE to "yes". 3801If there is no configure step at all, set NO_CONFIGURE to "yes".
3801 3802
380213.12. The build phase 380313.12. The build phase
3803 3804
3804For building a package, a rough equivalent of the following code is executed; 3805For building a package, a rough equivalent of the following code is executed;
3805see mk/build/build.mk, target do-build for the exact definition. 3806see mk/build/build.mk, target do-build for the exact definition.
3806 3807
3807.for dir in ${BUILD_DIRS} 3808.for dir in ${BUILD_DIRS}
3808 cd ${WRKSRC} && cd ${dir} \ 3809 cd ${WRKSRC} && cd ${dir} \
3809 && env ${MAKE_ENV} \ 3810 && env ${MAKE_ENV} \
3810 ${MAKE_PROGRAM} ${MAKE_FLAGS} ${BUILD_MAKE_FLAGS} \ 3811 ${MAKE_PROGRAM} ${MAKE_FLAGS} ${BUILD_MAKE_FLAGS} \
3811 -f ${MAKE_FILE} \ 3812 -f ${MAKE_FILE} \
3812 ${BUILD_TARGET} 3813 ${BUILD_TARGET}
3813.endfor 3814.endfor
3814 3815
3815BUILD_DIRS (default: ".") is a list of pathnames relative to WRKSRC. In each of 3816BUILD_DIRS (default: ".") is a list of pathnames relative to WRKSRC. In each of
3816these directories, MAKE_PROGRAM is run with the environment MAKE_ENV and 3817these directories, MAKE_PROGRAM is run with the environment MAKE_ENV and
3817arguments BUILD_MAKE_FLAGS. The variables MAKE_ENV, BUILD_MAKE_FLAGS, MAKE_FILE 3818arguments BUILD_MAKE_FLAGS. The variables MAKE_ENV, BUILD_MAKE_FLAGS, MAKE_FILE
3818and BUILD_TARGET may all be changed by the package. 3819and BUILD_TARGET may all be changed by the package.
3819 3820
3820The default value of MAKE_PROGRAM is "gmake" if USE_TOOLS contains "gmake", " 3821The default value of MAKE_PROGRAM is "gmake" if USE_TOOLS contains "gmake", "
3821make" otherwise. The default value of MAKE_FILE is "Makefile", and BUILD_TARGET 3822make" otherwise. The default value of MAKE_FILE is "Makefile", and BUILD_TARGET
3822defaults to "all". 3823defaults to "all".
3823 3824
3824If there is no build step at all, set NO_BUILD to "yes". 3825If there is no build step at all, set NO_BUILD to "yes".
3825 3826
382613.13. The test phase 382713.13. The test phase
3827 3828
3828[TODO] 3829[TODO]
3829 3830
383013.14. The install phase 383113.14. The install phase
3831 3832
3832Once the build stage has completed, the final step is to install the software 3833Once the build stage has completed, the final step is to install the software
3833in public directories, so users can access the programs and files. 3834in public directories, so users can access the programs and files.
3834 3835
3835In the install phase, a rough equivalent of the following code is executed; see 3836In the install phase, a rough equivalent of the following code is executed; see
3836mk/install/install.mk, target do-install for the exact definition. 3837mk/install/install.mk, target do-install for the exact definition.
3837Additionally, before and after this code, several consistency checks are run 3838Additionally, before and after this code, several consistency checks are run
3838against the files-to-be-installed, see mk/check/*.mk for details. 3839against the files-to-be-installed, see mk/check/*.mk for details.
3839 3840
3840.for dir in ${INSTALL_DIRS} 3841.for dir in ${INSTALL_DIRS}
3841 cd ${WRKSRC} && cd ${dir} \ 3842 cd ${WRKSRC} && cd ${dir} \
3842 && env ${INSTALL_ENV} ${MAKE_ENV} \ 3843 && env ${INSTALL_ENV} ${MAKE_ENV} \
3843 ${MAKE_PROGRAM} ${MAKE_FLAGS} ${INSTALL_MAKE_FLAGS} \ 3844 ${MAKE_PROGRAM} ${MAKE_FLAGS} ${INSTALL_MAKE_FLAGS} \
3844 -f ${MAKE_FILE} ${INSTALL_TARGET} 3845 -f ${MAKE_FILE} ${INSTALL_TARGET}
3845.endfor 3846.endfor
3846 3847
3847The variable's meanings are analogous to the ones in the build phase. 3848The variable's meanings are analogous to the ones in the build phase.
3848INSTALL_DIRS defaults to BUILD_DIRS. INSTALL_TARGET is "install" by default, 3849INSTALL_DIRS defaults to BUILD_DIRS. INSTALL_TARGET is "install" by default,
3849plus "install.man" if USE_IMAKE is defined and NO_INSTALL_MANPAGES is not 3850plus "install.man" if USE_IMAKE is defined and NO_INSTALL_MANPAGES is not
3850defined. 3851defined.
3851 3852
3852In the install phase, the following variables are useful. They are all 3853In the install phase, the following variables are useful. They are all
3853variations of the install(1) command that have the owner, group and permissions 3854variations of the install(1) command that have the owner, group and permissions
3854preset. INSTALL is the plain install command. The specialized variants, 3855preset. INSTALL is the plain install command. The specialized variants,
3855together with their intended use, are: 3856together with their intended use, are:
3856 3857
3857INSTALL_PROGRAM_DIR 3858INSTALL_PROGRAM_DIR
3858 3859
3859 directories that contain binaries 3860 directories that contain binaries
3860 3861
3861INSTALL_SCRIPT_DIR 3862INSTALL_SCRIPT_DIR
3862 3863
3863 directories that contain scripts 3864 directories that contain scripts
3864 3865
3865INSTALL_LIB_DIR 3866INSTALL_LIB_DIR
3866 3867
3867 directories that contain shared and static libraries 3868 directories that contain shared and static libraries
3868 3869
3869INSTALL_DATA_DIR 3870INSTALL_DATA_DIR
3870 3871
3871 directories that contain data files 3872 directories that contain data files
3872 3873
3873INSTALL_MAN_DIR 3874INSTALL_MAN_DIR
3874 3875
3875 directories that contain man pages 3876 directories that contain man pages
3876 3877
3877INSTALL_GAME_DIR 3878INSTALL_GAME_DIR
3878 3879
3879 directories that contain data files for games 3880 directories that contain data files for games
3880 3881
3881INSTALL_PROGRAM 3882INSTALL_PROGRAM
3882 3883
3883 binaries that can be stripped from debugging symbols 3884 binaries that can be stripped from debugging symbols
3884 3885
3885INSTALL_SCRIPT 3886INSTALL_SCRIPT
3886 3887
3887 binaries that cannot be stripped 3888 binaries that cannot be stripped
3888 3889
3889INSTALL_GAME 3890INSTALL_GAME
3890 3891
3891 game binaries 3892 game binaries
3892 3893
3893INSTALL_LIB 3894INSTALL_LIB
3894 3895
3895 shared and static libraries 3896 shared and static libraries
3896 3897
3897INSTALL_DATA 3898INSTALL_DATA
3898 3899
3899 data files 3900 data files
3900 3901
3901INSTALL_GAME_DATA 3902INSTALL_GAME_DATA
3902 3903
3903 data files for games 3904 data files for games
3904 3905
3905INSTALL_MAN 3906INSTALL_MAN
3906 3907
3907 man pages 3908 man pages
3908 3909
3909Some other variables are: 3910Some other variables are:
3910 3911
3911INSTALL_UNSTRIPPED 3912INSTALL_UNSTRIPPED
3912 3913
3913 If set to yes, do not run strip(1) when installing binaries. Any debugging 3914 If set to yes, do not run strip(1) when installing binaries. Any debugging
3914 sections and symbols present in binaries will be preserved. 3915 sections and symbols present in binaries will be preserved.
3915 3916
3916INSTALLATION_DIRS 3917INSTALLATION_DIRS
3917 3918
3918 A list of directories relative to PREFIX that are created by pkgsrc at the 3919 A list of directories relative to PREFIX that are created by pkgsrc at the
3919 beginning of the install phase. The package is supposed to create all 3920 beginning of the install phase. The package is supposed to create all
3920 needed directories itself before installing files to it and list all other 3921 needed directories itself before installing files to it and list all other
3921 directories here. 3922 directories here.
3922 3923
3923In the rare cases that a package shouldn't install anything, set NO_INSTALL to  3924In the rare cases that a package shouldn't install anything, set NO_INSTALL to
3924"yes". This is mostly relevant for packages in the regress category. 3925"yes". This is mostly relevant for packages in the regress category.
3925 3926
392613.15. The package phase 392713.15. The package phase
3927 3928
3928Once the install stage has completed, a binary package of the installed files 3929Once the install stage has completed, a binary package of the installed files
3929can be built. These binary packages can be used for quick installation without 3930can be built. These binary packages can be used for quick installation without
3930previous compilation, e.g. by the make bin-install or by using pkg_add. 3931previous compilation, e.g. by the make bin-install or by using pkg_add.
3931 3932
3932By default, the binary packages are created in ${PACKAGES}/All and symlinks are 3933By default, the binary packages are created in ${PACKAGES}/All and symlinks are
3933created in ${PACKAGES}/category, one for each category in the CATEGORIES 3934created in ${PACKAGES}/category, one for each category in the CATEGORIES
3934variable. PACKAGES defaults to pkgsrc/packages. 3935variable. PACKAGES defaults to pkgsrc/packages.
3935 3936
393613.16. Cleaning up 393713.16. Cleaning up
3937 3938
3938Once you're finished with a package, you can clean the work directory by 3939Once you're finished with a package, you can clean the work directory by
3939running make clean. If you want to clean the work directories of all 3940running make clean. If you want to clean the work directories of all
3940dependencies too, use make clean-depends. 3941dependencies too, use make clean-depends.
3941 3942
394213.17. Other helpful targets 394313.17. Other helpful targets
3943 3944
3944pre/post-* 3945pre/post-*
3945 3946
3946 For any of the main targets described in the previous section (configure, 3947 For any of the main targets described in the previous section (configure,
3947 build, install, etc.), two auxiliary targets exist with "pre-" and "post-" 3948 build, install, etc.), two auxiliary targets exist with "pre-" and "post-"
3948 used as a prefix for the main target's name. These targets are invoked 3949 used as a prefix for the main target's name. These targets are invoked
3949 before and after the main target is called, allowing extra configuration or 3950 before and after the main target is called, allowing extra configuration or
3950 installation steps be performed from a package's Makefile, for example, 3951 installation steps be performed from a package's Makefile, for example,
3951 which a program's configure script or install target omitted. 3952 which a program's configure script or install target omitted.
3952 3953
3953 About 5% of the pkgsrc packages define their custom post-extract target, 3954 About 5% of the pkgsrc packages define their custom post-extract target,
3954 another 5% define pre-configure, and 10% define post-install. The other pre 3955 another 5% define pre-configure, and 10% define post-install. The other pre
3955 /post-* targets are defined even less often. 3956 /post-* targets are defined even less often.
3956 3957
3957do-* 3958do-*
3958 3959
3959 Should one of the main targets do the wrong thing, and should there be no 3960 Should one of the main targets do the wrong thing, and should there be no
3960 variable to fix this, you can redefine it with the do-* target. (Note that 3961 variable to fix this, you can redefine it with the do-* target. (Note that
3961 redefining the target itself instead of the do-* target is a bad idea, as 3962 redefining the target itself instead of the do-* target is a bad idea, as
3962 the pre-* and post-* targets won't be called anymore, etc.) 3963 the pre-* and post-* targets won't be called anymore, etc.)
3963 3964
3964 About 15% of the pkgsrc packages override the default do-install, the other 3965 About 15% of the pkgsrc packages override the default do-install, the other
3965 do-* targets are overridden even less often. 3966 do-* targets are overridden even less often.
3966 3967
3967reinstall 3968reinstall
3968 3969
3969 If you did a make install and you noticed some file was not installed 3970 If you did a make install and you noticed some file was not installed
3970 properly, you can repeat the installation with this target, which will 3971 properly, you can repeat the installation with this target, which will
3971 ignore the "already installed" flag. 3972 ignore the "already installed" flag.
3972 3973
3973 This is the default value of DEPENDS_TARGET except in the case of make 3974 This is the default value of DEPENDS_TARGET except in the case of make
3974 update and make package, where the defaults are "package" and "update", 3975 update and make package, where the defaults are "package" and "update",
3975 respectively. 3976 respectively.
3976 3977
3977deinstall 3978deinstall
3978 3979
3979 This target does a pkg_delete(1) in the current directory, effectively 3980 This target does a pkg_delete(1) in the current directory, effectively
3980 de-installing the package. The following variables can be used to tune the 3981 de-installing the package. The following variables can be used to tune the
3981 behaviour: 3982 behaviour:
3982 3983
3983 PKG_VERBOSE 3984 PKG_VERBOSE
3984 3985
3985 Add a "-v" to the pkg_delete(1) command. 3986 Add a "-v" to the pkg_delete(1) command.
3986 3987
3987 DEINSTALLDEPENDS 3988 DEINSTALLDEPENDS
3988 3989
3989 Remove all packages that require (depend on) the given package. This 3990 Remove all packages that require (depend on) the given package. This
3990 can be used to remove any packages that may have been pulled in by a 3991 can be used to remove any packages that may have been pulled in by a
3991 given package, e.g. if make deinstall DEINSTALLDEPENDS=1 is done in 3992 given package, e.g. if make deinstall DEINSTALLDEPENDS=1 is done in
3992 pkgsrc/x11/kde, this is likely to remove whole KDE. Works by adding "-R 3993 pkgsrc/x11/kde, this is likely to remove whole KDE. Works by adding "-R
3993 " to the pkg_delete(1) command line. 3994 " to the pkg_delete(1) command line.
3994 3995
3995bin-install 3996bin-install
3996 3997
3997 Install a binary package from local disk and via FTP from a list of sites 3998 Install a binary package from local disk and via FTP from a list of sites
3998 (see the BINPKG_SITES variable), and do a make package if no binary package 3999 (see the BINPKG_SITES variable), and do a make package if no binary package
3999 is available anywhere. The arguments given to pkg_add can be set via 4000 is available anywhere. The arguments given to pkg_add can be set via
4000 BIN_INSTALL_FLAGS e.g., to do verbose operation, etc. 4001 BIN_INSTALL_FLAGS e.g., to do verbose operation, etc.
4001 4002
4002install-clean 4003install-clean
4003 4004
4004 This target removes the state files for the "install" and later phases so 4005 This target removes the state files for the "install" and later phases so
4005 that the "install" target may be re-invoked. This can be used after editing 4006 that the "install" target may be re-invoked. This can be used after editing
4006 the PLIST to install the package without rebuilding it. 4007 the PLIST to install the package without rebuilding it.
4007 4008
4008build-clean 4009build-clean
4009 4010
4010 This target removes the state files for the "build" and later phases so 4011 This target removes the state files for the "build" and later phases so
4011 that the "build" target may be re-invoked. 4012 that the "build" target may be re-invoked.
4012 4013
4013update 4014update
4014 4015
4015 This target causes the current package to be updated to the latest version. 4016 This target causes the current package to be updated to the latest version.
4016 The package and all depending packages first get de-installed, then current 4017 The package and all depending packages first get de-installed, then current
4017 versions of the corresponding packages get compiled and installed. This is 4018 versions of the corresponding packages get compiled and installed. This is
4018 similar to manually noting which packages are currently installed, then 4019 similar to manually noting which packages are currently installed, then
4019 performing a series of make deinstall and make install (or whatever 4020 performing a series of make deinstall and make install (or whatever
4020 UPDATE_TARGET is set to) for these packages. 4021 UPDATE_TARGET is set to) for these packages.
4021 4022
4022 You can use the "update" target to resume package updating in case a 4023 You can use the "update" target to resume package updating in case a
4023 previous make update was interrupted for some reason. However, in this 4024 previous make update was interrupted for some reason. However, in this
4024 case, make sure you don't call make clean or otherwise remove the list of 4025 case, make sure you don't call make clean or otherwise remove the list of
4025 dependent packages in WRKDIR. Otherwise, you lose the ability to 4026 dependent packages in WRKDIR. Otherwise, you lose the ability to
4026 automatically update the current package along with the dependent packages 4027 automatically update the current package along with the dependent packages
4027 you have installed. 4028 you have installed.
4028 4029
4029 Resuming an interrupted make update will only work as long as the package 4030 Resuming an interrupted make update will only work as long as the package
4030 tree remains unchanged. If the source code for one of the packages to be 4031 tree remains unchanged. If the source code for one of the packages to be
4031 updated has been changed, resuming make update will most certainly fail! 4032 updated has been changed, resuming make update will most certainly fail!
4032 4033
4033 The following variables can be used either on the command line or in 4034 The following variables can be used either on the command line or in
4034 mk.conf to alter the behaviour of make update: 4035 mk.conf to alter the behaviour of make update:
4035 4036
4036 UPDATE_TARGET 4037 UPDATE_TARGET
4037 4038
4038 Install target to recursively use for the updated package and the 4039 Install target to recursively use for the updated package and the
4039 dependent packages. Defaults to DEPENDS_TARGET if set, "install" 4040 dependent packages. Defaults to DEPENDS_TARGET if set, "install"
4040 otherwise for make update. Other good targets are "package" or " 4041 otherwise for make update. Other good targets are "package" or "
4041 bin-install". Do not set this to "update" or you will get stuck in an 4042 bin-install". Do not set this to "update" or you will get stuck in an
4042 endless loop! 4043 endless loop!
4043 4044
4044 NOCLEAN 4045 NOCLEAN
4045 4046
4046 Don't clean up after updating. Useful if you want to leave the work 4047 Don't clean up after updating. Useful if you want to leave the work
4047 sources of the updated packages around for inspection or other 4048 sources of the updated packages around for inspection or other
4048 purposes. Be sure you eventually clean up the source tree (see the " 4049 purposes. Be sure you eventually clean up the source tree (see the "
4049 clean-update" target below) or you may run into troubles with old 4050 clean-update" target below) or you may run into troubles with old
4050 source code still lying around on your next make or make update. 4051 source code still lying around on your next make or make update.
4051 4052
4052 REINSTALL 4053 REINSTALL
4053 4054
4054 Deinstall each package before installing (making DEPENDS_TARGET). This 4055 Deinstall each package before installing (making DEPENDS_TARGET). This
4055 may be necessary if the "clean-update" target (see below) was called 4056 may be necessary if the "clean-update" target (see below) was called
4056 after interrupting a running make update. 4057 after interrupting a running make update.
4057 4058
4058 DEPENDS_TARGET 4059 DEPENDS_TARGET
4059 4060
4060 Allows you to disable recursion and hardcode the target for packages. 4061 Allows you to disable recursion and hardcode the target for packages.
4061 The default is "update" for the update target, facilitating a recursive 4062 The default is "update" for the update target, facilitating a recursive
4062 update of prerequisite packages. Only set DEPENDS_TARGET if you want to 4063 update of prerequisite packages. Only set DEPENDS_TARGET if you want to
4063 disable recursive updates. Use UPDATE_TARGET instead to just set a 4064 disable recursive updates. Use UPDATE_TARGET instead to just set a
4064 specific target for each package to be installed during make update 4065 specific target for each package to be installed during make update
4065 (see above). 4066 (see above).
4066 4067
4067clean-update 4068clean-update
4068 4069
4069 Clean the source tree for all packages that would get updated if make 4070 Clean the source tree for all packages that would get updated if make
4070 update was called from the current directory. This target should not be 4071 update was called from the current directory. This target should not be
4071 used if the current package (or any of its depending packages) have already 4072 used if the current package (or any of its depending packages) have already
4072 been de-installed (e.g., after calling make update) or you may lose some 4073 been de-installed (e.g., after calling make update) or you may lose some
4073 packages you intended to update. As a rule of thumb: only use this target  4074 packages you intended to update. As a rule of thumb: only use this target
4074 before the first time you run make update and only if you have a dirty 4075 before the first time you run make update and only if you have a dirty
4075 package tree (e.g., if you used NOCLEAN). 4076 package tree (e.g., if you used NOCLEAN).
4076 4077
4077 If you are unsure about whether your tree is clean, you can either perform 4078 If you are unsure about whether your tree is clean, you can either perform
4078 a make clean at the top of the tree, or use the following sequence of 4079 a make clean at the top of the tree, or use the following sequence of
4079 commands from the directory of the package you want to update (before 4080 commands from the directory of the package you want to update (before
4080 running make update for the first time, otherwise you lose all the packages 4081 running make update for the first time, otherwise you lose all the packages
4081 you wanted to update!): 4082 you wanted to update!):
4082 4083
4083 # make clean-update 4084 # make clean-update
4084 # make clean CLEANDEPENDS=YES 4085 # make clean CLEANDEPENDS=YES
4085 # make update 4086 # make update
4086 4087
4087 4088
4088 The following variables can be used either on the command line or in 4089 The following variables can be used either on the command line or in
4089 mk.conf to alter the behaviour of make clean-update: 4090 mk.conf to alter the behaviour of make clean-update:
4090 4091
4091 CLEAR_DIRLIST 4092 CLEAR_DIRLIST
4092 4093
4093 After make clean, do not reconstruct the list of directories to update 4094 After make clean, do not reconstruct the list of directories to update
4094 for this package. Only use this if make update successfully installed 4095 for this package. Only use this if make update successfully installed
4095 all packages you wanted to update. Normally, this is done automatically 4096 all packages you wanted to update. Normally, this is done automatically
4096 on make update, but may have been suppressed by the NOCLEAN variable 4097 on make update, but may have been suppressed by the NOCLEAN variable
4097 (see above). 4098 (see above).
4098 4099
4099replace 4100replace
4100 4101
4101 Update the installation of the current package. This differs from update in 4102 Update the installation of the current package. This differs from update in
4102 that it does not replace dependent packages. You will need to install 4103 that it does not replace dependent packages. You will need to install
4103 pkgtools/pkg_tarup for this target to work. 4104 pkgtools/pkg_tarup for this target to work.
4104 4105
4105 Be careful when using this target! There are no guarantees that dependent 4106 Be careful when using this target! There are no guarantees that dependent
4106 packages will still work, in particular they will most certainly break if 4107 packages will still work, in particular they will most certainly break if
4107 you make replace a library package whose shared library major version 4108 you make replace a library package whose shared library major version
4108 changed between your installed version and the new one. For this reason, 4109 changed between your installed version and the new one. For this reason,
4109 this target is not officially supported and only recommended for advanced 4110 this target is not officially supported and only recommended for advanced
4110 users. 4111 users.
4111 4112
4112info 4113info
4113 4114
4114 This target invokes pkg_info(1) for the current package. You can use this 4115 This target invokes pkg_info(1) for the current package. You can use this
4115 to check which version of a package is installed. 4116 to check which version of a package is installed.
4116 4117
4117index 4118index
4118 4119
4119 This is a top-level command, i.e. it should be used in the pkgsrc 4120 This is a top-level command, i.e. it should be used in the pkgsrc
4120 directory. It creates a database of all packages in the local pkgsrc tree, 4121 directory. It creates a database of all packages in the local pkgsrc tree,
4121 including dependencies, comment, maintainer, and some other useful 4122 including dependencies, comment, maintainer, and some other useful
4122 information. Individual entries are created by running make describe in the 4123 information. Individual entries are created by running make describe in the
4123 packages' directories. This index file is saved as pkgsrc/INDEX. It can be 4124 packages' directories. This index file is saved as pkgsrc/INDEX. It can be
4124 displayed in verbose format by running make print-index. You can search in 4125 displayed in verbose format by running make print-index. You can search in
4125 it with make search key=something. You can extract a list of all packages 4126 it with make search key=something. You can extract a list of all packages
4126 that depend on a particular one by running make show-deps PKG=somepackage. 4127 that depend on a particular one by running make show-deps PKG=somepackage.
4127 4128
4128 Running this command takes a very long time, some hours even on fast 4129 Running this command takes a very long time, some hours even on fast
4129 machines! 4130 machines!
4130 4131
4131readme 4132readme
4132 4133
4133 This target generates a index.html file, which can be viewed using a 4134 This target generates a index.html file, which can be viewed using a
4134 browser such as www/firefox or www/links. The generated files contain 4135 browser such as www/firefox or www/links. The generated files contain
4135 references to any packages which are in the PACKAGES directory on the local 4136 references to any packages which are in the PACKAGES directory on the local
4136 host. The generated files can be made to refer to URLs based on 4137 host. The generated files can be made to refer to URLs based on
4137 FTP_PKG_URL_HOST and FTP_PKG_URL_DIR. For example, if I wanted to generate 4138 FTP_PKG_URL_HOST and FTP_PKG_URL_DIR. For example, if I wanted to generate
4138 index.html files which pointed to binary packages on the local machine, in 4139 index.html files which pointed to binary packages on the local machine, in
4139 the directory /usr/packages, set FTP_PKG_URL_HOST=file://localhost and 4140 the directory /usr/packages, set FTP_PKG_URL_HOST=file://localhost and
4140 FTP_PKG_URL_DIR=/usr/packages. The ${PACKAGES} directory and its 4141 FTP_PKG_URL_DIR=/usr/packages. The ${PACKAGES} directory and its
4141 subdirectories will be searched for all the binary packages. 4142 subdirectories will be searched for all the binary packages.
4142 4143
4143 The target can be run at the toplevel or in category directories, in which 4144 The target can be run at the toplevel or in category directories, in which
4144 case it descends recursively. 4145 case it descends recursively.
4145 4146
4146readme-all 4147readme-all
4147 4148
4148 This is a top-level command, run it in pkgsrc. Use this target to create a 4149 This is a top-level command, run it in pkgsrc. Use this target to create a
4149 file README-all.html which contains a list of all packages currently 4150 file README-all.html which contains a list of all packages currently
4150 available in the NetBSD Packages Collection, together with the category 4151 available in the NetBSD Packages Collection, together with the category
4151 they belong to and a short description. This file is compiled from the 4152 they belong to and a short description. This file is compiled from the
4152 pkgsrc/*/index.html files, so be sure to run this after a make readme. 4153 pkgsrc/*/index.html files, so be sure to run this after a make readme.
4153 4154
4154cdrom-readme 4155cdrom-readme
4155 4156
4156 This is very much the same as the "readme" target (see above), but is to be 4157 This is very much the same as the "readme" target (see above), but is to be
4157 used when generating a pkgsrc tree to be written to a CD-ROM. This target 4158 used when generating a pkgsrc tree to be written to a CD-ROM. This target
4158 also produces index.html files, and can be made to refer to URLs based on 4159 also produces index.html files, and can be made to refer to URLs based on
4159 CDROM_PKG_URL_HOST and CDROM_PKG_URL_DIR. 4160 CDROM_PKG_URL_HOST and CDROM_PKG_URL_DIR.
4160 4161
4161show-distfiles 4162show-distfiles
4162 4163
4163 This target shows which distfiles and patchfiles are needed to build the 4164 This target shows which distfiles and patchfiles are needed to build the
4164 package (ALLFILES, which contains all DISTFILES and PATCHFILES, but not 4165 package (ALLFILES, which contains all DISTFILES and PATCHFILES, but not
4165 patches/*). 4166 patches/*).
4166 4167
4167show-downlevel 4168show-downlevel
4168 4169
4169 This target shows nothing if the package is not installed. If a version of 4170 This target shows nothing if the package is not installed. If a version of
4170 this package is installed, but is not the version provided in this version 4171 this package is installed, but is not the version provided in this version
4171 of pkgsrc, then a warning message is displayed. This target can be used to 4172 of pkgsrc, then a warning message is displayed. This target can be used to
4172 show which of your installed packages are downlevel, and so the old 4173 show which of your installed packages are downlevel, and so the old
4173 versions can be deleted, and the current ones added. 4174 versions can be deleted, and the current ones added.
4174 4175
4175show-pkgsrc-dir 4176show-pkgsrc-dir
4176 4177
4177 This target shows the directory in the pkgsrc hierarchy from which the 4178 This target shows the directory in the pkgsrc hierarchy from which the
4178 package can be built and installed. This may not be the same directory as 4179 package can be built and installed. This may not be the same directory as
4179 the one from which the package was installed. This target is intended to be 4180 the one from which the package was installed. This target is intended to be
4180 used by people who may wish to upgrade many packages on a single host, and 4181 used by people who may wish to upgrade many packages on a single host, and
4181 can be invoked from the top-level pkgsrc Makefile by using the " 4182 can be invoked from the top-level pkgsrc Makefile by using the "
4182 show-host-specific-pkgs" target. 4183 show-host-specific-pkgs" target.
4183 4184
4184show-installed-depends 4185show-installed-depends
4185 4186
4186 This target shows which installed packages match the current package's 4187 This target shows which installed packages match the current package's
4187 DEPENDS. Useful if out of date dependencies are causing build problems. 4188 DEPENDS. Useful if out of date dependencies are causing build problems.
4188 4189
4189print-build-depends-list 4190print-build-depends-list
4190 4191
4191 This target shows the list of packages that the current package depends on 4192 This target shows the list of packages that the current package depends on
4192 for building. 4193 for building.
4193 4194
4194print-run-depends-list 4195print-run-depends-list
4195 4196
4196 This target shows the list of packages that the current package depends on 4197 This target shows the list of packages that the current package depends on
4197 for running. 4198 for running.
4198 4199
4199check-shlibs 4200check-shlibs
4200 4201
4201 After a package is installed, check all its binaries and (on ELF platforms) 4202 After a package is installed, check all its binaries and (on ELF platforms)
4202 shared libraries to see if they find the shared libs they need. Run by 4203 shared libraries to see if they find the shared libs they need. Run by
4203 default if PKG_DEVELOPER is set in mk.conf. 4204 default if PKG_DEVELOPER is set in mk.conf.
4204 4205
4205print-PLIST 4206print-PLIST
4206 4207
4207 After a "make install" from a new or upgraded pkg, this prints out an 4208 After a "make install" from a new or upgraded pkg, this prints out an
4208 attempt to generate a new PLIST from a find -newer work/.extract_done. An 4209 attempt to generate a new PLIST from a find -newer work/.extract_done. An
4209 attempt is made to care for shared libs etc., but it is strongly 4210 attempt is made to care for shared libs etc., but it is strongly
4210 recommended to review the result before putting it into PLIST. On upgrades, 4211 recommended to review the result before putting it into PLIST. On upgrades,
4211 it's useful to diff the output of this command against an already existing 4212 it's useful to diff the output of this command against an already existing
4212 PLIST file. 4213 PLIST file.
4213 4214
4214 If the package installs files via tar(1) or other methods that don't update 4215 If the package installs files via tar(1) or other methods that don't update
4215 file access times, be sure to add these files manually to your PLIST, as 4216 file access times, be sure to add these files manually to your PLIST, as
4216 the "find -newer" command used by this target won't catch them! 4217 the "find -newer" command used by this target won't catch them!
4217 4218
4218 See Section 19.3, "Tweaking output of make print-PLIST" for more 4219 See Section 19.3, "Tweaking output of make print-PLIST" for more
4219 information on this target. 4220 information on this target.
4220 4221
4221Chapter 14. Creating a new pkgsrc package from scratch 4222Chapter 14. Creating a new pkgsrc package from scratch
4222 4223
4223Table of Contents 4224Table of Contents
4224 4225
422514.1. Common types of packages 422614.1. Common types of packages
4226 4227
4227 14.1.1. Python modules and programs 4228 14.1.1. Python modules and programs
4228 14.1.2. R packages 4229 14.1.2. R packages
4229 14.1.3. TeXlive packages 4230 14.1.3. TeXlive packages
4230 4231
423114.2. Examples 423214.2. Examples
4232 4233
4233 14.2.1. How the www/nvu package came into pkgsrc 4234 14.2.1. How the www/nvu package came into pkgsrc
4234 4235
4235When you find a package that is not yet in pkgsrc, you most likely have a URL 4236When you find a package that is not yet in pkgsrc, you most likely have a URL
4236from where you can download the source code. Starting with this URL, creating a 4237from where you can download the source code. Starting with this URL, creating a
4237package involves only a few steps. 4238package involves only a few steps.
4238 4239
4239 1. In your mk.conf, set PKG_DEVELOPER=yes to enable the basic quality checks. 4240 1. In your mk.conf, set PKG_DEVELOPER=yes to enable the basic quality checks.
4240 4241
4241 2. Install the package meta-pkgs/pkg_developer, which among others will 4242 2. Install the package meta-pkgs/pkg_developer, which among others will
4242 install the utilities url2pkg, pkglint, pkgvi and mkpatches: 4243 install the utilities url2pkg, pkglint, pkgvi and mkpatches:
4243 4244
4244 $ cd /usr/pkgsrc 4245 $ cd /usr/pkgsrc
4245 $ (cd meta-pkgs/pkg_developer && bmake update) 4246 $ (cd meta-pkgs/pkg_developer && bmake update)
4246 4247
4247 3. Choose one of the top-level directories as the category in which you want 4248 3. Choose one of the top-level directories as the category in which you want
4248 to place your package. You can also create a directory of your own (maybe 4249 to place your package. You can also create a directory of your own (maybe
4249 called local). Change into that category directory: 4250 called local). Change into that category directory:
4250 4251
4251 $ cd category 4252 $ cd category
4252 4253
4253 4. Run the program url2pkg, passing as argument the URL of the distribution 4254 4. Run the program url2pkg, passing as argument the URL of the distribution
4254 file (in most cases a .tar.gz file). This will download the distribution 4255 file (in most cases a .tar.gz file). This will download the distribution
4255 file and create the necessary files of the package, based on what's in the 4256 file and create the necessary files of the package, based on what's in the
4256 distribution file: 4257 distribution file:
4257 4258
4258 $ url2pkg https://www.example.org/packages/package-1.0.tar.gz 4259 $ url2pkg https://www.example.org/packages/package-1.0.tar.gz
4259 4260
4260 5. Examine the extracted files to determine the dependencies of your package. 4261 5. Examine the extracted files to determine the dependencies of your package.
4261 Ideally, this is mentioned in some README file, but things may differ. For 4262 Ideally, this is mentioned in some README file, but things may differ. For
4262 each of these dependencies, look where it exists in pkgsrc, and if there is 4263 each of these dependencies, look where it exists in pkgsrc, and if there is
4263 a file called buildlink3.mk in that directory, add a line to your package 4264 a file called buildlink3.mk in that directory, add a line to your package
4264 Makefile which includes that file just before the last line. If the 4265 Makefile which includes that file just before the last line. If the
4265 buildlink3.mk file does not exist, it must be created first. The 4266 buildlink3.mk file does not exist, it must be created first. The
4266 buildlink3.mk file makes sure that the package's include files and 4267 buildlink3.mk file makes sure that the package's include files and
4267 libraries are provided. 4268 libraries are provided.
4268 4269
4269 If you just need binaries from a dependent package, add a DEPENDS line to 4270 If you just need binaries from a dependent package, add a DEPENDS line to
4270 the Makefile, which specifies the version of the dependency and where it 4271 the Makefile, which specifies the version of the dependency and where it
4271 can be found in pkgsrc. This line should be placed in the third paragraph. 4272 can be found in pkgsrc. This line should be placed in the third paragraph.
4272 If the dependency is only needed for building the package, but not when 4273 If the dependency is only needed for building the package, but not when
4273 using it, use TOOL_DEPENDS or BUILD_DEPENDS instead of DEPENDS. The 4274 using it, use TOOL_DEPENDS or BUILD_DEPENDS instead of DEPENDS. The
4274 difference between TOOL_DEPENDS and BUILD_DEPENDS occurs when 4275 difference between TOOL_DEPENDS and BUILD_DEPENDS occurs when
4275 cross-compiling: TOOL_DEPENDS are native packages, i.e. packages for the 4276 cross-compiling: TOOL_DEPENDS are native packages, i.e. packages for the
4276 platform where the package is built; BUILD_DEPENDS are target packages, 4277 platform where the package is built; BUILD_DEPENDS are target packages,
4277 i.e. packages for the platform for which the package is built. There is 4278 i.e. packages for the platform for which the package is built. There is
4278 also TEST_DEPENDS, which specifies a dependency used only for testing the 4279 also TEST_DEPENDS, which specifies a dependency used only for testing the
4279 resulting package built, using the upstream project's included test suite, 4280 resulting package built, using the upstream project's included test suite,
4280 on the native platform. Your package may then look like this: 4281 on the native platform. Your package may then look like this:
4281 4282
4282 [...] 4283 [...]
4283 4284
4284 TOOL_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt 4285 TOOL_DEPENDS+= libxslt-[0-9]*:../../textproc/libxslt
4285 DEPENDS+= screen-[0-9]*:../../misc/screen 4286 DEPENDS+= screen-[0-9]*:../../misc/screen
4286 DEPENDS+= screen>=4.0:../../misc/screen 4287 DEPENDS+= screen>=4.0:../../misc/screen
4287 4288
4288 [...] 4289 [...]
4289 4290
4290 .include "../../category/package/buildlink3.mk" 4291 .include "../../category/package/buildlink3.mk"
4291 .include "../../devel/glib2/buildlink3.mk" 4292 .include "../../devel/glib2/buildlink3.mk"
4292 .include "../../mk/bsd.pkg.mk" 4293 .include "../../mk/bsd.pkg.mk"
4293 4294
4294 6. Run pkglint to see what things still need to be done to make your package a 4295 6. Run pkglint to see what things still need to be done to make your package a
4295 "good" one. If you don't know what pkglint's warnings want to tell you, try 4296 "good" one. If you don't know what pkglint's warnings want to tell you, try
4296 pkglint --explain or pkglint -e, which outputs additional explanations. 4297 pkglint --explain or pkglint -e, which outputs additional explanations.
4297 4298
4298 7. In many cases the package is not yet ready to build. You can find 4299 7. In many cases the package is not yet ready to build. You can find
4299 instructions for the most common cases in the next section, Section 14.1, 4300 instructions for the most common cases in the next section, Section 14.1,
4300 "Common types of packages". After you have followed the instructions over 4301 "Common types of packages". After you have followed the instructions over
4301 there, you can hopefully continue here. 4302 there, you can hopefully continue here.
4302 4303
4303 8. Run bmake clean to clean the working directory from the extracted files. 4304 8. Run bmake clean to clean the working directory from the extracted files.
4304 Besides these files, a lot of cache files and other system information have 4305 Besides these files, a lot of cache files and other system information have
4305 been saved in the working directory, which may have become outdated after 4306 been saved in the working directory, which may have become outdated after
4306 you edited the Makefile. 4307 you edited the Makefile.
4307 4308
4308 9. Now, run bmake to build the package. For the various things that can go 4309 9. Now, run bmake to build the package. For the various things that can go
4309 wrong in this phase, consult Chapter 21, Making your package work. 4310 wrong in this phase, consult Chapter 21, Making your package work.
4310 4311
4311 If the extracted files from the package need to be fixed, run multiple 4312 If the extracted files from the package need to be fixed, run multiple
4312 rounds of these commands: 4313 rounds of these commands:
4313 4314
4314 $ bmake 4315 $ bmake
4315 $ pkgvi ${WRKSRC}/some/file/that/does/not/compile 4316 $ pkgvi ${WRKSRC}/some/file/that/does/not/compile
4316 $ mkpatches 4317 $ mkpatches
4317 $ bmake mps 4318 $ bmake mps
4318 $ bmake clean 4319 $ bmake clean
4319 4320
432010. When the package builds fine, the next step is to install the package. Run  432110. When the package builds fine, the next step is to install the package. Run
4321 bmake install and hope that everything works. 4322 bmake install and hope that everything works.
4322 4323
432311. Up to now, the file PLIST, which contains a list of the files that are 432411. Up to now, the file PLIST, which contains a list of the files that are
4324 installed by the package, is nearly empty. Run bmake print-PLIST >PLIST to 4325 installed by the package, is nearly empty. Run bmake print-PLIST >PLIST to
4325 generate a probably correct list. Check the file using your preferred text 4326 generate a probably correct list. Check the file using your preferred text
4326 editor to see if the list of files looks plausible. 4327 editor to see if the list of files looks plausible.
4327 4328
432812. Run pkglint again to see if the generated PLIST contains garbage or not. 432912. Run pkglint again to see if the generated PLIST contains garbage or not.
4329 4330
433013. When you ran bmake install, the package had been registered in the database 433113. When you ran bmake install, the package had been registered in the database
4331 of installed files, but with an empty list of files. To fix this, run bmake 4332 of installed files, but with an empty list of files. To fix this, run bmake
4332 deinstall and bmake install again. Now the package is registered with the 4333 deinstall and bmake install again. Now the package is registered with the
4333 list of files from PLIST. 4334 list of files from PLIST.
4334 4335
433514. Run bmake clean update to run everything from above again in a single step, 433614. Run bmake clean update to run everything from above again in a single step,
4336 making sure that the PLIST is correct and the whole package is created as 4337 making sure that the PLIST is correct and the whole package is created as
4337 intended. 4338 intended.
4338 4339
433915. Run pkglint to see if there's anything left to do. 434015. Run pkglint to see if there's anything left to do.
4340 4341
434116. Commit the package to pkgsrc-wip or main pkgsrc; see Chapter 23, Submitting 434216. Commit the package to pkgsrc-wip or main pkgsrc; see Chapter 23, Submitting
4342 and Committing. 4343 and Committing.
4343 4344
434414.1. Common types of packages 434514.1. Common types of packages
4345 4346
434614.1.1. Python modules and programs 434714.1.1. Python modules and programs
4347 4348
4348Python modules and programs packages are easily created using a set of 4349Python modules and programs packages are easily created using a set of
4349predefined variables. 4350predefined variables.
4350 4351
4351If some Python versions are not supported by the software, set the 4352If some Python versions are not supported by the software, set the
4352PYTHON_VERSIONS_INCOMPATIBLE variable to the Python versions that are not 4353PYTHON_VERSIONS_INCOMPATIBLE variable to the Python versions that are not
4353supported, e.g. 4354supported, e.g.
4354 4355
4355PYTHON_VERSIONS_INCOMPATIBLE= 27 4356PYTHON_VERSIONS_INCOMPATIBLE= 27
4356 4357
4357If the packaged software is a Python module, include one of ../../lang/python/ 4358If the packaged software is a Python module, include one of ../../lang/python/
4358egg.mk or ../../lang/python/extension.mk. 4359egg.mk or ../../lang/python/extension.mk.
4359 4360
4360Most Python packages use setuptools ("eggs"). If the packaged software is using 4361Most Python packages use setuptools ("eggs"). If the packaged software is using
4361setuptools, you only need to include "../../lang/python/egg.mk". 4362setuptools, you only need to include "../../lang/python/egg.mk".
4362 4363
4363Either way, the package directory should be called "py-software" and PKGNAME 4364Either way, the package directory should be called "py-software" and PKGNAME
4364should be set to "${PYPKGPREFIX}-${DISTNAME}", e.g. 4365should be set to "${PYPKGPREFIX}-${DISTNAME}", e.g.
4365 4366
4366DISTNAME= foopymodule-1.2.10 4367DISTNAME= foopymodule-1.2.10
4367PKGNAME= ${PYPKGPREFIX}-${DISTNAME} 4368PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
4368 4369
4369If it is an application, include "../../lang/python/application.mk". In order 4370If it is an application, include "../../lang/python/application.mk". In order
4370to correctly set the path to the Python interpreter, use the REPLACE_PYTHON 4371to correctly set the path to the Python interpreter, use the REPLACE_PYTHON
4371variable and set it to the list of files (paths relative to WRKSRC) that must 4372variable and set it to the list of files (paths relative to WRKSRC) that must
4372be corrected. For example: 4373be corrected. For example:
4373 4374
4374REPLACE_PYTHON= *.py 4375REPLACE_PYTHON= *.py
4375 4376
4376Some Python modules have separate distributions for Python-2.x and Python-3.x 4377Some Python modules have separate distributions for Python-2.x and Python-3.x
4377support. In pkgsrc this is handled by the versioned_dependencies.mk file. Set 4378support. In pkgsrc this is handled by the versioned_dependencies.mk file. Set
4378PYTHON_VERSIONED_DEPENDENCIES to the list of packages that should be depended 4379PYTHON_VERSIONED_DEPENDENCIES to the list of packages that should be depended
4379upon and include "../../lang/python/versioned_dependencies.mk", then the pkgsrc 4380upon and include "../../lang/python/versioned_dependencies.mk", then the pkgsrc
4380infrastructure will depend on the appropriate package version. For example: 4381infrastructure will depend on the appropriate package version. For example:
4381 4382
4382PYTHON_VERSIONED_DEPENDENCIES=dialog 4383PYTHON_VERSIONED_DEPENDENCIES=dialog
4383 4384
4384Look inside versioned_dependencies.mk for a list of supported packages. 4385Look inside versioned_dependencies.mk for a list of supported packages.
4385 4386
438614.1.2. R packages 438714.1.2. R packages
4387 4388
4388Simple R packages from CRAN are handled automatically by R2pkg, which is 4389Simple R packages from CRAN are handled automatically by R2pkg, which is
4389available in pkgtools/R2pkg. Individual packages (and optionally their 4390available in pkgtools/R2pkg. Individual packages (and optionally their
4390dependencies) may be created and updated. R packages generally follow the same 4391dependencies) may be created and updated. R packages generally follow the same
4391form, and most of the relevant information needed is contained in a DESCRIPTION 4392form, and most of the relevant information needed is contained in a DESCRIPTION
4392file as part of each R package on CRAN. Consequently, R2pkg downloads that 4393file as part of each R package on CRAN. Consequently, R2pkg downloads that
4393information and creates or updates a package in the canonical form. The 4394information and creates or updates a package in the canonical form. The
4394resulting package should be reviewed for correctness. 4395resulting package should be reviewed for correctness.
4395 4396
439614.1.3. TeXlive packages 439714.1.3. TeXlive packages
4397 4398
4398TeXlive packages from CTAN are handled automatically by texlive2pkg, which is 4399TeXlive packages from CTAN are handled automatically by texlive2pkg, which is
4399available in pkgtools/texlive2pkg. 4400available in pkgtools/texlive2pkg.
4400 4401
4401If the TeXlive package name is not known, it may be useful to search CTAN. A " 4402If the TeXlive package name is not known, it may be useful to search CTAN. A "
4402Contained in" field on the package page typically identifies the basename of 4403Contained in" field on the package page typically identifies the basename of
4403the package file in the TeXlive archive. 4404the package file in the TeXlive archive.
4404 4405
4405If the TeXlive package name is known, download the files from the TeXlive 4406If the TeXlive package name is known, download the files from the TeXlive
4406archive. For package foo, you will need to download foo.tar.xz. Most TeXlive 4407archive. For package foo, you will need to download foo.tar.xz. Most TeXlive
4407packages also have associated documentation packages, so download 4408packages also have associated documentation packages, so download
4408foo.doc.tar.xz at the same time. These files should be placed in the 4409foo.doc.tar.xz at the same time. These files should be placed in the
4409appropriate category directory, which is often but not always print. Then run 4410appropriate category directory, which is often but not always print. Then run
4410the following command in the category directory. 4411the following command in the category directory.
4411 4412
4412texlive2pkg foo.tar.xz foo.doc.tar.xz 4413texlive2pkg foo.tar.xz foo.doc.tar.xz
4413 4414
4414This will create two packages, tex-foo and tex-foo-doc. Be sure to check that 4415This will create two packages, tex-foo and tex-foo-doc. Be sure to check that
4415both packages are correct. 4416both packages are correct.
4416 4417
4417Finally, CTAN currently does not include version information in package 4418Finally, CTAN currently does not include version information in package
4418filenames and changes their contents periodically when updates occur. 4419filenames and changes their contents periodically when updates occur.
4419Consequently, pkgsrc avoids downloading distfiles directly from CTAN and 4420Consequently, pkgsrc avoids downloading distfiles directly from CTAN and
4420instead relies on the pkgsrc archives. For each new or updated TeXlive package, 4421instead relies on the pkgsrc archives. For each new or updated TeXlive package,
4421e.g., the main one and the corresponding documentation, upload the distfiles 4422e.g., the main one and the corresponding documentation, upload the distfiles
4422with the following command in each package directory. 4423with the following command in each package directory.
4423 4424
4424make upload-distfiles 4425make upload-distfiles
4425 4426
442614.2. Examples 442714.2. Examples
4427 4428
442814.2.1. How the www/nvu package came into pkgsrc 442914.2.1. How the www/nvu package came into pkgsrc
4429 4430
443014.2.1.1. The initial package 443114.2.1.1. The initial package
4431 4432
4432Looking at the file pkgsrc/doc/TODO, I saw that the "nvu" package has not yet 4433Looking at the file pkgsrc/doc/TODO, I saw that the "nvu" package has not yet
4433been imported into pkgsrc. As the description says it has to do with the web, 4434been imported into pkgsrc. As the description says it has to do with the web,
4434the obvious choice for the category is "www". 4435the obvious choice for the category is "www".
4435 4436
4436$ mkdir www/nvu 4437$ mkdir www/nvu
4437$ cd www/nvu 4438$ cd www/nvu
4438 4439
4439The web site says that the sources are available as a tar file, so I fed that 4440The web site says that the sources are available as a tar file, so I fed that
4440URL to the url2pkg program: 4441URL to the url2pkg program:
4441 4442
4442$ url2pkg http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2 4443$ url2pkg http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2
4443 4444
4444My editor popped up, and I added a PKGNAME line below the DISTNAME line, as the 4445My editor popped up, and I added a PKGNAME line below the DISTNAME line, as the
4445package name should not have the word "sources" in it. I also filled in the 4446package name should not have the word "sources" in it. I also filled in the
4446MAINTAINER, HOMEPAGE and COMMENT fields. Then the package Makefile looked like 4447MAINTAINER, HOMEPAGE and COMMENT fields. Then the package Makefile looked like
4447that: 4448that:
4448 4449
4449# $NetBSD $ 4450# $NetBSD $
4450# 4451#
4451 4452
4452DISTNAME= nvu-1.0-sources 4453DISTNAME= nvu-1.0-sources
4453PKGNAME= nvu-1.0 4454PKGNAME= nvu-1.0
4454CATEGORIES= www 4455CATEGORIES= www
4455MASTER_SITES= http://cvs.nvu.com/download/ 4456MASTER_SITES= http://cvs.nvu.com/download/
4456EXTRACT_SUFX= .tar.bz2 4457EXTRACT_SUFX= .tar.bz2
4457 4458
4458MAINTAINER= rillig@NetBSD.org 4459MAINTAINER= rillig@NetBSD.org
4459HOMEPAGE= http://cvs.nvu.com/ 4460HOMEPAGE= http://cvs.nvu.com/
4460COMMENT= Web Authoring System 4461COMMENT= Web Authoring System
4461 4462
4462# url2pkg-marker (please do not remove this line.) 4463# url2pkg-marker (please do not remove this line.)
4463.include "../../mk/bsd.pkg.mk" 4464.include "../../mk/bsd.pkg.mk"
4464 4465
4465On the first line of output above, an artificial space has been added between 4466On the first line of output above, an artificial space has been added between
4466NetBSD and $, this is a workaround to prevent CVS expanding to the filename of 4467NetBSD and $, this is a workaround to prevent CVS expanding to the filename of
4467the guide. 4468the guide.
4468 4469
4469Then, I quit the editor and watched pkgsrc downloading a large source archive: 4470Then, I quit the editor and watched pkgsrc downloading a large source archive:
4470 4471
4471url2pkg> Running "make makesum" ... 4472url2pkg> Running "make makesum" ...
4472=> Required installed package digest>=20010302: digest-20060826 found 4473=> Required installed package digest>=20010302: digest-20060826 found
4473=> Fetching nvu-1.0-sources.tar.bz2 4474=> Fetching nvu-1.0-sources.tar.bz2
4474Requesting http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2 4475Requesting http://cvs.nvu.com/download/nvu-1.0-sources.tar.bz2
4475100% |*************************************| 28992 KB 150.77 KB/s00:00 ETA 4476100% |*************************************| 28992 KB 150.77 KB/s00:00 ETA
447629687976 bytes retrieved in 03:12 (150.77 KB/s) 447729687976 bytes retrieved in 03:12 (150.77 KB/s)
4477url2pkg> Running "make extract" ... 4478url2pkg> Running "make extract" ...
4478=> Required installed package digest>=20010302: digest-20060826 found 4479=> Required installed package digest>=20010302: digest-20060826 found
4479=> Checksum SHA1 OK for nvu-1.0-sources.tar.bz2 4480=> Checksum SHA1 OK for nvu-1.0-sources.tar.bz2
4480=> Checksum RMD160 OK for nvu-1.0-sources.tar.bz2 4481=> Checksum RMD160 OK for nvu-1.0-sources.tar.bz2
4481work.bacc -> /tmp/roland/pkgsrc/www/nvu/work.bacc 4482work.bacc -> /tmp/roland/pkgsrc/www/nvu/work.bacc
4482===> Installing dependencies for nvu-1.0 4483===> Installing dependencies for nvu-1.0
4483===> Overriding tools for nvu-1.0 4484===> Overriding tools for nvu-1.0
4484===> Extracting for nvu-1.0 4485===> Extracting for nvu-1.0
4485url2pkg> Adjusting the Makefile. 4486url2pkg> Adjusting the Makefile.
4486 4487
4487Remember to correct CATEGORIES, HOMEPAGE, COMMENT, and DESCR when you're done! 4488Remember to correct CATEGORIES, HOMEPAGE, COMMENT, and DESCR when you're done!
4488 4489
4489Good luck! (See pkgsrc/doc/pkgsrc.txt for some more help :-) 4490Good luck! (See pkgsrc/doc/pkgsrc.txt for some more help :-)
4490 4491
449114.2.1.2. Fixing all kinds of problems to make the package work 449214.2.1.2. Fixing all kinds of problems to make the package work
4492 4493
4493Now that the package has been extracted, let's see what's inside it. The 4494Now that the package has been extracted, let's see what's inside it. The
4494package has a README.txt, but that only says something about mozilla, so it's 4495package has a README.txt, but that only says something about mozilla, so it's
4495probably useless for seeing what dependencies this package has. But since there 4496probably useless for seeing what dependencies this package has. But since there
4496is a GNU configure script in the package, let's hope that it will complain 4497is a GNU configure script in the package, let's hope that it will complain
4497about everything it needs. 4498about everything it needs.
4498 4499
4499$ bmake 4500$ bmake
4500=> Required installed package digest>=20010302: digest-20060826 found 4501=> Required installed package digest>=20010302: digest-20060826 found
4501=> Checksum SHA1 OK for nvu-1.0-sources.tar.bz2 4502=> Checksum SHA1 OK for nvu-1.0-sources.tar.bz2
4502=> Checksum RMD160 OK for nvu-1.0-sources.tar.bz2 4503=> Checksum RMD160 OK for nvu-1.0-sources.tar.bz2
4503===> Patching for nvu-1.0 4504===> Patching for nvu-1.0
4504===> Creating toolchain wrappers for nvu-1.0 4505===> Creating toolchain wrappers for nvu-1.0
4505===> Configuring for nvu-1.0 4506===> Configuring for nvu-1.0
4506[...] 4507[...]
4507configure: error: Perl 5.004 or higher is required. 4508configure: error: Perl 5.004 or higher is required.
4508[...] 4509[...]
4509WARNING: Please add USE_TOOLS+=perl to the package Makefile. 4510WARNING: Please add USE_TOOLS+=perl to the package Makefile.
4510[...] 4511[...]
4511 4512
4512That worked quite well. So I opened the package Makefile in my editor, and 4513That worked quite well. So I opened the package Makefile in my editor, and
4513since it already has a USE_TOOLS line, I just appended "perl" to it. Since the 4514since it already has a USE_TOOLS line, I just appended "perl" to it. Since the
4514dependencies of the package have changed now, and since a perl wrapper is 4515dependencies of the package have changed now, and since a perl wrapper is
4515automatically installed in the "tools" phase, I need to build the package from 4516automatically installed in the "tools" phase, I need to build the package from
4516scratch. 4517scratch.
4517 4518
4518$ bmake clean 4519$ bmake clean
4519===> Cleaning for nvu-1.0 4520===> Cleaning for nvu-1.0
4520$ bmake 4521$ bmake
4521[...] 4522[...]
4522*** /tmp/roland/pkgsrc/www/nvu/work.bacc/.tools/bin/make is not \ 4523*** /tmp/roland/pkgsrc/www/nvu/work.bacc/.tools/bin/make is not \
4523GNU Make. You will not be able to build Mozilla without GNU Make. 4524GNU Make. You will not be able to build Mozilla without GNU Make.
4524[...] 4525[...]
4525 4526
4526So I added "gmake" to the USE_TOOLS line and tried again (from scratch). 4527So I added "gmake" to the USE_TOOLS line and tried again (from scratch).
4527 4528
4528[...] 4529[...]
4529checking for GTK - version >= 1.2.0... no 4530checking for GTK - version >= 1.2.0... no
4530*** Could not run GTK test program, checking why... 4531*** Could not run GTK test program, checking why...
4531[...] 4532[...]
4532 4533
4533Now to the other dependencies. The first question is: Where is the GTK package 4534Now to the other dependencies. The first question is: Where is the GTK package
4534hidden in pkgsrc? 4535hidden in pkgsrc?
4535 4536
4536$ echo ../../*/gtk* 4537$ echo ../../*/gtk*
4537[many packages ...] 4538[many packages ...]
4538$ echo ../../*/gtk 4539$ echo ../../*/gtk
4539../../x11/gtk 4540../../x11/gtk
4540$ echo ../../*/gtk2 4541$ echo ../../*/gtk2
4541../../x11/gtk2 4542../../x11/gtk2
4542$ echo ../../*/gtk2/bui* 4543$ echo ../../*/gtk2/bui*
4543../../x11/gtk2/buildlink3.mk 4544../../x11/gtk2/buildlink3.mk
4544 4545
4545The first try was definitely too broad. The second one had exactly one result, 4546The first try was definitely too broad. The second one had exactly one result,
4546which is very good. But there is one pitfall with GNOME packages. Before GNOME 4547which is very good. But there is one pitfall with GNOME packages. Before GNOME
45472 had been released, there were already many GNOME 1 packages in pkgsrc. To be 45482 had been released, there were already many GNOME 1 packages in pkgsrc. To be
4548able to continue to use these packages, the GNOME 2 packages were imported as 4549able to continue to use these packages, the GNOME 2 packages were imported as
4549separate packages, and their names usually have a "2" appended. So I checked 4550separate packages, and their names usually have a "2" appended. So I checked
4550whether this was the case here, and indeed it was. 4551whether this was the case here, and indeed it was.
4551 4552
4552Since the GTK2 package has a buildlink3.mk file, adding the dependency is very 4553Since the GTK2 package has a buildlink3.mk file, adding the dependency is very
4553easy. I just inserted an .include line before the last line of the package 4554easy. I just inserted an .include line before the last line of the package
4554Makefile, so that it now looks like this: 4555Makefile, so that it now looks like this:
4555 4556
4556[...] 4557[...]
4557.include "../../x11/gtk2/buildlink3.mk" 4558.include "../../x11/gtk2/buildlink3.mk"
4558.include "../../mk/bsd.pkg.mk 4559.include "../../mk/bsd.pkg.mk
4559 4560
4560After another bmake clean && bmake, the answer was: 4561After another bmake clean && bmake, the answer was:
4561 4562
4562[...] 4563[...]
4563checking for gtk-config... /home/roland/pkg/bin/gtk-config 4564checking for gtk-config... /home/roland/pkg/bin/gtk-config
4564checking for GTK - version >= 1.2.0... no 4565checking for GTK - version >= 1.2.0... no
4565*** Could not run GTK test program, checking why... 4566*** Could not run GTK test program, checking why...
4566*** The test program failed to compile or link. See the file config.log for the 4567*** The test program failed to compile or link. See the file config.log for the
4567*** exact error that occured. This usually means GTK was incorrectly installed 4568*** exact error that occured. This usually means GTK was incorrectly installed
4568*** or that you have moved GTK since it was installed. In the latter case, you 4569*** or that you have moved GTK since it was installed. In the latter case, you
4569*** may want to edit the gtk-config script: /home/roland/pkg/bin/gtk-config 4570*** may want to edit the gtk-config script: /home/roland/pkg/bin/gtk-config
4570configure: error: Test for GTK failed. 4571configure: error: Test for GTK failed.
4571[...] 4572[...]
4572 4573
4573In this particular case, the assumption that "every package prefers GNOME 2" 4574In this particular case, the assumption that "every package prefers GNOME 2"
4574had been wrong. The first of the lines above told me that this package really 4575had been wrong. The first of the lines above told me that this package really
4575wanted to have the GNOME 1 version of GTK. If the package had looked for GTK2, 4576wanted to have the GNOME 1 version of GTK. If the package had looked for GTK2,
4576it would have looked for pkg-config instead of gtk-config. So I changed the x11 4577it would have looked for pkg-config instead of gtk-config. So I changed the x11
4577/gtk2 to x11/gtk in the package Makefile, and tried again. 4578/gtk2 to x11/gtk in the package Makefile, and tried again.
4578 4579
4579[...] 4580[...]
4580cc -o xpidl.o -c -DOSTYPE=\"NetBSD3\" -DOSARCH=\"NetBSD\" [...] 4581cc -o xpidl.o -c -DOSTYPE=\"NetBSD3\" -DOSARCH=\"NetBSD\" [...]
4581In file included from xpidl.c:42: 4582In file included from xpidl.c:42:
4582xpidl.h:53:24: libIDL/IDL.h: No such file or directory 4583xpidl.h:53:24: libIDL/IDL.h: No such file or directory
4583In file included from xpidl.c:42: 4584In file included from xpidl.c:42:
4584xpidl.h:132: error: parse error before "IDL_ns" 4585xpidl.h:132: error: parse error before "IDL_ns"
4585[...] 4586[...]
4586 4587
4587The package still does not find all of its dependencies. Now the question is: 4588The package still does not find all of its dependencies. Now the question is:
4588Which package provides the libIDL/IDL.h header file? 4589Which package provides the libIDL/IDL.h header file?
4589 4590
4590$ echo ../../*/*idl* 4591$ echo ../../*/*idl*
4591../../devel/py-idle ../../wip/idled ../../x11/acidlaunch 4592../../devel/py-idle ../../wip/idled ../../x11/acidlaunch
4592$ echo ../../*/*IDL* 4593$ echo ../../*/*IDL*
4593../../net/libIDL 4594../../net/libIDL
4594 4595
4595Let's take the one from the second try. So I included the ../../net/libIDL/ 4596Let's take the one from the second try. So I included the ../../net/libIDL/
4596buildlink3.mk file and tried again. But the error didn't change. After digging 4597buildlink3.mk file and tried again. But the error didn't change. After digging
4597through some of the code, I concluded that the build process of the package was 4598through some of the code, I concluded that the build process of the package was
4598broken and couldn't have ever worked, but since the Mozilla source tree is 4599broken and couldn't have ever worked, but since the Mozilla source tree is
4599quite large, I didn't want to fix it. So I added the following to the package 4600quite large, I didn't want to fix it. So I added the following to the package
4600Makefile and tried again: 4601Makefile and tried again:
4601 4602
4602CPPFLAGS+= -I${BUILDLINK_PREFIX.libIDL}/include/libIDL-2.0 4603CPPFLAGS+= -I${BUILDLINK_PREFIX.libIDL}/include/libIDL-2.0
4603BUILDLINK_TRANSFORM+= l:IDL:IDL-2 4604BUILDLINK_TRANSFORM+= l:IDL:IDL-2
4604 4605
4605The latter line is needed because the package expects the library libIDL.so, 4606The latter line is needed because the package expects the library libIDL.so,
4606but only libIDL-2.so is available. So I told the compiler wrapper to rewrite 4607but only libIDL-2.so is available. So I told the compiler wrapper to rewrite
4607that on the fly. 4608that on the fly.
4608 4609
4609The next problem was related to a recent change of the FreeType interface. I 4610The next problem was related to a recent change of the FreeType interface. I
4610looked up in www/seamonkey which patch files were relevant for this issue and 4611looked up in www/seamonkey which patch files were relevant for this issue and
4611copied them to the patches directory. Then I retried, fixed the patches so that 4612copied them to the patches directory. Then I retried, fixed the patches so that
4612they applied cleanly and retried again. This time, everything worked. 4613they applied cleanly and retried again. This time, everything worked.
4613 4614
461414.2.1.3. Installing the package 461514.2.1.3. Installing the package
4615 4616
4616$ bmake CHECK_FILES=no install 4617$ bmake CHECK_FILES=no install
4617[...] 4618[...]
4618$ bmake print-PLIST >PLIST 4619$ bmake print-PLIST >PLIST
4619$ bmake deinstall 4620$ bmake deinstall
4620$ bmake install 4621$ bmake install
4621 4622
4622Chapter 15. Programming in Makefiles 4623Chapter 15. Programming in Makefiles
4623 4624
4624Table of Contents 4625Table of Contents
4625 4626
462615.1. Caveats 462715.1. Caveats
462715.2. Makefile variables 462815.2. Makefile variables
4628 4629
@@ -6136,2004 +6137,2003 @@ number of ways: @@ -6136,2004 +6137,2003 @@ number of ways:
6136 * When extracting the distfiles, some packages may ask for passwords. 6137 * When extracting the distfiles, some packages may ask for passwords.
6137 6138
6138 * help to configure the package before it is built 6139 * help to configure the package before it is built
6139 6140
6140 * help during the build process 6141 * help during the build process
6141 6142
6142 * help during the installation of a package 6143 * help during the installation of a package
6143 6144
6144A package can set the INTERACTIVE_STAGE variable to define which stages need 6145A package can set the INTERACTIVE_STAGE variable to define which stages need
6145interaction. This should be done in the package's Makefile, e.g.: 6146interaction. This should be done in the package's Makefile, e.g.:
6146 6147
6147INTERACTIVE_STAGE= configure install 6148INTERACTIVE_STAGE= configure install
6148 6149
6149The user can then decide to skip this package by setting the BATCH variable. 6150The user can then decide to skip this package by setting the BATCH variable.
6150Packages that require interaction are also excluded from bulk builds. 6151Packages that require interaction are also excluded from bulk builds.
6151 6152
615221.1.3. Handling licenses 615321.1.3. Handling licenses
6153 6154
6154Authors of software can choose the licence under which software can be copied. 6155Authors of software can choose the licence under which software can be copied.
6155The Free Software Foundation has declared some licenses "Free", and the Open 6156The Free Software Foundation has declared some licenses "Free", and the Open
6156Source Initiative has a definition of "Open Source". 6157Source Initiative has a definition of "Open Source".
6157 6158
6158By default, pkgsrc allows packages with Free or Open Source licenses to be 6159By default, pkgsrc allows packages with Free or Open Source licenses to be
6159built. To allow packages with other licenses to be built as well, the pkgsrc 6160built. To allow packages with other licenses to be built as well, the pkgsrc
6160user needs to add these licenses to the ACCEPTABLE_LICENSES variable in mk.conf 6161user needs to add these licenses to the ACCEPTABLE_LICENSES variable in mk.conf
6161. Note that this variable only affects which packages may be built, while the 6162. Note that this variable only affects which packages may be built, while the
6162license terms often also restrict the actual use of the package and its 6163license terms often also restrict the actual use of the package and its
6163redistribution. 6164redistribution.
6164 6165
6165One might want to only install packages with a BSD license, or the GPL, and not 6166One might want to only install packages with a BSD license, or the GPL, and not
6166the other. The free licenses are added to the default ACCEPTABLE_LICENSES 6167the other. The free licenses are added to the default ACCEPTABLE_LICENSES
6167variable. The pkgsrc user can override the default by setting the 6168variable. The pkgsrc user can override the default by setting the
6168ACCEPTABLE_LICENSES variable with "=" instead of "+=". The licenses accepted by 6169ACCEPTABLE_LICENSES variable with "=" instead of "+=". The licenses accepted by
6169default are defined in the DEFAULT_ACCEPTABLE_LICENSES variable in the file 6170default are defined in the DEFAULT_ACCEPTABLE_LICENSES variable in the file
6170pkgsrc/mk/license.mk. 6171pkgsrc/mk/license.mk.
6171 6172
6172The license tag mechanism is intended to address copyright-related issues 6173The license tag mechanism is intended to address copyright-related issues
6173surrounding building, installing and using a package, and not to address 6174surrounding building, installing and using a package, and not to address
6174redistribution issues (see RESTRICTED and NO_SRC_ON_FTP, etc.). Packages with 6175redistribution issues (see RESTRICTED and NO_SRC_ON_FTP, etc.). Packages with
6175redistribution restrictions should set these tags. 6176redistribution restrictions should set these tags.
6176 6177
6177Denoting that a package may be copied according to a particular license is done 6178Denoting that a package may be copied according to a particular license is done
6178by placing the license in pkgsrc/licenses and setting the LICENSE variable to a 6179by placing the license in pkgsrc/licenses and setting the LICENSE variable to a
6179string identifying the license, e.g. in graphics/xv: 6180string identifying the license, e.g. in graphics/xv:
6180 6181
6181LICENSE= xv-license 6182LICENSE= xv-license
6182 6183
6183When trying to build, the user will get a notice that the package is covered by 6184When trying to build, the user will get a notice that the package is covered by
6184a license which has not been placed in the ACCEPTABLE_LICENSES variable: 6185a license which has not been placed in the ACCEPTABLE_LICENSES variable:
6185 6186
6186% make 6187% make
6187===> xv-3.10anb9 has an unacceptable license: xv-license. 6188===> xv-3.10anb9 has an unacceptable license: xv-license.
6188===> To view the license, enter "/usr/bin/make show-license". 6189===> To view the license, enter "/usr/bin/make show-license".
6189===> To indicate acceptance, add this line to your /etc/mk.conf: 6190===> To indicate acceptance, add this line to your /etc/mk.conf:
6190===> ACCEPTABLE_LICENSES+=xv-license 6191===> ACCEPTABLE_LICENSES+=xv-license
6191*** Error code 1 6192*** Error code 1
6192 6193
6193The license can be viewed with make show-license, and if the user so chooses, 6194The license can be viewed with make show-license, and if the user so chooses,
6194the line printed above can be added to mk.conf to convey to pkgsrc that it 6195the line printed above can be added to mk.conf to convey to pkgsrc that it
6195should not in the future fail because of that license: 6196should not in the future fail because of that license:
6196 6197
6197ACCEPTABLE_LICENSES+=xv-license 6198ACCEPTABLE_LICENSES+=xv-license
6198 6199
6199The use of LICENSE=shareware, LICENSE=no-commercial-use, and similar language 6200The use of LICENSE=shareware, LICENSE=no-commercial-use, and similar language
6200is deprecated because it does not crisply refer to a particular license text. 6201is deprecated because it does not crisply refer to a particular license text.
6201Another problem with such usage is that it does not enable a user to tell 6202Another problem with such usage is that it does not enable a user to tell
6202pkgsrc to proceed for a single package without also telling pkgsrc to proceed 6203pkgsrc to proceed for a single package without also telling pkgsrc to proceed
6203for all packages with that tag. 6204for all packages with that tag.
6204 6205
620521.1.3.1. Adding a package with a new license 620621.1.3.1. Adding a package with a new license
6206 6207
6207When adding a package with a new license, the following steps are required: 6208When adding a package with a new license, the following steps are required:
6208 6209
6209 1. Check whether the license qualifies as Free or Open Source by referencing 6210 1. Check whether the license qualifies as Free or Open Source by referencing
6210 Various Licenses and Comments about Them and Licenses by Name | Open Source 6211 Various Licenses and Comments about Them and Licenses by Name | Open Source
6211 Initiative. If this is the case, the filename in pkgsrc/licenses/ does not 6212 Initiative. If this is the case, the filename in pkgsrc/licenses/ does not
6212 need the -license suffix, and the license name should be added to: 6213 need the -license suffix, and the license name should be added to:
6213 6214
6214 + DEFAULT_ACCEPTABLE_LICENSES in pkgsrc/mk/license.mk 6215 + DEFAULT_ACCEPTABLE_LICENSES in pkgsrc/mk/license.mk
6215 6216
6216 + default_acceptable_licenses in pkgsrc/pkgtools/pkg_install/files/lib/ 6217 + default_acceptable_licenses in pkgsrc/pkgtools/pkg_install/files/lib/
6217 license.c 6218 license.c
6218 6219
6219 2. The license text should be added to pkgsrc/licenses for displaying. A list 6220 2. The license text should be added to pkgsrc/licenses for displaying. A list
6220 of known licenses can be seen in this directory. 6221 of known licenses can be seen in this directory.
6221 6222
622221.1.3.2. Change to the license 622321.1.3.2. Change to the license
6223 6224
6224When the license changes (in a way other than formatting), make sure that the 6225When the license changes (in a way other than formatting), make sure that the
6225new license has a different name (e.g., append the version number if it exists, 6226new license has a different name (e.g., append the version number if it exists,
6226or the date). Just because a user told pkgsrc to build programs under a 6227or the date). Just because a user told pkgsrc to build programs under a
6227previous version of a license does not mean that pkgsrc should build programs 6228previous version of a license does not mean that pkgsrc should build programs
6228under the new licenses. The higher-level point is that pkgsrc does not evaluate 6229under the new licenses. The higher-level point is that pkgsrc does not evaluate
6229licenses for reasonableness; the only test is a mechanistic test of whether a 6230licenses for reasonableness; the only test is a mechanistic test of whether a
6230particular text has been approved by either of two bodies (FSF or OSI). 6231particular text has been approved by either of two bodies (FSF or OSI).
6231 6232
623221.1.4. Restricted packages 623321.1.4. Restricted packages
6233 6234
6234Some licenses restrict how software may be re-distributed. By declaring the 6235Some licenses restrict how software may be re-distributed. By declaring the
6235restrictions, package tools can automatically refrain from e.g. placing binary 6236restrictions, package tools can automatically refrain from e.g. placing binary
6236packages on FTP sites. 6237packages on FTP sites.
6237 6238
6238There are four possible restrictions, which are the cross product of sources 6239There are four possible restrictions, which are the cross product of sources
6239(distfiles) and binaries not being placed on FTP sites and CD-ROMs. Because 6240(distfiles) and binaries not being placed on FTP sites and CD-ROMs. Because
6240this is rarely the exact language in any license, and because non-Free licenses 6241this is rarely the exact language in any license, and because non-Free licenses
6241tend to be different from each other, pkgsrc adopts a definition of FTP and 6242tend to be different from each other, pkgsrc adopts a definition of FTP and
6242CD-ROM. "FTP" means making the source or binary file available over the 6243CD-ROM. "FTP" means making the source or binary file available over the
6243Internet at no charge. "CD-ROM" means making the source or binary available on 6244Internet at no charge. "CD-ROM" means making the source or binary available on
6244some kind of media, together with other source and binary packages, which is 6245some kind of media, together with other source and binary packages, which is
6245sold for a distribution charge. 6246sold for a distribution charge.
6246 6247
6247In order to encode these restrictions, the package system defines five make 6248In order to encode these restrictions, the package system defines five make
6248variables that can be set to note these restrictions: 6249variables that can be set to note these restrictions:
6249 6250
6250 * RESTRICTED 6251 * RESTRICTED
6251 6252
6252 This variable should be set whenever a restriction exists (regardless of 6253 This variable should be set whenever a restriction exists (regardless of
6253 its kind). Set this variable to a string containing the reason for the 6254 its kind). Set this variable to a string containing the reason for the
6254 restriction. It should be understood that those wanting to understand the 6255 restriction. It should be understood that those wanting to understand the
6255 restriction will have to read the license, and perhaps seek advice of 6256 restriction will have to read the license, and perhaps seek advice of
6256 counsel. 6257 counsel.
6257 6258
6258 * NO_BIN_ON_CDROM 6259 * NO_BIN_ON_CDROM
6259 6260
6260 Binaries may not be placed on CD-ROM containing other binary packages, for 6261 Binaries may not be placed on CD-ROM containing other binary packages, for
6261 which a distribution charge may be made. In this case, set this variable to 6262 which a distribution charge may be made. In this case, set this variable to
6262 ${RESTRICTED}. 6263 ${RESTRICTED}.
6263 6264
6264 * NO_BIN_ON_FTP 6265 * NO_BIN_ON_FTP
6265 6266
6266 Binaries may not made available on the Internet without charge. In this 6267 Binaries may not made available on the Internet without charge. In this
6267 case, set this variable to ${RESTRICTED}. If this variable is set, binary 6268 case, set this variable to ${RESTRICTED}. If this variable is set, binary
6268 packages will not be included on ftp.NetBSD.org. 6269 packages will not be included on ftp.NetBSD.org.
6269 6270
6270 * NO_SRC_ON_CDROM 6271 * NO_SRC_ON_CDROM
6271 6272
6272 Distfiles may not be placed on CD-ROM, together with other distfiles, for 6273 Distfiles may not be placed on CD-ROM, together with other distfiles, for
6273 which a fee may be charged. In this case, set this variable to $ 6274 which a fee may be charged. In this case, set this variable to $
6274 {RESTRICTED}. 6275 {RESTRICTED}.
6275 6276
6276 * NO_SRC_ON_FTP 6277 * NO_SRC_ON_FTP
6277 6278
6278 Distfiles may not made available via FTP at no charge. In this case, set 6279 Distfiles may not made available via FTP at no charge. In this case, set
6279 this variable to ${RESTRICTED}. If this variable is set, the distfile(s) 6280 this variable to ${RESTRICTED}. If this variable is set, the distfile(s)
6280 will not be mirrored on ftp.NetBSD.org. 6281 will not be mirrored on ftp.NetBSD.org.
6281 6282
6282Please note that packages will be removed from pkgsrc when the distfiles are 6283Please note that packages will be removed from pkgsrc when the distfiles are
6283not distributable and cannot be obtained for a period of one full quarter 6284not distributable and cannot be obtained for a period of one full quarter
6284branch. Packages with manual/interactive fetch must have a maintainer and it is 6285branch. Packages with manual/interactive fetch must have a maintainer and it is
6285his/her responsibility to ensure this. 6286his/her responsibility to ensure this.
6286 6287
628721.1.5. Handling dependencies 628821.1.5. Handling dependencies
6288 6289
6289Your package may depend on some other package being present, and there are 6290Your package may depend on some other package being present, and there are
6290various ways of expressing this dependency. pkgsrc supports the DEPENDS, 6291various ways of expressing this dependency. pkgsrc supports the DEPENDS,
6291BUILD_DEPENDS, TOOL_DEPENDS, and TEST_DEPENDS definitions, the USE_TOOLS 6292BUILD_DEPENDS, TOOL_DEPENDS, and TEST_DEPENDS definitions, the USE_TOOLS
6292definition, as well as dependencies via buildlink3.mk, which is the preferred 6293definition, as well as dependencies via buildlink3.mk, which is the preferred
6293way to handle dependencies, and which uses the variables named above. See 6294way to handle dependencies, and which uses the variables named above. See
6294Chapter 18, Buildlink methodology for more information. 6295Chapter 18, Buildlink methodology for more information.
6295 6296
6296The basic difference is that the DEPENDS definition registers that 6297The basic difference is that the DEPENDS definition registers that
6297pre-requisite in the binary package so it will be pulled in when the binary 6298pre-requisite in the binary package so it will be pulled in when the binary
6298package is later installed, whilst the BUILD_DEPENDS, TOOL_DEPENDS, and 6299package is later installed, whilst the BUILD_DEPENDS, TOOL_DEPENDS, and
6299TEST_DEPENDS definitions do not, marking a dependency that is only needed for 6300TEST_DEPENDS definitions do not, marking a dependency that is only needed for
6300building or testing the resulting package. See also Chapter 14, Creating a new 6301building or testing the resulting package. See also Chapter 14, Creating a new
6301pkgsrc package from scratch for more information. 6302pkgsrc package from scratch for more information.
6302 6303
6303This means that if you only need a package present whilst you are building or 6304This means that if you only need a package present whilst you are building or
6304testing, it should be noted as a TOOL_DEPENDS, BUILD_DEPENDS, or TEST_DEPENDS. 6305testing, it should be noted as a TOOL_DEPENDS, BUILD_DEPENDS, or TEST_DEPENDS.
6305When cross-compiling, TOOL_DEPENDS are native packages, i.e. packages for the 6306When cross-compiling, TOOL_DEPENDS are native packages, i.e. packages for the
6306architecture where the package is built; BUILD_DEPENDS are target packages, 6307architecture where the package is built; BUILD_DEPENDS are target packages,
6307i.e., packages for the architecture for which the package is built. 6308i.e., packages for the architecture for which the package is built.
6308 6309
6309The format for a DEPENDS, BUILD_DEPENDS, TOOL_DEPENDS, and TEST_DEPENDS 6310The format for a DEPENDS, BUILD_DEPENDS, TOOL_DEPENDS, and TEST_DEPENDS
6310definition is: 6311definition is:
6311 6312
6312<pre-req-package-name>:../../<category>/<pre-req-package> 6313<pre-req-package-name>:../../<category>/<pre-req-package>
6313 6314
6314Please note that the "pre-req-package-name" may include any of the wildcard 6315Please note that the "pre-req-package-name" may include any of the wildcard
6315version numbers recognized by pkg_info(1). 6316version numbers recognized by pkg_info(1).
6316 6317
6317 1. If your package needs another package's binaries or libraries to build and 6318 1. If your package needs another package's binaries or libraries to build and
6318 run, and if that package has a buildlink3.mk file available, use it: 6319 run, and if that package has a buildlink3.mk file available, use it:
6319 6320
6320 .include "../../graphics/jpeg/buildlink3.mk" 6321 .include "../../graphics/jpeg/buildlink3.mk"
6321 6322
6322 2. If your package needs another package's binaries or libraries only for 6323 2. If your package needs another package's binaries or libraries only for
6323 building, and if that package has a buildlink3.mk file available, use it: 6324 building, and if that package has a buildlink3.mk file available, use it:
6324 6325
6325 .include "../../graphics/jpeg/buildlink3.mk" 6326 .include "../../graphics/jpeg/buildlink3.mk"
6326 6327
6327 but set BUILDLINK_DEPMETHOD.jpeg?=build to make it a build dependency only. 6328 but set BUILDLINK_DEPMETHOD.jpeg?=build to make it a build dependency only.
6328 This case is rather rare. 6329 This case is rather rare.
6329 6330
6330 3. If your package needs binaries from another package to build, use the 6331 3. If your package needs binaries from another package to build, use the
6331 TOOL_DEPENDS definition: 6332 TOOL_DEPENDS definition:
6332 6333
6333 TOOL_DEPENDS+= itstool-[0-9]*:../../textproc/itstool 6334 TOOL_DEPENDS+= itstool-[0-9]*:../../textproc/itstool
6334 6335
6335 4. If your package needs static libraries to link against, header files to 6336 4. If your package needs static libraries to link against, header files to
6336 include, etc. from another package to build, use the BUILD_DEPENDS 6337 include, etc. from another package to build, use the BUILD_DEPENDS
6337 definition. 6338 definition.
6338 6339
6339 5. If your package needs a library with which to link and there is no 6340 5. If your package needs a library with which to link and there is no
6340 buildlink3.mk file available, create one. Using DEPENDS won't be sufficient 6341 buildlink3.mk file available, create one. Using DEPENDS won't be sufficient
6341 because the include files and libraries will be hidden from the compiler. 6342 because the include files and libraries will be hidden from the compiler.
6342 6343
6343 6. If your package needs some executable to be able to run correctly and if 6344 6. If your package needs some executable to be able to run correctly and if
6344 there's no buildlink3.mk file, this is specified using the DEPENDS 6345 there's no buildlink3.mk file, this is specified using the DEPENDS
6345 variable. The print/lyx package needs to be able to execute the latex 6346 variable. The print/lyx package needs to be able to execute the latex
6346 binary from the tex-latex-bin package when it runs, and that is specified: 6347 binary from the tex-latex-bin package when it runs, and that is specified:
6347 6348
6348 DEPENDS+= tex-latex-bin-[0-9]*:../../print/tex-latex-bin 6349 DEPENDS+= tex-latex-bin-[0-9]*:../../print/tex-latex-bin
6349 6350
6350 7. If your package includes a test suite that has extra dependencies only 6351 7. If your package includes a test suite that has extra dependencies only
6351 required for this purpose (frequently this can be run as a "make test" 6352 required for this purpose (frequently this can be run as a "make test"
6352 target), use the TEST_DEPENDS variable. 6353 target), use the TEST_DEPENDS variable.
6353 6354
6354 8. You can use wildcards in package dependencies. Note that such wildcard 6355 8. You can use wildcards in package dependencies. Note that such wildcard
6355 dependencies are retained when creating binary packages. The dependency is 6356 dependencies are retained when creating binary packages. The dependency is
6356 checked when installing the binary package and any package which matches 6357 checked when installing the binary package and any package which matches
6357 the pattern will be used. Wildcard dependencies should be used with care. 6358 the pattern will be used. Wildcard dependencies should be used with care.
6358 6359
6359 The "-[0-9]*" should be used instead of "-*" to avoid potentially ambiguous 6360 The "-[0-9]*" should be used instead of "-*" to avoid potentially ambiguous
6360 matches such as "tk-postgresql" matching a "tk-*" DEPENDS. 6361 matches such as "tk-postgresql" matching a "tk-*" DEPENDS.
6361 6362
6362 Wildcards can also be used to specify that a package will only build 6363 Wildcards can also be used to specify that a package will only build
6363 against a certain minimum version of a pre-requisite: 6364 against a certain minimum version of a pre-requisite:
6364 6365
6365 DEPENDS+= ImageMagick>=6.0:../../graphics/ImageMagick 6366 DEPENDS+= ImageMagick>=6.0:../../graphics/ImageMagick
6366 6367
6367 This means that the package will build using version 6.0 of ImageMagick or 6368 This means that the package will build using version 6.0 of ImageMagick or
6368 newer. Such a dependency may be warranted if, for example, the command line 6369 newer. Such a dependency may be warranted if, for example, the command line
6369 options of an executable have changed. 6370 options of an executable have changed.
6370 6371
6371 If you need to depend on minimum versions of libraries, set 6372 If you need to depend on minimum versions of libraries, set
6372 BUILDLINK_API_DEPENDS.pkg to the appropriate pattern before including its 6373 BUILDLINK_API_DEPENDS.pkg to the appropriate pattern before including its
6373 buildlink3.mk file, e.g. 6374 buildlink3.mk file, e.g.
6374 6375
6375 BUILDLINK_API_DEPENDS.jpeg+= jpeg>=9.0 6376 BUILDLINK_API_DEPENDS.jpeg+= jpeg>=9.0
6376 .include "../../graphics/jpeg/buildlink3.mk" 6377 .include "../../graphics/jpeg/buildlink3.mk"
6377 6378
6378 For security fixes, please update the package vulnerabilities file. See 6379 For security fixes, please update the package vulnerabilities file. See
6379 Section 21.1.9, "Handling packages with security problems" for more 6380 Section 21.1.9, "Handling packages with security problems" for more
6380 information. 6381 information.
6381 6382
6382If your package needs files from another package to build, add the relevant 6383If your package needs files from another package to build, add the relevant
6383distribution files to DISTFILES, so they will be extracted automatically. See 6384distribution files to DISTFILES, so they will be extracted automatically. See
6384the print/ghostscript package for an example. (It relies on the jpeg sources 6385the print/ghostscript package for an example. (It relies on the jpeg sources
6385being present in source form during the build.) 6386being present in source form during the build.)
6386 6387
638721.1.6. Handling conflicts with other packages 638821.1.6. Handling conflicts with other packages
6388 6389
6389Your package may conflict with other packages a user might already have 6390Your package may conflict with other packages a user might already have
6390installed on his system, e.g. if your package installs the same set of files as 6391installed on his system, e.g. if your package installs the same set of files as
6391another package in the pkgsrc tree or has the same PKGNAME. 6392another package in the pkgsrc tree or has the same PKGNAME.
6392 6393
6393For example, x11/libXaw3d and x11/Xaw-Xpm install the same shared library, thus 6394For example, x11/libXaw3d and x11/Xaw-Xpm install the same shared library, thus
6394you set in pkgsrc/x11/libXaw3d/Makefile: 6395you set in pkgsrc/x11/libXaw3d/Makefile:
6395 6396
6396CONFLICTS= Xaw-Xpm-[0-9]* 6397CONFLICTS= Xaw-Xpm-[0-9]*
6397 6398
6398 6399
6399and in pkgsrc/x11/Xaw-Xpm/Makefile: 6400and in pkgsrc/x11/Xaw-Xpm/Makefile:
6400 6401
6401CONFLICTS= libXaw3d-[0-9]* 6402CONFLICTS= libXaw3d-[0-9]*
6402 6403
6403 6404
6404pkg_add(1) is able to detect attempts to install packages that conflict with 6405pkg_add(1) is able to detect attempts to install packages that conflict with
6405existing packages and abort. However, in many situations this is too late in 6406existing packages and abort. However, in many situations this is too late in
6406the process. Binary package managers will not know about the conflict until 6407the process. Binary package managers will not know about the conflict until
6407they attempt to install the package after already downloading it and all its 6408they attempt to install the package after already downloading it and all its
6408dependencies. Users may also waste time building a package and its dependencies 6409dependencies. Users may also waste time building a package and its dependencies
6409only to find out at the end that it conflicts with another package they have 6410only to find out at the end that it conflicts with another package they have
6410installed. 6411installed.
6411 6412
6412To avoid these issues CONFLICTS entries should be added in all cases where it 6413To avoid these issues CONFLICTS entries should be added in all cases where it
6413is known that packages conflict with each other. These CONFLICTS entries are 6414is known that packages conflict with each other. These CONFLICTS entries are
6414exported in pkg_summary(5) files and consumed by binary package managers to 6415exported in pkg_summary(5) files and consumed by binary package managers to
6415inform users that packages cannot be installed onto the target system. 6416inform users that packages cannot be installed onto the target system.
6416 6417
641721.1.7. Packages that cannot or should not be built 641821.1.7. Packages that cannot or should not be built
6418 6419
6419There are several reasons why a package might be instructed to not build under 6420There are several reasons why a package might be instructed to not build under
6420certain circumstances. If the package builds and runs on most platforms, the 6421certain circumstances. If the package builds and runs on most platforms, the
6421exceptions should be noted with BROKEN_ON_PLATFORM. If the package builds and 6422exceptions should be noted with BROKEN_ON_PLATFORM. If the package builds and
6422runs on a small handful of platforms, set BROKEN_EXCEPT_ON_PLATFORM instead. 6423runs on a small handful of platforms, set BROKEN_EXCEPT_ON_PLATFORM instead.
6423Both BROKEN_ON_PLATFORM and BROKEN_EXCEPT_ON_PLATFORM are OS triples 6424Both BROKEN_ON_PLATFORM and BROKEN_EXCEPT_ON_PLATFORM are OS triples
6424(OS-version-platform) that can use glob-style wildcards. 6425(OS-version-platform) that can use glob-style wildcards.
6425 6426
6426If a package is not appropriate for some platforms (as opposed to merely 6427If a package is not appropriate for some platforms (as opposed to merely
6427broken), a different set of variables should be used as this affects failure 6428broken), a different set of variables should be used as this affects failure
6428reporting and statistics. If the package is appropriate for most platforms, the 6429reporting and statistics. If the package is appropriate for most platforms, the
6429exceptions should be noted with NOT_FOR_PLATFORM. If the package is appropriate 6430exceptions should be noted with NOT_FOR_PLATFORM. If the package is appropriate
6430for only a small handful of platforms (often exactly one), set 6431for only a small handful of platforms (often exactly one), set
6431ONLY_FOR_PLATFORM instead. Both ONLY_FOR_PLATFORM and NOT_FOR_PLATFORM are OS 6432ONLY_FOR_PLATFORM instead. Both ONLY_FOR_PLATFORM and NOT_FOR_PLATFORM are OS
6432triples (OS-version-platform) that can use glob-style wildcards. 6433triples (OS-version-platform) that can use glob-style wildcards.
6433 6434
6434Some packages are tightly bound to a specific version of an operating system, 6435Some packages are tightly bound to a specific version of an operating system,
6435e.g. LKMs or sysutils/lsof. Such binary packages are not backwards compatible 6436e.g. LKMs or sysutils/lsof. Such binary packages are not backwards compatible
6436with other versions of the OS, and should be uploaded to a version specific 6437with other versions of the OS, and should be uploaded to a version specific
6437directory on the FTP server. Mark these packages by setting OSVERSION_SPECIFIC 6438directory on the FTP server. Mark these packages by setting OSVERSION_SPECIFIC
6438to "yes". This variable is not currently used by any of the package system 6439to "yes". This variable is not currently used by any of the package system
6439internals, but may be used in the future. 6440internals, but may be used in the future.
6440 6441
6441If the package should be skipped (for example, because it provides 6442If the package should be skipped (for example, because it provides
6442functionality already provided by the system), set PKG_SKIP_REASON to a 6443functionality already provided by the system), set PKG_SKIP_REASON to a
6443descriptive message. If the package should fail because some preconditions are 6444descriptive message. If the package should fail because some preconditions are
6444not met, set PKG_FAIL_REASON to a descriptive message. 6445not met, set PKG_FAIL_REASON to a descriptive message.
6445 6446
644621.1.8. Packages which should not be deleted, once installed 644721.1.8. Packages which should not be deleted, once installed
6447 6448
6448To ensure that a package may not be deleted, once it has been installed, the 6449To ensure that a package may not be deleted, once it has been installed, the
6449PKG_PRESERVE definition should be set in the package Makefile. This will be 6450PKG_PRESERVE definition should be set in the package Makefile. This will be
6450carried into any binary package that is made from this pkgsrc entry. A " 6451carried into any binary package that is made from this pkgsrc entry. A "
6451preserved" package will not be deleted using pkg_delete(1) unless the "-f" 6452preserved" package will not be deleted using pkg_delete(1) unless the "-f"
6452option is used. 6453option is used.
6453 6454
645421.1.9. Handling packages with security problems 645521.1.9. Handling packages with security problems
6455 6456
6456When a vulnerability is found, this should be noted in localsrc/security/ 6457When a vulnerability is found, this should be noted in localsrc/security/
6457advisories/pkg-vulnerabilities. Entries in that file consist of three parts: 6458advisories/pkg-vulnerabilities. Entries in that file consist of three parts:
6458 6459
6459 * package version pattern 6460 * package version pattern
6460 6461
6461 * type of vulnerability (please cut'n'paste an existing one where possible) 6462 * type of vulnerability (please cut'n'paste an existing one where possible)
6462 6463
6463 * URL providing additional information about the issue 6464 * URL providing additional information about the issue
6464 6465
6465For the package version pattern please always use `<' to mark an upper bound 6466For the package version pattern please always use `<' to mark an upper bound
6466(not `<='!). This will avoid possible problems due unrelated PKGREVISION bumps 6467(not `<='!). This will avoid possible problems due unrelated PKGREVISION bumps
6467not related to security fixes. Lower bounds can be added too, using '>' or '>= 6468not related to security fixes. Lower bounds can be added too, using '>' or '>=
6468'. For example, "foo>=1<1.2" would mark versions 1.0 (included) to 1.2 6469'. For example, "foo>=1<1.2" would mark versions 1.0 (included) to 1.2
6469(excluded) of "foo" as affected by the security issue. 6470(excluded) of "foo" as affected by the security issue.
6470 6471
6471Entries should always be added at the bottom of the file. 6472Entries should always be added at the bottom of the file.
6472 6473
6473When fixing packages, please modify the upper bound of the corresponding entry. 6474When fixing packages, please modify the upper bound of the corresponding entry.
6474To continue the previous example, if a fix was backported to version 1.1nb2, 6475To continue the previous example, if a fix was backported to version 1.1nb2,
6475change the previous pattern to "foo>=1<1.1nb2". 6476change the previous pattern to "foo>=1<1.1nb2".
6476 6477
6477To locally test a package version pattern against a PKGNAME you can use the  6478To locally test a package version pattern against a PKGNAME you can use the
6478pkg_admin pmatch command. 6479pkg_admin pmatch command.
6479 6480
6480The URL should be as permanent as possible and provide as much information 6481The URL should be as permanent as possible and provide as much information
6481about the issue as possible. CVE entries are preferred. 6482about the issue as possible. CVE entries are preferred.
6482 6483
6483After committing that file, ask pkgsrc-security@NetBSD.org to update the file 6484After committing that file, ask pkgsrc-security@NetBSD.org to update the file
6484on ftp.NetBSD.org. 6485on ftp.NetBSD.org.
6485 6486
6486After fixing the vulnerability by a patch, its PKGREVISION should be increased 6487After fixing the vulnerability by a patch, its PKGREVISION should be increased
6487(this is of course not necessary if the problem is fixed by using a newer 6488(this is of course not necessary if the problem is fixed by using a newer
6488release of the software), and the pattern in the pkg-vulnerabilities file must 6489release of the software), and the pattern in the pkg-vulnerabilities file must
6489be updated. 6490be updated.
6490 6491
6491Also, if the fix should be applied to the stable pkgsrc branch, be sure to 6492Also, if the fix should be applied to the stable pkgsrc branch, be sure to
6492submit a pullup request! 6493submit a pullup request!
6493 6494
6494Binary packages already on ftp.NetBSD.org will be handled semi-automatically by 6495Binary packages already on ftp.NetBSD.org will be handled semi-automatically by
6495a weekly cron job. 6496a weekly cron job.
6496 6497
6497In case a security issue is disputed, please contact 6498In case a security issue is disputed, please contact
6498pkgsrc-security@NetBSD.org. 6499pkgsrc-security@NetBSD.org.
6499 6500
650021.1.10. How to handle incrementing versions when fixing an existing package 650121.1.10. How to handle incrementing versions when fixing an existing package
6501 6502
6502When making fixes to an existing package it can be useful to change the version 6503When making fixes to an existing package it can be useful to change the version
6503number in PKGNAME. To avoid conflicting with future versions by the original 6504number in PKGNAME. To avoid conflicting with future versions by the original
6504author, a "nb1", "nb2", ... suffix can be used on package versions by setting 6505author, a "nb1", "nb2", ... suffix can be used on package versions by setting
6505PKGREVISION=1 (2, ...). The "nb" is treated like a "." by the package tools. 6506PKGREVISION=1 (2, ...). The "nb" is treated like a "." by the package tools.
6506e.g. 6507e.g.
6507 6508
6508DISTNAME= foo-17.42 6509DISTNAME= foo-17.42
6509PKGREVISION= 9 6510PKGREVISION= 9
6510 6511
6511will result in a PKGNAME of "foo-17.42nb9". If you want to use the original 6512will result in a PKGNAME of "foo-17.42nb9". If you want to use the original
6512value of PKGNAME without the "nbX" suffix, e.g. for setting DIST_SUBDIR, use 6513value of PKGNAME without the "nbX" suffix, e.g. for setting DIST_SUBDIR, use
6513PKGNAME_NOREV. 6514PKGNAME_NOREV.
6514 6515
6515When a new release of the package is released, the PKGREVISION should be 6516When a new release of the package is released, the PKGREVISION should be
6516removed, e.g. on a new minor release of the above package, things should be 6517removed, e.g. on a new minor release of the above package, things should be
6517like: 6518like:
6518 6519
6519DISTNAME= foo-17.43 6520DISTNAME= foo-17.43
6520 6521
6521PKGREVISION should be incremented for any non-trivial change in the resulting 6522PKGREVISION should be incremented for any non-trivial change in the resulting
6522binary package. Without a PKGREVISION bump, someone with the previous version 6523binary package. Without a PKGREVISION bump, someone with the previous version
6523installed has no way of knowing that their package is out of date. Thus, 6524installed has no way of knowing that their package is out of date. Thus,
6524changes without increasing PKGREVISION are essentially labeled "this is so 6525changes without increasing PKGREVISION are essentially labeled "this is so
6525trivial that no reasonable person would want to upgrade", and this is the rough 6526trivial that no reasonable person would want to upgrade", and this is the rough
6526test for when increasing PKGREVISION is appropriate. Examples of changes that 6527test for when increasing PKGREVISION is appropriate. Examples of changes that
6527do not merit increasing PKGREVISION are: 6528do not merit increasing PKGREVISION are:
6528 6529
6529 * Changing HOMEPAGE, MAINTAINER, OWNER, or comments in Makefile. 6530 * Changing HOMEPAGE, MAINTAINER, OWNER, or comments in Makefile.
6530 6531
6531 * Changing build variables if the resulting binary package is the same. 6532 * Changing build variables if the resulting binary package is the same.
6532 6533
6533 * Changing DESCR. 6534 * Changing DESCR.
6534 6535
6535 * Adding PKG_OPTIONS if the default options don't change. 6536 * Adding PKG_OPTIONS if the default options don't change.
6536 6537
6537Examples of changes that do merit an increase to PKGREVISION include: 6538Examples of changes that do merit an increase to PKGREVISION include:
6538 6539
6539 * Security fixes 6540 * Security fixes
6540 6541
6541 * Changes or additions to a patch file 6542 * Changes or additions to a patch file
6542 6543
6543 * Changes to the PLIST 6544 * Changes to the PLIST
6544 6545
6545 * A dependency is changed or renamed. 6546 * A dependency is changed or renamed.
6546 6547
6547PKGREVISION must also be incremented when dependencies have ABI changes. 6548PKGREVISION must also be incremented when dependencies have ABI changes.
6548 6549
654921.1.11. Substituting variable text in the package files (the SUBST framework) 655021.1.11. Substituting variable text in the package files (the SUBST framework)
6550 6551
6551When you want to replace the same text in multiple files, or multiple times in 6552When you want to replace the same text in multiple files, or multiple times in
6552the same file, it is cumbersome to maintain a patch file for this. This is 6553the same file, it is cumbersome to maintain a patch file for this. This is
6553where the SUBST framework steps in. It provides an easy-to-use interface for 6554where the SUBST framework steps in. It provides an easy-to-use interface for
6554replacing text in files. It just needs the following information: 6555replacing text in files. It just needs the following information:
6555 6556
6556 * In which phase of the package build cycle should the replacement happen? 6557 * In which phase of the package build cycle should the replacement happen?
6557 6558
6558 * In which files should the replacement happen? 6559 * In which files should the replacement happen?
6559 6560
6560 * Which text should be replaced with what? 6561 * Which text should be replaced with what?
6561 6562
6562This information is encoded in a block of SUBST variables. A minimal example 6563This information is encoded in a block of SUBST variables. A minimal example
6563is: 6564is:
6564 6565
6565SUBST_CLASSES+= paths 6566SUBST_CLASSES+= paths
6566SUBST_STAGE.paths= pre-configure 6567SUBST_STAGE.paths= pre-configure
6567SUBST_FILES.paths= src/*.c 6568SUBST_FILES.paths= src/*.c
6568SUBST_SED.paths= -e 's,/usr/local,${PREFIX},g' 6569SUBST_SED.paths= -e 's,/usr/local,${PREFIX},g'
6569 6570
6570Translated into English, it means: In the pre-configure stage (that is, after 6571Translated into English, it means: In the pre-configure stage (that is, after
6571applying the patches from the patches/ directory and before running the 6572applying the patches from the patches/ directory and before running the
6572configure script and the portability check), replace the text /usr/local with 6573configure script and the portability check), replace the text /usr/local with
6573the content of the variable PREFIX. 6574the content of the variable PREFIX.
6574 6575
6575Each SUBST block starts by appending an identifier to SUBST_CLASSES (note the + 6576Each SUBST block starts by appending an identifier to SUBST_CLASSES (note the +
6576=). This identifier can be chosen freely by the package. If there should ever 6577=). This identifier can be chosen freely by the package. If there should ever
6577be duplicate identifiers, the pkgsrc infrastructure will catch this and fail 6578be duplicate identifiers, the pkgsrc infrastructure will catch this and fail
6578early, so don't worry about name collisions. 6579early, so don't worry about name collisions.
6579 6580
6580Except for SUBST_CLASSES, all variables in a SUBST block are parameterized 6581Except for SUBST_CLASSES, all variables in a SUBST block are parameterized
6581using this identifier. In the remainder of this section, these parameterized 6582using this identifier. In the remainder of this section, these parameterized
6582variables are written as SUBST_STAGE.*. 6583variables are written as SUBST_STAGE.*.
6583 6584
6584SUBST_CLASSES+= paths 6585SUBST_CLASSES+= paths
6585SUBST_STAGE.paths= pre-configure 6586SUBST_STAGE.paths= pre-configure
6586SUBST_MESSAGE.paths= Fixing absolute paths. 6587SUBST_MESSAGE.paths= Fixing absolute paths.
6587SUBST_FILES.paths= src/*.c 6588SUBST_FILES.paths= src/*.c
6588SUBST_FILES.paths+= scripts/*.sh 6589SUBST_FILES.paths+= scripts/*.sh
6589SUBST_SED.paths= -e 's,"/usr/local,"${PREFIX},g' 6590SUBST_SED.paths= -e 's,"/usr/local,"${PREFIX},g'
6590SUBST_SED.paths+= -e 's,"/var/log,"${VARBASE}/log,g' 6591SUBST_SED.paths+= -e 's,"/var/log,"${VARBASE}/log,g'
6591SUBST_VARS.paths= LOCALBASE PREFIX PKGVERSION 6592SUBST_VARS.paths= LOCALBASE PREFIX PKGVERSION
6592 6593
6593To get a complete picture about the SUBST substitutions, run bmake 6594To get a complete picture about the SUBST substitutions, run bmake
6594show-all-subst. If something doesn't work as expected, run pkglint on the 6595show-all-subst. If something doesn't work as expected, run pkglint on the
6595package, which detects several typical mistakes surrounding the SUBST blocks. 6596package, which detects several typical mistakes surrounding the SUBST blocks.
6596For any questions that might remain after this, have a look at mk/subst.mk. 6597For any questions that might remain after this, have a look at mk/subst.mk.
6597 6598
659821.1.11.1. Choosing the time where the substitutions happen 659921.1.11.1. Choosing the time where the substitutions happen
6599 6600
6600The SUBST_STAGE.* is one of {pre,do,post}- 6601The SUBST_STAGE.* is one of {pre,do,post}-
6601{extract,patch,configure,build,test,install}. Of these, pre-configure is used 6602{extract,patch,configure,build,test,install}. Of these, pre-configure is used
6602most often, by far. The most popular stages are, in chronological order: 6603most often, by far. The most popular stages are, in chronological order:
6603 6604
6604post-extract 6605post-extract
6605 6606
6606 The substitutions are applied immediately after the distfiles are 6607 The substitutions are applied immediately after the distfiles are
6607 extracted. Running bmake extract on the package will leave no traces of the 6608 extracted. Running bmake extract on the package will leave no traces of the
6608 original files. 6609 original files.
6609 6610
6610 When the substitution applies to files for which there is also a patch in 6611 When the substitution applies to files for which there is also a patch in
6611 the patches/ directory, this means that the patches will be computed based 6612 the patches/ directory, this means that the patches will be computed based
6612 on the result of the substitution. When these patches are sent to the 6613 on the result of the substitution. When these patches are sent to the
6613 upstream maintainer later, to be fixed in the upstream package, these 6614 upstream maintainer later, to be fixed in the upstream package, these
6614 patches may no longer match what the upstream author is used to. Because of 6615 patches may no longer match what the upstream author is used to. Because of
6615 this, pre-configure is often a better choice. 6616 this, pre-configure is often a better choice.
6616 6617
6617pre-configure 6618pre-configure
6618 6619
6619 The substitutions are applied after the patches from the patches/ 6620 The substitutions are applied after the patches from the patches/
6620 directory. This makes it possible to run bmake patch on the package, after 6621 directory. This makes it possible to run bmake patch on the package, after
6621 which the patches can be edited using the tools pkgvi and mkpatches from 6622 which the patches can be edited using the tools pkgvi and mkpatches from
6622 the pkgtools/pkgdiff package. 6623 the pkgtools/pkgdiff package.
6623 6624
6624 When updating the patches, it is helpful to explicitly separate the bmake 6625 When updating the patches, it is helpful to explicitly separate the bmake
6625 patch from the bmake configure, and to only edit the patches between these 6626 patch from the bmake configure, and to only edit the patches between these
6626 commands. Otherwise the substitutions from the SUBST block will end up in 6627 commands. Otherwise the substitutions from the SUBST block will end up in
6627 the patch file. When this happens in really obvious ways, pkglint will 6628 the patch file. When this happens in really obvious ways, pkglint will
6628 complain about patches that contain a hard-coded /usr/pkg instead of the 6629 complain about patches that contain a hard-coded /usr/pkg instead of the
6629 correct and intended @PREFIX@, but it can only detect these really obvious 6630 correct and intended @PREFIX@, but it can only detect these really obvious
6630 cases. 6631 cases.
6631 6632
6632do-configure 6633do-configure
6633 6634
6634 This stage should only be used if the package defines a pre-configure 6635 This stage should only be used if the package defines a pre-configure
6635 action itself, and the substitution must happen after that. Typical 6636 action itself, and the substitution must happen after that. Typical
6636 examples are packages that use the pre-configure stage to regenerate the 6637 examples are packages that use the pre-configure stage to regenerate the
6637 GNU configure script from configure.ac. 6638 GNU configure script from configure.ac.
6638 6639
6639post-configure 6640post-configure
6640 6641
6641 This stage is used to fix up any mistakes by the configure stage. 6642 This stage is used to fix up any mistakes by the configure stage.
6642 6643
6643pre-build 6644pre-build
6644 6645
6645 This stage should only be used for substitutions that are clearly related 6646 This stage should only be used for substitutions that are clearly related
6646 to building the package, not for fixing the configuration. Substitutions 6647 to building the package, not for fixing the configuration. Substitutions
6647 for pathnames (such as replacing /usr/local with ${PREFIX}) or user names 6648 for pathnames (such as replacing /usr/local with ${PREFIX}) or user names
6648 (such as replacing @MY_USER@ with the actual username) belong in 6649 (such as replacing @MY_USER@ with the actual username) belong in
6649 pre-configure or post-configure instead. 6650 pre-configure or post-configure instead.
6650 6651
6651post-build 6652post-build
6652 6653
6653 Just as with pre-build, this stage should only be used for substitutions 6654 Just as with pre-build, this stage should only be used for substitutions
6654 that are clearly related to building the package, not for fixing the 6655 that are clearly related to building the package, not for fixing the
6655 configuration. Substitutions for pathnames (such as replacing /usr/local 6656 configuration. Substitutions for pathnames (such as replacing /usr/local
6656 with ${PREFIX}) or user names (such as replacing @MY_USER@ with the actual 6657 with ${PREFIX}) or user names (such as replacing @MY_USER@ with the actual
6657 username) belong in pre-configure or post-configure instead. 6658 username) belong in pre-configure or post-configure instead.
6658 6659
6659 A typical use is to update pkg-config files to include the rpath compiler 6660 A typical use is to update pkg-config files to include the rpath compiler
6660 options. 6661 options.
6661 6662
6662pre-install 6663pre-install
6663 6664
6664 In general, the install phase should be as simple as possible. As with the 6665 In general, the install phase should be as simple as possible. As with the
6665 pre-build and post-build stages, it should not be used to fix pathnames or 6666 pre-build and post-build stages, it should not be used to fix pathnames or
6666 user names, these belong in pre-configure instead. There are only few 6667 user names, these belong in pre-configure instead. There are only few
6667 legitimate use cases for applying substitutions in this stage. 6668 legitimate use cases for applying substitutions in this stage.
6668 6669
666921.1.11.2. Choosing the files where the substitutions happen 667021.1.11.2. Choosing the files where the substitutions happen
6670 6671
6671The SUBST_FILES.* variable contains a list of filename patterns. These patterns 6672The SUBST_FILES.* variable contains a list of filename patterns. These patterns
6672are relative to WRKSRC since that is where most substitutions happen. A typical 6673are relative to WRKSRC since that is where most substitutions happen. A typical
6673example is: 6674example is:
6674 6675
6675SUBST_FILES.path= Makefile */Makefile */*/Makefile *.[ch] 6676SUBST_FILES.path= Makefile */Makefile */*/Makefile *.[ch]
6676 6677
6677The above patterns, especially the last, are quite broad. The SUBST 6678The above patterns, especially the last, are quite broad. The SUBST
6678implementation checks that each filename pattern that is mentioned here has an 6679implementation checks that each filename pattern that is mentioned here has an
6679effect. For example, if none of the */*/Makefile files contains the patterns to 6680effect. For example, if none of the */*/Makefile files contains the patterns to
6680be found and substituted, that filename pattern is redundant and should be left 6681be found and substituted, that filename pattern is redundant and should be left
6681out. By default, the SUBST framework will complain with an error message. If 6682out. By default, the SUBST framework will complain with an error message. If
6682the text to be substituted occurs in some of the files from a single pattern, 6683the text to be substituted occurs in some of the files from a single pattern,
6683but not in all of them, that is totally ok, and the SUBST framework will only 6684but not in all of them, that is totally ok, and the SUBST framework will only
6684print an INFO message for those files. 6685print an INFO message for those files.
6685 6686
6686If there is a good reason for having redundant filename patterns, set 6687If there is a good reason for having redundant filename patterns, set
6687SUBST_NOOP_OK.* to yes. 6688SUBST_NOOP_OK.* to yes.
6688 6689
6689Another popular way of choosing the files for the substitutions is via a shell 6690Another popular way of choosing the files for the substitutions is via a shell
6690command, like this: 6691command, like this:
6691 6692
6692C_FILES_CMD= cd ${WRKSRC} && ${FIND} . -name '*.c' 6693C_FILES_CMD= cd ${WRKSRC} && ${FIND} . -name '*.c'
6693SUBST_FILES.path= ${C_FILES_CMD:sh} 6694SUBST_FILES.path= ${C_FILES_CMD:sh}
6694 6695
6695The variable name C_FILES_CMD in this example is freely chosen and independent 6696The variable name C_FILES_CMD in this example is freely chosen and independent
6696of the SUBST framework. 6697of the SUBST framework.
6697 6698
6698In this variant, the SUBST_FILES.* variable lists each file individually. 6699In this variant, the SUBST_FILES.* variable lists each file individually.
6699Thereby chances are higher that there are filename patterns in which no 6700Thereby chances are higher that there are filename patterns in which no
6700substitution happens. Since the SUBST framework cannot know whether the 6701substitution happens. Since the SUBST framework cannot know whether the
6701filename patterns in SUBST_FILES.* have been explicitly listed in the Makefile 6702filename patterns in SUBST_FILES.* have been explicitly listed in the Makefile
6702(where any redundant filename pattern would be suspicious) or been generated by 6703(where any redundant filename pattern would be suspicious) or been generated by
6703a shell command (in which redundant filename patterns are more likely and to be 6704a shell command (in which redundant filename patterns are more likely and to be
6704expected), it will complain about these redundant filename patterns. Therefore, 6705expected), it will complain about these redundant filename patterns. Therefore,
6705SUBST blocks that use a shell command to generate the list of filename patterns 6706SUBST blocks that use a shell command to generate the list of filename patterns
6706often need to set SUBST_NOOP_OK.* to yes. 6707often need to set SUBST_NOOP_OK.* to yes.
6707 6708
670821.1.11.3. Choosing what to substitute 670921.1.11.3. Choosing what to substitute
6709 6710
6710In most cases, the substitutions are given using one or more sed(1) commands, 6711In most cases, the substitutions are given using one or more sed(1) commands,
6711like this: 6712like this:
6712 6713
6713SUBST_SED.path= -e 's|/usr/local|${PREFIX}|g' 6714SUBST_SED.path= -e 's|/usr/local|${PREFIX}|g'
6714 6715
6715Each of the sed commands needs to be preceded by the -e option and should be 6716Each of the sed commands needs to be preceded by the -e option and should be
6716specified on a line of its own, to avoid hiding short sed commands at the end 6717specified on a line of its own, to avoid hiding short sed commands at the end
6717of a line. 6718of a line.
6718 6719
6719Since the sed commands often contain shell metacharacters as the separator (the 6720Since the sed commands often contain shell metacharacters as the separator (the
6720| in the above example), it is common to enclose them in single quotes. 6721| in the above example), it is common to enclose them in single quotes.
6721 6722
6722A common substitution is to replace placeholders of the form @VARNAME@ with 6723A common substitution is to replace placeholders of the form @VARNAME@ with
6723their pkgsrc counterpart variable ${VARNAME}. A typical example is: 6724their pkgsrc counterpart variable ${VARNAME}. A typical example is:
6724 6725
6725SUBST_VARS.path= PREFIX 6726SUBST_VARS.path= PREFIX
6726 6727
6727This type of substitutions is typically done by the GNU configure scripts 6728This type of substitutions is typically done by the GNU configure scripts
6728during the do-configure stage, but in some cases these need to be overridden. 6729during the do-configure stage, but in some cases these need to be overridden.
6729The same pattern is also used when a package defines patches that replace 6730The same pattern is also used when a package defines patches that replace
6730previously hard-coded paths like /usr/local with a @PREFIX@ placeholder first, 6731previously hard-coded paths like /usr/local with a @PREFIX@ placeholder first,
6731which then gets substituted by the actual ${PREFIX} in the pre-configure stage. 6732which then gets substituted by the actual ${PREFIX} in the pre-configure stage.
6732In many of these cases, it works equally well to just use the SUBST framework 6733In many of these cases, it works equally well to just use the SUBST framework
6733to directly replace /usr/local with ${PREFIX}, thereby omitting the 6734to directly replace /usr/local with ${PREFIX}, thereby omitting the
6734intermediate patch file. 6735intermediate patch file.
6735 6736
6736If the above is not flexible enough, it is possible to not use sed at all for 6737If the above is not flexible enough, it is possible to not use sed at all for
6737the substitution but to specify an entirely different command, like this: 6738the substitution but to specify an entirely different command, like this:
6738 6739
6739SUBST_FILTER_CMD.path= LC_ALL=C ${TR} -d '\r' 6740SUBST_FILTER_CMD.path= LC_ALL=C ${TR} -d '\r'
6740 6741
6741This is used for the few remaining packages in which the distributed files use 6742This is used for the few remaining packages in which the distributed files use
6742Windows-style line endings that need to be converted to UNIX-style line 6743Windows-style line endings that need to be converted to UNIX-style line
6743endings. 6744endings.
6744 6745
674521.1.11.4. Other SUBST variables 674621.1.11.4. Other SUBST variables
6746 6747
6747When a SUBST block is applied during a package build, a message is logged. The 6748When a SUBST block is applied during a package build, a message is logged. The
6748default message is fine for most purposes but can be overridden by setting 6749default message is fine for most purposes but can be overridden by setting
6749SUBST_MESSAGE.* to an individual message. 6750SUBST_MESSAGE.* to an individual message.
6750 6751
675121.2. The fetch phase 675221.2. The fetch phase
6752 6753
675321.2.1. Packages whose distfiles aren't available for plain downloading 675421.2.1. Packages whose distfiles aren't available for plain downloading
6754 6755
6755If you need to download from a dynamic URL you can set DYNAMIC_MASTER_SITES and 6756If you need to download from a dynamic URL you can set DYNAMIC_MASTER_SITES and
6756a make fetch will call files/getsite.sh with the name of each file to download 6757a make fetch will call files/getsite.sh with the name of each file to download
6757as an argument, expecting it to output the URL of the directory from which to 6758as an argument, expecting it to output the URL of the directory from which to
6758download it. graphics/ns-cult3d is an example of this usage. 6759download it. graphics/ns-cult3d is an example of this usage.
6759 6760
6760If the download can't be automated, because the user must submit personal 6761If the download can't be automated, because the user must submit personal
6761information to apply for a password, or must pay for the source, or whatever, 6762information to apply for a password, or must pay for the source, or whatever,
6762you can set FETCH_MESSAGE to a list of lines that are displayed to the user 6763you can set FETCH_MESSAGE to a list of lines that are displayed to the user
6763before aborting the build. Example: 6764before aborting the build. Example:
6764 6765
6765FETCH_MESSAGE= "Please download the files" 6766FETCH_MESSAGE= "Please download the files"
6766FETCH_MESSAGE+= " "${DISTFILES:Q} 6767FETCH_MESSAGE+= " "${DISTFILES:Q}
6767FETCH_MESSAGE+= "manually from "${MASTER_SITES:Q}"." 6768FETCH_MESSAGE+= "manually from "${MASTER_SITES:Q}"."
6768 6769
676921.2.2. How to handle modified distfiles with the 'old' name 677021.2.2. How to handle modified distfiles with the 'old' name
6770 6771
6771Sometimes authors of a software package make some modifications after the 6772Sometimes authors of a software package make some modifications after the
6772software was released, and they put up a new distfile without changing the 6773software was released, and they put up a new distfile without changing the
6773package's version number. If a package is already in pkgsrc at that time, the 6774package's version number. If a package is already in pkgsrc at that time, the
6774checksum will no longer match. The contents of the new distfile should be 6775checksum will no longer match. The contents of the new distfile should be
6775compared against the old one before changing anything, to make sure the 6776compared against the old one before changing anything, to make sure the
6776distfile was really updated on purpose, and that no trojan horse or so crept 6777distfile was really updated on purpose, and that no trojan horse or so crept
6777in. Please mention that the distfiles were compared and what was found in your 6778in. Please mention that the distfiles were compared and what was found in your
6778commit message. 6779commit message.
6779 6780
6780Then, the correct way to work around this is to set DIST_SUBDIR to a unique 6781Then, the correct way to work around this is to set DIST_SUBDIR to a unique
6781directory name, usually based on PKGNAME_NOREV (but take care with python or 6782directory name, usually based on PKGNAME_NOREV (but take care with python or
6782ruby packages, where PKGNAME includes a variable prefix). All DISTFILES and 6783ruby packages, where PKGNAME includes a variable prefix). All DISTFILES and
6783PATCHFILES for this package will be put in that subdirectory of the local 6784PATCHFILES for this package will be put in that subdirectory of the local
6784distfiles directory. (See Section 21.1.10, "How to handle incrementing versions 6785distfiles directory. (See Section 21.1.10, "How to handle incrementing versions
6785when fixing an existing package" for more details.) In case this happens more 6786when fixing an existing package" for more details.) In case this happens more
6786often, PKGNAME can be used (thus including the nbX suffix) or a date stamp can 6787often, PKGNAME can be used (thus including the nbX suffix) or a date stamp can
6787be appended, like ${PKGNAME_NOREV}-YYYYMMDD. 6788be appended, like ${PKGNAME_NOREV}-YYYYMMDD.
6788 6789
6789DIST_SUBDIR is also used when a distfile's name does not contain a version and 6790DIST_SUBDIR is also used when a distfile's name does not contain a version and
6790the distfile is apt to change. In cases where the likelihood of this is very 6791the distfile is apt to change. In cases where the likelihood of this is very
6791small, DIST_SUBDIR might not be required. Additionally, DIST_SUBDIR must not be 6792small, DIST_SUBDIR might not be required. Additionally, DIST_SUBDIR must not be
6792removed unless the distfile name changes, even if a package is being moved or 6793removed unless the distfile name changes, even if a package is being moved or
6793renamed. 6794renamed.
6794 6795
6795Do not forget regenerating the distinfo file after that, since it contains the 6796Do not forget regenerating the distinfo file after that, since it contains the
6796DIST_SUBDIR path in the filenames. Also, increase the PKGREVISION if the 6797DIST_SUBDIR path in the filenames. Also, increase the PKGREVISION if the
6797installed package is different. Furthermore, a mail to the package's authors 6798installed package is different. Furthermore, a mail to the package's authors
6798seems appropriate telling them that changing distfiles after releases without 6799seems appropriate telling them that changing distfiles after releases without
6799changing the file names is not good practice. 6800changing the file names is not good practice.
6800 6801
680121.2.3. Packages hosted on github.com 680221.2.3. Packages hosted on github.com
6802 6803
6803Helper methods exist for packages hosted on github.com which will often have 6804Helper methods exist for packages hosted on github.com which will often have
6804distfile names that clash with other packages, for example 1.0.tar.gz. Use one 6805distfile names that clash with other packages, for example 1.0.tar.gz. Use one
6805of the three recipes from below: 6806of the three recipes from below:
6806 6807
680721.2.3.1. Fetch based on a tagged release 680821.2.3.1. Fetch based on a tagged release
6808 6809
6809If your distfile URL looks similar to https://github.com/username/example/ 6810If your distfile URL looks similar to https://github.com/username/example/
6810archive/v1.0.zip, then you are packaging a tagged release. 6811archive/v1.0.zip, then you are packaging a tagged release.
6811 6812
6812DISTNAME= example-1.0 6813DISTNAME= example-1.0
6813MASTER_SITES= ${MASTER_SITE_GITHUB:=username/} 6814MASTER_SITES= ${MASTER_SITE_GITHUB:=username/}
6814#GITHUB_PROJECT= example # can be omitted if same as DISTNAME 6815#GITHUB_PROJECT= example # can be omitted if same as DISTNAME
6815GITHUB_TAG= v${PKGVERSION_NOREV} 6816GITHUB_TAG= v${PKGVERSION_NOREV}
6816EXTRACT_SUFX= .zip 6817EXTRACT_SUFX= .zip
6817 6818
681821.2.3.2. Fetch based on a specific commit before the first release 681921.2.3.2. Fetch based on a specific commit before the first release
6819 6820
6820If your distfile looks similar to https://github.com/username/example/archive/ 6821If your distfile looks similar to https://github.com/username/example/archive/
6821988881adc9fc3655077dc2d4d757d480b5ea0e11 and is from a commit before the first 6822988881adc9fc3655077dc2d4d757d480b5ea0e11 and is from a commit before the first
6822release, then set the package version to 0.0.0.N, where N is the number of 6823release, then set the package version to 0.0.0.N, where N is the number of
6823commits to the repository, and set GITHUB_TAG to the commit hash. This will 6824commits to the repository, and set GITHUB_TAG to the commit hash. This will
6824(almost) ensure that the first tagged release will have a version greater than 6825(almost) ensure that the first tagged release will have a version greater than
6825this one so that package upgrades will function properly. 6826this one so that package upgrades will function properly.
6826 6827
6827DISTNAME= example-0.0.0.347 6828DISTNAME= example-0.0.0.347
6828MASTER_SITES= ${MASTER_SITE_GITHUB:=username/} 6829MASTER_SITES= ${MASTER_SITE_GITHUB:=username/}
6829#GITHUB_PROJECT= example # can be omitted if same as DISTNAME 6830#GITHUB_PROJECT= example # can be omitted if same as DISTNAME
6830GITHUB_TAG= 988881adc9fc3655077dc2d4d757d480b5ea0e11 6831GITHUB_TAG= 988881adc9fc3655077dc2d4d757d480b5ea0e11
6831 6832
683221.2.3.3. Fetch based on a specific commit after a release 683321.2.3.3. Fetch based on a specific commit after a release
6833 6834
6834If your distfile looks similar to https://github.com/username/example/archive/ 6835If your distfile looks similar to https://github.com/username/example/archive/
6835988881adc9fc3655077dc2d4d757d480b5ea0e11 and is from a commit after a release, 6836988881adc9fc3655077dc2d4d757d480b5ea0e11 and is from a commit after a release,
6836then include the last release version and the commit count since that release 6837then include the last release version and the commit count since that release
6837in the package version and set GITHUB_TAG to the commit hash. The latest 6838in the package version and set GITHUB_TAG to the commit hash. The latest
6838release and commit count are shown in the output of "git describe --tags": 6839release and commit count are shown in the output of "git describe --tags":
6839 6840
6840# git clone https://github.com/username/example 6841# git clone https://github.com/username/example
6841# cd example 6842# cd example
6842# git describe --tags 6843# git describe --tags
68431.2.3-5-g988881a 68441.2.3-5-g988881a
6844 6845
6845DISTNAME= example-1.2.3.5 6846DISTNAME= example-1.2.3.5
6846MASTER_SITES= ${MASTER_SITE_GITHUB:=username/} 6847MASTER_SITES= ${MASTER_SITE_GITHUB:=username/}
6847#GITHUB_PROJECT= example # can be omitted if same as DISTNAME 6848#GITHUB_PROJECT= example # can be omitted if same as DISTNAME
6848GITHUB_TAG= 988881adc9fc3655077dc2d4d757d480b5ea0e11 6849GITHUB_TAG= 988881adc9fc3655077dc2d4d757d480b5ea0e11
6849 6850
685021.2.3.4. Fetch based on release 685121.2.3.4. Fetch based on release
6851 6852
6852If your distfile URL looks similar to https://github.com/username/example/ 6853If your distfile URL looks similar to https://github.com/username/example/
6853releases/download/rel-1.6/offensive-1.6.zip, then you are packaging a release. 6854releases/download/rel-1.6/offensive-1.6.zip, then you are packaging a release.
6854 6855
6855DISTNAME= offensive-1.6 6856DISTNAME= offensive-1.6
6856PKGNAME= ${DISTNAME:S/offensive/proper/} 6857PKGNAME= ${DISTNAME:S/offensive/proper/}
6857MASTER_SITES= ${MASTER_SITE_GITHUB:=username/} 6858MASTER_SITES= ${MASTER_SITE_GITHUB:=username/}
6858GITHUB_PROJECT= example 6859GITHUB_PROJECT= example
6859GITHUB_RELEASE= rel-${PKGVERSION_NOREV} # usually just set this to ${DISTNAME} 6860GITHUB_RELEASE= rel-${PKGVERSION_NOREV} # usually just set this to ${DISTNAME}
6860EXTRACT_SUFX= .zip 6861EXTRACT_SUFX= .zip
6861 6862
686221.3. The configure phase 686321.3. The configure phase
6863 6864
686421.3.1. Shared libraries - libtool 686521.3.1. Shared libraries - libtool
6865 6866
6866pkgsrc supports many different machines, with different object formats like 6867pkgsrc supports many different machines, with different object formats like
6867a.out and ELF, and varying abilities to do shared library and dynamic loading 6868a.out and ELF, and varying abilities to do shared library and dynamic loading
6868at all. To accompany this, varying commands and options have to be passed to 6869at all. To accompany this, varying commands and options have to be passed to
6869the compiler, linker, etc. to get the Right Thing, which can be pretty annoying 6870the compiler, linker, etc. to get the Right Thing, which can be pretty annoying
6870especially if you don't have all the machines at your hand to test things. The 6871especially if you don't have all the machines at your hand to test things. The
6871devel/libtool pkg can help here, as it just "knows" how to build both static 6872devel/libtool pkg can help here, as it just "knows" how to build both static
6872and dynamic libraries from a set of source files, thus being 6873and dynamic libraries from a set of source files, thus being
6873platform-independent. 6874platform-independent.
6874 6875
6875Here's how to use libtool in a package in seven simple steps: 6876Here's how to use libtool in a package in seven simple steps:
6876 6877
6877 1. Add USE_LIBTOOL=yes to the package Makefile. 6878 1. Add USE_LIBTOOL=yes to the package Makefile.
6878 6879
6879 2. For library objects, use "${LIBTOOL} --mode=compile ${CC}" in place of "$ 6880 2. For library objects, use "${LIBTOOL} --mode=compile ${CC}" in place of "$
6880 {CC}". You could even add it to the definition of CC, if only libraries are 6881 {CC}". You could even add it to the definition of CC, if only libraries are
6881 being built in a given Makefile. This one command will build both PIC and 6882 being built in a given Makefile. This one command will build both PIC and
6882 non-PIC library objects, so you need not have separate shared and 6883 non-PIC library objects, so you need not have separate shared and
6883 non-shared library rules. 6884 non-shared library rules.
6884 6885
6885 3. For the linking of the library, remove any "ar", "ranlib", and "ld 6886 3. For the linking of the library, remove any "ar", "ranlib", and "ld
6886 -Bshareable" commands, and instead use: 6887 -Bshareable" commands, and instead use:
6887 6888
6888 ${LIBTOOL} --mode=link \ 6889 ${LIBTOOL} --mode=link \
6889 ${CC} -o ${.TARGET:.a=.la} \ 6890 ${CC} -o ${.TARGET:.a=.la} \
6890 ${OBJS:.o=.lo} \ 6891 ${OBJS:.o=.lo} \
6891 -rpath ${PREFIX}/lib \ 6892 -rpath ${PREFIX}/lib \
6892 -version-info major:minor 6893 -version-info major:minor
6893 6894
6894 Note that the library is changed to have a .la extension, and the objects 6895 Note that the library is changed to have a .la extension, and the objects
6895 are changed to have a .lo extension. Change OBJS as necessary. This 6896 are changed to have a .lo extension. Change OBJS as necessary. This
6896 automatically creates all of the .a, .so.major.minor, and ELF symlinks (if 6897 automatically creates all of the .a, .so.major.minor, and ELF symlinks (if
6897 necessary) in the build directory. Be sure to include "-version-info", 6898 necessary) in the build directory. Be sure to include "-version-info",
6898 especially when major and minor are zero, as libtool will otherwise strip 6899 especially when major and minor are zero, as libtool will otherwise strip
6899 off the shared library version. 6900 off the shared library version.
6900 6901
6901 From the libtool manual: 6902 From the libtool manual:
6902 6903
6903 So, libtool library versions are described by three integers: 6904 So, libtool library versions are described by three integers:
6904 6905
6905 CURRENT 6906 CURRENT
6906 The most recent interface number that this library implements. 6907 The most recent interface number that this library implements.
6907 6908
6908 REVISION 6909 REVISION
6909 The implementation number of the CURRENT interface. 6910 The implementation number of the CURRENT interface.
6910 6911
6911 AGE 6912 AGE
6912 The difference between the newest and oldest interfaces that 6913 The difference between the newest and oldest interfaces that
6913 this library implements. In other words, the library implements 6914 this library implements. In other words, the library implements
6914 all the interface numbers in the range from number `CURRENT - 6915 all the interface numbers in the range from number `CURRENT -
6915 AGE' to `CURRENT'. 6916 AGE' to `CURRENT'.
6916 6917
6917 If two libraries have identical CURRENT and AGE numbers, then the 6918 If two libraries have identical CURRENT and AGE numbers, then the
6918 dynamic linker chooses the library with the greater REVISION number. 6919 dynamic linker chooses the library with the greater REVISION number.
6919 6920
6920 The "-release" option will produce different results for a.out and ELF 6921 The "-release" option will produce different results for a.out and ELF
6921 (excluding symlinks) in only one case. An ELF library of the form " 6922 (excluding symlinks) in only one case. An ELF library of the form "
6922 libfoo-release.so.x.y" will have a symlink of "libfoo.so.x.y" on an a.out 6923 libfoo-release.so.x.y" will have a symlink of "libfoo.so.x.y" on an a.out
6923 platform. This is handled automatically. 6924 platform. This is handled automatically.
6924 6925
6925 The "-rpath argument" is the install directory of the library being built. 6926 The "-rpath argument" is the install directory of the library being built.
6926 6927
6927 In the PLIST, include only the .la file, the other files will be added 6928 In the PLIST, include only the .la file, the other files will be added
6928 automatically. 6929 automatically.
6929 6930
6930 4. When linking shared object (.so) files, i.e. files that are loaded via 6931 4. When linking shared object (.so) files, i.e. files that are loaded via
6931 dlopen(3), NOT shared libraries, use "-module -avoid-version" to prevent 6932 dlopen(3), NOT shared libraries, use "-module -avoid-version" to prevent
6932 them getting version tacked on. 6933 them getting version tacked on.
6933 6934
6934 The PLIST file gets the foo.so entry. 6935 The PLIST file gets the foo.so entry.
6935 6936
6936 5. When linking programs that depend on these libraries before they are 6937 5. When linking programs that depend on these libraries before they are
6937 installed, preface the cc(1) or ld(1) line with "${LIBTOOL} --mode=link", 6938 installed, preface the cc(1) or ld(1) line with "${LIBTOOL} --mode=link",
6938 and it will find the correct libraries (static or shared), but please be 6939 and it will find the correct libraries (static or shared), but please be
6939 aware that libtool will not allow you to specify a relative path in -L 6940 aware that libtool will not allow you to specify a relative path in -L
6940 (such as "-L../somelib"), because it expects you to change that argument to 6941 (such as "-L../somelib"), because it expects you to change that argument to
6941 be the .la file. e.g. 6942 be the .la file. e.g.
6942 6943
6943 ${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib 6944 ${LIBTOOL} --mode=link ${CC} -o someprog -L../somelib -lsomelib
6944 6945
6945 should be changed to: 6946 should be changed to:
6946 6947
6947 ${LIBTOOL} --mode=link ${CC} -o someprog ../somelib/somelib.la 6948 ${LIBTOOL} --mode=link ${CC} -o someprog ../somelib/somelib.la
6948 6949
6949 and it will do the right thing with the libraries. 6950 and it will do the right thing with the libraries.
6950 6951
6951 6. When installing libraries, preface the install(1) or cp(1) command with "$ 6952 6. When installing libraries, preface the install(1) or cp(1) command with "$
6952 {LIBTOOL} --mode=install", and change the library name to .la. e.g. 6953 {LIBTOOL} --mode=install", and change the library name to .la. e.g.
6953 6954
6954 ${LIBTOOL} --mode=install ${BSD_INSTALL_LIB} ${SOMELIB:.a=.la} ${PREFIX}/lib 6955 ${LIBTOOL} --mode=install ${BSD_INSTALL_LIB} ${SOMELIB:.a=.la} ${PREFIX}/lib
6955 6956
6956 This will install the static .a, shared library, any needed symlinks, and 6957 This will install the static .a, shared library, any needed symlinks, and
6957 run ldconfig(8). 6958 run ldconfig(8).
6958 6959
6959 7. In your PLIST, include only the .la file (this is a change from previous 6960 7. In your PLIST, include only the .la file (this is a change from previous
6960 behaviour). 6961 behaviour).
6961 6962
696221.3.2. Using libtool on GNU packages that already support libtool 696321.3.2. Using libtool on GNU packages that already support libtool
6963 6964
6964Add USE_LIBTOOL=yes to the package Makefile. This will override the package's 6965Add USE_LIBTOOL=yes to the package Makefile. This will override the package's
6965own libtool in most cases. For older libtool using packages, libtool is made by 6966own libtool in most cases. For older libtool using packages, libtool is made by
6966ltconfig script during the do-configure step; you can check the libtool script 6967ltconfig script during the do-configure step; you can check the libtool script
6967location by doing make configure; find work*/ -name libtool. 6968location by doing make configure; find work*/ -name libtool.
6968 6969
6969LIBTOOL_OVERRIDE specifies which libtool scripts, relative to WRKSRC, to 6970LIBTOOL_OVERRIDE specifies which libtool scripts, relative to WRKSRC, to
6970override. By default, it is set to "libtool */libtool */*/libtool". If this 6971override. By default, it is set to "libtool */libtool */*/libtool". If this
6971does not match the location of the package's libtool script(s), set it as 6972does not match the location of the package's libtool script(s), set it as
6972appropriate. 6973appropriate.
6973 6974
6974If you do not need *.a static libraries built and installed, then use 6975If you do not need *.a static libraries built and installed, then use
6975SHLIBTOOL_OVERRIDE instead. 6976SHLIBTOOL_OVERRIDE instead.
6976 6977
6977If your package makes use of the platform-independent library for loading 6978If your package makes use of the platform-independent library for loading
6978dynamic shared objects, that comes with libtool (libltdl), you should include 6979dynamic shared objects, that comes with libtool (libltdl), you should include
6979devel/libltdl/buildlink3.mk. 6980devel/libltdl/buildlink3.mk.
6980 6981
6981Some packages use libtool incorrectly so that the package may not work or build 6982Some packages use libtool incorrectly so that the package may not work or build
6982in some circumstances. Some of the more common errors are: 6983in some circumstances. Some of the more common errors are:
6983 6984
6984 * The inclusion of a shared object (-module) as a dependent library in an 6985 * The inclusion of a shared object (-module) as a dependent library in an
6985 executable or library. This in itself isn't a problem if one of two things 6986 executable or library. This in itself isn't a problem if one of two things
6986 has been done: 6987 has been done:
6987 6988
6988 1. The shared object is named correctly, i.e. libfoo.la, not foo.la 6989 1. The shared object is named correctly, i.e. libfoo.la, not foo.la
6989 6990
6990 2. The -dlopen option is used when linking an executable. 6991 2. The -dlopen option is used when linking an executable.
6991 6992
6992 * The use of libltdl without the correct calls to initialisation routines. 6993 * The use of libltdl without the correct calls to initialisation routines.
6993 The function lt_dlinit() should be called and the macro 6994 The function lt_dlinit() should be called and the macro
6994 LTDL_SET_PRELOADED_SYMBOLS included in executables. 6995 LTDL_SET_PRELOADED_SYMBOLS included in executables.
6995 6996
699621.3.3. GNU Autoconf/Automake 699721.3.3. GNU Autoconf/Automake
6997 6998
6998If a package needs GNU autoconf or automake to be executed to regenerate the 6999If a package needs GNU autoconf or automake to be executed to regenerate the
6999configure script and Makefile.in makefile templates from configure.ac and 7000configure script and Makefile.in makefile templates from configure.ac and
7000Makefile.am, then they should be executed in a pre-configure target: 7001Makefile.am, then they should be executed in a pre-configure target:
7001 7002
7002USE_TOOLS+= autoconf automake autoreconf 7003USE_TOOLS+= autoconf automake autoreconf
7003GNU_CONFIGURE= yes 7004GNU_CONFIGURE= yes
7004... 7005...
7005 7006
7006pre-configure: 7007pre-configure:
7007 set -e; cd ${WRKSRC} && autoreconf -fi 7008 set -e; cd ${WRKSRC} && autoreconf -fi
7008... 7009...
7009 7010
7010Packages which use GNU Automake will sometimes require GNU Make (gmake in 7011Packages which use GNU Automake will sometimes require GNU Make (gmake in
7011USE_TOOLS), but not always. Note that autoreconf only needs to be executed if 7012USE_TOOLS), but not always. Note that autoreconf only needs to be executed if
7012configure.ac or Makefiles are modified, or configure is not present. 7013configure.ac or Makefiles are modified, or configure is not present.
7013 7014
7014There are times when the configure process makes additional changes to the 7015There are times when the configure process makes additional changes to the
7015generated files, which then causes the build process to try to re-execute the 7016generated files, which then causes the build process to try to re-execute the
7016automake sequence. This is prevented by touching various files in the configure 7017automake sequence. This is prevented by touching various files in the configure
7017stage. If this causes problems with your package you can set AUTOMAKE_OVERRIDE= 7018stage. If this causes problems with your package you can set AUTOMAKE_OVERRIDE=
7018NO in the package Makefile. 7019NO in the package Makefile.
7019 7020
702021.3.4. Meson / ninja 702121.3.4. Meson / ninja
7021 7022
7022Packages using Meson to configure need to include: 7023Packages using Meson to configure need to include:
7023 7024
7024.include "../../devel/meson/build.mk" 7025.include "../../devel/meson/build.mk"
7025 7026
7026In nearly all cases (any program with dependencies), pkg-config needs to be 7027In nearly all cases (any program with dependencies), pkg-config needs to be
7027added to USE_TOOLS. If the package installs translation files for non-English 7028added to USE_TOOLS. If the package installs translation files for non-English
7028languages, also add msgfmt and xgettext: 7029languages, also add msgfmt and xgettext:
7029 7030
7030USE_TOOLS+= pkg-config msgfmt xgettext 7031USE_TOOLS+= pkg-config msgfmt xgettext
7031 7032
7032If any options need to be passed to Meson, use MESON_ARGS instead of 7033If any options need to be passed to Meson, use MESON_ARGS instead of
7033CONFIGURE_ARGS: 7034CONFIGURE_ARGS:
7034 7035
7035MESON_ARGS+= -Dx11=false 7036MESON_ARGS+= -Dx11=false
7036 7037
703721.4. Programming languages 703821.4. Programming languages
7038 7039
703921.4.1. C, C++, and Fortran 704021.4.1. C, C++, and Fortran
7040 7041
7041Compilers for the C and C++ languages comes with the NetBSD base system. By 7042Compilers for the C and C++ languages comes with the NetBSD base system. By
7042default, pkgsrc assumes that a package is written in C and will hide all other 7043default, pkgsrc assumes that a package is written in C and will hide all other
7043compilers (via the wrapper framework, see Chapter 18, Buildlink methodology). 7044compilers (via the wrapper framework, see Chapter 18, Buildlink methodology).
7044 7045
7045To declare which language's compiler a package needs, set the USE_LANGUAGES 7046To declare which language's compiler a package needs, set the USE_LANGUAGES
7046variable. Allowed values currently are: 7047variable. Allowed values currently are:
7047 7048
7048 c99, c++, c++03, gnu++03, c++0x, gnu++0x, c++11, gnu++11, 7049 c99, c++, c++03, gnu++03, c++0x, gnu++0x, c++11, gnu++11,
7049 c++14, gnu++14, c++17, gnu++17, c++20, gnu++20, fortran, 7050 c++14, gnu++14, c++17, gnu++17, c++20, gnu++20, fortran,
7050 fortran77, java, objc, obj-c++, and ada. 7051 fortran77, java, objc, obj-c++, and ada.
7051 7052
7052 7053
7053(and any combination). The default is "c". Packages using GNU configure 7054(and any combination). The default is "c". Packages using GNU configure
7054scripts, even if written in C++, usually need a C compiler for the configure 7055scripts, even if written in C++, usually need a C compiler for the configure
7055phase. 7056phase.
7056 7057
7057To express a general requirement on a specific C or C++ version, normally only 7058To express a general requirement on a specific C or C++ version, normally only
7058GCC_REQD needs to be set. For example, GCC 7 includes support for C++17, so if 7059GCC_REQD needs to be set. For example, GCC 7 includes support for C++17, so if
7059the package uses C++17 it should specify: 7060the package uses C++17 it should specify:
7060 7061
7061 GCC_REQD+= 7 7062 GCC_REQD+= 7
7062 7063
7063 7064
7064Language variants like c++11 for USE_LANGUAGES should only be specified if the 7065Language variants like c++11 for USE_LANGUAGES should only be specified if the
7065package does not explicitly set -std=... when compiling (i.e. the package 7066package does not explicitly set -std=... when compiling (i.e. the package
7066assumes the compiler defaults to C++11 or some other standard). This is usually 7067assumes the compiler defaults to C++11 or some other standard). This is usually
7067a bug in the upstream build system. 7068a bug in the upstream build system.
7068 7069
7069GCC version 5 includes support for C++14, while GCC 4.7 includes more-or-less 7070GCC version 5 includes support for C++14, while GCC 4.7 includes more-or-less
7070complete support for C++11. For more information, consult GCC's own 7071complete support for C++11. For more information, consult GCC's own
7071documentation on programming language support. 7072documentation on programming language support.
7072 7073
707321.4.2. Java 707421.4.2. Java
7074 7075
7075If a program is written in Java, use the Java framework in pkgsrc. The package 7076If a program is written in Java, use the Java framework in pkgsrc. The package
7076must include ../../mk/java-vm.mk. This Makefile fragment provides the following 7077must include ../../mk/java-vm.mk. This Makefile fragment provides the following
7077variables: 7078variables:
7078 7079
7079 * USE_JAVA defines if a build dependency on the JDK is added. If USE_JAVA is 7080 * USE_JAVA defines if a build dependency on the JDK is added. If USE_JAVA is
7080 set to "run", then there is only a runtime dependency on the JDK. The 7081 set to "run", then there is only a runtime dependency on the JDK. The
7081 default is "yes", which also adds a build dependency on the JDK. 7082 default is "yes", which also adds a build dependency on the JDK.
7082 7083
7083 * Set USE_JAVA2 to declare that a package needs a Java2 implementation. The 7084 * Set USE_JAVA2 to declare that a package needs a Java2 implementation. The
7084 supported values are "yes", "1.4", and "1.5". "yes" accepts any Java2 7085 supported values are "yes", "1.4", and "1.5". "yes" accepts any Java2
7085 implementation, "1.4" insists on versions 1.4 or above, and "1.5" only 7086 implementation, "1.4" insists on versions 1.4 or above, and "1.5" only
7086 accepts versions 1.5 or above. This variable is not set by default. 7087 accepts versions 1.5 or above. This variable is not set by default.
7087 7088
7088 * PKG_JAVA_HOME is automatically set to the runtime location of the used Java 7089 * PKG_JAVA_HOME is automatically set to the runtime location of the used Java
7089 implementation dependency. It may be used to set JAVA_HOME to a good value 7090 implementation dependency. It may be used to set JAVA_HOME to a good value
7090 if the program needs this variable to be defined. 7091 if the program needs this variable to be defined.
7091 7092
709221.4.3. Go 709321.4.3. Go
7093 7094
7094If a program is written in Go and has any dependencies on other Go modules, 7095If a program is written in Go and has any dependencies on other Go modules,
7095have the package include ../../lang/go/go-module.mk. 7096have the package include ../../lang/go/go-module.mk.
7096 7097
7097 1. Generate a list of those dependencies with make clean && make patch && make 7098 1. Generate a list of those dependencies with make clean && make patch && make
7098 show-go-modules > go-modules.mk. 7099 show-go-modules > go-modules.mk.
7099 7100
7100 2. Prepend .include "go-modules.mk" to any other .includes. 7101 2. Prepend .include "go-modules.mk" to any other .includes.
7101 7102
7102 3. Incorporate these modules in distinfo with make makesum. 7103 3. Incorporate these modules in distinfo with make makesum.
7103 7104
710421.4.4. Rust 710521.4.4. Rust
7105 7106
7106If a program is written in Rust and uses Cargo to build, have the package 7107If a program is written in Rust and uses Cargo to build, have the package
7107include ../../lang/rust/cargo.mk. 7108include ../../lang/rust/cargo.mk.
7108 7109
7109 1. Generate a list of those dependencies with make CARGO_ARGS="build 7110 1. Generate a list of those dependencies with make CARGO_ARGS="build
7110 --release" build && make print-cargo-depends > cargo-depends.mk. 7111 --release" build && make print-cargo-depends > cargo-depends.mk.
7111 7112
7112 2. Prepend .include "cargo-depends.mk" to any other .includes. 7113 2. Prepend .include "cargo-depends.mk" to any other .includes.
7113 7114
7114 3. Incorporate these modules in distinfo with make makesum. 7115 3. Incorporate these modules in distinfo with make makesum.
7115 7116
711621.4.5. Packages containing Perl scripts 711721.4.5. Packages containing Perl scripts
7117 7118
7118If your package contains interpreted Perl scripts, add "perl" to the USE_TOOLS 7119If your package contains interpreted Perl scripts, add "perl" to the USE_TOOLS
7119variable and set REPLACE_PERL to ensure that the proper interpreter path is 7120variable and set REPLACE_PERL to ensure that the proper interpreter path is
7120set. REPLACE_PERL should contain a list of scripts, relative to WRKSRC, that 7121set. REPLACE_PERL should contain a list of scripts, relative to WRKSRC, that
7121you want adjusted. Every occurrence of */bin/perl in a she-bang line will be 7122you want adjusted. Every occurrence of */bin/perl in a she-bang line will be
7122replaced with the full path to the Perl executable. 7123replaced with the full path to the Perl executable.
7123 7124
7124If a particular version of Perl is needed, set the PERL5_REQD variable to the 7125If a particular version of Perl is needed, set the PERL5_REQD variable to the
7125version number. The default is "5.0". 7126version number. The default is "5.0".
7126 7127
7127See Section 21.6.6, "Packages installing Perl modules" for information about 7128See Section 21.6.6, "Packages installing Perl modules" for information about
7128handling Perl modules. 7129handling Perl modules.
7129 7130
7130There is also the REPLACE_PERL6 variable for the language now known as Raku. 7131There is also the REPLACE_PERL6 variable for the language now known as Raku.
7131 7132
713221.4.6. Packages containing shell scripts 713321.4.6. Packages containing shell scripts
7133 7134
7134REPLACE_SH, REPLACE_BASH, REPLACE_CSH, and REPLACE_KSH can be used to replace 7135REPLACE_SH, REPLACE_BASH, REPLACE_CSH, and REPLACE_KSH can be used to replace
7135shell hash bangs in files. Please use the appropriate one, preferring 7136shell she-bangs in files. Please use the appropriate one, preferring REPLACE_SH
7136REPLACE_SH in case this shell is sufficient. Each should contain a list of 7137when this shell is sufficient. Each should contain a list of scripts, relative
7137scripts, relative to WRKSRC, that you want adjusted. Every occurrence of the 7138to WRKSRC, that you want adjusted. Every occurrence of the matching shell in a
7138matching shell in a she-bang line will be replaced with the full path to the 7139she-bang line will be replaced with the full path to the shell executable. When
7139shell executable. When using REPLACE_BASH, don't forget to add bash to 7140using REPLACE_BASH, don't forget to add bash to USE_TOOLS.
7140USE_TOOLS. 
7141 7141
714221.4.7. Other programming languages 714221.4.7. Other programming languages
7143 7143
7144There are further similar REPLACE variables available, e.g., REPLACE_AWK for 7144There are further similar REPLACE variables available, e.g., REPLACE_AWK for
7145packages containing awk scripts, and REPLACE_R for R. These two, like the 7145packages containing awk scripts, and REPLACE_R for R. These two, like the
7146others noted above, have their actions defined centrally in mk/configure/ 7146others noted above, have their actions defined centrally in mk/configure/
7147replace-interpreter.mk. Other languages define the actions of these variables 7147replace-interpreter.mk. Other languages define the actions of these variables
7148within their own dedicated part of the tree, e.g., REPLACE_PHP is actioned in 7148within their own dedicated part of the tree, e.g., REPLACE_PHP is actioned in
7149lang/php/phpversion.mk, and REPLACE_PYTHON is actioned in lang/python/ 7149lang/php/phpversion.mk, and REPLACE_PYTHON is actioned in lang/python/
7150application.mk. For other languages, consult the mk files found within their 7150application.mk. For other languages, consult the mk files found within their
7151specific directories (the naming convention varies), or check the list found in 7151specific directories (the naming convention varies), or check the list found in
7152Appendix E, Help topics. 7152Appendix E, Help topics.
7153 7153
7154Currently, special handling for other languages varies in pkgsrc. If a compiler 7154Currently, special handling for other languages varies in pkgsrc. If a compiler
7155package provides a buildlink3.mk file, include that, otherwise just add a 7155package provides a buildlink3.mk file, include that, otherwise just add a
7156(build) dependency on the appropriate compiler package. 7156(build) dependency on the appropriate compiler package.
7157 7157
715821.5. The build phase 715821.5. The build phase
7159 7159
7160The most common failures when building a package are that some platforms do not 7160The most common failures when building a package are that some platforms do not
7161provide certain header files, functions or libraries, or they provide the 7161provide certain header files, functions or libraries, or they provide the
7162functions in a library that the original package author didn't know. To work 7162functions in a library that the original package author didn't know. To work
7163around this, you can rewrite the source code in most cases so that it does not 7163around this, you can rewrite the source code in most cases so that it does not
7164use the missing functions or provides a replacement function. 7164use the missing functions or provides a replacement function.
7165 7165
716621.5.1. Compiling C and C++ code conditionally 716621.5.1. Compiling C and C++ code conditionally
7167 7167
7168If a package already comes with a GNU configure script, the preferred way to 7168If a package already comes with a GNU configure script, the preferred way to
7169fix the build failure is to change the configure script, not the code. In the 7169fix the build failure is to change the configure script, not the code. In the
7170other cases, you can utilize the C preprocessor, which defines certain macros 7170other cases, you can utilize the C preprocessor, which defines certain macros
7171depending on the operating system and hardware architecture it compiles for. 7171depending on the operating system and hardware architecture it compiles for.
7172These macros can be queried using for example #if defined(__i386). Almost every 7172These macros can be queried using for example #if defined(__i386). Almost every
7173operating system, hardware architecture and compiler has its own macro. For 7173operating system, hardware architecture and compiler has its own macro. For
7174example, if the macros __GNUC__, __i386__ and __NetBSD__ are all defined, you 7174example, if the macros __GNUC__, __i386__ and __NetBSD__ are all defined, you
7175know that you are using NetBSD on an i386 compatible CPU, and your compiler is 7175know that you are using NetBSD on an i386 compatible CPU, and your compiler is
7176GCC. 7176GCC.
7177 7177
7178The list of the following macros for hardware and operating system depends on 7178The list of the following macros for hardware and operating system depends on
7179the compiler that is used. For example, if you want to conditionally compile 7179the compiler that is used. For example, if you want to conditionally compile
7180code on Solaris, don't use __sun__, as the SunPro compiler does not define it. 7180code on Solaris, don't use __sun__, as the SunPro compiler does not define it.
7181Use __sun instead. 7181Use __sun instead.
7182 7182
718321.5.1.1. C preprocessor macros to identify the operating system 718321.5.1.1. C preprocessor macros to identify the operating system
7184 7184
7185To distinguish between specific NetBSD versions, you should use the following 7185To distinguish between specific NetBSD versions, you should use the following
7186code. 7186code.
7187 7187
7188#ifdef __NetBSD__ 7188#ifdef __NetBSD__
7189#include <sys/param.h> 7189#include <sys/param.h>
7190#if __NetBSD_Prereq__(9,99,17) 7190#if __NetBSD_Prereq__(9,99,17)
7191/* use a newer feature */ 7191/* use a newer feature */
7192#else 7192#else
7193/* older code */ 7193/* older code */
7194#endif 7194#endif
7195#endif 7195#endif
7196 7196
7197#ifndef _WIN32 7197#ifndef _WIN32
7198/* Unix-like specific code */ 7198/* Unix-like specific code */
7199#endif 7199#endif
7200 7200
7201To distinguish between 4.4 BSD-derived systems and the rest of the world, you 7201To distinguish between 4.4 BSD-derived systems and the rest of the world, you
7202should use the following code. 7202should use the following code.
7203 7203
7204#include <sys/param.h> 7204#include <sys/param.h>
7205#if (defined(BSD) && BSD >= 199306) 7205#if (defined(BSD) && BSD >= 199306)
7206/* BSD-specific code goes here */ 7206/* BSD-specific code goes here */
7207#else 7207#else
7208/* non-BSD-specific code goes here */ 7208/* non-BSD-specific code goes here */
7209#endif 7209#endif
7210 7210
7211You can also test for the following macros: 7211You can also test for the following macros:
7212 7212
7213Cygwin __CYGWIN__ 7213Cygwin __CYGWIN__
7214DragonFly __DragonFly__ 7214DragonFly __DragonFly__
7215FreeBSD __FreeBSD__ 7215FreeBSD __FreeBSD__
7216Haiku __HAIKU__ 7216Haiku __HAIKU__
7217Interix __INTERIX 7217Interix __INTERIX
7218IRIX __sgi (TODO: get a definite source for this) 7218IRIX __sgi (TODO: get a definite source for this)
7219Linux __linux 7219Linux __linux
7220Mac OS X __APPLE__ 7220Mac OS X __APPLE__
7221MirBSD __MirBSD__ (__OpenBSD__ is also defined) 7221MirBSD __MirBSD__ (__OpenBSD__ is also defined)
7222Minix3 __minix 7222Minix3 __minix
7223NetBSD __NetBSD__ 7223NetBSD __NetBSD__
7224OpenBSD __OpenBSD__ 7224OpenBSD __OpenBSD__
7225Solaris sun, __sun 7225Solaris sun, __sun
7226 7226
722721.5.1.2. C preprocessor macros to identify the hardware architecture 722721.5.1.2. C preprocessor macros to identify the hardware architecture
7228 7228
7229i386 i386, __i386, __i386__ 7229i386 i386, __i386, __i386__
7230x86-64 __amd64__, __x86_64__ 7230x86-64 __amd64__, __x86_64__
7231ARM __arm__ 7231ARM __arm__
7232MIPS __mips 7232MIPS __mips
7233SPARC sparc, __sparc 7233SPARC sparc, __sparc
7234PowerPC __powerpc 7234PowerPC __powerpc
7235 7235
723621.5.1.3. C preprocessor macros to identify the compiler 723621.5.1.3. C preprocessor macros to identify the compiler
7237 7237
7238GCC __GNUC__ (major version), __GNUC_MINOR__ 7238GCC __GNUC__ (major version), __GNUC_MINOR__
7239MIPSpro _COMPILER_VERSION (0x741 for MIPSpro 7.41) 7239MIPSpro _COMPILER_VERSION (0x741 for MIPSpro 7.41)
7240SunPro __SUNPRO_C (0x570 for Sun C 5.7) 7240SunPro __SUNPRO_C (0x570 for Sun C 5.7)
7241SunPro C++ __SUNPRO_CC (0x580 for Sun C++ 5.8) 7241SunPro C++ __SUNPRO_CC (0x580 for Sun C++ 5.8)
7242 7242
724321.5.2. How to handle compiler bugs 724321.5.2. How to handle compiler bugs
7244 7244
7245Some source files trigger bugs in the compiler, based on combinations of 7245Some source files trigger bugs in the compiler, based on combinations of
7246compiler version and architecture and almost always relation to optimisation 7246compiler version and architecture and almost always relation to optimisation
7247being enabled. Common symptoms are gcc internal errors or never finishing 7247being enabled. Common symptoms are gcc internal errors or never finishing
7248compiling a file. 7248compiling a file.
7249 7249
7250Typically, a workaround involves testing the MACHINE_ARCH and compiler version, 7250Typically, a workaround involves testing the MACHINE_ARCH and compiler version,
7251disabling optimisation for that combination of file, MACHINE_ARCH and compiler. 7251disabling optimisation for that combination of file, MACHINE_ARCH and compiler.
7252 7252
7253This used to be a big problem in the past, but is rarely needed now as compiler 7253This used to be a big problem in the past, but is rarely needed now as compiler
7254technology has matured. If you still need to add a compiler specific 7254technology has matured. If you still need to add a compiler specific
7255workaround, please do so in the file hacks.mk and describe the symptom and 7255workaround, please do so in the file hacks.mk and describe the symptom and
7256compiler version as detailed as possible. 7256compiler version as detailed as possible.
7257 7257
725821.5.3. No such file or directory 725821.5.3. No such file or directory
7259 7259
7260Compilation sometimes fails with an error message like this: 7260Compilation sometimes fails with an error message like this:
7261 7261
7262.../x11/gtk3/work/gtk+-3.24.12/gdk/gdktypes.h:35:10: 7262.../x11/gtk3/work/gtk+-3.24.12/gdk/gdktypes.h:35:10:
7263 fatal error: pango/pango.h: No such file or directory 7263 fatal error: pango/pango.h: No such file or directory
7264 7264
7265The proper way to fix this problem depends on the type of the header, which is 7265The proper way to fix this problem depends on the type of the header, which is
7266described in the following sections. 7266described in the following sections.
7267 7267
726821.5.3.1. Headers from other packages 726821.5.3.1. Headers from other packages
7269 7269
7270If the header name looks like it comes from a different package, that other 7270If the header name looks like it comes from a different package, that other
7271package should be included via the buildlink3 framework. 7271package should be included via the buildlink3 framework.
7272 7272
7273First, look whether the header is somewhere in the buildlink3 directory below 7273First, look whether the header is somewhere in the buildlink3 directory below
7274WRKDIR. In the above case of the missing Pango header: 7274WRKDIR. In the above case of the missing Pango header:
7275 7275
7276$ find work/.buildlink/ -print | grep -F pango/pango.h 7276$ find work/.buildlink/ -print | grep -F pango/pango.h
7277 7277
7278In the case of Pango, the output is: 7278In the case of Pango, the output is:
7279 7279
7280work/.buildlink/include/pango-1.0/pango/pango.h 7280work/.buildlink/include/pango-1.0/pango/pango.h
7281 7281
7282If the pango/pango.h file were placed directly in the .buildlink directory, it 7282If the pango/pango.h file were placed directly in the .buildlink directory, it
7283would have been found automatically. There is an extra pango-1.0 path component 7283would have been found automatically. There is an extra pango-1.0 path component
7284though, which means that the compiler command line must contain an option of 7284though, which means that the compiler command line must contain an option of
7285the form -I${BUILDLINK3_PREFIX.pango}/include/pango-1.0. In most cases this 7285the form -I${BUILDLINK3_PREFIX.pango}/include/pango-1.0. In most cases this
7286option is generated by the configure script, which can be examined using: 7286option is generated by the configure script, which can be examined using:
7287 7287
7288$ $ grep -o '[-]I[^[:space:]]*/pango[^[:space:]]*' work/*/Makefile 7288$ $ grep -o '[-]I[^[:space:]]*/pango[^[:space:]]*' work/*/Makefile
7289-I/usr/pkg/include/pango-1.0 7289-I/usr/pkg/include/pango-1.0
7290-I/usr/pkg/include/pango-1.0 7290-I/usr/pkg/include/pango-1.0
7291-I/usr/pkg/include/pango-1.0 7291-I/usr/pkg/include/pango-1.0
7292-I/usr/pkg/include/pango-1.0 7292-I/usr/pkg/include/pango-1.0
7293-I/usr/pkg/include/pango-1.0 7293-I/usr/pkg/include/pango-1.0
7294 7294
7295This looks good. These options are transformed by the buildlink wrapper to 7295This looks good. These options are transformed by the buildlink wrapper to
7296refer to the correct path inside work/.buildlink. 7296refer to the correct path inside work/.buildlink.
7297 7297
7298Since the compilation fails though, examine the compiler command lines in work 7298Since the compilation fails though, examine the compiler command lines in work
7299/.work.log to see whether the -I option is included in the particular command 7299/.work.log to see whether the -I option is included in the particular command
7300line. 7300line.
7301 7301
7302To further analyze the situation, run bmake build-env, which sets up an 7302To further analyze the situation, run bmake build-env, which sets up an
7303interactive, realistic environment including all the pkgsrc wrapper commands 7303interactive, realistic environment including all the pkgsrc wrapper commands
7304and environment variables. From there, try to compile some simple example 7304and environment variables. From there, try to compile some simple example
7305programs that use the header. 7305programs that use the header.
7306 7306
730721.5.3.2. Headers generated during the build 730721.5.3.2. Headers generated during the build
7308 7308
7309If the name of the header seems to come from the package itself, and if the 7309If the name of the header seems to come from the package itself, and if the
7310build is run with parallel jobs, the package may have some undeclared 7310build is run with parallel jobs, the package may have some undeclared
7311dependencies between the .c and the .h files, and a C file is compiled before 7311dependencies between the .c and the .h files, and a C file is compiled before
7312its required header is generated. 7312its required header is generated.
7313 7313
7314To see whether the build runs with parallel jobs, run bmake show-all-build | 7314To see whether the build runs with parallel jobs, run bmake show-all-build |
7315grep JOBS. Its output looks like this: 7315grep JOBS. Its output looks like this:
7316 7316
7317 usr MAKE_JOBS= 7 7317 usr MAKE_JOBS= 7
7318 pkg MAKE_JOBS_SAFE # undefined 7318 pkg MAKE_JOBS_SAFE # undefined
7319 def _MAKE_JOBS_N= 7 7319 def _MAKE_JOBS_N= 7
7320 7320
7321In this case the pkgsrc user has asked pkgsrc to build packages with 7 jobs in 7321In this case the pkgsrc user has asked pkgsrc to build packages with 7 jobs in
7322parallel (MAKE_JOBS). The package could have disabled parallel builds by 7322parallel (MAKE_JOBS). The package could have disabled parallel builds by
7323setting MAKE_JOBS_SAFE to no, but in this case it hasn't. 7323setting MAKE_JOBS_SAFE to no, but in this case it hasn't.
7324 7324
7325To see whether the build failure is caused by parallel builds, first save the 7325To see whether the build failure is caused by parallel builds, first save the
7326exact error message and a bit of context, maybe you need it later for reporting 7326exact error message and a bit of context, maybe you need it later for reporting
7327a bug. Next, run: 7327a bug. Next, run:
7328 7328
7329MAKE_JOBS_SAFE=no bmake clean build 7329MAKE_JOBS_SAFE=no bmake clean build
7330 7330
7331If that succeeds, file a bug report against the pkgsrc package, including the 7331If that succeeds, file a bug report against the pkgsrc package, including the
7332exact error message and the contents of your mk.conf file. 7332exact error message and the contents of your mk.conf file.
7333 7333
733421.5.3.3. Symlinks 733421.5.3.3. Symlinks
7335 7335
7336Pkgsrc does not work reliably if any of LOCALBASE, VARBASE or WRKDIR contains a 7336Pkgsrc does not work reliably if any of LOCALBASE, VARBASE or WRKDIR contains a
7337symlink. Since 2019Q2, the pkgsrc bootstrap program prevents installing pkgsrc 7337symlink. Since 2019Q2, the pkgsrc bootstrap program prevents installing pkgsrc
7338in symlink-based directories. Existing pkgsrc installations are not checked for 7338in symlink-based directories. Existing pkgsrc installations are not checked for
7339symlinks though. 7339symlinks though.
7340 7340
7341The "No such file or directory" error messages are a typical symptom of 7341The "No such file or directory" error messages are a typical symptom of
7342symlinks, and it's quite difficult to find out that this is the actual cause. 7342symlinks, and it's quite difficult to find out that this is the actual cause.
7343 7343
734421.5.3.4. Stale working directories 734421.5.3.4. Stale working directories
7345 7345
7346When building a hierarchy of packages, it may happen that one package is built 7346When building a hierarchy of packages, it may happen that one package is built
7347and then pkgsrc is updated. This situation can provoke various hard to diagnose 7347and then pkgsrc is updated. This situation can provoke various hard to diagnose
7348build errors. To clean up the situation: 7348build errors. To clean up the situation:
7349 7349
7350$ (cd ../../ && cat mk/bsd.pkg.mk >/dev/null && rm -rf */*/work) 7350$ (cd ../../ && cat mk/bsd.pkg.mk >/dev/null && rm -rf */*/work)
7351 7351
7352(The only purpose of the bsd.pkg.mk is to prevent running this command in the 7352(The only purpose of the bsd.pkg.mk is to prevent running this command in the
7353wrong directory.) 7353wrong directory.)
7354 7354
7355If you have set WRKOBJDIR in mk.conf, remove that directory as well. 7355If you have set WRKOBJDIR in mk.conf, remove that directory as well.
7356 7356
735721.5.3.5. Other possible reasons 735721.5.3.5. Other possible reasons
7358 7358
7359On platforms other than BSD, third-party packages are installed in /usr/ 7359On platforms other than BSD, third-party packages are installed in /usr/
7360include, together with the base system. This means that pkgsrc cannot 7360include, together with the base system. This means that pkgsrc cannot
7361distinguish between headers provided by the base system (which it needs) and 7361distinguish between headers provided by the base system (which it needs) and
7362headers from third-party packages (which are often included in pkgsrc as well). 7362headers from third-party packages (which are often included in pkgsrc as well).
7363This can lead to subtle version mismatches. 7363This can lead to subtle version mismatches.
7364 7364
7365In pkgsrc installations that have been active for several years, it may happen 7365In pkgsrc installations that have been active for several years, it may happen
7366that some files are manually deleted. To exclude this unlikely reason, run  7366that some files are manually deleted. To exclude this unlikely reason, run
7367pkg_admin check. 7367pkg_admin check.
7368 7368
7369It may help to run pkg_admin rebuild-tree to check/fix dependencies. 7369It may help to run pkg_admin rebuild-tree to check/fix dependencies.
7370 7370
7371If all of the above doesn't help, see Chapter 2, Getting help for contact 7371If all of the above doesn't help, see Chapter 2, Getting help for contact
7372information. Be prepared to describe what you have tried so far and what any 7372information. Be prepared to describe what you have tried so far and what any
7373error messages were. 7373error messages were.
7374 7374
737521.5.4. Undefined reference to "..." 737521.5.4. Undefined reference to "..."
7376 7376
7377This error message often means that a package did not link to a shared library 7377This error message often means that a package did not link to a shared library
7378it needs. The following functions are known to cause this error message over 7378it needs. The following functions are known to cause this error message over
7379and over. 7379and over.
7380 7380
7381+-----------------------------------------------------+ 7381+-----------------------------------------------------+
7382| Function |Library |Affected platforms| 7382| Function |Library |Affected platforms|
7383|-------------------------+--------+------------------| 7383|-------------------------+--------+------------------|
7384|accept, bind, connect |-lsocket|Solaris | 7384|accept, bind, connect |-lsocket|Solaris |
7385|-------------------------+--------+------------------| 7385|-------------------------+--------+------------------|
7386|crypt |-lcrypt |DragonFly, NetBSD | 7386|crypt |-lcrypt |DragonFly, NetBSD |
7387|-------------------------+--------+------------------| 7387|-------------------------+--------+------------------|
7388|dlopen, dlsym |-ldl |Linux | 7388|dlopen, dlsym |-ldl |Linux |
7389|-------------------------+--------+------------------| 7389|-------------------------+--------+------------------|
7390|gethost* |-lnsl |Solaris | 7390|gethost* |-lnsl |Solaris |
7391|-------------------------+--------+------------------| 7391|-------------------------+--------+------------------|
7392|inet_aton |-lresolv|Solaris | 7392|inet_aton |-lresolv|Solaris |
7393|-------------------------+--------+------------------| 7393|-------------------------+--------+------------------|
7394|nanosleep, sem_*, timer_*|-lrt |Solaris | 7394|nanosleep, sem_*, timer_*|-lrt |Solaris |
7395|-------------------------+--------+------------------| 7395|-------------------------+--------+------------------|
7396|openpty |-lutil |Linux | 7396|openpty |-lutil |Linux |
7397+-----------------------------------------------------+ 7397+-----------------------------------------------------+
7398 7398
7399To fix these linker errors, it is often sufficient to add LIBS.OperatingSystem+ 7399To fix these linker errors, it is often sufficient to add LIBS.OperatingSystem+
7400= -lfoo to the package Makefile and then run bmake clean; bmake. 7400= -lfoo to the package Makefile and then run bmake clean; bmake.
7401 7401
740221.5.4.1. The SunPro compiler and inline functions 740221.5.4.1. The SunPro compiler and inline functions
7403 7403
7404When you are using the SunPro compiler, there is another possibility. That 7404When you are using the SunPro compiler, there is another possibility. That
7405compiler cannot handle the following code: 7405compiler cannot handle the following code:
7406 7406
7407extern int extern_func(int); 7407extern int extern_func(int);
7408 7408
7409static inline int 7409static inline int
7410inline_func(int x) 7410inline_func(int x)
7411{ 7411{
7412 return extern_func(x); 7412 return extern_func(x);
7413} 7413}
7414 7414
7415int main(void) 7415int main(void)
7416{ 7416{
7417 return 0; 7417 return 0;
7418} 7418}
7419 7419
7420It generates the code for inline_func even if that function is never used. This 7420It generates the code for inline_func even if that function is never used. This
7421code then refers to extern_func, which can usually not be resolved. To solve 7421code then refers to extern_func, which can usually not be resolved. To solve
7422this problem you can try to tell the package to disable inlining of functions. 7422this problem you can try to tell the package to disable inlining of functions.
7423 7423
742421.5.5. Running out of memory 742421.5.5. Running out of memory
7425 7425
7426Sometimes packages fail to build because the compiler runs into an operating 7426Sometimes packages fail to build because the compiler runs into an operating
7427system specific soft limit. With the UNLIMIT_RESOURCES variable pkgsrc can be 7427system specific soft limit. With the UNLIMIT_RESOURCES variable pkgsrc can be
7428told to unlimit the resources. The allowed values are any combination of " 7428told to unlimit the resources. The allowed values are any combination of "
7429cputime", "datasize", "memorysize", "stacksize" and "virtualsize". Setting this 7429cputime", "datasize", "memorysize", "stacksize" and "virtualsize". Setting this
7430variable is similar to running the shell builtin ulimit command to raise the 7430variable is similar to running the shell builtin ulimit command to raise the
7431maximum data segment size or maximum stack size of a process, respectively, to 7431maximum data segment size or maximum stack size of a process, respectively, to
7432their hard limits. 7432their hard limits.
7433 7433
743421.6. The install phase 743421.6. The install phase
7435 7435
743621.6.1. Creating needed directories 743621.6.1. Creating needed directories
7437 7437
7438The BSD-compatible install supplied with some operating systems cannot create 7438The BSD-compatible install supplied with some operating systems cannot create
7439more than one directory at a time. As such, you should call ${INSTALL_*_DIR} 7439more than one directory at a time. As such, you should call ${INSTALL_*_DIR}
7440like this: 7440like this:
7441 7441
7442${INSTALL_DATA_DIR} ${PREFIX}/dir1 7442${INSTALL_DATA_DIR} ${PREFIX}/dir1
7443${INSTALL_DATA_DIR} ${PREFIX}/dir2 7443${INSTALL_DATA_DIR} ${PREFIX}/dir2
7444 7444
7445Instead of running the install commands directly, you can also append "dir1 7445Instead of running the install commands directly, you can also append "dir1
7446dir2" to the INSTALLATION_DIRS variable, which will automatically do the right 7446dir2" to the INSTALLATION_DIRS variable, which will automatically do the right
7447thing. 7447thing.
7448 7448
744921.6.2. Where to install documentation 744921.6.2. Where to install documentation
7450 7450
7451In general, documentation should be installed into ${PREFIX}/share/doc/$ 7451In general, documentation should be installed into ${PREFIX}/share/doc/$
7452{PKGBASE} or ${PREFIX}/share/doc/${PKGNAME_NOREV} (the latter includes the 7452{PKGBASE} or ${PREFIX}/share/doc/${PKGNAME_NOREV} (the latter includes the
7453version number of the package). 7453version number of the package).
7454 7454
7455Many modern packages using GNU autoconf allow to set the directory where HTML 7455Many modern packages using GNU autoconf allow to set the directory where HTML
7456documentation is installed with the "--with-html-dir" option. Sometimes using 7456documentation is installed with the "--with-html-dir" option. Sometimes using
7457this flag is needed because otherwise the documentation ends up in ${PREFIX}/ 7457this flag is needed because otherwise the documentation ends up in ${PREFIX}/
7458share/doc/html or other places. In pkgsrc, the HTML documentation should go 7458share/doc/html or other places. In pkgsrc, the HTML documentation should go
7459into the package-specific directory, just like any other documentation. 7459into the package-specific directory, just like any other documentation.
7460 7460
7461An exception to the above is that library API documentation generated with the 7461An exception to the above is that library API documentation generated with the
7462textproc/gtk-doc tools, for use by special browsers (devhelp) should be left at 7462textproc/gtk-doc tools, for use by special browsers (devhelp) should be left at
7463their default location, which is ${PREFIX}/share/gtk-doc. Such documentation 7463their default location, which is ${PREFIX}/share/gtk-doc. Such documentation
7464can be recognized from files ending in .devhelp or .devhelp2. (It is also 7464can be recognized from files ending in .devhelp or .devhelp2. (It is also
7465acceptable to install such files in ${PREFIX}/share/doc/${PKGBASE} or ${PREFIX} 7465acceptable to install such files in ${PREFIX}/share/doc/${PKGBASE} or ${PREFIX}
7466/share/doc/${PKGNAME}; the .devhelp* file must be directly in that directory 7466/share/doc/${PKGNAME}; the .devhelp* file must be directly in that directory
7467then, no additional subdirectory level is allowed in this case. This is usually 7467then, no additional subdirectory level is allowed in this case. This is usually
7468achieved by using "--with-html-dir=${PREFIX}/share/doc". ${PREFIX}/share/ 7468achieved by using "--with-html-dir=${PREFIX}/share/doc". ${PREFIX}/share/
7469gtk-doc is preferred though.) 7469gtk-doc is preferred though.)
7470 7470
747121.6.3. Installing highscore files 747121.6.3. Installing highscore files
7472 7472
7473Certain packages, most of them in the games category, install a score file that 7473Certain packages, most of them in the games category, install a score file that
7474allows all users on the system to record their highscores. In order for this to 7474allows all users on the system to record their highscores. In order for this to
7475work, the binaries need to be installed setgid and the score files owned by the 7475work, the binaries need to be installed setgid and the score files owned by the
7476appropriate group and/or owner (traditionally the "games" user/group). Set 7476appropriate group and/or owner (traditionally the "games" user/group). Set
7477USE_GAMESGROUP to yes to support this. The following variables, documented in 7477USE_GAMESGROUP to yes to support this. The following variables, documented in
7478more detail in mk/defaults/mk.conf, control this behaviour: GAMEDATAMODE, 7478more detail in mk/defaults/mk.conf, control this behaviour: GAMEDATAMODE,
7479GAMEDIRMODE, GAMES_GROUP, GAMEMODE, GAME_USER. Other useful variables are: 7479GAMEDIRMODE, GAMES_GROUP, GAMEMODE, GAME_USER. Other useful variables are:
7480GAMEDIR_PERMS, GAMEDATA_PERMS and SETGID_GAMES_PERMS. 7480GAMEDIR_PERMS, GAMEDATA_PERMS and SETGID_GAMES_PERMS.
7481 7481
7482An example that illustrates some of the variables described above is games/ 7482An example that illustrates some of the variables described above is games/
7483moon-buggy. OWN_DIRS_PERMS is used to properly set directory permissions of the 7483moon-buggy. OWN_DIRS_PERMS is used to properly set directory permissions of the
7484directory where the scorefile is saved, REQD_FILES_PERMS is used to create a 7484directory where the scorefile is saved, REQD_FILES_PERMS is used to create a
7485dummy scorefile (mbscore) with the proper permissions and SPECIAL_PERMS is used 7485dummy scorefile (mbscore) with the proper permissions and SPECIAL_PERMS is used
7486to install setgid the game binary: 7486to install setgid the game binary:
7487 7487
7488USE_GAMESGROUP= yes 7488USE_GAMESGROUP= yes
7489 7489
7490BUILD_DEFS+= VARBASE 7490BUILD_DEFS+= VARBASE
7491 7491
7492OWN_DIRS_PERMS+= ${VARBASE}/games/moon-buggy ${GAMEDIR_PERMS} 7492OWN_DIRS_PERMS+= ${VARBASE}/games/moon-buggy ${GAMEDIR_PERMS}
7493REQD_FILES_PERMS+= /dev/null ${VARBASE}/games/moon-buggy/mbscore ${GAMEDATA_PERMS} 7493REQD_FILES_PERMS+= /dev/null ${VARBASE}/games/moon-buggy/mbscore ${GAMEDATA_PERMS}
7494SPECIAL_PERMS+= ${PREFIX}/bin/moon-buggy ${SETGID_GAMES_PERMS} 7494SPECIAL_PERMS+= ${PREFIX}/bin/moon-buggy ${SETGID_GAMES_PERMS}
7495 7495
7496Various INSTALL_* variables are also available: INSTALL_GAME to install setgid 7496Various INSTALL_* variables are also available: INSTALL_GAME to install setgid
7497game binaries, INSTALL_GAME_DIR to install game directories that are needed to 7497game binaries, INSTALL_GAME_DIR to install game directories that are needed to
7498be accessed by setgid games and INSTALL_GAME_DATA to install scorefiles. 7498be accessed by setgid games and INSTALL_GAME_DATA to install scorefiles.
7499 7499
7500A package should therefore never hard code file ownership or access permissions 7500A package should therefore never hard code file ownership or access permissions
7501but rely on *_PERMS as described above or alternatively on INSTALL_GAME, 7501but rely on *_PERMS as described above or alternatively on INSTALL_GAME,
7502INSTALL_GAME_DATA and INSTALL_GAME_DIR to set these correctly. 7502INSTALL_GAME_DATA and INSTALL_GAME_DIR to set these correctly.
7503 7503
750421.6.4. Adding DESTDIR support to packages 750421.6.4. Adding DESTDIR support to packages
7505 7505
7506DESTDIR support means that a package installs into a staging directory, not the 7506DESTDIR support means that a package installs into a staging directory, not the
7507final location of the files. Then a binary package is created which can be used 7507final location of the files. Then a binary package is created which can be used
7508for installation as usual. There are two ways: Either the package must install 7508for installation as usual. There are two ways: Either the package must install
7509as root ("destdir") or the package can install as non-root user ("user-destdir" 7509as root ("destdir") or the package can install as non-root user ("user-destdir"
7510). 7510).
7511 7511
7512 * PKG_DESTDIR_SUPPORT has to be set to "destdir" or "user-destdir". By 7512 * PKG_DESTDIR_SUPPORT has to be set to "destdir" or "user-destdir". By
7513 default PKG_DESTDIR_SUPPORT is set to "user-destdir" to help catching more 7513 default PKG_DESTDIR_SUPPORT is set to "user-destdir" to help catching more
7514 potential packaging problems. If bsd.prefs.mk is included in the Makefile, 7514 potential packaging problems. If bsd.prefs.mk is included in the Makefile,
7515 PKG_DESTDIR_SUPPORT needs to be set before the inclusion. 7515 PKG_DESTDIR_SUPPORT needs to be set before the inclusion.
7516 7516
7517 * All installation operations have to be prefixed with ${DESTDIR}. 7517 * All installation operations have to be prefixed with ${DESTDIR}.
7518 7518
7519 * automake gets this DESTDIR mostly right automatically. Many manual rules 7519 * automake gets this DESTDIR mostly right automatically. Many manual rules
7520 and pre/post-install often are incorrect; fix them. 7520 and pre/post-install often are incorrect; fix them.
7521 7521
7522 * If files are installed with special owner/group use SPECIAL_PERMS. 7522 * If files are installed with special owner/group use SPECIAL_PERMS.
7523 7523
7524 * In general, packages should support UNPRIVILEGED to be able to use DESTDIR. 7524 * In general, packages should support UNPRIVILEGED to be able to use DESTDIR.
7525 7525
752621.6.5. Packages with hardcoded paths to other interpreters 752621.6.5. Packages with hardcoded paths to other interpreters
7527 7527
7528Your package may also contain scripts with hardcoded paths to other 7528Your package may also contain scripts with hardcoded paths to other
7529interpreters besides (or as well as) Perl. To correct the full pathname to the 7529interpreters besides (or as well as) Perl. To correct the full pathname to the
7530script interpreter, you need to set the following definitions in your Makefile 7530script interpreter, you need to set the following definitions in your Makefile
7531(we shall use tclsh in this example): 7531(we shall use tclsh in this example):
7532 7532
7533REPLACE_INTERPRETER+= tcl 7533REPLACE_INTERPRETER+= tcl
7534REPLACE.tcl.old= .*/bin/tclsh 7534REPLACE.tcl.old= .*/bin/tclsh
7535REPLACE.tcl.new= ${PREFIX}/bin/tclsh 7535REPLACE.tcl.new= ${PREFIX}/bin/tclsh
7536REPLACE_FILES.tcl= # list of tcl scripts which need to be fixed, 7536REPLACE_FILES.tcl= # list of tcl scripts which need to be fixed,
7537# relative to ${WRKSRC}, just as in REPLACE_PERL 7537# relative to ${WRKSRC}, just as in REPLACE_PERL
7538 7538
753921.6.6. Packages installing Perl modules 753921.6.6. Packages installing Perl modules
7540 7540
7541Makefiles of packages providing perl5 modules should include the Makefile 7541Makefiles of packages providing perl5 modules should include the Makefile
7542fragment ../../lang/perl5/module.mk. It provides a do-configure target for the 7542fragment ../../lang/perl5/module.mk. It provides a do-configure target for the
7543standard perl configuration for such modules as well as various hooks to tune 7543standard perl configuration for such modules as well as various hooks to tune
7544this configuration. See comments in this file for details. 7544this configuration. See comments in this file for details.
7545 7545
7546Perl5 modules will install into different places depending on the version of 7546Perl5 modules will install into different places depending on the version of
7547perl used during the build process. To address this, pkgsrc will append lines 7547perl used during the build process. To address this, pkgsrc will append lines
7548to the PLIST corresponding to the files listed in the installed .packlist file 7548to the PLIST corresponding to the files listed in the installed .packlist file
7549generated by most perl5 modules. This is invoked by defining PERL5_PACKLIST to 7549generated by most perl5 modules. This is invoked by defining PERL5_PACKLIST to
7550a space-separated list of packlist files relative to PERL5_PACKLIST_DIR 7550a space-separated list of packlist files relative to PERL5_PACKLIST_DIR
7551(PERL5_INSTALLVENDORARCH by default), e.g.: 7551(PERL5_INSTALLVENDORARCH by default), e.g.:
7552 7552
7553PERL5_PACKLIST= auto/Pg/.packlist 7553PERL5_PACKLIST= auto/Pg/.packlist
7554 7554
7555The perl5 config variables installarchlib, installscript, installvendorbin, 7555The perl5 config variables installarchlib, installscript, installvendorbin,
7556installvendorscript, installvendorarch, installvendorlib, installvendorman1dir, 7556installvendorscript, installvendorarch, installvendorlib, installvendorman1dir,
7557and installvendorman3dir represent those locations in which components of perl5 7557and installvendorman3dir represent those locations in which components of perl5
7558modules may be installed, provided as variable with uppercase and prefixed with 7558modules may be installed, provided as variable with uppercase and prefixed with
7559PERL5_, e.g. PERL5_INSTALLARCHLIB and may be used by perl5 packages that don't 7559PERL5_, e.g. PERL5_INSTALLARCHLIB and may be used by perl5 packages that don't
7560have a packlist. These variables are also substituted for in the PLIST as 7560have a packlist. These variables are also substituted for in the PLIST as
7561uppercase prefixed with PERL5_SUB_. 7561uppercase prefixed with PERL5_SUB_.
7562 7562
756321.6.7. Packages installing info files 756321.6.7. Packages installing info files
7564 7564
7565Some packages install info files or use the "makeinfo" or "install-info" 7565Some packages install info files or use the "makeinfo" or "install-info"
7566commands. INFO_FILES should be defined in the package Makefile so that INSTALL 7566commands. INFO_FILES should be defined in the package Makefile so that INSTALL
7567and DEINSTALL scripts will be generated to handle registration of the info 7567and DEINSTALL scripts will be generated to handle registration of the info
7568files in the Info directory file. The "install-info" command used for the info 7568files in the Info directory file. The "install-info" command used for the info
7569files registration is either provided by the system, or by a special purpose 7569files registration is either provided by the system, or by a special purpose
7570package automatically added as dependency if needed. 7570package automatically added as dependency if needed.
7571 7571
7572PKGINFODIR is the directory under ${PREFIX} where info files are primarily 7572PKGINFODIR is the directory under ${PREFIX} where info files are primarily
7573located. PKGINFODIR defaults to "info" and can be overridden by the user. 7573located. PKGINFODIR defaults to "info" and can be overridden by the user.
7574 7574
7575The info files for the package should be listed in the package PLIST; however 7575The info files for the package should be listed in the package PLIST; however
7576any split info files need not be listed. 7576any split info files need not be listed.
7577 7577
7578A package which needs the "makeinfo" command at build time must add "makeinfo" 7578A package which needs the "makeinfo" command at build time must add "makeinfo"
7579to USE_TOOLS in its Makefile. If a minimum version of the "makeinfo" command is 7579to USE_TOOLS in its Makefile. If a minimum version of the "makeinfo" command is
7580needed it should be noted with the TEXINFO_REQD variable in the package 7580needed it should be noted with the TEXINFO_REQD variable in the package
7581Makefile. By default, a minimum version of 3.12 is required. If the system does 7581Makefile. By default, a minimum version of 3.12 is required. If the system does
7582not provide a makeinfo command or if it does not match the required minimum, a 7582not provide a makeinfo command or if it does not match the required minimum, a
7583build dependency on the devel/gtexinfo package will be added automatically. 7583build dependency on the devel/gtexinfo package will be added automatically.
7584 7584
7585The build and installation process of the software provided by the package 7585The build and installation process of the software provided by the package
7586should not use the install-info command as the registration of info files is 7586should not use the install-info command as the registration of info files is
7587the task of the package INSTALL script, and it must use the appropriate  7587the task of the package INSTALL script, and it must use the appropriate
7588makeinfo command. 7588makeinfo command.
7589 7589
7590To achieve this goal, the pkgsrc infrastructure creates overriding scripts for 7590To achieve this goal, the pkgsrc infrastructure creates overriding scripts for
7591the install-info and makeinfo commands in a directory listed early in PATH. 7591the install-info and makeinfo commands in a directory listed early in PATH.
7592 7592
7593The script overriding install-info has no effect except the logging of a 7593The script overriding install-info has no effect except the logging of a
7594message. The script overriding makeinfo logs a message and according to the 7594message. The script overriding makeinfo logs a message and according to the
7595value of TEXINFO_REQD either runs the appropriate makeinfo command or exit on 7595value of TEXINFO_REQD either runs the appropriate makeinfo command or exit on
7596error. 7596error.
7597 7597
759821.6.8. Packages installing man pages 759821.6.8. Packages installing man pages
7599 7599
7600All packages that install manual pages should install them into the same 7600All packages that install manual pages should install them into the same
7601directory, so that there is one common place to look for them. In pkgsrc, this 7601directory, so that there is one common place to look for them. In pkgsrc, this
7602place is ${PREFIX}/${PKGMANDIR}, and this expression should be used in 7602place is ${PREFIX}/${PKGMANDIR}, and this expression should be used in
7603packages. The default for PKGMANDIR is "man". Another often-used value is " 7603packages. The default for PKGMANDIR is "man". Another often-used value is "
7604share/man". 7604share/man".
7605 7605
7606Note 7606Note
7607 7607
7608The support for a custom PKGMANDIR is far from complete. 7608The support for a custom PKGMANDIR is far from complete.
7609 7609
7610The PLIST files can just use man/ as the top level directory for the man page 7610The PLIST files can just use man/ as the top level directory for the man page
7611file entries, and the pkgsrc framework will convert as needed. In all other 7611file entries, and the pkgsrc framework will convert as needed. In all other
7612places, the correct PKGMANDIR must be used. 7612places, the correct PKGMANDIR must be used.
7613 7613
7614Packages that are configured with GNU_CONFIGURE set as "yes", by default will 7614Packages that are configured with GNU_CONFIGURE set as "yes", by default will
7615use the ./configure --mandir switch to set where the man pages should be 7615use the ./configure --mandir switch to set where the man pages should be
7616installed. The path is GNU_CONFIGURE_MANDIR which defaults to ${PREFIX}/$ 7616installed. The path is GNU_CONFIGURE_MANDIR which defaults to ${PREFIX}/$
7617{PKGMANDIR}. 7617{PKGMANDIR}.
7618 7618
7619Packages that use GNU_CONFIGURE but do not use --mandir, can set 7619Packages that use GNU_CONFIGURE but do not use --mandir, can set
7620CONFIGURE_HAS_MANDIR to "no". Or if the ./configure script uses a non-standard 7620CONFIGURE_HAS_MANDIR to "no". Or if the ./configure script uses a non-standard
7621use of --mandir, you can set GNU_CONFIGURE_MANDIR as needed. 7621use of --mandir, you can set GNU_CONFIGURE_MANDIR as needed.
7622 7622
7623See Section 19.5, "Man page compression" for information on installation of 7623See Section 19.5, "Man page compression" for information on installation of
7624compressed manual pages. 7624compressed manual pages.
7625 7625
762621.6.9. Packages installing X11 fonts 762621.6.9. Packages installing X11 fonts
7627 7627
7628If a package installs font files, you will need to rebuild the fonts database 7628If a package installs font files, you will need to rebuild the fonts database
7629in the directory where they get installed at installation and deinstallation 7629in the directory where they get installed at installation and deinstallation
7630time. This can be automatically done by using the pkginstall framework. 7630time. This can be automatically done by using the pkginstall framework.
7631 7631
7632You can list the directories where fonts are installed in the FONTS_DIRS.type 7632You can list the directories where fonts are installed in the FONTS_DIRS.type
7633variables, where type can be one of "ttf", "type1" or "x11". Also make sure 7633variables, where type can be one of "ttf", "type1" or "x11". Also make sure
7634that the database file fonts.dir is not listed in the PLIST. 7634that the database file fonts.dir is not listed in the PLIST.
7635 7635
7636Note that you should not create new directories for fonts; instead use the 7636Note that you should not create new directories for fonts; instead use the
7637standard ones to avoid that the user needs to manually configure his X server 7637standard ones to avoid that the user needs to manually configure his X server
7638to find them. 7638to find them.
7639 7639
764021.6.10. Packages installing SGML or XML data 764021.6.10. Packages installing SGML or XML data
7641 7641
7642If a package installs SGML or XML data files that need to be registered in 7642If a package installs SGML or XML data files that need to be registered in
7643system-wide catalogs (like DTDs, sub-catalogs, etc.), you need to take some 7643system-wide catalogs (like DTDs, sub-catalogs, etc.), you need to take some
7644extra steps: 7644extra steps:
7645 7645
7646 1. Include ../../textproc/xmlcatmgr/catalogs.mk in your Makefile, which takes 7646 1. Include ../../textproc/xmlcatmgr/catalogs.mk in your Makefile, which takes
7647 care of registering those files in system-wide catalogs at installation and 7647 care of registering those files in system-wide catalogs at installation and
7648 deinstallation time. 7648 deinstallation time.
7649 7649
7650 2. Set SGML_CATALOGS to the full path of any SGML catalogs installed by the 7650 2. Set SGML_CATALOGS to the full path of any SGML catalogs installed by the
7651 package. 7651 package.
7652 7652
7653 3. Set XML_CATALOGS to the full path of any XML catalogs installed by the 7653 3. Set XML_CATALOGS to the full path of any XML catalogs installed by the
7654 package. 7654 package.
7655 7655
7656 4. Set SGML_ENTRIES to individual entries to be added to the SGML catalog. 7656 4. Set SGML_ENTRIES to individual entries to be added to the SGML catalog.
7657 These come in groups of three strings; see xmlcatmgr(1) for more 7657 These come in groups of three strings; see xmlcatmgr(1) for more
7658 information (specifically, arguments recognized by the 'add' action). Note 7658 information (specifically, arguments recognized by the 'add' action). Note
7659 that you will normally not use this variable. 7659 that you will normally not use this variable.
7660 7660
7661 5. Set XML_ENTRIES to individual entries to be added to the XML catalog. These 7661 5. Set XML_ENTRIES to individual entries to be added to the XML catalog. These
7662 come in groups of three strings; see xmlcatmgr(1) for more information 7662 come in groups of three strings; see xmlcatmgr(1) for more information
7663 (specifically, arguments recognized by the 'add' action). Note that you 7663 (specifically, arguments recognized by the 'add' action). Note that you
7664 will normally not use this variable. 7664 will normally not use this variable.
7665 7665
766621.6.11. Packages installing extensions to the MIME database 766621.6.11. Packages installing extensions to the MIME database
7667 7667
7668If a package provides extensions to the MIME database by installing .xml files 7668If a package provides extensions to the MIME database by installing .xml files
7669inside ${PREFIX}/share/mime/packages, you need to take some extra steps to 7669inside ${PREFIX}/share/mime/packages, you need to take some extra steps to
7670ensure that the database is kept consistent with respect to these new files: 7670ensure that the database is kept consistent with respect to these new files:
7671 7671
7672 1. Include ../../databases/shared-mime-info/mimedb.mk (avoid using the 7672 1. Include ../../databases/shared-mime-info/mimedb.mk (avoid using the
7673 buildlink3.mk file from this same directory, which is reserved for 7673 buildlink3.mk file from this same directory, which is reserved for
7674 inclusion from other buildlink3.mk files). It takes care of rebuilding the 7674 inclusion from other buildlink3.mk files). It takes care of rebuilding the
7675 MIME database at installation and deinstallation time, and disallows any 7675 MIME database at installation and deinstallation time, and disallows any
7676 access to it directly from the package. 7676 access to it directly from the package.
7677 7677
7678 2. Check the PLIST and remove any entries under the share/mime directory,  7678 2. Check the PLIST and remove any entries under the share/mime directory,
7679 except for files saved under share/mime/packages. The former are handled 7679 except for files saved under share/mime/packages. The former are handled
7680 automatically by the update-mime-database program, but the latter are 7680 automatically by the update-mime-database program, but the latter are
7681 package-dependent and must be removed by the package that installed them in 7681 package-dependent and must be removed by the package that installed them in
7682 the first place. 7682 the first place.
7683 7683
7684 3. Remove any share/mime/* directories from the PLIST. They will be handled by 7684 3. Remove any share/mime/* directories from the PLIST. They will be handled by
7685 the shared-mime-info package. 7685 the shared-mime-info package.
7686 7686
768721.6.12. Packages using intltool 768721.6.12. Packages using intltool
7688 7688
7689If a package uses intltool during its build, add intltool to the USE_TOOLS, 7689If a package uses intltool during its build, add intltool to the USE_TOOLS,
7690which forces it to use the intltool package provided by pkgsrc, instead of the 7690which forces it to use the intltool package provided by pkgsrc, instead of the
7691one bundled with the distribution file. 7691one bundled with the distribution file.
7692 7692
7693This tracks intltool's build-time dependencies and uses the latest available 7693This tracks intltool's build-time dependencies and uses the latest available
7694version; this way, the package benefits of any bug fixes that may have appeared 7694version; this way, the package benefits of any bug fixes that may have appeared
7695since it was released. 7695since it was released.
7696 7696
769721.6.13. Packages installing startup scripts 769721.6.13. Packages installing startup scripts
7698 7698
7699If a package contains a rc.d script, it won't be copied into the startup 7699If a package contains a rc.d script, it won't be copied into the startup
7700directory by default, but you can enable it, by adding the option 7700directory by default, but you can enable it, by adding the option
7701PKG_RCD_SCRIPTS=YES in mk.conf. This option will copy the scripts into /etc/ 7701PKG_RCD_SCRIPTS=YES in mk.conf. This option will copy the scripts into /etc/
7702rc.d when a package is installed, and it will automatically remove the scripts 7702rc.d when a package is installed, and it will automatically remove the scripts
7703when the package is deinstalled. 7703when the package is deinstalled.
7704 7704
770521.6.14. Packages installing TeX modules 770521.6.14. Packages installing TeX modules
7706 7706
7707If a package installs TeX packages into the texmf tree, the ls-R database of 7707If a package installs TeX packages into the texmf tree, the ls-R database of
7708the tree needs to be updated. 7708the tree needs to be updated.
7709 7709
7710Note 7710Note
7711 7711
7712Except the main TeX packages such as kpathsea, packages should install files 7712Except the main TeX packages such as kpathsea, packages should install files
7713into ${PREFIX}/share/texmf-dist, not ${PREFIX}/share/texmf. 7713into ${PREFIX}/share/texmf-dist, not ${PREFIX}/share/texmf.
7714 7714
7715 1. Include ../../print/kpathsea/texmf.mk. This takes care of rebuilding the 7715 1. Include ../../print/kpathsea/texmf.mk. This takes care of rebuilding the
7716 ls-R database at installation and deinstallation time. 7716 ls-R database at installation and deinstallation time.
7717 7717
7718 2. If your package installs files into a texmf tree other than the one at $ 7718 2. If your package installs files into a texmf tree other than the one at $
7719 {PREFIX}/share/texmf-dist, set TEX_TEXMF_DIRS to the list of all texmf 7719 {PREFIX}/share/texmf-dist, set TEX_TEXMF_DIRS to the list of all texmf
7720 trees that need database update. 7720 trees that need database update.
7721 7721
7722 If your package also installs font map files that need to be registered 7722 If your package also installs font map files that need to be registered
7723 using updmap, include ../../print/tex-tetex/map.mk and set TEX_MAP_FILES 7723 using updmap, include ../../print/tex-tetex/map.mk and set TEX_MAP_FILES
7724 and/or TEX_MIXEDMAP_FILES to the list of all such font map files. Then  7724 and/or TEX_MIXEDMAP_FILES to the list of all such font map files. Then
7725 updmap will be run automatically at installation/deinstallation to enable/ 7725 updmap will be run automatically at installation/deinstallation to enable/
7726 disable font map files for TeX output drivers. 7726 disable font map files for TeX output drivers.
7727 7727
7728 3. Make sure that none of ls-R databases are included in PLIST, as they will 7728 3. Make sure that none of ls-R databases are included in PLIST, as they will
7729 be removed only by the kpathsea package. 7729 be removed only by the kpathsea package.
7730 7730
773121.6.15. Packages supporting running binaries in emulation 773121.6.15. Packages supporting running binaries in emulation
7732 7732
7733There are some packages that provide libraries and executables for running 7733There are some packages that provide libraries and executables for running
7734binaries from a one operating system on a different one (if the latter supports 7734binaries from a one operating system on a different one (if the latter supports
7735it). One example is running Linux binaries on NetBSD. 7735it). One example is running Linux binaries on NetBSD.
7736 7736
7737The pkgtools/rpm2pkg helps in extracting and packaging Linux rpm packages. 7737The pkgtools/rpm2pkg helps in extracting and packaging Linux rpm packages.
7738 7738
7739The CHECK_SHLIBS can be set to no to avoid the check-shlibs target, which tests 7739The CHECK_SHLIBS can be set to no to avoid the check-shlibs target, which tests
7740if all libraries for each installed executable can be found by the dynamic 7740if all libraries for each installed executable can be found by the dynamic
7741linker. Since the standard dynamic linker is run, this fails for emulation 7741linker. Since the standard dynamic linker is run, this fails for emulation
7742packages, because the libraries used by the emulation are not in the standard 7742packages, because the libraries used by the emulation are not in the standard
7743directories. 7743directories.
7744 7744
774521.6.16. Packages installing hicolor icons 774521.6.16. Packages installing hicolor icons
7746 7746
7747If a package installs images under the share/icons/hicolor and/or updates the 7747If a package installs images under the share/icons/hicolor and/or updates the
7748share/icons/hicolor/icon-theme.cache database, you need to take some extra 7748share/icons/hicolor/icon-theme.cache database, you need to take some extra
7749steps to make sure that the shared theme directory is handled appropriately and 7749steps to make sure that the shared theme directory is handled appropriately and
7750that the cache database is rebuilt: 7750that the cache database is rebuilt:
7751 7751
7752 1. Include ../../graphics/hicolor-icon-theme/buildlink3.mk. 7752 1. Include ../../graphics/hicolor-icon-theme/buildlink3.mk.
7753 7753
7754 2. Check the PLIST and remove the entry that refers to the theme cache. 7754 2. Check the PLIST and remove the entry that refers to the theme cache.
7755 7755
7756 3. Ensure that the PLIST does not remove the shared icon directories from the 7756 3. Ensure that the PLIST does not remove the shared icon directories from the
7757 share/icons/hicolor hierarchy because they will be handled automatically. 7757 share/icons/hicolor hierarchy because they will be handled automatically.
7758 7758
7759The best way to verify that the PLIST is correct with respect to the last two 7759The best way to verify that the PLIST is correct with respect to the last two
7760points is to regenerate it using make print-PLIST. 7760points is to regenerate it using make print-PLIST.
7761 7761
776221.6.17. Packages installing desktop files 776221.6.17. Packages installing desktop files
7763 7763
7764If a package installs .desktop files under share/applications and these include 7764If a package installs .desktop files under share/applications and these include
7765MIME information (MimeType key), you need to take extra steps to ensure that 7765MIME information (MimeType key), you need to take extra steps to ensure that
7766they are registered into the MIME database: 7766they are registered into the MIME database:
7767 7767
7768 1. Include ../../sysutils/desktop-file-utils/desktopdb.mk. 7768 1. Include ../../sysutils/desktop-file-utils/desktopdb.mk.
7769 7769
7770 2. Check the PLIST and remove the entry that refers to the share/applications/ 7770 2. Check the PLIST and remove the entry that refers to the share/applications/
7771 mimeinfo.cache file. It will be handled automatically. 7771 mimeinfo.cache file. It will be handled automatically.
7772 7772
7773The best way to verify that the PLIST is correct with respect to the last point 7773The best way to verify that the PLIST is correct with respect to the last point
7774is to regenerate it using make print-PLIST. 7774is to regenerate it using make print-PLIST.
7775 7775
777621.7. Marking packages as having problems 777621.7. Marking packages as having problems
7777 7777
7778In some cases one does not have the time to solve a problem immediately. In 7778In some cases one does not have the time to solve a problem immediately. In
7779this case, one can plainly mark a package as broken. For this, one just sets 7779this case, one can plainly mark a package as broken. For this, one just sets
7780the variable BROKEN to the reason why the package is broken (similar to the 7780the variable BROKEN to the reason why the package is broken (similar to the
7781PKG_FAIL_REASON variable). A user trying to build the package will immediately 7781PKG_FAIL_REASON variable). A user trying to build the package will immediately
7782be shown this message, and the build will not be even tried. 7782be shown this message, and the build will not be even tried.
7783 7783
7784BROKEN packages are removed from pkgsrc in irregular intervals. 7784BROKEN packages are removed from pkgsrc in irregular intervals.
7785 7785
7786Chapter 22. GNOME packaging and porting 7786Chapter 22. GNOME packaging and porting
7787 7787
7788Table of Contents 7788Table of Contents
7789 7789
779022.1. Meta packages 779022.1. Meta packages
779122.2. Packaging a GNOME application 779122.2. Packaging a GNOME application
779222.3. Updating GNOME to a newer version 779222.3. Updating GNOME to a newer version
779322.4. Patching guidelines 779322.4. Patching guidelines
7794 7794
7795Quoting GNOME's web site: 7795Quoting GNOME's web site:
7796 7796
7797 The GNOME project provides two things: The GNOME desktop environment, an 7797 The GNOME project provides two things: The GNOME desktop environment, an
7798 intuitive and attractive desktop for users, and the GNOME development 7798 intuitive and attractive desktop for users, and the GNOME development
7799 platform, an extensive framework for building applications that integrate 7799 platform, an extensive framework for building applications that integrate
7800 into the rest of the desktop. 7800 into the rest of the desktop.
7801 7801
7802pkgsrc provides a seamless way to automatically build and install a complete 7802pkgsrc provides a seamless way to automatically build and install a complete
7803GNOME environment under many different platforms. We can say with confidence 7803GNOME environment under many different platforms. We can say with confidence
7804that pkgsrc is one of the most advanced build and packaging systems for GNOME 7804that pkgsrc is one of the most advanced build and packaging systems for GNOME
7805due to its included technologies buildlink3, the wrappers and tools framework 7805due to its included technologies buildlink3, the wrappers and tools framework
7806and automatic configuration file management. Lots of efforts are put into 7806and automatic configuration file management. Lots of efforts are put into
7807achieving a completely clean deinstallation of installed software components. 7807achieving a completely clean deinstallation of installed software components.
7808 7808
7809Given that pkgsrc is NetBSD's official packaging system, the above also means 7809Given that pkgsrc is NetBSD's official packaging system, the above also means
7810that great efforts are put into making GNOME work under this operating system. 7810that great efforts are put into making GNOME work under this operating system.
7811 7811
7812This chapter is aimed at pkgsrc developers and other people interested in 7812This chapter is aimed at pkgsrc developers and other people interested in
7813helping our GNOME porting and packaging efforts. It provides instructions on 7813helping our GNOME porting and packaging efforts. It provides instructions on
7814how to manage the existing packages and some important information regarding 7814how to manage the existing packages and some important information regarding
7815their internals. 7815their internals.
7816 7816
781722.1. Meta packages 781722.1. Meta packages
7818 7818
7819pkgsrc includes three GNOME-related meta packages: 7819pkgsrc includes three GNOME-related meta packages:
7820 7820
7821 * meta-pkgs/gnome-base: Provides the core GNOME desktop environment. It only 7821 * meta-pkgs/gnome-base: Provides the core GNOME desktop environment. It only
7822 includes the necessary bits to get it to boot correctly, although it may 7822 includes the necessary bits to get it to boot correctly, although it may
7823 lack important functionality for daily operation. The idea behind this 7823 lack important functionality for daily operation. The idea behind this
7824 package is to let end users build their own configurations on top of this 7824 package is to let end users build their own configurations on top of this
7825 one, first installing this meta package to achieve a functional setup and 7825 one, first installing this meta package to achieve a functional setup and
7826 then adding individual applications. 7826 then adding individual applications.
7827 7827
7828 * meta-pkgs/gnome: Provides a complete installation of the GNOME platform and 7828 * meta-pkgs/gnome: Provides a complete installation of the GNOME platform and
7829 desktop as defined by the GNOME project; this is based on the components 7829 desktop as defined by the GNOME project; this is based on the components
7830 distributed in the platform/x.y/x.y.z/sources and desktop/x.y/x.y.z/sources 7830 distributed in the platform/x.y/x.y.z/sources and desktop/x.y/x.y.z/sources
7831 directories of the official FTP server. Developer-only tools found in those 7831 directories of the official FTP server. Developer-only tools found in those
7832 directories are not installed unless required by some other component to 7832 directories are not installed unless required by some other component to
7833 work properly. Similarly, packages from the bindings set (bindings/x.y/ 7833 work properly. Similarly, packages from the bindings set (bindings/x.y/
7834 x.y.z/sources) are not pulled in unless required as a dependency for an 7834 x.y.z/sources) are not pulled in unless required as a dependency for an
7835 end-user component. This package "extends" meta-pkgs/gnome-base. 7835 end-user component. This package "extends" meta-pkgs/gnome-base.
7836 7836
7837 * meta-pkgs/gnome-devel: Installs all the tools required to build a GNOME 7837 * meta-pkgs/gnome-devel: Installs all the tools required to build a GNOME
7838 component when fetched from the CVS repository. These are required to let 7838 component when fetched from the CVS repository. These are required to let
7839 the autogen.sh scripts work appropriately. 7839 the autogen.sh scripts work appropriately.
7840 7840
7841In all these packages, the DEPENDS lines are sorted in a way that eases 7841In all these packages, the DEPENDS lines are sorted in a way that eases
7842updates: a package may depend on other packages listed before it but not on any 7842updates: a package may depend on other packages listed before it but not on any
7843listed after it. It is very important to keep this order to ease updates so...  7843listed after it. It is very important to keep this order to ease updates so...
7844do not change it to alphabetical sorting! 7844do not change it to alphabetical sorting!
7845 7845
784622.2. Packaging a GNOME application 784622.2. Packaging a GNOME application
7847 7847
7848Almost all GNOME applications are written in C and use a common set of tools as 7848Almost all GNOME applications are written in C and use a common set of tools as
7849their build system. Things get different with the new bindings to other 7849their build system. Things get different with the new bindings to other
7850languages (such as Python), but the following will give you a general idea on 7850languages (such as Python), but the following will give you a general idea on
7851the minimum required tools: 7851the minimum required tools:
7852 7852
7853 * Almost all GNOME applications use the GNU Autotools as their build system. 7853 * Almost all GNOME applications use the GNU Autotools as their build system.
7854 As a general rule you will need to tell this to your package: 7854 As a general rule you will need to tell this to your package:
7855 7855
7856 GNU_CONFIGURE= yes 7856 GNU_CONFIGURE= yes
7857 USE_LIBTOOL= yes 7857 USE_LIBTOOL= yes
7858 USE_TOOLS+= gmake 7858 USE_TOOLS+= gmake
7859 7859
7860 * If the package uses pkg-config to detect dependencies, add this tool to the 7860 * If the package uses pkg-config to detect dependencies, add this tool to the
7861 list of required utilities: 7861 list of required utilities:
7862 7862
7863 USE_TOOLS+= pkg-config 7863 USE_TOOLS+= pkg-config
7864 7864
7865 Also use pkgtools/verifypc at the end of the build process to ensure that 7865 Also use pkgtools/verifypc at the end of the build process to ensure that
7866 you did not miss to specify any dependency in your package and that the 7866 you did not miss to specify any dependency in your package and that the
7867 version requirements are all correct. 7867 version requirements are all correct.
7868 7868
7869 * If the package uses intltool, be sure to add intltool to the USE_TOOLS to 7869 * If the package uses intltool, be sure to add intltool to the USE_TOOLS to
7870 handle dependencies and to force the package to use the latest available 7870 handle dependencies and to force the package to use the latest available
7871 version. 7871 version.
7872 7872
7873 * If the package uses gtk-doc (a documentation generation utility), do not 7873 * If the package uses gtk-doc (a documentation generation utility), do not
7874 add a dependency on it. The tool is rather big and the distfile should come 7874 add a dependency on it. The tool is rather big and the distfile should come
7875 with pregenerated documentation anyway; if it does not, it is a bug that 7875 with pregenerated documentation anyway; if it does not, it is a bug that
7876 you ought to report. For such packages you should disable gtk-doc (unless 7876 you ought to report. For such packages you should disable gtk-doc (unless
7877 it is the default): 7877 it is the default):
7878 7878
7879 CONFIGURE_ARGS+= --disable-gtk-doc 7879 CONFIGURE_ARGS+= --disable-gtk-doc
7880 7880
7881 The default location of installed HTML files (share/gtk-doc/<package-name>) 7881 The default location of installed HTML files (share/gtk-doc/<package-name>)
7882 is correct and should not be changed unless the package insists on 7882 is correct and should not be changed unless the package insists on
7883 installing them somewhere else. Otherwise programs as devhelp will not be 7883 installing them somewhere else. Otherwise programs as devhelp will not be
7884 able to open them. You can do that with an entry similar to: 7884 able to open them. You can do that with an entry similar to:
7885 7885
7886 CONFIGURE_ARGS+= --with-html-dir=${PREFIX}/share/gtk-doc/... 7886 CONFIGURE_ARGS+= --with-html-dir=${PREFIX}/share/gtk-doc/...
7887 7887
7888GNOME uses multiple shared directories and files under the installation prefix 7888GNOME uses multiple shared directories and files under the installation prefix
7889to maintain databases. In this context, shared means that those exact same 7889to maintain databases. In this context, shared means that those exact same
7890directories and files are used among several different packages, leading to 7890directories and files are used among several different packages, leading to
7891conflicts in the PLIST. pkgsrc currently includes functionality to handle the 7891conflicts in the PLIST. pkgsrc currently includes functionality to handle the
7892most common cases, so you have to forget about using @unexec ${RMDIR} lines in 7892most common cases, so you have to forget about using @unexec ${RMDIR} lines in
7893your file lists and omitting shared files from them. If you find yourself doing 7893your file lists and omitting shared files from them. If you find yourself doing
7894those, your package is most likely incorrect. 7894those, your package is most likely incorrect.
7895 7895
7896The following table lists the common situations that result in using shared 7896The following table lists the common situations that result in using shared
7897directories or files. For each of them, the appropriate solution is given. 7897directories or files. For each of them, the appropriate solution is given.
7898After applying the solution be sure to regenerate the package's file list with  7898After applying the solution be sure to regenerate the package's file list with
7899make print-PLIST and ensure it is correct. 7899make print-PLIST and ensure it is correct.
7900 7900
7901Table 22.1. PLIST handling for GNOME packages 7901Table 22.1. PLIST handling for GNOME packages
7902 7902
7903+-----------------------------------------------------------------------------+ 7903+-----------------------------------------------------------------------------+
7904| If the package... | Then... | 7904| If the package... | Then... |
7905|-------------------------------------------+---------------------------------| 7905|-------------------------------------------+---------------------------------|
7906|Installs icons under the share/icons/ |See Section 21.6.16, "Packages | 7906|Installs icons under the share/icons/ |See Section 21.6.16, "Packages |
7907|hicolor hierarchy or updates share/icons/ |installing hicolor icons". | 7907|hicolor hierarchy or updates share/icons/ |installing hicolor icons". |
7908|hicolor/icon-theme.cache. | | 7908|hicolor/icon-theme.cache. | |
7909|-------------------------------------------+---------------------------------| 7909|-------------------------------------------+---------------------------------|
7910| |See Section 21.6.11, "Packages | 7910| |See Section 21.6.11, "Packages |
7911|Installs files under share/mime/packages. |installing extensions to the MIME| 7911|Installs files under share/mime/packages. |installing extensions to the MIME|
7912| |database". | 7912| |database". |
7913|-------------------------------------------+---------------------------------| 7913|-------------------------------------------+---------------------------------|
7914|Installs .desktop files under share/ |See Section 21.6.17, "Packages | 7914|Installs .desktop files under share/ |See Section 21.6.17, "Packages |
7915|applications and these include MIME |installing desktop files". | 7915|applications and these include MIME |installing desktop files". |
7916|information. | | 7916|information. | |
7917+-----------------------------------------------------------------------------+ 7917+-----------------------------------------------------------------------------+
7918 7918
7919 7919
792022.3. Updating GNOME to a newer version 792022.3. Updating GNOME to a newer version
7921 7921
7922When seeing GNOME as a whole, there are two kinds of updates: 7922When seeing GNOME as a whole, there are two kinds of updates:
7923 7923
7924Major update 7924Major update
7925 7925
7926 Given that there is still a very long way for GNOME 3 (if it ever appears), 7926 Given that there is still a very long way for GNOME 3 (if it ever appears),
7927 we consider a major update one that goes from a 2.X version to a 2.Y one, 7927 we consider a major update one that goes from a 2.X version to a 2.Y one,
7928 where Y is even and greater than X. These are hard to achieve because they 7928 where Y is even and greater than X. These are hard to achieve because they
7929 introduce lots of changes in the components' code and almost all GNOME 7929 introduce lots of changes in the components' code and almost all GNOME
7930 distfiles are updated to newer versions. Some of them can even break API 7930 distfiles are updated to newer versions. Some of them can even break API
7931 and ABI compatibility with the previous major version series. As a result, 7931 and ABI compatibility with the previous major version series. As a result,
7932 the update needs to be done all at once to minimize breakage. 7932 the update needs to be done all at once to minimize breakage.
7933 7933
7934 A major update typically consists of around 80 package updates and the 7934 A major update typically consists of around 80 package updates and the
7935 addition of some new ones. 7935 addition of some new ones.
7936 7936
7937Minor update 7937Minor update
7938 7938
7939 We consider a minor update one that goes from a 2.A.X version to a 2.A.Y 7939 We consider a minor update one that goes from a 2.A.X version to a 2.A.Y
7940 one where Y is greater than X. These are easy to achieve because they do 7940 one where Y is greater than X. These are easy to achieve because they do
7941 not update all GNOME components, can be done in an incremental way and do 7941 not update all GNOME components, can be done in an incremental way and do
7942 not break API nor ABI compatibility. 7942 not break API nor ABI compatibility.
7943 7943
7944 A minor update typically consists of around 50 package updates, although 7944 A minor update typically consists of around 50 package updates, although
7945 the numbers here may vary a lot. 7945 the numbers here may vary a lot.
7946 7946
7947In order to update the GNOME components in pkgsrc to a new stable release 7947In order to update the GNOME components in pkgsrc to a new stable release
7948(either major or minor), the following steps should be followed: 7948(either major or minor), the following steps should be followed:
7949 7949
7950 1. Get a list of all the tarballs that form the new release by using the 7950 1. Get a list of all the tarballs that form the new release by using the
7951 following commands. These will leave the full list of the components' 7951 following commands. These will leave the full list of the components'
7952 distfiles into the list.txt file: 7952 distfiles into the list.txt file:
7953 7953
7954 % echo ls "*.tar.bz2" | \ 7954 % echo ls "*.tar.bz2" | \
7955 ftp -V ftp://ftp.gnome.org/pub/gnome/platform/x.y/x.y.z/sources/ | \ 7955 ftp -V ftp://ftp.gnome.org/pub/gnome/platform/x.y/x.y.z/sources/ | \
7956 awk '{ print $9 }' >list.txt 7956 awk '{ print $9 }' >list.txt
7957 % echo ls "*.tar.bz2" | \ 7957 % echo ls "*.tar.bz2" | \
7958 ftp -V ftp://ftp.gnome.org/pub/gnome/desktop/x.y/x.y.z/sources/ | \ 7958 ftp -V ftp://ftp.gnome.org/pub/gnome/desktop/x.y/x.y.z/sources/ | \
7959 awk '{ print $9 }' >>list.txt 7959 awk '{ print $9 }' >>list.txt
7960 7960
7961 2. Open each meta package's Makefile and bump their version to the release you 7961 2. Open each meta package's Makefile and bump their version to the release you
7962 are updating them to. The three meta packages should be always consistent 7962 are updating them to. The three meta packages should be always consistent
7963 with versioning. Obviously remove any PKGREVISIONs that might be in them. 7963 with versioning. Obviously remove any PKGREVISIONs that might be in them.
7964 7964
7965 3. For each meta package, update all its DEPENDS lines to match the latest 7965 3. For each meta package, update all its DEPENDS lines to match the latest
7966 versions as shown by the above commands. Do not list any newer version 7966 versions as shown by the above commands. Do not list any newer version
7967 (even if found in the FTP) because the meta packages are supposed to list 7967 (even if found in the FTP) because the meta packages are supposed to list
7968 the exact versions that form a specific GNOME release. Exceptions are 7968 the exact versions that form a specific GNOME release. Exceptions are
7969 permitted here if a newer version solves a serious issue in the overall 7969 permitted here if a newer version solves a serious issue in the overall
7970 desktop experience; these typically come in the form of a revision bump in 7970 desktop experience; these typically come in the form of a revision bump in
7971 pkgsrc, not in newer versions from the developers. 7971 pkgsrc, not in newer versions from the developers.
7972 7972
7973 Packages not listed in the list.txt file should be updated to the latest 7973 Packages not listed in the list.txt file should be updated to the latest
7974 version available (if found in pkgsrc). This is the case, for example, of 7974 version available (if found in pkgsrc). This is the case, for example, of
7975 the dependencies on the GNU Autotools in the meta-pkgs/gnome-devel meta 7975 the dependencies on the GNU Autotools in the meta-pkgs/gnome-devel meta
7976 package. 7976 package.
7977 7977
7978 4. Generate a patch from the modified meta packages and extract the list of 7978 4. Generate a patch from the modified meta packages and extract the list of
7979 "new" lines. This will provide you an outline on what packages need to be 7979 "new" lines. This will provide you an outline on what packages need to be
7980 updated in pkgsrc and in what order: 7980 updated in pkgsrc and in what order:
7981 7981
7982 % cvs diff -u gnome-devel gnome-base gnome | grep '^+D' >todo.txt 7982 % cvs diff -u gnome-devel gnome-base gnome | grep '^+D' >todo.txt
7983 7983
7984 5. For major desktop updates it is recommended to zap all your installed 7984 5. For major desktop updates it is recommended to zap all your installed
7985 packages and start over from scratch at this point. 7985 packages and start over from scratch at this point.
7986 7986
7987 6. Now comes the longest step by far: iterate over the contents of todo.txt 7987 6. Now comes the longest step by far: iterate over the contents of todo.txt
7988 and update the packages listed in it in order. For major desktop updates 7988 and update the packages listed in it in order. For major desktop updates
7989 none of these should be committed until the entire set is completed because 7989 none of these should be committed until the entire set is completed because
7990 there are chances of breaking not-yet-updated packages. 7990 there are chances of breaking not-yet-updated packages.
7991 7991
7992 7. Once the packages are up to date and working, commit them to the tree one 7992 7. Once the packages are up to date and working, commit them to the tree one
7993 by one with appropriate log messages. At the end, commit the three meta 7993 by one with appropriate log messages. At the end, commit the three meta
7994 package updates and all the corresponding changes to the doc/CHANGES-<YEAR> 7994 package updates and all the corresponding changes to the doc/CHANGES-<YEAR>
7995 and pkgsrc/doc/TODO files. 7995 and pkgsrc/doc/TODO files.
7996 7996
799722.4. Patching guidelines 799722.4. Patching guidelines
7998 7998
7999GNOME is a very big component in pkgsrc which approaches 100 packages. Please, 7999GNOME is a very big component in pkgsrc which approaches 100 packages. Please,
8000it is very important that you always, always, always feed back any portability 8000it is very important that you always, always, always feed back any portability
8001fixes you do to a GNOME package to the mainstream developers (see 8001fixes you do to a GNOME package to the mainstream developers (see
8002Section 12.3.5, "Feedback to the author"). This is the only way to get their 8002Section 12.3.5, "Feedback to the author"). This is the only way to get their
8003attention on portability issues and to ensure that future versions can be built 8003attention on portability issues and to ensure that future versions can be built
8004out-of-the box on NetBSD. The less custom patches in pkgsrc, the easier further 8004out-of-the box on NetBSD. The less custom patches in pkgsrc, the easier further
8005updates are. Those developers in charge of issuing major GNOME updates will be 8005updates are. Those developers in charge of issuing major GNOME updates will be
8006grateful if you do that. 8006grateful if you do that.
8007 8007
8008The most common places to report bugs are the GNOME's GitLab and the 8008The most common places to report bugs are the GNOME's GitLab and the
8009freedesktop.org's GitLab. Not all components use these to track bugs, but most 8009freedesktop.org's GitLab. Not all components use these to track bugs, but most
8010of them do. Do not be short on your reports: always provide detailed 8010of them do. Do not be short on your reports: always provide detailed
8011explanations of the current failure, how it can be improved to achieve maximum 8011explanations of the current failure, how it can be improved to achieve maximum
8012portability and, if at all possible, provide a patch against the main Git 8012portability and, if at all possible, provide a patch against the main Git
8013branch. The more verbose you are, the higher chances of your patch being 8013branch. The more verbose you are, the higher chances of your patch being
8014accepted. 8014accepted.
8015 8015
8016Also, please avoid using preprocessor magic to fix portability issues. While 8016Also, please avoid using preprocessor magic to fix portability issues. While
8017the FreeBSD GNOME people are doing a great job in porting GNOME to their 8017the FreeBSD GNOME people are doing a great job in porting GNOME to their
8018operating system, the official GNOME sources are now plagued by conditionals 8018operating system, the official GNOME sources are now plagued by conditionals
8019that check for __FreeBSD__ and similar macros. This hurts portability. Please 8019that check for __FreeBSD__ and similar macros. This hurts portability. Please
8020see our patching guidelines (Section 12.3.4, "Patching guidelines") for more 8020see our patching guidelines (Section 12.3.4, "Patching guidelines") for more
8021details. 8021details.
8022 8022
8023Chapter 23. Submitting and Committing 8023Chapter 23. Submitting and Committing
8024 8024
8025Table of Contents 8025Table of Contents
8026 8026
802723.1. Submitting binary packages 802723.1. Submitting binary packages
802823.2. Submitting source packages (for non-NetBSD-developers) 802823.2. Submitting source packages (for non-NetBSD-developers)
802923.3. General notes when adding, updating, or removing packages 802923.3. General notes when adding, updating, or removing packages
803023.4. Commit Messages 803023.4. Commit Messages
803123.5. Committing: Adding a package to CVS 803123.5. Committing: Adding a package to CVS
803223.6. Updating a package to a newer version 803223.6. Updating a package to a newer version
803323.7. Renaming a package in pkgsrc 803323.7. Renaming a package in pkgsrc
803423.8. Moving a package in pkgsrc 803423.8. Moving a package in pkgsrc
8035 8035
803623.1. Submitting binary packages 803623.1. Submitting binary packages
8037 8037
8038Our policy is that we accept binaries only from pkgsrc developers to guarantee 8038Our policy is that we accept binaries only from pkgsrc developers to guarantee
8039that the packages don't contain any trojan horses etc. This is not to annoy 8039that the packages don't contain any trojan horses etc. This is not to annoy
8040anyone but rather to protect our users! You're still free to put up your 8040anyone but rather to protect our users! You're still free to put up your
8041home-made binary packages and tell the world where to get them. NetBSD 8041home-made binary packages and tell the world where to get them. NetBSD
8042developers doing bulk builds and wanting to upload them please see Chapter 8,  8042developers doing bulk builds and wanting to upload them please see Chapter 8,
8043Creating binary packages for everything in pkgsrc (bulk builds). 8043Creating binary packages for everything in pkgsrc (bulk builds).
8044 8044
804523.2. Submitting source packages (for non-NetBSD-developers) 804523.2. Submitting source packages (for non-NetBSD-developers)
8046 8046
8047Firstly, you can import new packages into pkgsrc-wip ("pkgsrc work-in-progress" 8047Firstly, you can import new packages into pkgsrc-wip ("pkgsrc work-in-progress"
8048); see the homepage at https://pkgsrc.org/wip/ for details. 8048); see the homepage at https://pkgsrc.org/wip/ for details.
8049 8049
8050Next, check that your package is complete, compiles and runs well; see 8050Next, check that your package is complete, compiles and runs well; see
8051Chapter 14, Creating a new pkgsrc package from scratch and the rest of this 8051Chapter 14, Creating a new pkgsrc package from scratch and the rest of this
8052document. Run the pkgtools/pkglint tool and fix any errors that appear. 8052document. Run the pkgtools/pkglint tool and fix any errors that appear.
8053 8053
8054Finally, send a report to the pkgsrc bug tracking system, either with the 8054Finally, send a report to the pkgsrc bug tracking system, either with the
8055send-pr(1) command, or if you don't have that, go to the web page https:// 8055send-pr(1) command, or if you don't have that, go to the web page https://
8056www.NetBSD.org/support/send-pr.html, which contains some instructions and a 8056www.NetBSD.org/support/send-pr.html, which contains some instructions and a
8057link to a form where you can submit packages. The sysutils/gtk-send-pr package 8057link to a form where you can submit packages. The sysutils/gtk-send-pr package
8058is also available as a substitute for either of the above two tools. 8058is also available as a substitute for either of the above two tools.
8059 8059
8060In the form of the problem report, the category should be "pkg", the synopsis 8060In the form of the problem report, the category should be "pkg", the synopsis
8061should include the package name and version number, and the description field 8061should include the package name and version number, and the description field
8062should contain a short description of your package (contents of the COMMENT 8062should contain a short description of your package (contents of the COMMENT
8063variable or DESCR file are OK). 8063variable or DESCR file are OK).
8064 8064
806523.3. General notes when adding, updating, or removing packages 806523.3. General notes when adding, updating, or removing packages
8066 8066
8067Please note all package additions, updates, moves, and removals in pkgsrc/doc/ 8067Please note all package additions, updates, moves, and removals in pkgsrc/doc/
8068CHANGES-YYYY. It's very important to keep this file up to date and conforming 8068CHANGES-YYYY. It's very important to keep this file up to date and conforming
8069to the existing format, because it will be used by scripts to automatically 8069to the existing format, because it will be used by scripts to automatically
8070update pages on www.NetBSD.org and other sites. Additionally, check the pkgsrc/ 8070update pages on www.NetBSD.org and other sites. Additionally, check the pkgsrc/
8071doc/TODO file and remove the entry for the package you updated or removed, in 8071doc/TODO file and remove the entry for the package you updated or removed, in
8072case it was mentioned there. 8072case it was mentioned there.
8073 8073
8074When the PKGREVISION of a package is bumped, the change should appear in pkgsrc 8074When the PKGREVISION of a package is bumped, the change should appear in pkgsrc
8075/doc/CHANGES-YYYY if it is security related or otherwise relevant. Mass bumps 8075/doc/CHANGES-YYYY if it is security related or otherwise relevant. Mass bumps
8076that result from a dependency being updated should not be mentioned. In all 8076that result from a dependency being updated should not be mentioned. In all
8077other cases it's the developer's decision. 8077other cases it's the developer's decision.
8078 8078
8079There is a make target that helps in creating proper CHANGES-YYYY entries: make 8079There is a make target that helps in creating proper CHANGES-YYYY entries: make
8080changes-entry. It uses the optional CTYPE and NETBSD_LOGIN_NAME variables. The 8080changes-entry. It uses the optional CTYPE and NETBSD_LOGIN_NAME variables. The
8081general usage is to first make sure that your CHANGES-YYYY file is up-to-date 8081general usage is to first make sure that your CHANGES-YYYY file is up-to-date
8082(to avoid having to resolve conflicts later-on) and then to cd to the package 8082(to avoid having to resolve conflicts later-on) and then to cd to the package
8083directory. For package updates, make changes-entry is enough. For new packages, 8083directory. For package updates, make changes-entry is enough. For new packages,
8084or package moves or removals, set the CTYPE variable on the command line to 8084or package moves or removals, set the CTYPE variable on the command line to
8085"Added", "Moved", or "Removed". You can set NETBSD_LOGIN_NAME in mk.conf if 8085"Added", "Moved", or "Removed". You can set NETBSD_LOGIN_NAME in mk.conf if
8086your local login name is not the same as your NetBSD login name. The target 8086your local login name is not the same as your NetBSD login name. The target
8087also automatically removes possibly existing entries for the package in the 8087also automatically removes possibly existing entries for the package in the
8088TODO file. Don't forget to commit the changes, e.g. by using make 8088TODO file. Don't forget to commit the changes, e.g. by using make
8089commit-changes-entry! If you are not using a checkout directly from 8089commit-changes-entry! If you are not using a checkout directly from
8090cvs.NetBSD.org, but e.g. a local copy of the repository, you can set 8090cvs.NetBSD.org, but e.g. a local copy of the repository, you can set
8091USE_NETBSD_REPO=yes. This makes the cvs commands use the main repository. 8091USE_NETBSD_REPO=yes. This makes the cvs commands use the main repository.
8092 8092
809323.4. Commit Messages 809323.4. Commit Messages
8094 8094
8095For several years, there have been mirrors of pkgsrc in fossil, git, and hg. 8095For several years, there have been mirrors of pkgsrc in fossil, git, and hg.
8096Standard practise when using these tools is to make the first line of a commit 8096Standard practise when using these tools is to make the first line of a commit
8097message function as a summary that can be read without the rest, such as is 8097message function as a summary that can be read without the rest, such as is
8098commonly done with "git log --oneline". For this reason, we have the following 8098commonly done with "git log --oneline". For this reason, we have the following
8099guidelines for pkgsrc commit messages: 8099guidelines for pkgsrc commit messages:
8100 8100
8101 * Start the commit message with a line that explains the big picture in 65 8101 * Start the commit message with a line that explains the big picture in 65
8102 characters or less. When a commit is for one package, include the name of 8102 characters or less. When a commit is for one package, include the name of
8103 the package. For updates, include the version to which it is updated. 8103 the package. For updates, include the version to which it is updated.
8104 8104
8105 * Leave the next line empty. 8105 * Leave the next line empty.
8106 8106
8107 * Then come the details for the commit (changes in that package, reason for a 8107 * Then come the details for the commit (changes in that package, reason for a
8108 change) and any relevant PRs. Wrap this section. 8108 change) and any relevant PRs. Wrap this section.
8109 8109
8110Here is an example: 8110Here is an example:
8111 8111
8112 libxslt: update to 1.0.30 8112 libxslt: update to 1.0.30
8113 8113
8114 Changes since 1.0.29: 8114 Changes since 1.0.29:
8115 ... 8115 ...
8116 8116
8117 8117
8118Here is another example: 8118Here is another example:
8119 8119
8120 mk/bsd.pkg.mk: enable SSP by default on NetBSD 8120 mk/bsd.pkg.mk: enable SSP by default on NetBSD
8121 8121
8122 (rationale) 8122 (rationale)
8123 8123
8124 8124
8125Commit messages are final: no "cvs admin" is allowed on the pkgsrc repository 8125Commit messages are final: no "cvs admin" is allowed on the pkgsrc repository
8126to change commit messages. 8126to change commit messages.
8127 8127
812823.5. Committing: Adding a package to CVS 812823.5. Committing: Adding a package to CVS
8129 8129
8130This section is only of interest for pkgsrc developers with write access to the 8130This section is only of interest for pkgsrc developers with write access to the
8131pkgsrc repository. 8131pkgsrc repository.
8132 8132
8133When the package is finished, "cvs add" the files. Start by adding the 8133When the package is finished, "cvs add" the files. Start by adding the
8134directory and then files in the directory. Don't forget to add the new package 8134directory and then files in the directory. Don't forget to add the new package
8135to the category's Makefile. Make sure you don't forget any files; you can check 8135to the category's Makefile. Make sure you don't forget any files; you can check
8136by running "cvs status". An example: 8136by running "cvs status". An example:
8137 8137
8138$ cd .../pkgsrc/category 8138$ cd .../pkgsrc/category
8139$ cvs add pkgname 8139$ cvs add pkgname
@@ -8576,1815 +8576,1782 @@ assigned using the := operator, which sh @@ -8576,1815 +8576,1782 @@ assigned using the := operator, which sh
857625.5.2. Actions taken on behalf of parameters 857625.5.2. Actions taken on behalf of parameters
8577 8577
8578Action files take some input parameters and may define runtime variables. They 8578Action files take some input parameters and may define runtime variables. They
8579shall not define loadtime variables. There are action files that are included 8579shall not define loadtime variables. There are action files that are included
8580implicitly by the pkgsrc infrastructure, while other must be included 8580implicitly by the pkgsrc infrastructure, while other must be included
8581explicitly. 8581explicitly.
8582 8582
8583An example for action files is mk/subst.mk. 8583An example for action files is mk/subst.mk.
8584 8584
858525.6. The order in which files are loaded 858525.6. The order in which files are loaded
8586 8586
8587Package Makefiles usually consist of a set of variable definitions, and include 8587Package Makefiles usually consist of a set of variable definitions, and include
8588the file ../../mk/bsd.pkg.mk in the very last line. Before that, they may also 8588the file ../../mk/bsd.pkg.mk in the very last line. Before that, they may also
8589include various other *.mk files if they need to query the availability of 8589include various other *.mk files if they need to query the availability of
8590certain features like the type of compiler or the X11 implementation. Due to 8590certain features like the type of compiler or the X11 implementation. Due to
8591the heavy use of preprocessor directives like .if and .for, the order in which 8591the heavy use of preprocessor directives like .if and .for, the order in which
8592the files are loaded matters. 8592the files are loaded matters.
8593 8593
8594This section describes at which point the various files are loaded and gives 8594This section describes at which point the various files are loaded and gives
8595reasons for that order. 8595reasons for that order.
8596 8596
859725.6.1. The order in bsd.prefs.mk 859725.6.1. The order in bsd.prefs.mk
8598 8598
8599The very first action in bsd.prefs.mk is to define some essential variables 8599The very first action in bsd.prefs.mk is to define some essential variables
8600like OPSYS, OS_VERSION and MACHINE_ARCH. 8600like OPSYS, OS_VERSION and MACHINE_ARCH.
8601 8601
8602Then, the user settings are loaded from the file specified in MAKECONF, which 8602Then, the user settings are loaded from the file specified in MAKECONF, which
8603is usually mk.conf. After that, those variables that have not been overridden 8603is usually mk.conf. After that, those variables that have not been overridden
8604by the user are loaded from mk/defaults/mk.conf. 8604by the user are loaded from mk/defaults/mk.conf.
8605 8605
8606After the user settings, the system settings and platform settings are loaded, 8606After the user settings, the system settings and platform settings are loaded,
8607which may override the user settings. 8607which may override the user settings.
8608 8608
8609Then, the tool definitions are loaded. The tool wrappers are not yet in effect. 8609Then, the tool definitions are loaded. The tool wrappers are not yet in effect.
8610This only happens when building a package, so the proper variables must be used 8610This only happens when building a package, so the proper variables must be used
8611instead of the direct tool names. 8611instead of the direct tool names.
8612 8612
8613As the last steps, some essential variables from the wrapper and the package 8613As the last steps, some essential variables from the wrapper and the package
8614system flavor are loaded, as well as the variables that have been cached in 8614system flavor are loaded, as well as the variables that have been cached in
8615earlier phases of a package build. 8615earlier phases of a package build.
8616 8616
861725.6.2. The order in bsd.pkg.mk 861725.6.2. The order in bsd.pkg.mk
8618 8618
8619First, bsd.prefs.mk is loaded. 8619First, bsd.prefs.mk is loaded.
8620 8620
8621Then, the various *-vars.mk files are loaded, which fill default values for 8621Then, the various *-vars.mk files are loaded, which fill default values for
8622those variables that have not been defined by the package. These variables may 8622those variables that have not been defined by the package. These variables may
8623later be used even in unrelated files. 8623later be used even in unrelated files.
8624 8624
8625Then, the file bsd.pkg.error.mk provides the target error-check that is added 8625Then, the file bsd.pkg.error.mk provides the target error-check that is added
8626as a special dependency to all other targets that use DELAYED_ERROR_MSG or 8626as a special dependency to all other targets that use DELAYED_ERROR_MSG or
8627DELAYED_WARNING_MSG. 8627DELAYED_WARNING_MSG.
8628 8628
8629Then, the package-specific hacks from hacks.mk are included. 8629Then, the package-specific hacks from hacks.mk are included.
8630 8630
8631Then, various other files follow. Most of them don't have any dependencies on 8631Then, various other files follow. Most of them don't have any dependencies on
8632what they need to have included before or after them, though some do. 8632what they need to have included before or after them, though some do.
8633 8633
8634The code to check PKG_FAIL_REASON and PKG_SKIP_REASON is then executed, which 8634The code to check PKG_FAIL_REASON and PKG_SKIP_REASON is then executed, which
8635restricts the use of these variables to all the files that have been included 8635restricts the use of these variables to all the files that have been included
8636before. Appearances in later files will be silently ignored. 8636before. Appearances in later files will be silently ignored.
8637 8637
8638Then, the files for the main targets are included, in the order of later 8638Then, the files for the main targets are included, in the order of later
8639execution, though the actual order should not matter. 8639execution, though the actual order should not matter.
8640 8640
8641At last, some more files are included that don't set any interesting variables 8641At last, some more files are included that don't set any interesting variables
8642but rather just define make targets to be executed. 8642but rather just define make targets to be executed.
8643 8643
8644Chapter 26. Regression tests 8644Chapter 26. Regression tests
8645 8645
8646Table of Contents 8646Table of Contents
8647 8647
864826.1. Running the regression tests 864826.1. Running the regression tests
864926.2. Adding a new regression test 864926.2. Adding a new regression test
8650 8650
8651 26.2.1. Overridable functions 8651 26.2.1. Overridable functions
8652 26.2.2. Helper functions 8652 26.2.2. Helper functions
8653 8653
8654The pkgsrc infrastructure consists of a large codebase, and there are many 8654The pkgsrc infrastructure consists of a large codebase, and there are many
8655corners where every little bit of a file is well thought out, making pkgsrc 8655corners where every little bit of a file is well thought out, making pkgsrc
8656likely to fail as soon as anything is changed near those parts. To prevent most 8656likely to fail as soon as anything is changed near those parts. To prevent most
8657changes from breaking anything, a suite of regression tests should go along 8657changes from breaking anything, a suite of regression tests should go along
8658with every important part of the pkgsrc infrastructure. This chapter describes 8658with every important part of the pkgsrc infrastructure. This chapter describes
8659how regression tests work in pkgsrc and how you can add new tests. 8659how regression tests work in pkgsrc and how you can add new tests.
8660 8660
866126.1. Running the regression tests 866126.1. Running the regression tests
8662 8662
8663You first need to install the pkgtools/pkg_regress package, which provides the  8663You first need to install the pkgtools/pkg_regress package, which provides the
8664pkg_regress command. Then you can simply run that command, which will run all 8664pkg_regress command. Then you can simply run that command, which will run all
8665tests in the regress/ directory. 8665tests in the regress/ directory.
8666 8666
866726.2. Adding a new regression test 866726.2. Adding a new regression test
8668 8668
8669Every directory in the regress/ directory that contains a file called spec is 8669Every directory in the regress/ directory that contains a file called spec is
8670considered a regression test. This file is a shell program that is included by 8670considered a regression test. This file is a shell program that is included by
8671the pkg_regress command. The following functions can be overridden to suit your 8671the pkg_regress command. The following functions can be overridden to suit your
8672needs. 8672needs.
8673 8673
867426.2.1. Overridable functions 867426.2.1. Overridable functions
8675 8675
8676These functions do not take any parameters. Although they are called in "set -e 8676These functions do not take any parameters. Although they are called in "set -e
8677" mode, they don't stop at the first failing command. See this Stack Overflow 8677" mode, they don't stop at the first failing command. See this Stack Overflow
8678question for details. 8678question for details.
8679 8679
8680do_setup 8680do_setup
8681 8681
8682 This function prepares the environment for the test. By default it does 8682 This function prepares the environment for the test. By default it does
8683 nothing. 8683 nothing.
8684 8684
8685do_test 8685do_test
8686 8686
8687 This function runs the actual test. By default, it calls TEST_MAKE with the 8687 This function runs the actual test. By default, it calls TEST_MAKE with the
8688 arguments MAKEARGS_TEST and writes its output including error messages into 8688 arguments MAKEARGS_TEST and writes its output including error messages into
8689 the file TEST_OUTFILE. 8689 the file TEST_OUTFILE.
8690 8690
8691 When defining this function, make sure that all output that needs to be 8691 When defining this function, make sure that all output that needs to be
8692 checked is written to the correct output file. Example: 8692 checked is written to the correct output file. Example:
8693 8693
8694 do_test() { 8694 do_test() {
8695 echo "Example output" 8695 echo "Example output"
8696 } 1>$TEST_OUTFILE 2>&1 8696 } 1>$TEST_OUTFILE 2>&1
8697 8697
8698check_result 8698check_result
8699 8699
8700 This function is run after the test and is typically used to compare the 8700 This function is run after the test and is typically used to compare the
8701 actual output from the one that is expected. It can make use of the various 8701 actual output from the one that is expected. It can make use of the various
8702 helper functions from the next section. Example: 8702 helper functions from the next section. Example:
8703 8703
8704 check_result() { 8704 check_result() {
8705 exit_status 0 8705 exit_status 0
8706 output_require "Example" 8706 output_require "Example"
8707 output_require "^[[:alpha:]+[[:space:]][[:alpha:]]{6}$" 8707 output_require "^[[:alpha:]+[[:space:]][[:alpha:]]{6}$"
8708 output_prohibit "no such file or directory" 8708 output_prohibit "no such file or directory"
8709 regress_fail "expected $expected but got $actual for input $input" 8709 regress_fail "expected $expected but got $actual for input $input"
8710 } 8710 }
8711 8711
8712do_cleanup 8712do_cleanup
8713 8713
8714 This function cleans everything up after the test has been run. By default 8714 This function cleans everything up after the test has been run. By default
8715 it does nothing. 8715 it does nothing.
8716 8716
871726.2.2. Helper functions 871726.2.2. Helper functions
8718 8718
8719regress_fail message... 8719regress_fail message...
8720 8720
8721 This function makes the test fail with the given error message. 8721 This function makes the test fail with the given error message.
8722 8722
8723exit_status expected 8723exit_status expected
8724 8724
8725 This function compares the exitcode of the do_test function with its first 8725 This function compares the exitcode of the do_test function with its first
8726 parameter. If they differ, the test will fail. 8726 parameter. If they differ, the test will fail.
8727 8727
8728output_require regex... 8728output_require regex...
8729 8729
8730 This function checks for each of its parameters if the output from do_test 8730 This function checks for each of its parameters if the output from do_test
8731 matches the extended regular expression. If it does not, the test will 8731 matches the extended regular expression. If it does not, the test will
8732 fail. Example: 8732 fail. Example:
8733 8733
8734 output_require "looks fine" 8734 output_require "looks fine"
8735 output_require "^[[:alpha:]+[[:space:]][[:alpha:]]{6}$" 8735 output_require "^[[:alpha:]+[[:space:]][[:alpha:]]{6}$"
8736 8736
8737output_prohibit regex... 8737output_prohibit regex...
8738 8738
8739 This function checks for each of its parameters if the output from do_test 8739 This function checks for each of its parameters if the output from do_test
8740 () does not match the extended regular expression. If any of the regular 8740 () does not match the extended regular expression. If any of the regular
8741 expressions matches, the test will fail. 8741 expressions matches, the test will fail.
8742 8742
8743Chapter 27. Porting pkgsrc 8743Chapter 27. Porting pkgsrc
8744 8744
8745Table of Contents 8745Table of Contents
8746 8746
874727.1. Porting pkgsrc to a new operating system 874727.1. Porting pkgsrc to a new operating system
8748 8748
8749The pkgsrc system has already been ported to many operating systems, hardware 8749The pkgsrc system has already been ported to many operating systems, hardware
8750architectures and compilers. This chapter explains the necessary steps to make 8750architectures and compilers. This chapter explains the necessary steps to make
8751pkgsrc even more portable. 8751pkgsrc even more portable.
8752 8752
875327.1. Porting pkgsrc to a new operating system 875327.1. Porting pkgsrc to a new operating system
8754 8754
8755To port pkgsrc to a new operating system (called MyOS in this example), you 8755To port pkgsrc to a new operating system (called MyOS in this example), you
8756need to touch the following files: 8756need to touch the following files:
8757 8757
8758pkgtools/bootstrap-mk-files/files/mods/MyOS.sys.mk 8758pkgtools/bootstrap-mk-files/files/mods/MyOS.sys.mk
8759 8759
8760 This file contains some basic definitions, for example the name of the C 8760 This file contains some basic definitions, for example the name of the C
8761 compiler. 8761 compiler.
8762 8762
8763mk/bsd.prefs.mk 8763mk/bsd.prefs.mk
8764 8764
8765 Insert code that defines the variables OPSYS, OS_VERSION, OPSYS_VERSION, 8765 Insert code that defines the variables OPSYS, OS_VERSION, OPSYS_VERSION,
8766 LOWER_VENDOR, MACHINE_ARCH, OBJECT_FMT, APPEND_ELF, and the other variables 8766 LOWER_VENDOR, MACHINE_ARCH, OBJECT_FMT, APPEND_ELF, and the other variables
8767 that appear in this file. 8767 that appear in this file.
8768 8768
8769mk/platform/MyOS.mk 8769mk/platform/MyOS.mk
8770 8770
8771 This file contains the platform-specific definitions that are used by 8771 This file contains the platform-specific definitions that are used by
8772 pkgsrc. Start by copying one of the other files and edit it to your needs. 8772 pkgsrc. Start by copying one of the other files and edit it to your needs.
8773 8773
8774mk/tools/tools.MyOS.mk 8774mk/tools/tools.MyOS.mk
8775 8775
8776 This file defines the paths to all the tools that are needed by one or the 8776 This file defines the paths to all the tools that are needed by one or the
8777 other package in pkgsrc, as well as by pkgsrc itself. Find out where these 8777 other package in pkgsrc, as well as by pkgsrc itself. Find out where these
8778 tools are on your platform and add them. 8778 tools are on your platform and add them.
8779 8779
8780Now, you should be able to build some basic packages, like lang/perl5, shells/ 8780Now, you should be able to build some basic packages, like lang/perl5, shells/
8781bash. 8781bash.
8782 8782
8783Appendix A. A simple example package: bison 8783Appendix A. A simple example package: bison
8784 8784
8785Table of Contents 8785Table of Contents
8786 8786
8787A.1. files 8787A.1. files
8788 8788
8789 A.1.1. Makefile 8789 A.1.1. Makefile
8790 A.1.2. DESCR 8790 A.1.2. DESCR
8791 A.1.3. PLIST 8791 A.1.3. PLIST
8792 A.1.4. Checking a package with pkglint 8792 A.1.4. Checking a package with pkglint
8793 8793
8794A.2. Steps for building, installing, packaging 8794A.2. Steps for building, installing, packaging
8795 8795
8796We checked to find a piece of software that wasn't in the packages collection, 8796We checked to find a piece of software that wasn't in the packages collection,
8797and picked GNU bison. Quite why someone would want to have bison when Berkeley  8797and picked GNU bison. Quite why someone would want to have bison when Berkeley
8798yacc is already present in the tree is beyond us, but it's useful for the 8798yacc is already present in the tree is beyond us, but it's useful for the
8799purposes of this exercise. 8799purposes of this exercise.
8800 8800
8801A.1. files 8801A.1. files
8802 8802
8803A.1.1. Makefile 8803A.1.1. Makefile
8804 8804
8805# $NetBSD$ 8805# $NetBSD$
8806# 8806#
8807 8807
8808DISTNAME= bison-1.25 8808DISTNAME= bison-1.25
8809CATEGORIES= devel 8809CATEGORIES= devel
8810MASTER_SITES= ${MASTER_SITE_GNU:=bison/} 8810MASTER_SITES= ${MASTER_SITE_GNU:=bison/}
8811 8811
8812MAINTAINER= pkgsrc-users@NetBSD.org 8812MAINTAINER= pkgsrc-users@NetBSD.org
8813HOMEPAGE= https://www.gnu.org/software/bison/bison.html 8813HOMEPAGE= https://www.gnu.org/software/bison/bison.html
8814COMMENT= GNU yacc clone 8814COMMENT= GNU yacc clone
8815 8815
8816GNU_CONFIGURE= yes 8816GNU_CONFIGURE= yes
8817INFO_FILES= yes 8817INFO_FILES= yes
8818 8818
8819.include "../../mk/bsd.pkg.mk" 8819.include "../../mk/bsd.pkg.mk"
8820 8820
8821A.1.2. DESCR 8821A.1.2. DESCR
8822 8822
8823GNU version of yacc. Can make re-entrant parsers, and numerous other 8823GNU version of yacc. Can make re-entrant parsers, and numerous other
8824improvements. Why you would want this when Berkeley yacc(1) is part 8824improvements. Why you would want this when Berkeley yacc(1) is part
8825of the NetBSD source tree is beyond me. 8825of the NetBSD source tree is beyond me.
8826 8826
8827A.1.3. PLIST 8827A.1.3. PLIST
8828 8828
8829@comment $NetBSD$ 8829@comment $NetBSD$
8830bin/bison 8830bin/bison
8831man/man1/bison.1.gz 8831man/man1/bison.1.gz
8832share/bison.simple 8832share/bison.simple
8833share/bison.hairy 8833share/bison.hairy
8834 8834
8835A.1.4. Checking a package with pkglint 8835A.1.4. Checking a package with pkglint
8836 8836
8837The NetBSD package system comes with pkgtools/pkglint which helps to check the 8837The NetBSD package system comes with pkgtools/pkglint which helps to check the
8838contents of these files. After installation it is quite easy to use, just 8838contents of these files. After installation it is quite easy to use, just
8839change to the directory of the package you wish to examine and run pkglint: 8839change to the directory of the package you wish to examine and run pkglint:
8840 8840
8841$ pkglint 8841$ pkglint
8842ERROR: Makefile: Each package must define its LICENSE. 8842ERROR: Makefile: Each package must define its LICENSE.
8843WARN: Makefile:9: HOMEPAGE should migrate from http to https. 8843WARN: Makefile:9: HOMEPAGE should migrate from http to https.
8844NOTE: PLIST:3: The .gz extension is unnecessary for manual pages. 8844NOTE: PLIST:3: The .gz extension is unnecessary for manual pages.
8845WARN: PLIST:5: "share/bison.hairy" should be sorted before "share/bison.simple". 8845WARN: PLIST:5: "share/bison.hairy" should be sorted before "share/bison.simple".
88461 error, 2 warnings and 1 note found. 88461 error, 2 warnings and 1 note found.
8847(Run "pkglint -e" to show explanations.) 8847(Run "pkglint -e" to show explanations.)
8848(Run "pkglint -fs" to show what can be fixed automatically.) 8848(Run "pkglint -fs" to show what can be fixed automatically.)
8849(Run "pkglint -F" to automatically fix some issues.) 8849(Run "pkglint -F" to automatically fix some issues.)
8850 8850
8851Depending on the supplied command line arguments (see pkglint(1)), more checks 8851Depending on the supplied command line arguments (see pkglint(1)), more checks
8852will be performed. Use e.g. pkglint -Wall for a very thorough check. 8852will be performed. Use e.g. pkglint -Wall for a very thorough check.
8853 8853
8854A.2. Steps for building, installing, packaging 8854A.2. Steps for building, installing, packaging
8855 8855
8856Create the directory where the package lives, plus any auxiliary directories: 8856Create the directory where the package lives, plus any auxiliary directories:
8857 8857
8858# cd /usr/pkgsrc/lang 8858# cd /usr/pkgsrc/lang
8859# mkdir bison 8859# mkdir bison
8860# cd bison 8860# cd bison
8861# mkdir patches 8861# mkdir patches
8862 8862
8863Create Makefile, DESCR and PLIST (see Chapter 12, Package components - files, 8863Create Makefile, DESCR and PLIST (see Chapter 12, Package components - files,
8864directories and contents) then continue with fetching the distfile: 8864directories and contents) then continue with fetching the distfile:
8865 8865
8866# make fetch 8866# make fetch
8867>> bison-1.25.tar.gz doesn't seem to exist on this system. 8867>> bison-1.25.tar.gz doesn't seem to exist on this system.
8868>> Attempting to fetch from ftp://prep.ai.mit.edu/pub/gnu//. 8868>> Attempting to fetch from ftp://prep.ai.mit.edu/pub/gnu//.
8869Requesting ftp://prep.ai.mit.edu/pub/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 8869Requesting ftp://prep.ai.mit.edu/pub/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
8870ftp: Error retrieving file: 500 Internal error 8870ftp: Error retrieving file: 500 Internal error
8871 8871
8872>> Attempting to fetch from ftp://wuarchive.wustl.edu/systems/gnu//. 8872>> Attempting to fetch from ftp://wuarchive.wustl.edu/systems/gnu//.
8873Requesting ftp://wuarchive.wustl.edu/systems/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 8873Requesting ftp://wuarchive.wustl.edu/systems/gnu//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
8874ftp: Error retrieving file: 500 Internal error 8874ftp: Error retrieving file: 500 Internal error
8875 8875
8876>> Attempting to fetch from ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//. 8876>> Attempting to fetch from ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//.
8877Requesting ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/) 8877Requesting ftp://ftp.freebsd.org/pub/FreeBSD/distfiles//bison-1.25.tar.gz (via ftp://orpheus.amdahl.com:80/)
8878Successfully retrieved file. 8878Successfully retrieved file.
8879 8879
8880Generate the checksum of the distfile into distinfo: 8880Generate the checksum of the distfile into distinfo:
8881 8881
8882# make makedistinfo 8882# make makedistinfo
8883 8883
8884Now compile: 8884Now compile:
8885 8885
8886# make 8886# make
8887>> Checksum OK for bison-1.25.tar.gz. 8887>> Checksum OK for bison-1.25.tar.gz.
8888===> Extracting for bison-1.25 8888===> Extracting for bison-1.25
8889===> Patching for bison-1.25 8889===> Patching for bison-1.25
8890===> Ignoring empty patch directory 8890===> Ignoring empty patch directory
8891===> Configuring for bison-1.25 8891===> Configuring for bison-1.25
8892creating cache ./config.cache 8892creating cache ./config.cache
8893checking for gcc... cc 8893checking for gcc... cc
8894checking whether we are using GNU C... yes 8894checking whether we are using GNU C... yes
8895checking for a BSD compatible install... /usr/bin/install -c -o bin -g bin 8895checking for a BSD compatible install... /usr/bin/install -c -o bin -g bin
8896checking how to run the C preprocessor... cc -E 8896checking how to run the C preprocessor... cc -E
8897checking for minix/config.h... no 8897checking for minix/config.h... no
8898checking for POSIXized ISC... no 8898checking for POSIXized ISC... no
8899checking whether cross-compiling... no 8899checking whether cross-compiling... no
8900checking for ANSI C header files... yes 8900checking for ANSI C header files... yes
8901checking for string.h... yes 8901checking for string.h... yes
8902checking for stdlib.h... yes 8902checking for stdlib.h... yes
8903checking for memory.h... yes 8903checking for memory.h... yes
8904checking for working const... yes 8904checking for working const... yes
8905checking for working alloca.h... no 8905checking for working alloca.h... no
8906checking for alloca... yes 8906checking for alloca... yes
8907checking for strerror... yes 8907checking for strerror... yes
8908updating cache ./config.cache 8908updating cache ./config.cache
8909creating ./config.status 8909creating ./config.status
8910creating Makefile 8910creating Makefile
8911===> Building for bison-1.25 8911===> Building for bison-1.25
8912cc -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 8912cc -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
8913cc -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 8913cc -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
8914cc -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 8914cc -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
8915cc -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 8915cc -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
8916cc -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 8916cc -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
8917cc -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 8917cc -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
8918cc -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 8918cc -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
8919cc -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 8919cc -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
8920cc -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 8920cc -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
8921cc -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 8921cc -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
8922cc -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 8922cc -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
8923cc -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 8923cc -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
8924cc -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 8924cc -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
8925cc -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 8925cc -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
8926cc -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 8926cc -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
8927cc -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 8927cc -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
8928cc -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 8928cc -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
8929cc -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 8929cc -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
8930cc -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 8930cc -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
8931cc -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 8931cc -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
8932cc -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 8932cc -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
8933cc -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 8933cc -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
8934./files.c:240: warning: mktemp() possibly used unsafely, consider using mkstemp() 8934./files.c:240: warning: mktemp() possibly used unsafely, consider using mkstemp()
8935rm -f bison.s1 8935rm -f bison.s1
8936sed -e "/^#line/ s|bison|/usr/pkg/share/bison|" < ./bison.simple > bison.s1 8936sed -e "/^#line/ s|bison|/usr/pkg/share/bison|" < ./bison.simple > bison.s1
8937 8937
8938Everything seems OK, so install the files: 8938Everything seems OK, so install the files:
8939 8939
8940# make install 8940# make install
8941>> Checksum OK for bison-1.25.tar.gz. 8941>> Checksum OK for bison-1.25.tar.gz.
8942===> Installing for bison-1.25 8942===> Installing for bison-1.25
8943sh ./mkinstalldirs /usr/pkg/bin /usr/pkg/share /usr/pkg/info /usr/pkg/man/man1 8943sh ./mkinstalldirs /usr/pkg/bin /usr/pkg/share /usr/pkg/info /usr/pkg/man/man1
8944rm -f /usr/pkg/bin/bison 8944rm -f /usr/pkg/bin/bison
8945cd /usr/pkg/share; rm -f bison.simple bison.hairy 8945cd /usr/pkg/share; rm -f bison.simple bison.hairy
8946rm -f /usr/pkg/man/man1/bison.1 /usr/pkg/info/bison.info* 8946rm -f /usr/pkg/man/man1/bison.1 /usr/pkg/info/bison.info*
8947install -c -o bin -g bin -m 555 bison /usr/pkg/bin/bison 8947install -c -o bin -g bin -m 555 bison /usr/pkg/bin/bison
8948/usr/bin/install -c -o bin -g bin -m 644 bison.s1 /usr/pkg/share/bison.simple 8948/usr/bin/install -c -o bin -g bin -m 644 bison.s1 /usr/pkg/share/bison.simple
8949/usr/bin/install -c -o bin -g bin -m 644 ./bison.hairy /usr/pkg/share/bison.hairy 8949/usr/bin/install -c -o bin -g bin -m 644 ./bison.hairy /usr/pkg/share/bison.hairy
8950cd .; for f in bison.info*; do /usr/bin/install -c -o bin -g bin -m 644 $f /usr/pkg/info/$f; done 8950cd .; for f in bison.info*; do /usr/bin/install -c -o bin -g bin -m 644 $f /usr/pkg/info/$f; done
8951/usr/bin/install -c -o bin -g bin -m 644 ./bison.1 /usr/pkg/man/man1/bison.1 8951/usr/bin/install -c -o bin -g bin -m 644 ./bison.1 /usr/pkg/man/man1/bison.1
8952===> Registering installation for bison-1.25 8952===> Registering installation for bison-1.25
8953 8953
8954You can now use bison, and also - if you decide so - remove it with pkg_delete 8954You can now use bison, and also - if you decide so - remove it with pkg_delete
8955bison. Should you decide that you want a binary package, do this now: 8955bison. Should you decide that you want a binary package, do this now:
8956 8956
8957# make package 8957# make package
8958>> Checksum OK for bison-1.25.tar.gz. 8958>> Checksum OK for bison-1.25.tar.gz.
8959===> Building package for bison-1.25 8959===> Building package for bison-1.25
8960Creating package bison-1.25.tgz 8960Creating package bison-1.25.tgz
8961Registering depends:. 8961Registering depends:.
8962Creating gzip'd tar ball in '/u/pkgsrc/lang/bison/bison-1.25.tgz' 8962Creating gzip'd tar ball in '/u/pkgsrc/lang/bison/bison-1.25.tgz'
8963 8963
8964Now that you don't need the source and object files any more, clean up: 8964Now that you don't need the source and object files any more, clean up:
8965 8965
8966# make clean 8966# make clean
8967===> Cleaning for bison-1.25 8967===> Cleaning for bison-1.25
8968 8968
8969Appendix B. Security hardening 8969Appendix B. Security hardening
8970 8970
8971Table of Contents 8971Table of Contents
8972 8972
8973B.1. Mechanisms 8973B.1. Mechanisms
8974 8974
8975 B.1.1. Enabled by default 8975 B.1.1. Enabled by default
8976 B.1.2. Not enabled by default 8976 B.1.2. Not enabled by default
8977 8977
8978B.2. Caveats 8978B.2. Caveats
8979 8979
8980 B.2.1. Problems with PKGSRC_MKPIE 8980 B.2.1. Problems with PKGSRC_MKPIE
8981 B.2.2. Problems with PKGSRC_USE_FORTIFY 8981 B.2.2. Problems with PKGSRC_USE_FORTIFY
8982 B.2.3. Problems with PKGSRC_USE_RELRO 8982 B.2.3. Problems with PKGSRC_USE_RELRO
8983 B.2.4. Problems with PKGSRC_USE_SSP 8983 B.2.4. Problems with PKGSRC_USE_SSP
8984 8984
8985B.3. Auditing the system 8985B.3. Auditing the system
8986 8986
8987 B.3.1. Checking for PIE 8987 B.3.1. Checking for PIE
8988 B.3.2. Checking for partial RELRO 8988 B.3.2. Checking for partial RELRO
8989 B.3.3. Checking for full RELRO 8989 B.3.3. Checking for full RELRO
8990 B.3.4. Checking for SSP 8990 B.3.4. Checking for SSP
8991 8991
8992A number of mechanisms are available in pkgsrc to improve the security of the 8992A number of mechanisms are available in pkgsrc to improve the security of the
8993resulting system. This page describes the mechanisms, and gives hints about 8993resulting system. This page describes the mechanisms, and gives hints about
8994detecting and fixing problems. 8994detecting and fixing problems.
8995 8995
8996Mechanisms can be enabled individually in mk.conf, and are individually 8996Mechanisms can be enabled individually in mk.conf, and are individually
8997described below. 8997described below.
8998 8998
8999Typically, a feature will cause some programs to fail to build or work when 8999Typically, a feature will cause some programs to fail to build or work when
9000first enabled. This can be due to latent problems in the program, and can be 9000first enabled. This can be due to latent problems in the program, and can be
9001due to other reasons. After enough testing to have confidence that user 9001due to other reasons. After enough testing to have confidence that user
9002problems will be quite rare, individual mechanisms will be enabled by default. 9002problems will be quite rare, individual mechanisms will be enabled by default.
9003 9003
9004For each mechanism, see the Caveats section below for an explanation of what 9004For each mechanism, see the Caveats section below for an explanation of what
9005might go wrong at compile time and at run time, and how to notice and address 9005might go wrong at compile time and at run time, and how to notice and address
9006these problems. 9006these problems.
9007 9007
9008B.1. Mechanisms 9008B.1. Mechanisms
9009 9009
9010B.1.1. Enabled by default 9010B.1.1. Enabled by default
9011 9011
9012B.1.1.1. PKGSRC_USE_FORTIFY 9012B.1.1.1. PKGSRC_USE_FORTIFY
9013 9013
9014This allows substitute wrappers to be used for some commonly used library 9014This allows substitute wrappers to be used for some commonly used library
9015functions that do not have built-in bounds checking - but could in some cases. 9015functions that do not have built-in bounds checking - but could in some cases.
9016 9016
9017Two mitigation levels are available: 9017Two mitigation levels are available:
9018 9018
9019 * "weak" only enables checks at compile-time. 9019 * "weak" only enables checks at compile-time.
9020 9020
9021 * "strong" enables checks at compile-time and runtime. 9021 * "strong" enables checks at compile-time and runtime.
9022 9022
9023"strong" has been enabled by default since pkgsrc-2017Q3. 9023"strong" has been enabled by default since pkgsrc-2017Q3.
9024 9024
9025B.1.1.2. PKGSRC_USE_SSP 9025B.1.1.2. PKGSRC_USE_SSP
9026 9026
9027This enables a stack-smashing protection mitigation. It is done by adding a 9027This enables a stack-smashing protection mitigation. It is done by adding a
9028guard variable to functions with vulnerable objects. The guards are initialized 9028guard variable to functions with vulnerable objects. The guards are initialized
9029when a function is entered and then checked when the function exits. The guard 9029when a function is entered and then checked when the function exits. The guard
9030check will fail and the program forcibly exited if the variable was modified in 9030check will fail and the program forcibly exited if the variable was modified in
9031the meantime. This can happen in case of buffer overflows or memory corruption, 9031the meantime. This can happen in case of buffer overflows or memory corruption,
9032and therefore exposing these bugs. 9032and therefore exposing these bugs.
9033 9033
9034Different mitigation levels are available: 9034Different mitigation levels are available:
9035 9035
9036 * "yes", which will only protect functions considered vulnerable by the 9036 * "yes", which will only protect functions considered vulnerable by the
9037 compiler; 9037 compiler;
9038 9038
9039 * "all", which will protect every function; 9039 * "all", which will protect every function;
9040 9040
9041 * "strong", the default, which will apply a better balance between the two 9041 * "strong", the default, which will apply a better balance between the two
9042 settings above. 9042 settings above.
9043 9043
9044This mitigation is supported by both GCC and clang. It may be supported in 9044This mitigation is supported by both GCC and clang. It may be supported in
9045additional compilers, possibly under a different name. It is particularly 9045additional compilers, possibly under a different name. It is particularly
9046useful for unsafe programming languages, such as C/C++. 9046useful for unsafe programming languages, such as C/C++.
9047 9047
9048 * "yes" is enabled by default where known supported since pkgsrc-2017Q3. 9048 * "yes" is enabled by default where known supported since pkgsrc-2017Q3.
9049 9049
9050 * "strong" is enabled by default where known supported since pkgsrc-2021Q4. 9050 * "strong" is enabled by default where known supported since pkgsrc-2021Q4.
9051 9051
9052More details can be found here: 9052More details can be found here:
9053 9053
9054 * Buffer overflow protection on Wikipedia 9054 * Buffer overflow protection on Wikipedia
9055 9055
9056B.1.1.3. PKGSRC_MKPIE 9056B.1.1.3. PKGSRC_MKPIE
9057 9057
9058This requests the creation of PIE (Position Independent Executables) for all 9058This requests the creation of PIE (Position Independent Executables) for all
9059executables. The PIE mechanism is normally used for shared libraries, so that 9059executables. The PIE mechanism is normally used for shared libraries, so that
9060they can be loaded at differing addresses at runtime. PIE itself does not have 9060they can be loaded at differing addresses at runtime. PIE itself does not have
9061useful security properties; however, it is necessary to fully leverage some, 9061useful security properties; however, it is necessary to fully leverage some,
9062such as ASLR. Some operating systems support Address Space Layout Randomization 9062such as ASLR. Some operating systems support Address Space Layout Randomization
9063(ASLR), which causes different addresses to be used each time a program is run. 9063(ASLR), which causes different addresses to be used each time a program is run.
9064This makes it more difficult for an attacker to guess addresses and thus makes 9064This makes it more difficult for an attacker to guess addresses and thus makes
9065exploits harder to construct. With PIE, ASLR can really be applied to the 9065exploits harder to construct. With PIE, ASLR can really be applied to the
9066entire program, instead of the stack and heap only. 9066entire program, instead of the stack and heap only.
9067 9067
9068PIE executables will only be built for toolchains that are known to support 9068PIE executables will only be built for toolchains that are known to support
9069PIE. Currently, this means NetBSD on x86, ARM, SPARC64, m68k, and MIPS. 9069PIE. Currently, this means NetBSD on x86, ARM, SPARC64, m68k, and MIPS.
9070 9070
9071PKGSRC_MKPIE was enabled by default after the pkgsrc-2021Q3 branch. 9071PKGSRC_MKPIE was enabled by default after the pkgsrc-2021Q3 branch.
9072 9072
9073B.1.1.4. PKGSRC_USE_RELRO 9073B.1.1.4. PKGSRC_USE_RELRO
9074 9074
9075This also makes the exploitation of some security vulnerabilities more 9075This also makes the exploitation of some security vulnerabilities more
9076difficult in some cases. 9076difficult in some cases.
9077 9077
9078Two different mitigation levels are available: 9078Two different mitigation levels are available:
9079 9079
9080 * partial (the default): the ELF sections are reordered so that internal data 9080 * partial (the default): the ELF sections are reordered so that internal data
9081 sections precede the program's own data sections, and non-PLT GOT is 9081 sections precede the program's own data sections, and non-PLT GOT is
9082 read-only; 9082 read-only;
9083 9083
9084 * full: in addition to partial RELRO, every relocation is performed 9084 * full: in addition to partial RELRO, every relocation is performed
9085 immediately when starting the program, allowing the entire GOT to be 9085 immediately when starting the program, allowing the entire GOT to be
9086 read-only. This can greatly slow down startup of large programs. 9086 read-only. This can greatly slow down startup of large programs.
9087 9087
9088This is currently supported by GCC. Many software distributions now enable this 9088This is currently supported by GCC. Many software distributions now enable this
9089feature by default, at the "partial" level. 9089feature by default, at the "partial" level.
9090 9090
9091More details can be found here: 9091More details can be found here:
9092 9092
9093 * Hardening ELF binaries using Relocation Read-Only (RELRO) 9093 * Hardening ELF binaries using Relocation Read-Only (RELRO)
9094 9094
9095B.1.2. Not enabled by default 9095B.1.2. Not enabled by default
9096 9096
9097B.1.2.1. PKGSRC_MKREPRO 9097B.1.2.1. PKGSRC_MKREPRO
9098 9098
9099With this option, pkgsrc will try to build packages reproducibly. This allows 9099With this option, pkgsrc will try to build packages reproducibly. This allows
9100packages built from the same tree and with the same options, to produce 9100packages built from the same tree and with the same options, to produce
9101identical results bit by bit. This option should be combined with ASLR and 9101identical results bit by bit. This option should be combined with ASLR and
9102PKGSRC_MKPIE to avoid predictable address offsets for attackers attempting to 9102PKGSRC_MKPIE to avoid predictable address offsets for attackers attempting to
9103exploit security vulnerabilities. 9103exploit security vulnerabilities.
9104 9104
9105More details can be found here: 9105More details can be found here:
9106 9106
9107 * Reproducible Builds - a set of software development practices that create 9107 * Reproducible Builds - a set of software development practices that create
9108 an independently-verifiable path from source to binary code 9108 an independently-verifiable path from source to binary code
9109 9109
9110More work likely needs to be done before pkgsrc is fully reproducible. 9110More work likely needs to be done before pkgsrc is fully reproducible.
9111 9111
9112B.1.2.2. PKGSRC_USE_STACK_CHECK 9112B.1.2.2. PKGSRC_USE_STACK_CHECK
9113 9113
9114This uses -fstack-check with GCC for another stack protection mitigation. 9114This uses -fstack-check with GCC for another stack protection mitigation.
9115 9115
9116It asks the compiler to generate code verifying that it does not corrupt the 9116It asks the compiler to generate code verifying that it does not corrupt the
9117stack. According to GCC's manual page, this is really only useful for 9117stack. According to GCC's manual page, this is really only useful for
9118multi-threaded programs. 9118multi-threaded programs.
9119 9119
9120B.2. Caveats 9120B.2. Caveats
9121 9121
9122B.2.1. Problems with PKGSRC_MKPIE 9122B.2.1. Problems with PKGSRC_MKPIE
9123 9123
9124B.2.1.1. Packages failing to build 9124B.2.1.1. Packages failing to build
9125 9125
9126A number of packages may fail to build with this option enabled. The failures 9126A number of packages may fail to build with this option enabled. The failures
9127are often related to the absence of the -fPIC compilation flag when building 9127are often related to the absence of the -fPIC compilation flag when building
9128libraries or executables (or ideally -fPIE in the latter case). This flag is 9128libraries or executables (or ideally -fPIE in the latter case). This flag is
9129added to the CFLAGS already, but requires the package to actually support it. 9129added to the CFLAGS already, but requires the package to actually support it.
9130 9130
9131B.2.1.1.1. How to fix 9131B.2.1.1.1. How to fix
9132 9132
9133These instructions are meant as a reference only; they likely need to be 9133These instructions are meant as a reference only; they likely need to be
9134adapted for many packages individually. 9134adapted for many packages individually.
9135 9135
9136For packages using Makefiles: 9136For packages using Makefiles:
9137 9137
9138MAKE_FLAGS+= CFLAGS=${CFLAGS:Q} 9138MAKE_FLAGS+= CFLAGS=${CFLAGS:Q}
9139MAKE_FLAGS+= LDFLAGS=${LDFLAGS:Q} 9139MAKE_FLAGS+= LDFLAGS=${LDFLAGS:Q}
9140 9140
9141For packages using Imakefiles: 9141For packages using Imakefiles:
9142 9142
9143MAKE_FLAGS+= CCOPTIONS=${CFLAGS:Q} 9143MAKE_FLAGS+= CCOPTIONS=${CFLAGS:Q}
9144MAKE_FLAGS+= LOCAL_LDFLAGS=${LDFLAGS:Q} 9144MAKE_FLAGS+= LOCAL_LDFLAGS=${LDFLAGS:Q}
9145 9145
9146B.2.1.2. Run-time crashes 9146B.2.1.2. Run-time crashes
9147 9147
9148Some programs may fail to run, or crash at random times once built as PIE. Two 9148Some programs may fail to run, or crash at random times once built as PIE. Two
9149scenarios are essentially possible. This is nearly always due to a bug in the 9149scenarios are essentially possible. This is nearly always due to a bug in the
9150program being exposed due to ASLR. 9150program being exposed due to ASLR.
9151 9151
9152B.2.1.3. Disabling PKGSRC_MKPIE on a per-package basis 9152B.2.1.3. Disabling PKGSRC_MKPIE on a per-package basis
9153 9153
9154Ideally, packages should be fixed for compatibility with MKPIE. However, in 9154Ideally, packages should be fixed for compatibility with MKPIE. However, in
9155some cases this is very difficult, due to complex build systems, packages using 9155some cases this is very difficult, due to complex build systems, packages using
9156non-standard toolchains, or programming languages with odd bootstrapping 9156non-standard toolchains, or programming languages with odd bootstrapping
9157mechanisms. 9157mechanisms.
9158 9158
9159To disable PKGSRC_MKPIE on a per-package basis, set MKPIE_SUPPORTED= no in the 9159To disable PKGSRC_MKPIE on a per-package basis, set MKPIE_SUPPORTED= no in the
9160package's Makefile before bsd.prefs.mk is included. 9160package's Makefile before bsd.prefs.mk is included.
9161 9161
9162B.2.2. Problems with PKGSRC_USE_FORTIFY 9162B.2.2. Problems with PKGSRC_USE_FORTIFY
9163 9163
9164B.2.2.1. Packages failing to build 9164B.2.2.1. Packages failing to build
9165 9165
9166This feature makes use of pre-processing directives to look for hardened, 9166This feature makes use of pre-processing directives to look for hardened,
9167alternative implementations of essential library calls. Some programs may fail 9167alternative implementations of essential library calls. Some programs may fail
9168to build as a result; this usually happens for those trying too hard to be 9168to build as a result; this usually happens for those trying too hard to be
9169portable, or otherwise abusing definitions in the standard library. 9169portable, or otherwise abusing definitions in the standard library.
9170 9170
9171B.2.2.2. Run-time crashes 9171B.2.2.2. Run-time crashes
9172 9172
9173This feature may cause some programs to crash, usually indicating an actual bug 9173This feature may cause some programs to crash, usually indicating an actual bug
9174in the program. The fix will typically involve patching the original program's 9174in the program. The fix will typically involve patching the original program's
9175source code. 9175source code.
9176 9176
9177B.2.2.3. Optimization is required 9177B.2.2.3. Optimization is required
9178 9178
9179At least in the case of GCC, FORTIFY will only be applied if optimization is 9179At least in the case of GCC, FORTIFY will only be applied if optimization is
9180applied while compiling. This means that the CFLAGS should also contain -O, -O2 9180applied while compiling. This means that the CFLAGS should also contain -O, -O2
9181or another optimization level. This cannot easily be applied globally, as some 9181or another optimization level. This cannot easily be applied globally, as some
9182packages may require specific optimization levels. 9182packages may require specific optimization levels.
9183 9183
9184B.2.2.4. Disabling FORTIFY on a per-package basis 9184B.2.2.4. Disabling FORTIFY on a per-package basis
9185 9185
9186Note 9186Note
9187 9187
9188FORTIFY should not be disabled to work around runtime crashes in the program! 9188FORTIFY should not be disabled to work around runtime crashes in the program!
9189This is a very bad idea and will expose you to security vulnerabilities. 9189This is a very bad idea and will expose you to security vulnerabilities.
9190 9190
9191To disable FORTIFY on a per-package basis, set the following in the package's 9191To disable FORTIFY on a per-package basis, set the following in the package's
9192Makefile before bsd.prefs.mk is included: 9192Makefile before bsd.prefs.mk is included:
9193 9193
9194FORTIFY_SUPPORTED= no 9194FORTIFY_SUPPORTED= no
9195 9195
9196B.2.3. Problems with PKGSRC_USE_RELRO 9196B.2.3. Problems with PKGSRC_USE_RELRO
9197 9197
9198B.2.3.1. Performance impact 9198B.2.3.1. Performance impact
9199 9199
9200For better protection, full RELRO requires every symbol to be resolved when the 9200For better protection, full RELRO requires every symbol to be resolved when the
9201program starts, rather than simply when required at run-time. This will have 9201program starts, rather than simply when required at run-time. This will have
9202more impact on programs using a lot of symbols, or linked to libraries exposing 9202more impact on programs using a lot of symbols, or linked to libraries exposing
9203a lot of symbols. Therefore, daemons or programs otherwise running in 9203a lot of symbols. Therefore, daemons or programs otherwise running in
9204background are affected only when started. Programs loading plug-ins at 9204background are affected only when started. Programs loading plug-ins at
9205run-time are affected when loading the plug-ins. 9205run-time are affected when loading the plug-ins.
9206 9206
9207The impact is not expected to be noticeable on modern hardware, except in some 9207The impact is not expected to be noticeable on modern hardware, except in some
9208cases for big programs. 9208cases for big programs.
9209 9209
9210B.2.3.2. Run-time crashes 9210B.2.3.2. Run-time crashes
9211 9211
9212Some programs handle plug-ins and dependencies in a way that conflicts with 9212Some programs handle plug-ins and dependencies in a way that conflicts with
9213RELRO: for instance, with an initialization routine listing any other plug-in 9213RELRO: for instance, with an initialization routine listing any other plug-in
9214required. With full RELRO, the missing symbols are resolved before the 9214required. With full RELRO, the missing symbols are resolved before the
9215initialization routine can run, and the dynamic loader will not be able to find 9215initialization routine can run, and the dynamic loader will not be able to find
9216them directly and abort as a result. Unfortunately, this is how Xorg loads its 9216them directly and abort as a result. Unfortunately, this is how Xorg loads its
9217drivers. Partial RELRO can be applied instead in this case. 9217drivers. Partial RELRO can be applied instead in this case.
9218 9218
9219B.2.3.3. Disabling RELRO on a per-package basis 9219B.2.3.3. Disabling RELRO on a per-package basis
9220 9220
9221To disable RELRO on a per-package basis, set the following in the package's 9221To disable RELRO on a per-package basis, set the following in the package's
9222Makefile before bsd.prefs.mk is included: 9222Makefile before bsd.prefs.mk is included:
9223 9223
9224RELRO_SUPPORTED= no 9224RELRO_SUPPORTED= no
9225 9225
9226It is also possible to at most enable partial RELRO, by setting RELRO_SUPPORTED 9226It is also possible to at most enable partial RELRO, by setting RELRO_SUPPORTED
9227to partial. 9227to partial.
9228 9228
9229B.2.4. Problems with PKGSRC_USE_SSP 9229B.2.4. Problems with PKGSRC_USE_SSP
9230 9230
9231B.2.4.1. Packages failing to build 9231B.2.4.1. Packages failing to build
9232 9232
9233The stack-smashing protection provided by this option does not work for some 9233The stack-smashing protection provided by this option does not work for some
9234programs. The most common situation in which this happens is when the program 9234programs. The most common situation in which this happens is when the program
9235allocates variables on the stack, with the size determined at run-time. 9235allocates variables on the stack, with the size determined at run-time.
9236 9236
9237B.2.4.2. Run-time crashes 9237B.2.4.2. Run-time crashes
9238 9238
9239Again, this feature may cause some programs to crash via a SIGABRT, usually 9239Again, this feature may cause some programs to crash via a SIGABRT, usually
9240indicating an actual bug in the program. 9240indicating an actual bug in the program.
9241 9241
9242On NetBSD LOG_CRIT level syslog messages are sent and - by default - appended 9242On NetBSD LOG_CRIT level syslog messages are sent and - by default - appended
9243to /var/log/messages, e.g.: 9243to /var/log/messages, e.g.:
9244 9244
9245Jan 6 15:42:51 hostname -: hostname program - - - buffer overflow detected; terminated 9245Jan 6 15:42:51 hostname -: hostname program - - - buffer overflow detected; terminated
9246 9246
9247(where hostname is the hostname(1) and program is the basename(1) of the 9247(where hostname is the hostname(1) and program is the basename(1) of the
9248program crashed). 9248program crashed).
9249 9249
9250Patching the original program is then required. 9250Patching the original program is then required.
9251 9251
9252Rebuilding the package via: 9252Rebuilding the package via:
9253 9253
9254% env CFLAGS=-g INSTALL_UNSTRIPPED=yes make replace 9254% env CFLAGS=-g INSTALL_UNSTRIPPED=yes make replace
9255 9255
9256and inspecting the backtrace of the coredump via the debugger should point out 9256and inspecting the backtrace of the coredump via the debugger should point out
9257the problematic call by inspecting the frame calling the _chk() (SSP) function. 9257the problematic call by inspecting the frame calling the _chk() (SSP) function.
9258 9258
9259B.2.4.3. Performance impact 9259B.2.4.3. Performance impact
9260 9260
9261The compiler emits extra code when using this feature: a check for buffer 9261The compiler emits extra code when using this feature: a check for buffer
9262overflows is performed when entering and exiting functions, requiring an extra 9262overflows is performed when entering and exiting functions, requiring an extra
9263variable on the stack. The level of protection can otherwise be adjusted to 9263variable on the stack. The level of protection can otherwise be adjusted to
9264affect only those functions considered more sensitive by the compiler (with 9264affect only those functions considered more sensitive by the compiler (with
9265-fstack-protector instead of -fstack-protector-all). 9265-fstack-protector instead of -fstack-protector-all).
9266 9266
9267The impact is not expected to be noticeable on modern hardware. However, 9267The impact is not expected to be noticeable on modern hardware. However,
9268programs with a hard requirement to run at the fastest possible speed should 9268programs with a hard requirement to run at the fastest possible speed should
9269avoid using this feature, or using libraries built with this feature. 9269avoid using this feature, or using libraries built with this feature.
9270 9270
9271B.2.4.4. Disabling SSP on a per-package basis 9271B.2.4.4. Disabling SSP on a per-package basis
9272 9272
9273Note 9273Note
9274 9274
9275SSP should not be disabled to work around runtime crashes in the program! This 9275SSP should not be disabled to work around runtime crashes in the program! This
9276is a very bad idea and will expose you to security vulnerabilities. 9276is a very bad idea and will expose you to security vulnerabilities.
9277 9277
9278To disable SSP on a per-package basis, set the following in the package's 9278To disable SSP on a per-package basis, set the following in the package's
9279Makefile before bsd.prefs.mk is included: 9279Makefile before bsd.prefs.mk is included:
9280 9280
9281SSP_SUPPORTED= no 9281SSP_SUPPORTED= no
9282 9282
9283B.3. Auditing the system 9283B.3. Auditing the system
9284 9284
9285The illusion of security is worse than having no security at all. This section 9285The illusion of security is worse than having no security at all. This section
9286lists a number of ways to ensure the security features requested are actually 9286lists a number of ways to ensure the security features requested are actually
9287effective. 9287effective.
9288 9288
9289These instructions were obtained and tested on a system derived from NetBSD 7 9289These instructions were obtained and tested on a system derived from NetBSD 7
9290(amd64). YMMV. 9290(amd64). YMMV.
9291 9291
9292B.3.1. Checking for PIE 9292B.3.1. Checking for PIE
9293 9293
9294The ELF executable type in use changes for binaries built as PIE; without: 9294The ELF executable type in use changes for binaries built as PIE; without:
9295 9295
9296$ file /path/to/bin/ary 9296$ file /path/to/bin/ary
9297/path/to/bin/ary: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for NetBSD 7.0, not stripped 9297/path/to/bin/ary: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for NetBSD 7.0, not stripped
9298 9298
9299as opposed to the following binary, built as PIE: 9299as opposed to the following binary, built as PIE:
9300 9300
9301$ file /path/to/pie/bin/ary 9301$ file /path/to/pie/bin/ary
9302/path/to/pie/bin/ary: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for NetBSD 7.0, not stripped 9302/path/to/pie/bin/ary: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for NetBSD 7.0, not stripped
9303 9303
9304The latter result is then what is expected. 9304The latter result is then what is expected.
9305 9305
9306B.3.2. Checking for partial RELRO 9306B.3.2. Checking for partial RELRO
9307 9307
9308The following command should list a section called RELRO: 9308The following command should list a section called RELRO:
9309 9309
9310$ objdump -p /path/to/bin/ary 9310$ objdump -p /path/to/bin/ary
9311 9311
9312/path/to/bin/ary: file format elf64-x86-64 9312/path/to/bin/ary: file format elf64-x86-64
9313 9313
9314Program Header: 9314Program Header:
9315[...] 9315[...]
9316 RELRO off 0x0000000000000d78 vaddr 0x0000000000600d78 paddr 0x0000000000600d78 align 2**0 9316 RELRO off 0x0000000000000d78 vaddr 0x0000000000600d78 paddr 0x0000000000600d78 align 2**0
9317 9317
9318This check is now performed automatically if PKG_DEVELOPER is set and RELRO is 9318This check is now performed automatically if PKG_DEVELOPER is set and RELRO is
9319enabled. 9319enabled.
9320 9320
9321B.3.3. Checking for full RELRO 9321B.3.3. Checking for full RELRO
9322 9322
9323The dynamic loader will apply RELRO immediately when detecting the presence of 9323The dynamic loader will apply RELRO immediately when detecting the presence of
9324the BIND_NOW flag: 9324the BIND_NOW flag:
9325 9325
9326$ objdump -x /path/to/bin/ary 9326$ objdump -x /path/to/bin/ary
9327 9327
9328/path/to/bin/ary: file format elf64-x86-64 9328/path/to/bin/ary: file format elf64-x86-64
9329 9329
9330Dynamic Section: 9330Dynamic Section:
9331[...] 9331[...]
9332 BIND_NOW 0x0000000000000000 9332 BIND_NOW 0x0000000000000000
9333 9333
9334This has to be combined with partial RELRO (see above) to be fully efficient. 9334This has to be combined with partial RELRO (see above) to be fully efficient.
9335 9335
9336This check is now performed automatically (where supported) if PKG_DEVELOPER is 9336This check is now performed automatically (where supported) if PKG_DEVELOPER is
9337set. 9337set.
9338 9338
9339B.3.4. Checking for SSP 9339B.3.4. Checking for SSP
9340 9340
9341Note 9341Note
9342 9342
9343Checking for SSP using this method only works where the operating system uses 9343Checking for SSP using this method only works where the operating system uses
9344libssp. libssp is not used on recent NetBSD/FreeBSD/Linux versions. 9344libssp. libssp is not used on recent NetBSD/FreeBSD/Linux versions.
9345 9345
9346Building objects, binaries and libraries with SSP will affect the presence of 9346Building objects, binaries and libraries with SSP will affect the presence of
9347additional symbols in the resulting file: 9347additional symbols in the resulting file:
9348 9348
9349$ nm /path/to/bin/ary 9349$ nm /path/to/bin/ary
9350[...] 9350[...]
9351 U __stack_chk_fail 9351 U __stack_chk_fail
93520000000000600ea0 B __stack_chk_guard 93520000000000600ea0 B __stack_chk_guard
9353 9353
9354This is an indicator that the program was indeed built with support for SSP. 9354This is an indicator that the program was indeed built with support for SSP.
9355 9355
9356This check is now performed automatically (where supported) if PKG_DEVELOPER is 9356This check is now performed automatically (where supported) if PKG_DEVELOPER is
9357set and SSP is enabled. 9357set and SSP is enabled.
9358 9358
9359Appendix C. Build logs 9359Appendix C. Build logs
9360 9360
9361Table of Contents 9361Table of Contents
9362 9362
9363C.1. Building figlet 9363C.1. Building figlet
9364C.2. Packaging figlet 9364C.2. Packaging figlet
9365 9365
9366C.1. Building figlet 9366C.1. Building figlet
9367 9367
9368# make 9368# make
9369===> Checking for vulnerabilities in figlet-2.2.1nb2 9369===> Checking for vulnerabilities in figlet-2.2.1nb2
9370=> figlet221.tar.gz doesn't seem to exist on this system. 9370=> figlet221.tar.gz doesn't seem to exist on this system.
9371=> Attempting to fetch figlet221.tar.gz from ftp://ftp.figlet.org/pub/figlet/program/unix/. 9371=> Attempting to fetch figlet221.tar.gz from ftp://ftp.figlet.org/pub/figlet/program/unix/.
9372=> [172219 bytes] 9372=> [172219 bytes]
9373Connected to ftp.plig.net. 9373Connected to ftp.plig.net.
9374220 ftp.plig.org NcFTPd Server (licensed copy) ready. 9374220 ftp.plig.org NcFTPd Server (licensed copy) ready.
9375331 Guest login ok, send your complete e-mail address as password. 9375331 Guest login ok, send your complete e-mail address as password.
9376230-You are user #5 of 500 simultaneous users allowed. 9376230-You are user #5 of 500 simultaneous users allowed.
9377230- 9377230-
9378230- ___ _ _ _ 9378230- ___ _ _ _
9379230- | _| |_ ___ ___| |_|___ ___ ___ ___ 9379230- | _| |_ ___ ___| |_|___ ___ ___ ___
9380230- | _| _| . |_| . | | | . |_| . | _| . | 9380230- | _| _| . |_| . | | | . |_| . | _| . |
9381230- |_| |_| | _|_| _|_|_|_ |_|___|_| |_ | 9381230- |_| |_| | _|_| _|_|_|_ |_|___|_| |_ |
9382230- |_| |_| |___| |___| 9382230- |_| |_| |___| |___|
9383230- 9383230-
9384230-** Welcome to ftp.plig.org ** 9384230-** Welcome to ftp.plig.org **
9385230- 9385230-
9386230-Please note that all transfers from this FTP site are logged. If you 9386230-Please note that all transfers from this FTP site are logged. If you
9387230-do not like this, please disconnect now. 9387230-do not like this, please disconnect now.
9388230- 9388230-
9389230-This archive is available via 9389230-This archive is available via
9390230- 9390230-
9391230-HTTP: http://ftp.plig.org/ 9391230-HTTP: http://ftp.plig.org/
9392230-FTP: ftp://ftp.plig.org/ (max 500 connections) 9392230-FTP: ftp://ftp.plig.org/ (max 500 connections)
9393230-RSYNC: rsync://ftp.plig.org/ (max 30 connections) 9393230-RSYNC: rsync://ftp.plig.org/ (max 30 connections)
9394230- 9394230-
9395230-Please email comments, bug reports and requests for packages to be 9395230-Please email comments, bug reports and requests for packages to be
9396230-mirrored to ftp-admin@plig.org. 9396230-mirrored to ftp-admin@plig.org.
9397230- 9397230-
9398230- 9398230-
9399230 Logged in anonymously. 9399230 Logged in anonymously.
9400Remote system type is UNIX. 9400Remote system type is UNIX.
9401Using binary mode to transfer files. 9401Using binary mode to transfer files.
9402200 Type okay. 9402200 Type okay.
9403250 "/pub" is new cwd. 9403250 "/pub" is new cwd.
9404250-"/pub/figlet" is new cwd. 9404250-"/pub/figlet" is new cwd.
9405250- 9405250-
9406250-Welcome to the figlet archive at ftp.figlet.org 9406250-Welcome to the figlet archive at ftp.figlet.org
9407250- 9407250-
9408250- ftp://ftp.figlet.org/pub/figlet/ 9408250- ftp://ftp.figlet.org/pub/figlet/
9409250- 9409250-
9410250-The official FIGlet web page is: 9410250-The official FIGlet web page is:
9411250- http://www.figlet.org/ 9411250- http://www.figlet.org/
9412250- 9412250-
9413250-If you have questions, please mailto:info@figlet.org. If you want to 9413250-If you have questions, please mailto:info@figlet.org. If you want to
9414250-contribute a font or something else, you can email us. 9414250-contribute a font or something else, you can email us.
9415250 9415250
9416250 "/pub/figlet/program" is new cwd. 9416250 "/pub/figlet/program" is new cwd.
9417250 "/pub/figlet/program/unix" is new cwd. 9417250 "/pub/figlet/program/unix" is new cwd.
9418local: figlet221.tar.gz remote: figlet221.tar.gz 9418local: figlet221.tar.gz remote: figlet221.tar.gz
9419502 Unimplemented command. 9419502 Unimplemented command.
9420227 Entering Passive Mode (195,40,6,41,246,104) 9420227 Entering Passive Mode (195,40,6,41,246,104)
9421150 Data connection accepted from 84.128.86.72:65131; transfer starting for figlet221.tar.gz (172219 bytes). 9421150 Data connection accepted from 84.128.86.72:65131; transfer starting for figlet221.tar.gz (172219 bytes).
942238% |************** | 65800 64.16 KB/s 00:01 ETA 942238% |************** | 65800 64.16 KB/s 00:01 ETA
9423226 Transfer completed. 9423226 Transfer completed.
9424172219 bytes received in 00:02 (75.99 KB/s) 9424172219 bytes received in 00:02 (75.99 KB/s)
9425221 Goodbye. 9425221 Goodbye.
9426=> Checksum OK for figlet221.tar.gz. 9426=> Checksum OK for figlet221.tar.gz.
9427===> Extracting for figlet-2.2.1nb2 9427===> Extracting for figlet-2.2.1nb2
9428===> Required installed package ccache-[0-9]*: ccache-2.3nb1 found 9428===> Required installed package ccache-[0-9]*: ccache-2.3nb1 found
9429===> Patching for figlet-2.2.1nb2 9429===> Patching for figlet-2.2.1nb2
9430===> Applying pkgsrc patches for figlet-2.2.1nb2 9430===> Applying pkgsrc patches for figlet-2.2.1nb2
9431===> Overriding tools for figlet-2.2.1nb2 9431===> Overriding tools for figlet-2.2.1nb2
9432===> Creating toolchain wrappers for figlet-2.2.1nb2 9432===> Creating toolchain wrappers for figlet-2.2.1nb2
9433===> Configuring for figlet-2.2.1nb2 9433===> Configuring for figlet-2.2.1nb2
9434===> Building for figlet-2.2.1nb2 9434===> Building for figlet-2.2.1nb2
9435gcc -O2 -DDEFAULTFONTDIR=\"/usr/pkg/share/figlet\" -DDEFAULTFONTFILE=\"standard.flf\" figlet.c zipio.c crc.c inflate.c -o figlet 9435gcc -O2 -DDEFAULTFONTDIR=\"/usr/pkg/share/figlet\" -DDEFAULTFONTFILE=\"standard.flf\" figlet.c zipio.c crc.c inflate.c -o figlet
9436chmod a+x figlet 9436chmod a+x figlet
9437gcc -O2 -o chkfont chkfont.c 9437gcc -O2 -o chkfont chkfont.c
9438=> Unwrapping files-to-be-installed. 9438=> Unwrapping files-to-be-installed.
9439# 9439#
9440# make install 9440# make install
9441===> Checking for vulnerabilities in figlet-2.2.1nb2 9441===> Checking for vulnerabilities in figlet-2.2.1nb2
9442===> Installing for figlet-2.2.1nb2 9442===> Installing for figlet-2.2.1nb2
9443install -d -o root -g wheel -m 755 /usr/pkg/bin 9443install -d -o root -g wheel -m 755 /usr/pkg/bin
9444install -d -o root -g wheel -m 755 /usr/pkg/man/man6 9444install -d -o root -g wheel -m 755 /usr/pkg/man/man6
9445mkdir -p /usr/pkg/share/figlet 9445mkdir -p /usr/pkg/share/figlet
9446cp figlet /usr/pkg/bin 9446cp figlet /usr/pkg/bin
9447cp chkfont /usr/pkg/bin 9447cp chkfont /usr/pkg/bin
9448chmod 555 figlist showfigfonts 9448chmod 555 figlist showfigfonts
9449cp figlist /usr/pkg/bin 9449cp figlist /usr/pkg/bin
9450cp showfigfonts /usr/pkg/bin 9450cp showfigfonts /usr/pkg/bin
9451cp fonts/*.flf /usr/pkg/share/figlet 9451cp fonts/*.flf /usr/pkg/share/figlet
9452cp fonts/*.flc /usr/pkg/share/figlet 9452cp fonts/*.flc /usr/pkg/share/figlet
9453cp figlet.6 /usr/pkg/man/man6 9453cp figlet.6 /usr/pkg/man/man6
9454===> Registering installation for figlet-2.2.1nb2 9454===> Registering installation for figlet-2.2.1nb2
9455# 9455#
9456 9456
9457C.2. Packaging figlet 9457C.2. Packaging figlet
9458 9458
9459# make package 9459# make package
9460===> Checking for vulnerabilities in figlet-2.2.1nb2 9460===> Checking for vulnerabilities in figlet-2.2.1nb2
9461===> Packaging figlet-2.2.1nb2 9461===> Packaging figlet-2.2.1nb2
9462===> Building binary package for figlet-2.2.1nb2 9462===> Building binary package for figlet-2.2.1nb2
9463Creating package /home/cvs/pkgsrc/packages/i386/All/figlet-2.2.1nb2.tgz 9463Creating package /home/cvs/pkgsrc/packages/i386/All/figlet-2.2.1nb2.tgz
9464Using SrcDir value of /usr/pkg 9464Using SrcDir value of /usr/pkg
9465Registering depends:. 9465Registering depends:.
9466# 9466#
9467 9467
9468Appendix D. Directory layout of the pkgsrc FTP server 9468Appendix D. Directory layout of the pkgsrc FTP server
9469 9469
9470Table of Contents 9470Table of Contents
9471 9471
9472D.1. distfiles: The distributed source files 9472D.1. distfiles: The distributed source files
9473D.2. misc: Miscellaneous things 9473D.2. misc: Miscellaneous things
9474D.3. packages: Binary packages 9474D.3. packages: Binary packages
9475D.4. reports: Bulk build reports 9475D.4. reports: Bulk build reports
9476D.5. current, stable, pkgsrc-20xxQy: source packages 9476D.5. current, stable, pkgsrc-20xxQy: source packages
9477 9477
9478As in other big projects, the directory layout of pkgsrc is quite complex for 9478As in other big projects, the directory layout of pkgsrc is quite complex for
9479newbies. This chapter explains where you find things on the FTP server. The 9479newbies. This chapter explains where you find things on the FTP server. The
9480base directory on ftp.NetBSD.org is /pub/pkgsrc/. On other servers it may be 9480base directory on ftp.NetBSD.org is /pub/pkgsrc/. On other servers it may be
9481different, but inside this directory, everything should look the same, no 9481different, but inside this directory, everything should look the same, no
9482matter on which server you are. This directory contains some subdirectories, 9482matter on which server you are. This directory contains some subdirectories,
9483which are explained below. 9483which are explained below.
9484 9484
9485D.1. distfiles: The distributed source files 9485D.1. distfiles: The distributed source files
9486 9486
9487The directory distfiles contains lots of archive files from all pkgsrc 9487The directory distfiles contains lots of archive files from all pkgsrc
9488packages, which are mirrored here. The subdirectories are called after their 9488packages, which are mirrored here. The subdirectories are called after their
9489package names and are used when the distributed files have names that don't 9489package names and are used when the distributed files have names that don't
9490explicitly contain a version number or are otherwise too generic (for example 9490explicitly contain a version number or are otherwise too generic (for example
9491release.tar.gz). 9491release.tar.gz).
9492 9492
9493D.2. misc: Miscellaneous things 9493D.2. misc: Miscellaneous things
9494 9494
9495This directory contains things that individual pkgsrc developers find worth 9495This directory contains things that individual pkgsrc developers find worth
9496publishing. 9496publishing.
9497 9497
9498D.3. packages: Binary packages 9498D.3. packages: Binary packages
9499 9499
9500This directory contains binary packages for the various platforms that are 9500This directory contains binary packages for the various platforms that are
9501supported by pkgsrc. Each subdirectory is of the form OPSYS/ARCH/OSVERSION_TAG. 9501supported by pkgsrc. Each subdirectory is of the form OPSYS/ARCH/OSVERSION_TAG.
9502The meaning of these variables is: 9502The meaning of these variables is:
9503 9503
9504 * OPSYS is the name of the operating system for which the packages have been 9504 * OPSYS is the name of the operating system for which the packages have been
9505 built. The name is taken from the output of the uname command, so it may 9505 built. The name is taken from the output of the uname command, so it may
9506 differ from the one you are used to hear. 9506 differ from the one you are used to hear.
9507 9507
9508 * ARCH is the hardware architecture of the platform for which the packages 9508 * ARCH is the hardware architecture of the platform for which the packages
9509 have been built. It also includes the ABI (Application Binary Interface) 9509 have been built. It also includes the ABI (Application Binary Interface)
9510 for platforms that have several of them. 9510 for platforms that have several of them.
9511 9511
9512 * OSVERSION is the version of the operating system. For version numbers that 9512 * OSVERSION is the version of the operating system. For version numbers that
9513 change often (for example NetBSD-current), the often-changing part should 9513 change often (for example NetBSD-current), the often-changing part should
9514 be replaced with an x, for example 4.99.x. 9514 be replaced with an x, for example 4.99.x.
9515 9515
9516 * TAG is either 20xxQy for a stable branch, or head for packages built from 9516 * TAG is either 20xxQy for a stable branch, or head for packages built from
9517 the HEAD branch. The latter should only be used when the packages are 9517 the HEAD branch. The latter should only be used when the packages are
9518 updated on a regular basis. Otherwise the date from checking out pkgsrc 9518 updated on a regular basis. Otherwise the date from checking out pkgsrc
9519 should be appended, for example head_20071015. 9519 should be appended, for example head_20071015.
9520 9520
9521The rationale for exactly this scheme is that the pkgsrc users looking for 9521The rationale for exactly this scheme is that the pkgsrc users looking for
9522binary packages can quickly click through the directories on the server and 9522binary packages can quickly click through the directories on the server and
9523find the best binary packages for their machines. Since they usually know the 9523find the best binary packages for their machines. Since they usually know the
9524operating system and the hardware architecture, OPSYS and ARCH are placed 9524operating system and the hardware architecture, OPSYS and ARCH are placed
9525first. After these choices, they can select the best combination of OSVERSION 9525first. After these choices, they can select the best combination of OSVERSION
9526and TAG together, since it is usually the case that packages stay compatible 9526and TAG together, since it is usually the case that packages stay compatible
9527between different version of the operating system. 9527between different version of the operating system.
9528 9528
9529In each of these directories, there is a whole binary packages collection for a 9529In each of these directories, there is a whole binary packages collection for a
9530specific platform. It has a directory called All which contains all binary 9530specific platform. It has a directory called All which contains all binary
9531packages. Besides that, there are various category directories that contain 9531packages. Besides that, there are various category directories that contain
9532symbolic links to the real binary packages. 9532symbolic links to the real binary packages.
9533 9533
9534D.4. reports: Bulk build reports 9534D.4. reports: Bulk build reports
9535 9535
9536Here are the reports from bulk builds, for those who want to fix packages that 9536Here are the reports from bulk builds, for those who want to fix packages that
9537didn't build on some of the platforms. The structure of subdirectories should 9537didn't build on some of the platforms. The structure of subdirectories should
9538look like the one in Section D.3, "packages: Binary packages". 9538look like the one in Section D.3, "packages: Binary packages".
9539 9539
9540D.5. current, stable, pkgsrc-20xxQy: source packages 9540D.5. current, stable, pkgsrc-20xxQy: source packages
9541 9541
9542These directories contain the "real" pkgsrc, that is the files that define how 9542These directories contain the "real" pkgsrc, that is the files that define how
9543to create binary packages from source archives. 9543to create binary packages from source archives.
9544 9544
9545Each of the current, stable and pkgsrc-20xxQy directories share the same 9545Each of the current, stable and pkgsrc-20xxQy directories share the same
9546structure. They each contain a pkgsrc directory and pkgsrc.tar.{bz,gz,xz} file. 9546structure. They each contain a pkgsrc directory and pkgsrc.tar.{bz,gz,xz} file.
9547 9547
9548The directory pkgsrc contains a snapshot of the CVS repository, which is 9548The directory pkgsrc contains a snapshot of the CVS repository, which is
9549updated regularly. The file pkgsrc.tar.{bz,gz,xz} contains the same as the 9549updated regularly. The file pkgsrc.tar.{bz,gz,xz} contains the same as the
9550directory, ready to be downloaded as a whole. 9550directory, ready to be downloaded as a whole.
9551 9551
9552The current directory contains files related to the HEAD branch of the CVS 9552The current directory contains files related to the HEAD branch of the CVS
9553repository. In this directory there is an additional file called 9553repository. In this directory there is an additional file called
9554pkgsrc-readmes.tar.{bz,gz,xz} that contains all pkgsrc READMEs with information 9554pkgsrc-readmes.tar.{bz,gz,xz} that contains all pkgsrc READMEs with information
9555about categories and packages. 9555about categories and packages.
9556 9556
9557The stable directory is a symlink to the latest pkgsrc-20xxQy. 9557The stable directory is a symlink to the latest pkgsrc-20xxQy.
9558 9558
9559The pkgsrc-20xxQy. directories contain files related to the -20xxQy stable 9559The pkgsrc-20xxQy. directories contain files related to the -20xxQy stable
9560branch of the CVS repository. In these directories there is an additional file 9560branch of the CVS repository. In these directories there is an additional file
9561called pkgsrc-20xxQy.tar.{bz,gz,xz}, which contains the state of pkgsrc when it 9561called pkgsrc-20xxQy.tar.{bz,gz,xz}, which contains the state of pkgsrc when it
9562was branched. 9562was branched.
9563 9563
9564Appendix E. Help topics 9564Appendix E. Help topics
9565 9565
9566The following list contains all help topics that are available when running  9566The following list contains all help topics that are available when running
9567bmake help topic=:index. 9567bmake help topic=:index.
9568 9568
9569#! -lintl 9569#! -lintl
957032bit 64bit 957032bit 64bit
9571ABI ACCEPTABLE_LICENSES 9571ABI ACCEPTABLE_LICENSES
9572ACROREAD_FONTPATH ADDITIONAL 9572ACROREAD_FONTPATH ADDITIONAL
9573AFAIK AIX 9573AFAIK AIX
9574ALLOW_VULNERABLE_PACKAGES ALL_ENV 9574ALLOW_VULNERABLE_PACKAGES ALL_ENV
9575ALSA_PC ALTERNATIVES_SRC 9575ALTERNATIVES_SRC AMANDA_TMP
9576AMANDA_TMP AMANDA_USER 9576AMANDA_USER AMANDA_VAR
9577AMANDA_VAR APACHE_GROUP 9577APACHE_GROUP APACHE_MODULE_NAME
9578APACHE_MODULE_NAME APACHE_MODULE_SRC 9578APACHE_MODULE_SRC APACHE_MODULE_SRCDIR
9579APACHE_MODULE_SRCDIR APACHE_PKG_PREFIX 9579APACHE_PKG_PREFIX APACHE_SUEXEC_CONFIGURE_ARGS
9580APACHE_SUEXEC_CONFIGURE_ARGS APACHE_SUEXEC_DOCROOT 9580APACHE_SUEXEC_DOCROOT APACHE_USER
9581APACHE_USER APPEND_ABI 9581APPEND_ABI APPEND_ELF
9582APPEND_ELF ARLA_CACHE 9582ARLA_CACHE AUDIT_PACKAGES_FLAGS
9583AUDIT_PACKAGES_FLAGS AUTOCONF_REQD 9583AUTOCONF_REQD AUTOMAKE_OVERRIDE
9584AUTOMAKE_OVERRIDE AUTOMAKE_REQD 9584AUTOMAKE_REQD AUTO_MKDIRS
9585AUTO_MKDIRS BDB185_DEFAULT 9585BDB185_DEFAULT BDBBASE
9586BDBBASE BDB_ACCEPTED 9586BDB_ACCEPTED BDB_DEFAULT
9587BDB_DEFAULT BDB_LIBS 9587BDB_LIBS BDB_TYPE
9588BDB_TYPE BINCIMAP_GROUP 9588BINCIMAP_GROUP BINCIMAP_USER
9589BINCIMAP_USER BIND_DIR 9589BIND_DIR BIND_GROUP
9590BIND_GROUP BIND_USER 9590BIND_USER BINOWN
9591BINOWN BINPKG_SITES 9591BINPKG_SITES BIN_INSTALL_FLAGS
9592BIN_INSTALL_FLAGS BISON_PKGDATADIR 9592BISON_PKGDATADIR BLAS
9593BLAS BLAS_ACCEPTED 9593BLAS_ACCEPTED BLAS_C_INTERFACE
9594BLAS_C_INTERFACE BLAS_INCLUDES 9594BLAS_INCLUDES BLAS_INDEX64
9595BLAS_INDEX64 BLAS_LIBS 9595BLAS_LIBS BLAS_TYPE
9596BLAS_TYPE BOOTSTRAP_DEPENDS 9596BOOTSTRAP_DEPENDS BROKEN
9597BROKEN BROKEN_EXCEPT_ON_PLATFORM 9597BROKEN_EXCEPT_ON_PLATFORM BROKEN_ON_PLATFORM
9598BROKEN_ON_PLATFORM BSDSRCDIR 9598BSDSRCDIR BSDXSRCDIR
9599BSDXSRCDIR BSD_MAKE_ENV 9599BSD_MAKE_ENV BUILDLINK_AUTO_DIRS
9600BUILDLINK_AUTO_DIRS BUILDLINK_AUTO_VARS 9600BUILDLINK_AUTO_VARS BUILDLINK_CFLAGS
9601BUILDLINK_CFLAGS BUILDLINK_CONTENTS_FILTER 9601BUILDLINK_CONTENTS_FILTER BUILDLINK_CPPFLAGS
9602BUILDLINK_CPPFLAGS BUILDLINK_DEPMETHOD 
9603BUILDLINK_FILES BUILDLINK_FILES_CMD 9602BUILDLINK_FILES BUILDLINK_FILES_CMD
9604BUILDLINK_FNAME_TRANSFORM BUILDLINK_LDFLAGS 9603BUILDLINK_FNAME_TRANSFORM BUILDLINK_LDFLAGS
9605BUILDLINK_LIBS BUILDLINK_OPSYS_SUPPORT_PTHREAD 9604BUILDLINK_LIBS BUILDLINK_OPSYS_SUPPORT_PTHREAD
9606BUILDLINK_PKGNAME BUILDLINK_PREFIX 9605BUILDLINK_PKGNAME BUILDLINK_PREFIX
9607BUILDLINK_RPATHDIRS BUILDLINK_TREE 9606BUILDLINK_RPATHDIRS BUILDLINK_TREE
9608BUILD_DEFS BUILD_DEFS_EFFECTS 9607BUILD_DEFS BUILD_DEFS_EFFECTS
9609BUILD_DEPENDS BUILD_DIRS 9608BUILD_DEPENDS BUILD_DIRS
9610BUILD_ENV_SHELL BUILD_MAKE_CMD 9609BUILD_ENV_SHELL BUILD_MAKE_CMD
9611BUILD_MAKE_FLAGS BUILD_TARGET 9610BUILD_MAKE_FLAGS BUILD_TARGET
9612BUILTIN_FIND_FILES BUILTIN_FIND_FILES_VAR 9611BUILTIN_FIND_FILES BUILTIN_FIND_FILES_VAR
9613BUILTIN_FIND_GREP BUILTIN_FIND_HEADERS 9612BUILTIN_FIND_GREP BUILTIN_FIND_HEADERS
9614BUILTIN_FIND_HEADERS_VAR BUILTIN_FIND_PKGCONFIG 9613BUILTIN_FIND_HEADERS_VAR BUILTIN_FIND_PKGCONFIG
9615BUILTIN_FIND_PKGCONFIG_VAR BUILTIN_PKG 9614BUILTIN_FIND_PKGCONFIG_VAR BUILTIN_PKG
9616BUILTIN_TEST_CURSES_DEFINES BUILTIN_TEST_CURSES_FUNCS 9615BUILTIN_TEST_CURSES_DEFINES BUILTIN_TEST_CURSES_FUNCS
9617BUILTIN_VERSION_SCRIPT BUILTIN_X11_TYPE 9616BUILTIN_VERSION_SCRIPT BUILTIN_X11_TYPE
9618BUILTIN_X11_VERSION CACTI_GROUP 9617BUILTIN_X11_VERSION CACTI_GROUP
9619CACTI_USER CANNA_GROUP 9618CACTI_USER CANNA_GROUP
9620CANNA_USER CAT 9619CANNA_USER CAT
9621CBLAS_LIBS CCACHE_BASE 9620CBLAS_LIBS CCACHE_BASE
9622CCACHE_DIR CCACHE_LOGFILE 9621CCACHE_DIR CCACHE_LOGFILE
9623CC_VERSION CC_VERSION_STRING 9622CC_VERSION CC_VERSION_STRING
9624CDRECORD_CONF CDROM_PKG_URL_DIR 9623CDRECORD_CONF CDROM_PKG_URL_DIR
9625CDROM_PKG_URL_HOST CHECKOUT_DATE 9624CDROM_PKG_URL_HOST CHECK_COMPILER
9626CHECK_COMPILER CHECK_FAKEHOME 9625CHECK_FAKEHOME CHECK_FILES
9627CHECK_FILES CHECK_FILES_SKIP 9626CHECK_FILES_SKIP CHECK_FILES_STRICT
9628CHECK_FILES_STRICT CHECK_HEADERS 9627CHECK_HEADERS CHECK_HEADERS_SKIP
9629CHECK_HEADERS_SKIP CHECK_INTERPRETER 9628CHECK_INTERPRETER CHECK_INTERPRETER_SKIP
9630CHECK_INTERPRETER_SKIP CHECK_PERMS 9629CHECK_PERMS CHECK_PERMS_AUTOFIX
9631CHECK_PERMS_AUTOFIX CHECK_PERMS_SKIP 9630CHECK_PERMS_SKIP CHECK_PIE
9632CHECK_PIE CHECK_PIE_SKIP 9631CHECK_PIE_SKIP CHECK_PIE_SUPPORTED
9633CHECK_PIE_SUPPORTED CHECK_PORTABILITY 9632CHECK_PORTABILITY CHECK_PORTABILITY_EXPERIMENTAL
9634CHECK_PORTABILITY_EXPERIMENTAL CHECK_PORTABILITY_SKIP 9633CHECK_PORTABILITY_SKIP CHECK_RELRO
9635CHECK_RELRO CHECK_RELRO_SKIP 9634CHECK_RELRO_SKIP CHECK_RELRO_SUPPORTED
9636CHECK_RELRO_SUPPORTED CHECK_SHLIBS 9635CHECK_SHLIBS CHECK_SHLIBS_SKIP
9637CHECK_SHLIBS_SKIP CHECK_SHLIBS_SUPPORTED 9636CHECK_SHLIBS_SUPPORTED CHECK_SHLIBS_TOXIC
9638CHECK_SHLIBS_TOXIC CHECK_SSP 9637CHECK_SSP CHECK_SSP_SKIP
9639CHECK_SSP_SKIP CHECK_SSP_SUPPORTED 9638CHECK_SSP_SUPPORTED CHECK_STRIPPED
9640CHECK_STRIPPED CHECK_STRIPPED_SKIP 9639CHECK_STRIPPED_SKIP CHECK_WRKREF
9641CHECK_WRKREF CHECK_WRKREF_EXTRA_DIRS 9640CHECK_WRKREF_EXTRA_DIRS CHECK_WRKREF_SKIP
9642CHECK_WRKREF_SKIP CLAMAV_DBDIR 9641CLAMAV_DBDIR CLAMAV_GROUP
9643CLAMAV_GROUP CLAMAV_USER 9642CLAMAV_USER CLANGBASE
9644CLANGBASE CLEANDEPENDS 9643CLEANDEPENDS CMAKE_DEPENDENCIES_REWRITE
9645CMAKE_DEPENDENCIES_REWRITE CMAKE_INSTALL_NAME_DIR 9644CMAKE_INSTALL_NAME_DIR CMAKE_INSTALL_PREFIX
9646CMAKE_INSTALL_PREFIX CMAKE_MODULE_PATH_OVERRIDE 9645CMAKE_MODULE_PATH_OVERRIDE CMAKE_PKGSRC_BUILD_FLAGS
9647CMAKE_PKGSRC_BUILD_FLAGS CMAKE_PREFIX_PATH 9646CMAKE_PREFIX_PATH CMAKE_USE_GNU_INSTALL_DIRS
9648CMAKE_USE_GNU_INSTALL_DIRS COMMON_LISP_DOCFILES 
9649COMMON_LISP_EXAMPLES COMMON_LISP_EXTRAFILES 
9650COMMON_LISP_PACKAGES COMMON_LISP_SYSTEM 
9651COMPILER_RPATH_FLAG COMPILER_USE_SYMLINKS 9647COMPILER_RPATH_FLAG COMPILER_USE_SYMLINKS
9652CONFIGURE_ARGS CONFIGURE_DIRS 9648CONFIGURE_ARGS CONFIGURE_DIRS
9653CONFIGURE_ENV CONFIGURE_ENV_SHELL 9649CONFIGURE_ENV CONFIGURE_ENV_SHELL
9654CONFIGURE_HAS_INFODIR CONFIGURE_HAS_MANDIR 9650CONFIGURE_HAS_INFODIR CONFIGURE_HAS_MANDIR
9655CONFIGURE_SCRIPT CONFIG_SHELL 9651CONFIGURE_SCRIPT CONFIG_SHELL
9656CONFIG_SHELL_FLAGS CONF_FILES 9652CONFIG_SHELL_FLAGS CONF_FILES
9657CONF_FILES_MODE CONF_FILES_PERMS 9653CONF_FILES_MODE CONF_FILES_PERMS
9658CONSERVER_DEFAULTHOST CONSERVER_DEFAULTPORT 9654CONSERVER_DEFAULTHOST CONSERVER_DEFAULTPORT
9659CP CPP 9655CP CPP
9660CPP_PRECOMP_FLAGS CREATE_WRKDIR_SYMLINK 9656CPP_PRECOMP_FLAGS CREATE_WRKDIR_SYMLINK
9661CROSSBASE CTFCONVERT 9657CROSSBASE CTFCONVERT
9662CTF_FILES_SKIP CTF_SUPPORTED 9658CTF_FILES_SKIP CTF_SUPPORTED
9663CTYPE CUPS_GROUP 9659CTYPE CUPS_GROUP
9664CUPS_SYSTEM_GROUPS CUPS_USER 9660CUPS_SYSTEM_GROUPS CUPS_USER
9665CURSES_DEFAULT CURSES_TYPE 9661CURSES_DEFAULT CURSES_TYPE
9666CVS_EXTRACTDIR CVS_MODULE 9662CXX CYRUS_GROUP
9667CVS_PROJECT CVS_REPOSITORIES 9663CYRUS_IDLE CYRUS_USER
9668CVS_ROOT CVS_ROOT_GNU 9664DAEMONTOOLS_GROUP DAEMONTOOLS_LOG_USER
9669CVS_ROOT_NONGNU CVS_ROOT_SOURCEFORGE 9665DARWIN_NO_SYSTEM_LIBS DARWIN_REQUIRES_FILTER
9670CVS_TAG CXX 9666DBUS_GROUP DBUS_USER
9671CYRUS_GROUP CYRUS_IDLE 9667DEFANG_GROUP DEFANG_USER
9672CYRUS_USER DAEMONTOOLS_GROUP 9668DEFAULT_ACCEPTABLE_LICENSES DEFAULT_DISTFILES
9673DAEMONTOOLS_LOG_USER DARWIN_NO_SYSTEM_LIBS 9669DEFAULT_IRC_SERVER DEFAULT_SERIAL_DEVICE
9674DARWIN_REQUIRES_FILTER DBUS_GROUP 9670DEF_UMASK DEINSTALLDEPENDS
9675DBUS_USER DEFANG_GROUP 9671DEINSTALL_SRC DEINSTALL_TEMPLATES
9676DEFANG_USER DEFAULT_ACCEPTABLE_LICENSES 9672DELAYED_ERROR_MSG DELAYED_WARNING_MSG
9677DEFAULT_DISTFILES DEFAULT_IRC_SERVER 9673DEPENDS DEPENDS_TARGET
9678DEFAULT_SERIAL_DEVICE DEF_UMASK 9674DEPENDS_TYPE DESTDIR
9679DEINSTALLDEPENDS DEINSTALL_SRC 9675DESTDIR_VARNAME DIALER_GROUP
9680DEINSTALL_TEMPLATES DELAYED_ERROR_MSG 9676DIGEST_REQD DISTDIR
9681DELAYED_WARNING_MSG DEPENDS 9677DISTFILES DISTINFO_FILE
9682DEPENDS_TARGET DEPENDS_TYPE 9678DISTNAME DIST_PATH
9683DESTDIR DESTDIR_VARNAME 9679DIST_SUBDIR DJBDNS_AXFR_USER
9684DIALER_GROUP DIGEST_REQD 9680DJBDNS_CACHE_USER DJBDNS_DJBDNS_GROUP
9685DISTDIR DISTFILES 9681DJBDNS_LOG_USER DJBDNS_RBL_USER
9686DISTINFO_FILE DISTNAME 9682DJBDNS_TINY_USER DLOPEN_REQUIRE_PTHREADS
9687DIST_PATH DIST_SUBDIR 9683DL_AUTO_VARS DL_CFLAGS
9688DJBDNS_AXFR_USER DJBDNS_CACHE_USER 9684DL_LDFLAGS DL_LIBS
9689DJBDNS_DJBDNS_GROUP DJBDNS_LOG_USER 9685DNS DOCOWN
9690DJBDNS_RBL_USER DJBDNS_TINY_USER 9686DOWNLOADED_DISTFILE DQCACHE_GROUP
9691DLOPEN_REQUIRE_PTHREADS DL_AUTO_VARS 9687DQCACHE_USER DT_LAYOUT
9692DL_CFLAGS DL_LDFLAGS 9688DYNAMIC_SITES_CMD DYNAMIC_SITES_SCRIPT
9693DL_LIBS DNS 9689ECHO ECHO_N
9694DOCOWN DOWNLOADED_DISTFILE 9690ELK_GUI EMACS_TYPE
9695DQCACHE_GROUP DQCACHE_USER 9691EMULDIR EMULSUBDIR
9696DT_LAYOUT DYNAMIC_SITES_CMD 9692EMULSUBDIRSLASH EMUL_ARCH
9697DYNAMIC_SITES_SCRIPT ECHO 9693EMUL_DISTRO EMUL_EXEC_FMT
9698ECHO_N ELK_GUI 9694EMUL_IS_NATIVE EMUL_MODULES
9699EMACS_TYPE EMULDIR 9695EMUL_OPSYS EMUL_PKG_FMT
9700EMULSUBDIR EMULSUBDIRSLASH 9696EMUL_PLATFORM EMUL_PLATFORMS
9701EMUL_ARCH EMUL_DISTRO 9697EMUL_PREFER EMUL_REQD
9702EMUL_EXEC_FMT EMUL_IS_NATIVE 9698EMUL_TYPE ERROR_MSG
9703EMUL_MODULES EMUL_OPSYS 9699EXIM_GROUP EXIM_USER
9704EMUL_PKG_FMT EMUL_PLATFORM 9700EXPORT_SYMBOLS_LDFLAGS EXTRACTOR
9705EMUL_PLATFORMS EMUL_PREFER 9701EXTRACT_CMD EXTRACT_CMD_DEFAULT
9706EMUL_REQD EMUL_TYPE 9702EXTRACT_DIR EXTRACT_ELEMENTS
9707ERROR_MSG EXIM_GROUP 9703EXTRACT_ENV EXTRACT_ONLY
9708EXIM_USER EXPORT_SYMBOLS_LDFLAGS 9704EXTRACT_OPTS EXTRACT_SUFX
9709EXTRACTOR EXTRACT_CMD 9705EXTRACT_USING FAIL
9710EXTRACT_CMD_DEFAULT EXTRACT_DIR 9706FAILOVER_FETCH FAIL_MSG
9711EXTRACT_ELEMENTS EXTRACT_ENV 9707FAKE_NCURSES FAM
9712EXTRACT_ONLY EXTRACT_OPTS 9708FAM_ACCEPTED FAM_DEFAULT
9713EXTRACT_SUFX EXTRACT_USING 9709FAM_SERVER FCPATH
9714FAIL FAILOVER_FETCH 9710FEATURE_CPPFLAGS FEATURE_LDFLAGS
9715FAIL_MSG FAKE_NCURSES 9711FEATURE_LIBS FETCH_AFTER_ARGS
9716FAM FAM_ACCEPTED 9712FETCH_BEFORE_ARGS FETCH_CMD
9717FAM_DEFAULT FAM_SERVER 9713FETCH_OUTPUT_ARGS FETCH_PROXY
9718FCPATH FEATURE_CPPFLAGS 9714FETCH_RESUME_ARGS FETCH_TIMEOUT
9719FEATURE_LDFLAGS FEATURE_LIBS 9715FETCH_USE_IPV4_ONLY FETCH_USING
9720FETCH_AFTER_ARGS FETCH_BEFORE_ARGS 9716FILES_SUBST FILES_SUBST_SED
9721FETCH_CMD FETCH_OUTPUT_ARGS 9717FIX_SYSTEM_HEADERS FONTS_DIRS
9722FETCH_PROXY FETCH_RESUME_ARGS 
9723FETCH_TIMEOUT FETCH_USE_IPV4_ONLY 
9724FETCH_USING FILES_SUBST 
9725FILES_SUBST_SED FIX_SYSTEM_HEADERS 
9726FONTDIR FONTS_DIRS 
9727FONTS_VERBOSE FOO_HACKS_MK 9718FONTS_VERBOSE FOO_HACKS_MK
9728FOSSIL_EXTRACTDIR FOSSIL_REPO 
9729FOSSIL_REPOSITORIES FOSSIL_VERSION 
9730FOX_USE_XUNICODE FREEWNN_GROUP 9719FOX_USE_XUNICODE FREEWNN_GROUP
9731FREEWNN_USER FTP_PKG_URL_DIR 9720FREEWNN_USER FTP_PKG_URL_DIR
9732FTP_PKG_URL_HOST GAMEDATAMODE 9721FTP_PKG_URL_HOST GAMEDATAMODE
9733GAMEDATA_PERMS GAMEDIRMODE 9722GAMEDATA_PERMS GAMEDIRMODE
9734GAMEDIR_PERMS GAMEGRP 9723GAMEDIR_PERMS GAMEGRP
9735GAMEMODE GAMEOWN 9724GAMEMODE GAMEOWN
9736GAMES_GROUP GAMES_USER 9725GAMES_GROUP GAMES_USER
9737GCC GCCBASE 9726GCC GCCBASE
9738GCC_REQD GCC_VERSION_SUFFIX 9727GCC_REQD GCC_VERSION_SUFFIX
9739GEM_BUILD GEM_CLEANBUILD 9728GEM_BUILD GEM_CLEANBUILD
9740GEM_CLEANBUILD_EXTENSIONS GEM_DOCDIR 9729GEM_CLEANBUILD_EXTENSIONS GEM_DOCDIR
9741GEM_EXTSDIR GEM_HOME 9730GEM_EXTSDIR GEM_HOME
9742GEM_KEEPBUILD GEM_LIBDIR 9731GEM_KEEPBUILD GEM_LIBDIR
9743GEM_NAME GEM_PATH 9732GEM_NAME GEM_PATH
9744GEM_PLUGINSDIR GEM_SPECFILE 9733GEM_PLUGINSDIR GEM_SPECFILE
9745GENERATE_PLIST GHC 9734GENERATE_PLIST GHC
9746GHOSTSCRIPT_REQD GITHUB_PROJECT 9735GHOSTSCRIPT_REQD GITHUB_PROJECT
9747GITHUB_RELEASE GITHUB_SUBMODULES 9736GITHUB_RELEASE GITHUB_SUBMODULES
9748GITHUB_TAG GITHUB_TYPE 9737GITHUB_TAG GITHUB_TYPE
9749GITLAB_PROJECT GITLAB_TAG 9738GITLAB_PROJECT GITLAB_RELEASE
9750GITLAB_TYPE GIT_BRANCH 9739GITLAB_SUBMODULES GITLAB_TAG
9751GIT_ENV GIT_EXTRACTDIR 9740GITLAB_TYPE GNU
9752GIT_REPO GIT_REPOSITORIES 9741GNU_CONFIGURE GNU_CONFIGURE_INFODIR
9753GIT_REVISION GIT_TAG 9742GNU_CONFIGURE_MANDIR GNU_CONFIGURE_QUIET
9754GNU GNU_CONFIGURE 9743GNU_CONFIGURE_STRICT GODEP_REDIRECTS
9755GNU_CONFIGURE_INFODIR GNU_CONFIGURE_MANDIR 9744GO_BUILD_PATTERN GO_DEPS
9756GNU_CONFIGURE_QUIET GNU_CONFIGURE_STRICT 9745GO_DIST_BASE GO_EXTRA_MOD_DIRS
9757GODEP_REDIRECTS GO_BUILD_PATTERN 9746GO_MODULE_FILES GO_SRCPATH
9758GO_DEPS GO_DIST_BASE 9747GO_VERSION_DEFAULT GROUP_SPECIFIC_PKGS
9759GO_EXTRA_MOD_DIRS GO_MODULE_FILES 9748GRUB_NETWORK_CARDS GRUB_PRESET_COMMAND
9760GO_SRCPATH GO_VERSION_DEFAULT 9749GRUB_SCAN_ARGS GZIP
9761GROUP_SPECIFIC_PKGS GRUB_NETWORK_CARDS 
9762GRUB_PRESET_COMMAND GRUB_SCAN_ARGS 
9763GZIP HASKELL_COMPILER 
9764HASKELL_ENABLE_DYNAMIC_EXECUTABLE HASKELL_ENABLE_HADDOCK_DOCUMENTATION 9750HASKELL_ENABLE_DYNAMIC_EXECUTABLE HASKELL_ENABLE_HADDOCK_DOCUMENTATION
9765HASKELL_ENABLE_LIBRARY_PROFILING HASKELL_ENABLE_SHARED_LIBRARY 9751HASKELL_ENABLE_LIBRARY_PROFILING HASKELL_ENABLE_SHARED_LIBRARY
9766HASKELL_OPTIMIZATION_LEVEL HAS_CONFIGURE 9752HASKELL_OPTIMIZATION_LEVEL HAS_CONFIGURE
9767HEADER_TEMPLATES HG_REPO 9753HEADER_TEMPLATES HOMEPAGE
9768HG_REPOSITORIES HG_TAG 9754HOST_PKGTOOLS_ARGS HOST_SPECIFIC_PKGS
9769HOMEPAGE HOST_PKGTOOLS_ARGS 9755HOWL_GROUP HOWL_USER
9770HOST_SPECIFIC_PKGS HOWL_GROUP 9756ICCBASE ICECAST_CHROOTDIR
9771HOWL_USER ICCBASE 9757ICON_THEMES IDOBASE
9772ICECAST_CHROOTDIR ICON_THEMES 9758IGNORE_CCACHE IGNORE_INFO_DIRS
9773IDOBASE IGNORE_CCACHE 9759IGNORE_INTERACTIVE_FETCH IMAKE
9774IGNORE_INFO_DIRS IGNORE_INTERACTIVE_FETCH 9760IMAKEOPTS IMAKE_MAKE
9775IMAKE IMAKEOPTS 9761IMAKE_MANINSTALL IMAP_UW_CCLIENT_MBOX_FMT
9776IMAKE_MAKE IMAKE_MANINSTALL 9762IMDICTDIR INCOMPAT_CURSES
9777IMAP_UW_CCLIENT_MBOX_FMT IMDICTDIR 9763INFO_DIR INFO_FILES
9778INCOMPAT_CURSES INFO_DIR 9764INFO_FILES_VERBOSE INFO_MSG
9779INFO_FILES INFO_FILES_VERBOSE 9765INIT_SYSTEM INN_DATA_DIR
9780INFO_MSG INIT_SYSTEM 9766INN_GROUP INN_USER
9781INN_DATA_DIR INN_GROUP 9767INSTALLATION_DIRS INSTALLATION_DIRS_FROM_PLIST
9782INN_USER INSTALLATION_DIRS 9768INSTALL_ENV INSTALL_SH_OVERRIDE
9783INSTALLATION_DIRS_FROM_PLIST INSTALL_ENV 9769INSTALL_SRC INSTALL_TEMPLATES
9784INSTALL_SH_OVERRIDE INSTALL_SRC 9770INSTALL_UNSTRIPPED IRCD_HYBRID_IRC_GROUP
9785INSTALL_TEMPLATES INSTALL_UNSTRIPPED 9771IRCD_HYBRID_IRC_USER IRCD_HYBRID_MAXCONN
9786IRCD_HYBRID_IRC_GROUP IRCD_HYBRID_IRC_USER 9772IRCD_HYBRID_NICLEN IRCD_HYBRID_SYSLOG_EVENTS
9787IRCD_HYBRID_MAXCONN IRCD_HYBRID_NICLEN 9773IRCD_HYBRID_SYSLOG_FACILITY IRCD_HYBRID_TOPICLEN
9788IRCD_HYBRID_SYSLOG_EVENTS IRCD_HYBRID_SYSLOG_FACILITY 9774IRIX IRRD_USE_PGP
9789IRCD_HYBRID_TOPICLEN IRIX 9775JABBERD_GROUP JABBERD_LOGDIR
9790IRRD_USE_PGP JABBERD_GROUP 9776JABBERD_PIDDIR JABBERD_SPOOLDIR
9791JABBERD_LOGDIR JABBERD_PIDDIR 9777JABBERD_USER JAVA_BINPREFIX
9792JABBERD_SPOOLDIR JABBERD_USER 9778JAVA_CLASSPATH JAVA_HOME
9793JAVA_APP_PATH JAVA_APP_TARGETS 9779JAVA_LD_LIBRARY_PATH JAVA_NAME
9794JAVA_BINPREFIX JAVA_CLASSPATH 9780JAVA_UNLIMIT JAVA_WRAPPERS
9795JAVA_HOME JAVA_LD_LIBRARY_PATH 9781JPEG_ACCEPTED JPEG_DEFAULT
9796JAVA_NAME JAVA_UNLIMIT 9782KERBEROS KERMIT_SUID_UUCP
9797JAVA_WRAPPERS JPEG_ACCEPTED 9783KJS_USE_PCRE KNEWS_DOMAIN_FILE
9798JPEG_DEFAULT KERBEROS 9784KNEWS_DOMAIN_NAME KRB5_ACCEPTED
9799KERMIT_SUID_UUCP KJS_USE_PCRE 9785KRB5_DEFAULT LANGUAGES
9800KNEWS_DOMAIN_FILE KNEWS_DOMAIN_NAME 9786LAPACKE_LIBS LAPACK_LIBS
9801KRB5_ACCEPTED KRB5_DEFAULT 9787LATEX2HTML_ICONPATH LDCONFIG_ADD_CMD
9802LANGUAGES LAPACKE_LIBS 9788LDCONFIG_REMOVE_CMD LDD
9803LAPACK_LIBS LATEX2HTML_ICONPATH 9789LEAFNODE_DATA_DIR LEAFNODE_GROUP
9804LDCONFIG_ADD_CMD LDCONFIG_REMOVE_CMD 9790LEAFNODE_USER LIBDVDCSS_HOMEPAGE
9805LDD LEAFNODE_DATA_DIR 9791LIBDVDCSS_MASTER_SITES LIBRSVG_TYPE
9806LEAFNODE_GROUP LEAFNODE_USER 9792LIBTOOL LIBTOOLIZE_PLIST
9807LIBDVDCSS_HOMEPAGE LIBDVDCSS_MASTER_SITES 9793LIBTOOL_M4_OVERRIDE LIBUSB_TYPE
9808LIBRSVG_TYPE LIBTOOL 9794LICENSE LINKER_RPATH_FLAG
9809LIBTOOLIZE_PLIST LIBTOOL_M4_OVERRIDE 9795LINK_RPATH_FLAG LINUX_LOCALES
9810LIBUSB_TYPE LICENSE 
9811LINKER_RPATH_FLAG LINK_RPATH_FLAG 
9812LINUX_BASE_NODEPS LINUX_BASE_PREFERRED 
9813LINUX_BASE_REQUIRED LINUX_LOCALES 
9814LOCALBASE LOCALBASE_LOCKTYPE 9796LOCALBASE LOCALBASE_LOCKTYPE
9815LOCALPATCHES LOVE_DATA 9797LOCALPATCHES LOVE_DATA
9816LOVE_GAME LOVE_VERSION 9798LOVE_GAME LOVE_VERSION
9817LP32PLATFORMS LP64PLATFORMS 9799LP32PLATFORMS LP64PLATFORMS
9818LUA_BUSTED_ARGS LUA_CDIR 9800LUA_BUSTED_ARGS LUA_CDIR
9819LUA_COMPILER LUA_DOCDIR 9801LUA_COMPILER LUA_DOCDIR
9820LUA_EXAMPLESDIR LUA_INCDIR 9802LUA_EXAMPLESDIR LUA_INCDIR
9821LUA_INTERPRETER LUA_LDIR 9803LUA_INTERPRETER LUA_LDIR
9822LUA_LINKER_MAGIC LUA_PKGPREFIX 9804LUA_LINKER_MAGIC LUA_PKGPREFIX
9823LUA_SELF_CONFLICT LUA_USE_BUSTED 9805LUA_SELF_CONFLICT LUA_USE_BUSTED
9824LUA_VERSIONS_ACCEPTED LUA_VERSIONS_INCOMPATIBLE 9806LUA_VERSIONS_ACCEPTED LUA_VERSIONS_INCOMPATIBLE
9825LUA_VERSION_DEFAULT LUA_VERSION_REQD 9807LUA_VERSION_DEFAULT LUA_VERSION_REQD
9826Lua MACHINE_PLATFORM 9808Lua MACHINE_PLATFORM
9827MAILAGENT_DOMAIN MAILAGENT_EMAIL 9809MAILAGENT_DOMAIN MAILAGENT_EMAIL
9828MAILAGENT_FQDN MAILAGENT_ORGANIZATION 9810MAILAGENT_FQDN MAILAGENT_ORGANIZATION
9829MAJORDOMO_HOMEDIR MAJOR_OS_VERSION 9811MAJORDOMO_HOMEDIR MAKEINFO_ARGS
9830MAKEINFO_ARGS MAKE_DIRS 9812MAKE_DIRS MAKE_DIRS_PERMS
9831MAKE_DIRS_PERMS MAKE_ENV 9813MAKE_ENV MAKE_FILE
9832MAKE_FILE MAKE_FLAGS 9814MAKE_FLAGS MAKE_JOBS
9833MAKE_JOBS MAKE_JOBS_SAFE 9815MAKE_JOBS_SAFE MAKE_PROGRAM
9834MAKE_PROGRAM MANCOMPRESSED_IF_MANZ 9816MANCOMPRESSED_IF_MANZ MANINSTALL
9835MANINSTALL MANZ 9817MANZ MASTER_SITES
9836MASTER_SITES MASTER_SITE_BACKUP 9818MASTER_SITE_BACKUP MASTER_SITE_LOCAL
9837MASTER_SITE_LOCAL MASTER_SITE_MOZILLA 9819MASTER_SITE_MOZILLA MASTER_SITE_OVERRIDE
9838MASTER_SITE_OVERRIDE MASTER_SITE_PERL_CPAN 9820MASTER_SITE_PERL_CPAN MASTER_SORT
9839MASTER_SORT MASTER_SORT_RANDOM 9821MASTER_SORT_RANDOM MASTER_SORT_REGEX
9840MASTER_SORT_REGEX MECAB_CHARSET 9822MECAB_CHARSET MEDIATOMB_GROUP
9841MEDIATOMB_GROUP MEDIATOMB_USER 9823MEDIATOMB_USER MIPSPROBASE
9842MIPSPROBASE MIREDO_GROUP 9824MIREDO_GROUP MIREDO_USER
9843MIREDO_USER MISSING_FEATURES 9825MISSING_FEATURES MKDIR
9844MKDIR MKPIE_SUPPORTED 9826MKPIE_SUPPORTED MLDONKEY_GROUP
9845MLDONKEY_GROUP MLDONKEY_HOME 9827MLDONKEY_HOME MLDONKEY_USER
9846MLDONKEY_USER MONOTONE_GROUP 9828MONOTONE_GROUP MONOTONE_USER
9847MONOTONE_USER MOTIFBASE 9829MOTIFBASE MOTIF_TYPE
9848MOTIF_TYPE MOTIF_TYPE_DEFAULT 9830MOTIF_TYPE_DEFAULT MPI_TYPE
9849MPI_TYPE MSGFMT_STRIP_MSGCTXT 9831MSGFMT_STRIP_MSGCTXT MSGFMT_STRIP_MSGID_PLURAL
9850MSGFMT_STRIP_MSGID_PLURAL MTOOLS_ENABLE_FLOPPYD 9832MTOOLS_ENABLE_FLOPPYD MV
9851MUST MV 
9852MYSQL_CHARSET MYSQL_DATADIR 9833MYSQL_CHARSET MYSQL_DATADIR
9853MYSQL_EXTRA_CHARSET MYSQL_GROUP 9834MYSQL_EXTRA_CHARSET MYSQL_GROUP
9854MYSQL_USER MYSQL_VERSION 9835MYSQL_USER MYSQL_VERSION
9855MYSQL_VERSIONS_ACCEPTED MYSQL_VERSIONS_ALL 9836MYSQL_VERSIONS_ACCEPTED MYSQL_VERSIONS_ALL
9856MYSQL_VERSION_DEFAULT NAGIOSCMD_GROUP 9837MYSQL_VERSION_DEFAULT NAGIOSCMD_GROUP
9857NAGIOSDIR NAGIOS_GROUP 9838NAGIOSDIR NAGIOS_GROUP
9858NAGIOS_USER NATIVE_APPEND_ABI 9839NAGIOS_USER NATIVE_APPEND_ABI
9859NATIVE_APPEND_ELF NATIVE_EXEC_FMT 9840NATIVE_APPEND_ELF NATIVE_EXEC_FMT
9860NATIVE_MACHINE_PLATFORM NATIVE_OBJECT_FMT 9841NATIVE_MACHINE_PLATFORM NATIVE_OBJECT_FMT
9861NBPAX_PROGRAM_PREFIX NETBSD_LOGIN_NAME 9842NBPAX_PROGRAM_PREFIX NETBSD_LOGIN_NAME
9862NMH_EDITOR NMH_MTA 9843NMH_EDITOR NMH_MTA
9863NMH_PAGER NODE_VERSIONS_ACCEPTED 9844NMH_PAGER NODE_VERSIONS_ACCEPTED
9864NODE_VERSIONS_INCOMPATIBLE NODE_VERSION_DEFAULT 9845NODE_VERSIONS_INCOMPATIBLE NODE_VERSION_DEFAULT
9865NODE_VERSION_REQD NOLOGIN 9846NODE_VERSION_REQD NOLOGIN
9866NOTE NOT_FOR_PLATFORM 9847NOTE NOT_FOR_PLATFORM
9867NOT_PAX_ASLR_SAFE NOT_PAX_MPROTECT_SAFE 9848NOT_PAX_ASLR_SAFE NOT_PAX_MPROTECT_SAFE
9868NO_BUILD NO_CHECKSUM 9849NO_BUILD NO_CHECKSUM
9869NO_CONFIGURE NO_SKIP 9850NO_CONFIGURE NO_SKIP
9870NS_PREFERRED NULLMAILER_GROUP 9851NS_PREFERRED NULLMAILER_GROUP
9871NULLMAILER_USER OASIS 9852NULLMAILER_USER OASIS
9872OASIS_BUILD_ARGS OBJHOSTNAME 9853OASIS_BUILD_ARGS OBJHOSTNAME
9873OBJMACHINE OCAML_FINDLIB_DIRS 9854OBJMACHINE OCAML_FINDLIB_DIRS
9874OCAML_FINDLIB_REGISTER OCAML_FINDLIB_REGISTER_VERBOSE 9855OCAML_FINDLIB_REGISTER OCAML_FINDLIB_REGISTER_VERBOSE
9875OCAML_SITELIBDIR OCAML_TOPKG_DOCDIR 9856OCAML_SITELIBDIR OCAML_TOPKG_DOCDIR
9876OCAML_USE_DUNE OCAML_USE_FINDLIB 9857OCAML_USE_DUNE OCAML_USE_FINDLIB
9877OCAML_USE_OASIS OCAML_USE_OASIS_DYNRUN 9858OCAML_USE_OASIS OCAML_USE_OASIS_DYNRUN
9878OCAML_USE_OPAM OCAML_USE_OPT_COMPILER 9859OCAML_USE_OPAM OCAML_USE_TOPKG
9879OCAML_USE_TOPKG OMF 9860OMF ONLY_FOR_COMPILER
9880ONLY_FOR_COMPILER ONLY_FOR_PLATFORM 9861ONLY_FOR_PLATFORM OPENSSH_CHROOT
9881OPENSSH_CHROOT OPENSSH_GROUP 9862OPENSSH_GROUP OPENSSH_USER
9882OPENSSH_USER OPSYS 9863OPSYS OPSYS_EMULDIR
9883OPSYS_EMULDIR OPSYS_VERSION 9864OPSYS_VERSION OS
9884OS OSS_TYPE 9865OSS_TYPE OSX
9885OSX OSX_TOLERATE_SDK_SKEW 9866OSX_TOLERATE_SDK_SKEW OS_VARIANT
9886OS_HAVE_ALSA OS_HAVE_RCD 9867OS_VERSION OTF_FONTS_DIR
9887OS_VARIANT OS_VERSION 9868OVERRIDE_DIRDEPTH OVERRIDE_GEMSPEC
9888OTF_FONTS_DIR OVERRIDE_DIRDEPTH 9869OVERRIDE_GNU_CONFIG_SCRIPTS OWN_DIRS
9889OVERRIDE_GEMSPEC OVERRIDE_GNU_CONFIG_SCRIPTS 
9890OVERRIDE_ROCKSPEC OWN_DIRS 
9891OWN_DIRS_PERMS P4GROUP 9870OWN_DIRS_PERMS P4GROUP
9892P4PORT P4ROOT 9871P4PORT P4ROOT
9893P4USER PACKAGES 9872P4USER PACKAGES
9894PALMOS_DEFAULT_SDK PAMBASE 9873PALMOS_DEFAULT_SDK PAMBASE
9895PAM_DEFAULT PAPERSIZE 9874PAM_DEFAULT PAPERSIZE
9896PASSIVE_FETCH PATCHDIR 9875PASSIVE_FETCH PATCHDIR
9897PATCHFILES PATCH_ARGS 9876PATCHFILES PATCH_ARGS
9898PATCH_DEBUG PATCH_DIST_ARGS 9877PATCH_DEBUG PATCH_DIST_ARGS
9899PATCH_DIST_CAT PATCH_DIST_STRIP 9878PATCH_DIST_CAT PATCH_DIST_STRIP
9900PATCH_FUZZ_FACTOR PATCH_STRIP 9879PATCH_FUZZ_FACTOR PATCH_STRIP
9901PATH PCCBASE 9880PATH PCCBASE
9902PEAR PEAR_CHANNEL 
9903PEAR_CHANNEL_ALIAS PEAR_CHANNEL_VERSION 
9904PEAR_CMD PEAR_LIB 9881PEAR_CMD PEAR_LIB
9905PEAR_PACKAGE_XML PERL5 9882PEAR_PACKAGE_XML PERL5
9906PERL5_CONFIGURE PERL5_CONFIGURE_DIRS 9883PERL5_CONFIGURE PERL5_CONFIGURE_DIRS
9907PERL5_LDFLAGS PERL5_LICENSE 9884PERL5_LDFLAGS PERL5_LICENSE
9908PERL5_MODULE_TYPE PERL5_PACKLIST 9885PERL5_MODULE_TYPE PERL5_PACKLIST
9909PERL5_PACKLIST_DIR PERL5_PERLBASE 9886PERL5_PACKLIST_DIR PERL5_PERLBASE
9910PERL5_SITEBASE PERL5_USE_PACKLIST 9887PERL5_SITEBASE PERL5_USE_PACKLIST
9911PERL5_VENDORBASE PFCTL 9888PERL5_VENDORBASE PFCTL
9912PFVAR_H PF_VERSION 9889PFVAR_H PF_VERSION
9913PGGROUP PGHOME 9890PGGROUP PGHOME
9914PGPKGSRCDIR PGSQL_TYPE 9891PGPKGSRCDIR PGSQL_TYPE
9915PGSQL_VERSION PGSQL_VERSIONS_ACCEPTED 9892PGSQL_VERSION PGSQL_VERSIONS_ACCEPTED
9916PGSQL_VERSION_DEFAULT PGUSER 9893PGSQL_VERSION_DEFAULT PGUSER
9917PG_LIB_EXT PHP 9894PG_LIB_EXT PHP
9918PHPCOMMON_MK PHPPKGSRCDIR 9895PHPCOMMON_MK PHPPKGSRCDIR
9919PHP_BASE_VERS PHP_CHECK_INSTALLED 9896PHP_BASE_VERS PHP_CHECK_INSTALLED
9920PHP_EXTENSION_DIR PHP_INITIAL_TEENY 9897PHP_EXTENSION_DIR PHP_INITIAL_TEENY
9921PHP_PKG_PREFIX PHP_VERSION 9898PHP_PKG_PREFIX PHP_VERSION
9922PHP_VERSIONS_ACCEPTED PHP_VERSIONS_INCOMPATIBLE 9899PHP_VERSIONS_ACCEPTED PHP_VERSIONS_INCOMPATIBLE
9923PHP_VERSION_DEFAULT PHP_VERSION_REQD 9900PHP_VERSION_DEFAULT PHP_VERSION_REQD
9924PILRC_USE_GTK PKGCONFIG_BASE 9901PILRC_USE_GTK PKGCONFIG_BASE
9925PKGCONFIG_FILE PKGCONFIG_OVERRIDE 9902PKGCONFIG_FILE PKGCONFIG_OVERRIDE
9926PKGCONFIG_OVERRIDE_STAGE PKGDIR 9903PKGCONFIG_OVERRIDE_STAGE PKGDIR
9927PKGGNUDIR PKGINFODIR 9904PKGGNUDIR PKGINFODIR
9928PKGLOCALEDIR PKGMANDIR 9905PKGLOCALEDIR PKGMANDIR
9929PKGNAME PKGNAME_REQD 9906PKGNAME PKGNAME_REQD
9930PKGPATH PKGREVISION 9907PKGPATH PKGREVISION
9931PKGSRC_BLAS_TYPES PKGSRC_CHANGES 9908PKGSRC_BLAS_TYPES PKGSRC_CHANGES
9932PKGSRC_COMPILER PKGSRC_KEEP_BIN_PKGS 9909PKGSRC_COMPILER PKGSRC_KEEP_BIN_PKGS
9933PKGSRC_LOCKTYPE PKGSRC_MAKE_ENV 9910PKGSRC_LOCKTYPE PKGSRC_MAKE_ENV
9934PKGSRC_MESSAGE_RECIPIENTS PKGSRC_MKPIE 9911PKGSRC_MESSAGE_RECIPIENTS PKGSRC_MKPIE
9935PKGSRC_MKREPRO PKGSRC_OVERRIDE_MKPIE 9912PKGSRC_MKREPRO PKGSRC_OVERRIDE_MKPIE
9936PKGSRC_RUN_TEST PKGSRC_SETENV 9913PKGSRC_RUN_TEST PKGSRC_SETENV
9937PKGSRC_SLEEPSECS PKGSRC_TODO 9914PKGSRC_SLEEPSECS PKGSRC_TODO
9938PKGSRC_USE_CTF PKGSRC_USE_FORTIFY 9915PKGSRC_USE_CTF PKGSRC_USE_FORTIFY
9939PKGSRC_USE_RELRO PKGSRC_USE_SSP 9916PKGSRC_USE_RELRO PKGSRC_USE_SSP
9940PKGSRC_USE_STACK_CHECK PKGTASKS_DATAFILE 9917PKGSRC_USE_STACK_CHECK PKGTASKS_DATAFILE
9941PKGTOOLS_ARGS PKGTOOLS_ENV 9918PKGTOOLS_ARGS PKGTOOLS_ENV
9942PKG_ALTERNATIVES PKG_APACHE 9919PKG_ALTERNATIVES PKG_APACHE
9943PKG_APACHE_ACCEPTED PKG_APACHE_DEFAULT 9920PKG_APACHE_ACCEPTED PKG_APACHE_DEFAULT
9944PKG_BEST_EXISTS PKG_BUILD_OPTIONS 9921PKG_BEST_EXISTS PKG_BUILD_OPTIONS
9945PKG_COMPRESSION PKG_CONFIG 9922PKG_COMPRESSION PKG_CONFIG
9946PKG_CONFIG_PERMS PKG_CREATE_USERGROUP 9923PKG_CONFIG_PERMS PKG_CREATE_USERGROUP
9947PKG_DB_TMPDIR PKG_DEBUG_LEVEL 9924PKG_DB_TMPDIR PKG_DEBUG_LEVEL
9948PKG_DEFAULT_OPTIONS PKG_DESTDIR_SUPPORT 9925PKG_DEFAULT_OPTIONS PKG_DESTDIR_SUPPORT
9949PKG_DEVELOPER PKG_DISABLED_OPTIONS 9926PKG_DEVELOPER PKG_DISABLED_OPTIONS
9950PKG_FATAL_ERRORS PKG_FC 9927PKG_FATAL_ERRORS PKG_FC
9951PKG_FILELIST_CMD PKG_GECOS 9928PKG_FILELIST_CMD PKG_GECOS
9952PKG_GID PKG_GROUPS 9929PKG_GID PKG_GROUPS
9953PKG_GROUPS_VARS PKG_HOME 9930PKG_GROUPS_VARS PKG_HOME
9954PKG_INIT_SCRIPTS PKG_JAVA_HOME 9931PKG_INIT_SCRIPTS PKG_JAVA_HOME
9955PKG_JVM PKG_JVMS_ACCEPTED 9932PKG_JVM PKG_JVMS_ACCEPTED
9956PKG_JVM_DEFAULT PKG_LEGACY_OPTIONS 9933PKG_JVM_DEFAULT PKG_LEGACY_OPTIONS
9957PKG_LIBTOOL PKG_OPTIONS 9934PKG_LIBTOOL PKG_OPTIONS
9958PKG_OPTIONS_DEPRECATED_WARNINGS PKG_OPTIONS_LEGACY_OPTS 9935PKG_OPTIONS_DEPRECATED_WARNINGS PKG_OPTIONS_LEGACY_OPTS
9959PKG_OPTIONS_LEGACY_VARS PKG_OPTIONS_NONEMPTY_SETS 9936PKG_OPTIONS_LEGACY_VARS PKG_OPTIONS_NONEMPTY_SETS
9960PKG_OPTIONS_OPTIONAL_GROUPS PKG_OPTIONS_REQUIRED_GROUPS 9937PKG_OPTIONS_OPTIONAL_GROUPS PKG_OPTIONS_REQUIRED_GROUPS
9961PKG_OPTIONS_VAR PKG_PHP 9938PKG_OPTIONS_VAR PKG_PHP
9962PKG_PHP_MAJOR_VERS PKG_PHP_VERSION 9939PKG_PHP_MAJOR_VERS PKG_PHP_VERSION
9963PKG_RCD_SCRIPTS PKG_REFCOUNT_DBDIR 9940PKG_RCD_SCRIPTS PKG_REFCOUNT_DBDIR
9964PKG_REGISTER_SHELLS PKG_RESUME_TRANSFERS 9941PKG_REGISTER_SHELLS PKG_RESUME_TRANSFERS
9965PKG_SHELL PKG_SUGGESTED_OPTIONS 9942PKG_SHELL PKG_SUGGESTED_OPTIONS
9966PKG_SUPPORTED_OPTIONS PKG_SYSCONFBASE 9943PKG_SUPPORTED_OPTIONS PKG_SYSCONFBASE
9967PKG_SYSCONFBASEDIR PKG_SYSCONFDIR 9944PKG_SYSCONFBASEDIR PKG_SYSCONFDIR
9968PKG_SYSCONFDIR_PERMS PKG_SYSCONFSUBDIR 9945PKG_SYSCONFDIR_PERMS PKG_SYSCONFSUBDIR
9969PKG_SYSCONFVAR PKG_TOOLS_BIN 9946PKG_SYSCONFVAR PKG_TOOLS_BIN
9970PKG_UID PKG_UPDATE_FONTS_DB 9947PKG_UID PKG_UPDATE_FONTS_DB
9971PKG_USERS PKG_USERS_VARS 9948PKG_USERS PKG_USERS_VARS
9972PKG_VERBOSE PLEASE 9949PKG_VERBOSE PLEASE
9973PLIST PLIST_AWK 9950PLIST PLIST_AWK
9974PLIST_AWK_ENV PLIST_SRC 9951PLIST_AWK_ENV PLIST_SRC
9975PLIST_SUBST PLIST_TYPE 9952PLIST_SUBST PLIST_TYPE
9976PLIST_VARS POPTOP_USE_MPPE 9953PLIST_VARS POPTOP_USE_MPPE
9977POSSIBLE_GFORTRAN_VERSION POST_FETCH_HOOK 9954POSSIBLE_GFORTRAN_VERSION POST_FETCH_HOOK
9978PREFER PREFER_NATIVE 9955PREFER PREFER_NATIVE
9979PREFER_NATIVE_PTHREADS PREFER_PKGSRC 9956PREFER_NATIVE_PTHREADS PREFER_PKGSRC
9980PREFIX PREPEND_PATH 9957PREFIX PREPEND_PATH
9981PRE_ROOT_CMD PRIVILEGED_STAGES 9958PRE_ROOT_CMD PRIVILEGED_STAGES
9982PS PTHREAD_AUTO_VARS 9959PS PTHREAD_AUTO_VARS
9983PTHREAD_CFLAGS PTHREAD_LDFLAGS 9960PTHREAD_CFLAGS PTHREAD_LDFLAGS
9984PTHREAD_LIBS PTHREAD_OPTS 9961PTHREAD_LIBS PTHREAD_OPTS
9985PTHREAD_TYPE PVM_SSH 9962PTHREAD_TYPE PVM_SSH
9986PYPKGPREFIX PYTHON_FOR_BUILD_ONLY 9963PYPKGPREFIX PYTHON_FOR_BUILD_ONLY
9987PYTHON_SELF_CONFLICT PYTHON_VERSIONED_DEPENDENCIES 9964PYTHON_SELF_CONFLICT PYTHON_VERSIONED_DEPENDENCIES
9988PYTHON_VERSIONS_ACCEPTED PYTHON_VERSIONS_INCOMPATIBLE 9965PYTHON_VERSIONS_ACCEPTED PYTHON_VERSIONS_INCOMPATIBLE
9989PYTHON_VERSION_DEFAULT PYTHON_VERSION_REQD 9966PYTHON_VERSION_DEFAULT PYTHON_VERSION_REQD
9990PYVERSSUFFIX QMAILDIR 9967PYVERSSUFFIX QMAILDIR
9991QMAIL_ALIAS_USER QMAIL_DAEMON_USER 9968QMAIL_ALIAS_USER QMAIL_DAEMON_USER
9992QMAIL_LOG_USER QMAIL_NOFILES_GROUP 9969QMAIL_LOG_USER QMAIL_NOFILES_GROUP
9993QMAIL_PASSWD_USER QMAIL_QMAIL_GROUP 9970QMAIL_PASSWD_USER QMAIL_QMAIL_GROUP
9994QMAIL_QUEUE_DIR QMAIL_QUEUE_EXTRA 9971QMAIL_QUEUE_DIR QMAIL_QUEUE_EXTRA
9995QMAIL_QUEUE_USER QMAIL_REMOTE_USER 9972QMAIL_QUEUE_USER QMAIL_REMOTE_USER
9996QMAIL_ROOT_USER QMAIL_SEND_USER 9973QMAIL_ROOT_USER QMAIL_SEND_USER
9997QORE_LATEST_MODULE_API QORE_MODULE_API 9974QORE_LATEST_MODULE_API QORE_MODULE_API
9998QORE_MODULE_DIR QORE_USER_MODULE_DIR 9975QORE_MODULE_DIR QORE_USER_MODULE_DIR
9999QORE_VERSION QPOPPER_FAC 9976QORE_VERSION QPOPPER_FAC
10000QPOPPER_SPOOL_DIR QPOPPER_USER 9977QPOPPER_SPOOL_DIR QPOPPER_USER
10001RAKE_NAME RASMOL_DEPTH 9978RAKE_NAME RASMOL_DEPTH
10002RCD_DIR RCD_ORDER 
10003RCD_SCRIPTS RCD_SCRIPTS_DIR 9979RCD_SCRIPTS RCD_SCRIPTS_DIR
10004RCD_SCRIPTS_EXAMPLEDIR RCD_SCRIPTS_MODE 9980RCD_SCRIPTS_EXAMPLEDIR RCD_SCRIPTS_MODE
10005RCD_SCRIPTS_SHELL RCD_SCRIPT_SRC 9981RCD_SCRIPTS_SHELL RCD_SCRIPT_SRC
10006RCD_SUBR RDOC 9982RDOC READLINE_DEFAULT
10007READLINE_DEFAULT READLINE_TYPE 9983READLINE_TYPE REAL_ROOT_GROUP
10008REAL_ROOT_GROUP REAL_ROOT_USER 9984REAL_ROOT_USER RECURSIVE_MAKE
10009RECURSIVE_MAKE RELAY_CTRL_DIR 9985RELAY_CTRL_DIR RELRO_SUPPORTED
10010RELRO_SUPPORTED REPLACE_AWK 9986REPLACE_AWK REPLACE_BASH
10011REPLACE_BASH REPLACE_CSH 9987REPLACE_CSH REPLACE_KSH
10012REPLACE_KSH REPLACE_LUA 9988REPLACE_LUA REPLACE_NODEJS
10013REPLACE_NODEJS REPLACE_OCTAVE 9989REPLACE_OCTAVE REPLACE_PERL
10014REPLACE_PERL REPLACE_PERL6 9990REPLACE_PERL6 REPLACE_PHP
10015REPLACE_PHP REPLACE_PYTHON 9991REPLACE_PYTHON REPLACE_QORE
10016REPLACE_QORE REPLACE_R 9992REPLACE_R REPLACE_RUBY
10017REPLACE_RUBY REPLACE_RUBY_DIRS 9993REPLACE_RUBY_DIRS REPLACE_RUBY_PAT
10018REPLACE_RUBY_PAT REPLACE_SH 9994REPLACE_SH REPLACE_TEXLUA
10019REPLACE_TEXLUA REPLACE_WISH 9995REPLACE_WISH REQD_DIRS
10020REQD_DIRS REQD_DIRS_PERMS 9996REQD_DIRS_PERMS REQD_FILES
10021REQD_FILES REQD_FILES_MODE 9997REQD_FILES_MODE REQD_FILES_PERMS
10022REQD_FILES_PERMS RESOLV_AUTO_VARS 9998RESOLV_AUTO_VARS RESOLV_LDFLAGS
10023RESOLV_LDFLAGS RESOLV_LIBS 9999RESOLV_LIBS RM
10024RM ROCKSPEC_NAME 10000ROOT_CMD ROOT_GROUP
10025ROCKSPEC_SPECFILE ROOT_CMD 10001ROOT_USER RPCGEN
10026ROOT_GROUP ROOT_USER 10002RPM RPM2PKG_PLIST
10027RPCGEN RPM 10003RPM2PKG_PREFIX RPM2PKG_STAGE
10028RPM2PKG_PLIST RPM2PKG_PREFIX 10004RPM2PKG_STRIP RPM2PKG_SUBPREFIX
10029RPM2PKG_STAGE RPM2PKG_STRIP 10005RPMFILES RPMIGNOREPATH
10030RPM2PKG_SUBPREFIX RPMFILES 10006RPM_DB_PREFIX RSSH_CVS_PATH
10031RPMIGNOREPATH RPM_DB_PREFIX 10007RSSH_RDIST_PATH RSSH_RSYNC_PATH
10032RSSH_CVS_PATH RSSH_RDIST_PATH 10008RSSH_SCP_PATH RSSH_SFTP_SERVER_PATH
10033RSSH_RSYNC_PATH RSSH_SCP_PATH 10009RUBY RUBYGEM
10034RSSH_SFTP_SERVER_PATH RUBY 10010RUBYGEM_NAME RUBYGEM_OPTIONS
10035RUBYGEM RUBYGEM_NAME 10011RUBYGEM_VERBOSE RUBY_ABI_VERSION
10036RUBYGEM_OPTIONS RUBYGEM_VERBOSE 10012RUBY_ARCH RUBY_ARCHINC
10037RUBY_ABI_VERSION RUBY_ARCH 10013RUBY_ARCHLIB RUBY_BASE
10038RUBY_ARCHINC RUBY_ARCHLIB 10014RUBY_BASERIDIR RUBY_BUILD_DOCUMENT
10039RUBY_BASE RUBY_BASERIDIR 10015RUBY_DLEXT RUBY_DOC
10040RUBY_BUILD_DOCUMENT RUBY_DLEXT 10016RUBY_DYNAMIC_DIRS RUBY_EG
10041RUBY_DOC RUBY_DYNAMIC_DIRS 10017RUBY_ENCODING_ARG RUBY_EXTCONF
10042RUBY_EG RUBY_ENCODING_ARG 10018RUBY_EXTCONF_CHECK RUBY_EXTCONF_DEBUG
10043RUBY_EXTCONF RUBY_EXTCONF_CHECK 10019RUBY_EXTCONF_MAKEFILE RUBY_GEM_ARCH
10044RUBY_EXTCONF_DEBUG RUBY_EXTCONF_MAKEFILE 10020RUBY_GEM_BASE RUBY_INC
10045RUBY_GEM_ARCH RUBY_GEM_BASE 10021RUBY_LIB RUBY_LIB_BASE
10046RUBY_INC RUBY_LIB 10022RUBY_NAME RUBY_NOVERSION
10047RUBY_LIB_BASE RUBY_NAME 10023RUBY_PKGPREFIX RUBY_RAILS
10048RUBY_NOVERSION RUBY_PKGPREFIX 10024RUBY_RAILS52_VERSION RUBY_RAILS60_VERSION
10049RUBY_RAILS RUBY_RAILS52_VERSION 10025RUBY_RAILS61_VERSION RUBY_RAILS70_VERSION
10050RUBY_RAILS60_VERSION RUBY_RAILS61_VERSION 10026RUBY_RAILS_ACCEPTED RUBY_RAILS_DEFAULT
10051RUBY_RAILS70_VERSION RUBY_RAILS_ACCEPTED 10027RUBY_RAILS_REQD RUBY_RAILS_STRICT_DEP
10052RUBY_RAILS_DEFAULT RUBY_RAILS_REQD 10028RUBY_RIDIR RUBY_SETUP
10053RUBY_RAILS_STRICT_DEP RUBY_RIDIR 10029RUBY_SHLIB RUBY_SHLIBALIAS
10054RUBY_SETUP RUBY_SHLIB 10030RUBY_SHLIBVER RUBY_SIMPLE_INSTALL
10055RUBY_SHLIBALIAS RUBY_SHLIBVER 10031RUBY_SITEARCHLIB RUBY_SITELIB
10056RUBY_SIMPLE_INSTALL RUBY_SITEARCHLIB 10032RUBY_SITELIB_BASE RUBY_SITERIDIR
10057RUBY_SITELIB RUBY_SITELIB_BASE 10033RUBY_SLEXT RUBY_SRCDIR
10058RUBY_SITERIDIR RUBY_SLEXT 10034RUBY_STATICLIB RUBY_SUFFIX
10059RUBY_SRCDIR RUBY_STATICLIB 10035RUBY_SYSRIDIR RUBY_USE_PTHREAD
10060RUBY_SUFFIX RUBY_SYSRIDIR 10036RUBY_VENDORARCHLIB RUBY_VENDORLIB
10061RUBY_USE_PTHREAD RUBY_VENDORARCHLIB 10037RUBY_VENDORLIB_BASE RUBY_VER
10062RUBY_VENDORLIB RUBY_VENDORLIB_BASE 10038RUBY_VERSION RUBY_VERSIONS_ACCEPTED
10063RUBY_VER RUBY_VERSION 10039RUBY_VERSIONS_INCOMPATIBLE RUBY_VERSION_DEFAULT
10064RUBY_VERSIONS_ACCEPTED RUBY_VERSIONS_INCOMPATIBLE 10040RUBY_VERSION_REQD RUBY_VER_DIR
10065RUBY_VERSION_DEFAULT RUBY_VERSION_REQD 10041RUN RUN_LDCONFIG
10066RUBY_VER_DIR RUN 10042RUST_TYPE SCO
10067RUN_LDCONFIG RUST_TYPE 10043SCREWS_GROUP SCREWS_USER
10068SCO SCREWS_GROUP 10044SCRIPTS_ENV SCROLLKEEPER_DATADIR
10069SCREWS_USER SCRIPTS_ENV 10045SCROLLKEEPER_REBUILDDB SCROLLKEEPER_UPDATEDB
10070SCROLLKEEPER_DATADIR SCROLLKEEPER_REBUILDDB 10046SDIST_PAWD SDL12_TYPE
10071SCROLLKEEPER_UPDATEDB SDIST_PAWD 10047SERIAL_DEVICES SETGIDGAME
10072SDL12_TYPE SERIAL_DEVICES 10048SETGID_GAMES_PERMS SETUID_ROOT_PERMS
10073SETGIDGAME SETGID_GAMES_PERMS 10049SH SHLIB
10074SETUID_ROOT_PERMS SH 
10075SHLIB SHORTNAME 
10076SIGN_PACKAGES SILC_CLIENT_WITH_PERL 10050SIGN_PACKAGES SILC_CLIENT_WITH_PERL
10077SITE_SPECIFIC_PKGS SKIP_DEPENDS 10051SITE_SPECIFIC_PKGS SKIP_DEPENDS
10078SMF_INSTANCES SMF_MANIFEST 10052SMF_INSTANCES SMF_MANIFEST
10079SMF_METHODS SMF_METHOD_SHELL 10053SMF_METHODS SMF_METHOD_SHELL
10080SMF_METHOD_SRC SMF_NAME 10054SMF_METHOD_SRC SMF_NAME
10081SMF_PREFIX SMF_SRCDIR 10055SMF_PREFIX SMF_SRCDIR
10082SNIPROXY_GROUP SNIPROXY_USER 10056SNIPROXY_GROUP SNIPROXY_USER
10083SOURCE_BUFFSIZE SPECIAL_PERMS 10057SOURCE_BUFFSIZE SPECIAL_PERMS
10084SPECIFIC_PKGS SSH_SUID 10058SPECIFIC_PKGS SSH_SUID
10085SSP_SUPPORTED SSYNC_PAWD 10059SSP_SUPPORTED SSYNC_PAWD
10086STEP_MSG STRIP 10060STEP_MSG STRIP
10087STRIP_DBG STRIP_DEBUG 10061STRIP_DBG STRIP_DEBUG
10088STRIP_DEBUG_SUPPORTED STRIP_FILES_SKIP 10062STRIP_DEBUG_SUPPORTED STRIP_FILES_SKIP
10089SU SUBDIR 10063SU SUBDIR
10090SUBST SUBST_CLASSES 10064SUBST SUBST_CLASSES
10091SUBST_FILES SUBST_FILTER_CMD 10065SUBST_FILES SUBST_FILTER_CMD
10092SUBST_MESSAGE SUBST_NOOP_OK 10066SUBST_MESSAGE SUBST_NOOP_OK
10093SUBST_SED SUBST_SHOW_DIFF 10067SUBST_SED SUBST_SHOW_DIFF
10094SUBST_SKIP_TEXT_CHECK SUBST_STAGE 10068SUBST_SKIP_TEXT_CHECK SUBST_STAGE
10095SUBST_VARS SUNWSPROBASE 10069SUBST_VARS SUNWSPROBASE
10096SUSE_PREFER SU_CMD 10070SUSE_PREFER SU_CMD
10097SVN_EXTRACTDIR SVN_REPO 
10098SVN_REPOSITORIES SVN_REVISION 
10099SYSCONFBASE TARGET_ARCH 10071SYSCONFBASE TARGET_ARCH
10100TBL TERMCAP_TYPE 10072TBL TERMCAP_TYPE
10101TERMINFO_DEFAULT TERMINFO_TYPE 10073TERMINFO_DEFAULT TERMINFO_TYPE
10102TEST TEST_DEPENDS 10074TEST TEST_DEPENDS
10103TEST_DIRS TEST_ENV 10075TEST_DIRS TEST_ENV
10104TEST_ENV_SHELL TEST_MAKE_CMD 10076TEST_ENV_SHELL TEST_MAKE_CMD
10105TEST_MAKE_FLAGS TEST_TARGET 10077TEST_MAKE_FLAGS TEST_TARGET
10106TEXLIVE_IGNORE_PATTERNS TEXLIVE_REV 10078TEXLIVE_IGNORE_PATTERNS TEXLIVE_REV
10107TEXLIVE_UNVERSIONED TEXMFSITE 10079TEXLIVE_UNVERSIONED TEXMFSITE
10108TEX_FORMATS TEX_HYPHEN_DAT 10080TEX_FORMATS TEX_HYPHEN_DAT
10109TEX_HYPHEN_DEF TEX_TEXMF_DIRS 10081TEX_HYPHEN_DEF TEX_TEXMF_DIRS
10110THTTPD_LOG_FACILITY TINYDYN_USER 10082THTTPD_LOG_FACILITY TINYDYN_USER
10111TLSWRAPPER_CHROOT TO 10083TLSWRAPPER_CHROOT TO
10112TOOLS_ALIASES TOOLS_ALWAYS_WRAP 10084TOOLS_ALIASES TOOLS_ALWAYS_WRAP
10113TOOLS_ARGS TOOLS_BROKEN 10085TOOLS_ARGS TOOLS_BROKEN
10114TOOLS_CMD TOOLS_CMDLINE_SED 10086TOOLS_CMD TOOLS_CMDLINE_SED
10115TOOLS_CREATE TOOLS_CROSS_DESTDIR 10087TOOLS_CREATE TOOLS_CROSS_DESTDIR
10116TOOLS_DIR TOOLS_FAIL 10088TOOLS_DIR TOOLS_FAIL
10117TOOLS_GNU_MISSING TOOLS_LDCONFIG 10089TOOLS_GNU_MISSING TOOLS_LDCONFIG
10118TOOLS_NOOP TOOLS_PATH 10090TOOLS_NOOP TOOLS_PATH
10119TOOLS_SCRIPT TOOLS_USE_CROSS_COMPILE 10091TOOLS_SCRIPT TOOLS_USE_CROSS_COMPILE
10120TOOL_DEPENDS TTF_FONTDIR 10092TOOL_DEPENDS TTF_FONTS_DIR
10121TTF_FONTS_DIR TYPE 10093TYPE UAC_REQD_EXECS
10122UAC_REQD_EXECS UCSPI_SSL_GROUP 10094UCSPI_SSL_GROUP UCSPI_SSL_USER
10123UCSPI_SSL_USER UNLIMIT_RESOURCES 10095UNLIMIT_RESOURCES UNPRIVILEGED
10124UNPRIVILEGED UNPRIVILEGED_GROUP 10096UNPRIVILEGED_GROUP UNPRIVILEGED_GROUPS
10125UNPRIVILEGED_GROUPS UNPRIVILEGED_USER 10097UNPRIVILEGED_USER UNWRAP_FILES
10126UNWRAP_FILES UNWRAP_PATTERNS 10098UNWRAP_PATTERNS UPDATE_GEMSPEC
10127UPDATE_GEMSPEC UPDATE_TARGET 10099UPDATE_TARGET URI
10128URI USERGROUP_PHASE 10100USERGROUP_PHASE USERPPP_GROUP
10129USERPPP_GROUP USER_SPECIFIC_PKGS 10101USER_SPECIFIC_PKGS USE_ABI_DEPENDS
10130USE_ABI_DEPENDS USE_APR 10102USE_APR USE_BSD_MAKEFILE
10131USE_BSD_MAKEFILE USE_BUILTIN 10103USE_BUILTIN USE_CROSS_COMPILE
10132USE_CROSS_COMPILE USE_CURSES 10104USE_CURSES USE_CWRAPPERS
10133USE_CWRAPPERS USE_DB185 10105USE_DB185 USE_FEATURES
10134USE_FEATURES USE_GAMESGROUP 10106USE_GAMESGROUP USE_GCC_RUNTIME
10135USE_GCC_RUNTIME USE_IMAKE 10107USE_IMAKE USE_JAVA
10136USE_JAVA USE_JAVA2 10108USE_JAVA2 USE_LANGUAGES
10137USE_LANGUAGES USE_LIBTOOL 10109USE_LIBTOOL USE_NATIVE_GCC
10138USE_NATIVE_GCC USE_NETBSD_REPO 10110USE_NETBSD_REPO USE_PKGSRC_GCC
10139USE_PKGSRC_GCC USE_PKGSRC_GCC_RUNTIME 10111USE_PKGSRC_GCC_RUNTIME USE_PKGTASKS
10140USE_PKGTASKS USE_PKG_ADMIN_DIGEST 10112USE_PKG_ADMIN_DIGEST USE_RUBY_EXTCONF
10141USE_RUBY_EXTCONF USE_RUBY_INSTALL 10113USE_RUBY_INSTALL USE_RUBY_SETUP
10142USE_RUBY_SETUP USE_RUBY_SETUP_PKG 10114USE_RUBY_SETUP_PKG USE_TOOLS
10143USE_TOOLS UUCP_GROUP 10115UUCP_GROUP UUCP_USER
10144UUCP_USER VARBASE 10116VARBASE VARNAME
10145VARNAME VIM_EXTRA_OPTS 10117VIM_EXTRA_OPTS WARNING_MSG
10146WARNING_MSG WCALC_CGIDIR 10118WCALC_CGIDIR WCALC_CGIPATH
10147WCALC_CGIPATH WCALC_HTMLDIR 10119WCALC_HTMLDIR WCALC_HTMLPATH
10148WCALC_HTMLPATH WDM_MANAGERS 10120WDM_MANAGERS WRAPPER_CC
10149WRAPPER_CC WRAPPER_REORDER_CMDS 10121WRAPPER_REORDER_CMDS WRKDIR
10150WRKDIR WRKDIR_BASENAME 10122WRKDIR_BASENAME WRKDIR_LOCKTYPE
10151WRKDIR_LOCKTYPE WRKLOG 10123WRKLOG WRKOBJDIR
10152WRKOBJDIR WRKSRC 10124WRKSRC X10_PORT
10153X10_PORT X11 10125X11 X11BASE
10154X11BASE X11_PKGSRCDIR 10126X11_PKGSRCDIR X11_TYPE
10155X11_TYPE X509_CERTIFICATE 10127X509_CERTIFICATE X509_KEY
10156X509_KEY XAW_TYPE 10128XAW_TYPE XLOCK_DEFAULT_MODE
10157XLOCK_DEFAULT_MODE XMKMF 10129XMKMF XMKMF_FLAGS
10158XMKMF_FLAGS XXX 10130XXX YES
10159XXXX YES 
10160ZSH_STATIC __stdc__ 10131ZSH_STATIC __stdc__
10161_vargroups accept 10132_vargroups accept
10162acquire-localbase-lock acquire-lock 10133acquire-localbase-lock acquire-lock
10163add administrator 10134add administrator
10164alloca alternatives 10135alloca alternatives
10165aslr asprintf 10136aslr asprintf
10166atlas autoconf 10137atlas autoconf
10167automake autoreconf 10138automake autoreconf
10168awk bash 10139awk bash
10169big-endian bin-install 10140big-endian bin-install
10170bind binpkg-list 10141bind binpkg-list
10171blas bootstrap-depends 10142blas bootstrap-depends
10172broken broken_on_platform 10143broken broken_on_platform
10173bsd bsd.prog.mk 10144bsd bsd.prog.mk
10174build build-env 10145build build-env
10175buildlink-directories buildlink-oss-soundcard-h 10146buildlink-directories buildlink-oss-soundcard-h
10176c c++ 10147c c++
10177ccache cce 10148ccache cce
10178cdefs ceil 10149cdefs ceil
10179changes changes-entry 10150changes changes-entry
10180changes-entry-noupdate check 10151changes-entry-noupdate check
10181check-clean check-files 10152check-clean check-files
10182check-files-clean check-vulnerable 10153check-files-clean check-vulnerable
10183checksum checksum-phase 10154checksum checksum-phase
10184clean clean-depends 10155clean clean-depends
10185cleandir commit 10156cleandir commit
10186commit-changes-entry compact 10157commit-changes-entry compact
10187compiler conf 10158compiler conf
10188config.guess config.sub 10159config.guess config.sub
10189configuration configure 10160configuration configure
10190configure-env configure-help 10161configure-env configure-help
10191configure_args connect 10162configure_args connect
10192cos cputime 10163cos cputime
10193create-usergroup csh 10164create-usergroup csh
10194ctf cvs 10165ctf debug
10195debug declaration 10166declaration declare
10196declare defined 10167defined depend
10197depend dependencies 10168dependencies depends
10198depends depends-checksum 10169depends-checksum depends-fetch
10199depends-fetch deps 10170deps describe
10200describe destdir 10171destdir disable
10201disable distclean 10172distclean distinfo
10202distinfo dl 10173dl dlopen
10203dlopen do-buildlink 10174do-buildlink do-clean
10204do-clean do-configure 10175do-configure do-configure-post-hook
10205do-configure-post-hook do-extract 10176do-extract do-fetch
10206do-fetch do-install 10177do-install emul
10207emul emul-distinfo 10178emul-distinfo emul-fetch
10208emul-fetch emulation 10179emulation emulator
10209emulator enable 10180enable endian
10210endian endif 
10211enomem ensurepip 10181enomem ensurepip
10212err errx 10182err errx
10213etc exp 10183etc exp
10214extract-rpm fabs 10184extract-rpm fabs
10215feature features 10185feature features
10216fetch fetch-list 10186fetch fetch-list
10217follows forbids 10187follows forbids
10218form format 10188form format
10219fortify fortify_source 10189fortify fortify_source
10220fossil friend 10190friend fts
10221fts fts_close 10191fts_close fts_open
10222fts_open fts_read 10192fts_read fts_set
10223fts_set gcc 10193gcc gethostbyaddr
10224gethostbyaddr gethostbyname 10194gethostbyname gethostbyname2
10225gethostbyname2 getopt_long 10195getopt_long getprogname
10226getprogname getservbyname 10196getservbyname getservbyport
10227getservbyport getservent 10197getservent gettext
10228gettext git 
10229github gitlab 10198github gitlab
10230glob gnu 10199glob gnu
10231gnu_configure_strict go 10200gnu_configure_strict go
10232go-deps golang 10201go-deps golang
10233guess-license hashbang 10202guess-license hashbang
10234heimdal help 10203heimdal help
10235hg imake 10204imake increment
10236increment indirect 10205indirect inet_aton
10237inet_aton interp 10206interp interpreter
10238interpreter intl 10207intl ip4
10239ip4 ip6 10208ip6 ipv4
10240ipv4 ipv6 10209ipv6 iso
10241iso kerberos 10210kerberos krb
10242krb krb5 10211krb5 ksh
10243ksh lapack 10212lapack latex
10244latex libintl_bindtextdomain 10213libintl_bindtextdomain libintl_gettext
10245libintl_gettext libintl_textdomain 10214libintl_textdomain libnbcompat
10246libnbcompat libs 10215libs libtool
10247libtool licence 10216licence license
10248license lintl 10217lintl little-endian
10249little-endian lock 10218lock locking
10250locking lua 10219lua lvalue
10251lvalue make 10220make makesum
10252makesum memory 10221memory meta
10253mercurial meta 
10254meta-package meta_package 10222meta-package meta_package
10255mit-krb5 mk.conf 10223mit-krb5 mk.conf
10256mkl mount 10224mkl mount
10257mprotect mremap 10225mprotect mremap
10258nb nbcompat 10226nb nbcompat
10259netlib node 10227netlib node
10260node.js nodejs 10228node.js nodejs
10261obstack obstack_ptr_grow 10229obstack obstack_ptr_grow
10262occurs only 10230occurs only
10263openblas options 10231openblas options
10264options.mk order 10232options.mk order
10265override override-intltool 10233override override-intltool
10266override-message-intltool package 10234override-message-intltool package
10267parallel path 10235parallel path
10268pax paxctl 10236pax paxctl
10269pbulk-index pc 10237pbulk-index pc
10270perl perl5 10238perl perl5
10271perms php 10239perms php
10272pkg-build-options pkg-config 10240pkg-build-options pkg-config
10273pkg_build_options platform 10241pkg_build_options platform
10274plist post-extract 10242plist post-extract
10275post-fetch post-wrapper 10243post-fetch post-wrapper
10276pre-build-checks-hook pre-configure 10244pre-build-checks-hook pre-configure
10277pre-configure-checks-hook pre-extract 10245pre-configure-checks-hook pre-extract
10278pre-fetch print-go-deps 10246pre-fetch print-go-deps
10279print-plist print-summary-data 10247print-plist print-summary-data
10280privileged-install-hook pypi 10248privileged-install-hook pypi
10281python r 10249python r
10282readme-all recursive 10250readme-all recursive
10283recv recvfrom 10251recv recvfrom
10284regcomp release-localbase-lock 10252regcomp release-localbase-lock
10285release-lock relro 10253release-lock relro
10286rename reorder 10254rename reorder
10287replace replace_interpreter 10255replace replace_interpreter
10288reproducible resolv 10256reproducible resolv
10289root ruby 10257root ruby
10290send sendfile 10258send sendfile
10291sendto setenv 10259sendto setenv
10292setgid setprogname 10260setgid setprogname
10293setuid sh 10261setuid sh
10294shebang show 10262shebang show
10295show-all show-build-defs 10263show-all show-build-defs
10296show-depends show-depends-dirs 10264show-depends show-depends-dirs
10297show-depends-pkgpaths show-depends-recursive 10265show-depends-pkgpaths show-depends-recursive
10298show-deps show-distfiles 10266show-deps show-distfiles
10299show-downlevel show-subdir-var 10267show-downlevel show-subdir-var
10300show-tools show-var 10268show-tools show-var
10301show-vars snprintf 10269show-vars snprintf
10302socket ssp 10270socket ssp
10303st_mode stage-install 10271st_mode stage-install
10304strcasestr strict 10272strcasestr strict
10305strip strndup 10273strip strndup
10306strnlen strsep 10274strnlen strsep
10307subst substitutions 10275subst substitutions
10308subversion sun 10276sun sunpro
10309sunpro sunwspro 10277sunwspro symlink
10310svn symlink 
10311test test-env 10278test test-env
10312tex texlive 10279tex texlive
10313tmp tool 10280tmp tool
10314tools tools-libtool-m4-override 10281tools tools-libtool-m4-override
10315transitive type 10282transitive type
10316ulimit undefined 10283ulimit undefined
10317undo-replace unlimit 10284undo-replace unlimit
10318unprivileged unprivileged-install-hook 10285unprivileged unprivileged-install-hook
10319unstripped update 10286unstripped update
10320upload upload-distfiles 10287upload upload-distfiles
10321use_tools user 10288use_tools user
10322utimes vasprintf 10289utimes vasprintf
10323verbose vsnprintf 10290verbose vsnprintf
10324warn warning 10291warn warning
10325warnings warnx 10292warnings warnx
10326wattr_off wattr_on 10293wattr_off wattr_on
10327work wrapper 10294work wrapper
10328wrkdir  10295wrkdir
10329 10296
10330Appendix F. Editing guidelines for the pkgsrc guide 10297Appendix F. Editing guidelines for the pkgsrc guide
10331 10298
10332Table of Contents 10299Table of Contents
10333 10300
10334F.1. Make targets 10301F.1. Make targets
10335F.2. Procedure 10302F.2. Procedure
10336 10303
10337This section contains information on editing the pkgsrc guide itself. 10304This section contains information on editing the pkgsrc guide itself.
10338 10305
10339F.1. Make targets 10306F.1. Make targets
10340 10307
10341The pkgsrc guide's source code is stored in pkgsrc/doc/guide/files, and several 10308The pkgsrc guide's source code is stored in pkgsrc/doc/guide/files, and several
10342files are created from it: 10309files are created from it:
10343 10310
10344 * pkgsrc/doc/pkgsrc.txt 10311 * pkgsrc/doc/pkgsrc.txt
10345 10312
10346 * pkgsrc/doc/pkgsrc.html 10313 * pkgsrc/doc/pkgsrc.html
10347 10314
10348 * https://www.NetBSD.org/docs/pkgsrc/ 10315 * https://www.NetBSD.org/docs/pkgsrc/
10349 10316
10350 * https://www.NetBSD.org/docs/pkgsrc/pkgsrc.pdf: The PDF version of the 10317 * https://www.NetBSD.org/docs/pkgsrc/pkgsrc.pdf: The PDF version of the
10351 pkgsrc guide. 10318 pkgsrc guide.
10352 10319
10353 * https://www.NetBSD.org/docs/pkgsrc/pkgsrc.ps: PostScript version of the 10320 * https://www.NetBSD.org/docs/pkgsrc/pkgsrc.ps: PostScript version of the
10354 pkgsrc guide. 10321 pkgsrc guide.
10355 10322
10356F.2. Procedure 10323F.2. Procedure
10357 10324
10358The procedure to edit the pkgsrc guide is: 10325The procedure to edit the pkgsrc guide is:
10359 10326
10360 1. Make sure you have checked out the htdocs repository into a sibling 10327 1. Make sure you have checked out the htdocs repository into a sibling
10361 directory of your pkgsrc directory. You will need the ability to commit 10328 directory of your pkgsrc directory. You will need the ability to commit
10362 from both pkgsrc and htdocs. 10329 from both pkgsrc and htdocs.
10363 10330
10364 2. Make sure you have the packages needed to regenerate the pkgsrc guide (and 10331 2. Make sure you have the packages needed to regenerate the pkgsrc guide (and
10365 other XML-based NetBSD documentation) installed. These are automatically 10332 other XML-based NetBSD documentation) installed. These are automatically
10366 installed when you install the meta-pkgs/pkgsrc-guide-tools package. 10333 installed when you install the meta-pkgs/pkgsrc-guide-tools package.
10367 10334
10368 3. Run cd doc/guide to get to the right directory. All further steps will take 10335 3. Run cd doc/guide to get to the right directory. All further steps will take
10369 place here. 10336 place here.
10370 10337
10371 4. Edit the XML file(s) in files/. 10338 4. Edit the XML file(s) in files/.
10372 10339
10373 5. Run bmake to check the pkgsrc guide for valid XML and to build the final 10340 5. Run bmake to check the pkgsrc guide for valid XML and to build the final
10374 output files. If you get any errors at this stage, you can just edit the 10341 output files. If you get any errors at this stage, you can just edit the
10375 files, as there are only symbolic links in the working directory, pointing 10342 files, as there are only symbolic links in the working directory, pointing
10376 to the files in files/. 10343 to the files in files/.
10377 10344
10378 6. (cd files && cvs commit) 10345 6. (cd files && cvs commit)
10379 10346
10380 7. Run bmake clean && bmake to regenerate the output files with the proper RCS 10347 7. Run bmake clean && bmake to regenerate the output files with the proper RCS
10381 Ids. 10348 Ids.
10382 10349
10383 8. Run bmake regen to install and commit the files in both pkgsrc/doc and 10350 8. Run bmake regen to install and commit the files in both pkgsrc/doc and
10384 htdocs. 10351 htdocs.
10385 10352
10386 Note 10353 Note
10387 10354
10388 If you have added, removed or renamed some chapters, you need to 10355 If you have added, removed or renamed some chapters, you need to
10389 synchronize them using cvs add or cvs delete in the htdocs directory. 10356 synchronize them using cvs add or cvs delete in the htdocs directory.
10390 10357