diff --git a/en_US.ISO8859-1/books/porters-handbook/book.sgml b/en_US.ISO8859-1/books/porters-handbook/book.sgml index be47ce69a1..7743029d3a 100644 --- a/en_US.ISO8859-1/books/porters-handbook/book.sgml +++ b/en_US.ISO8859-1/books/porters-handbook/book.sgml @@ -1,4858 +1,4882 @@ %man; %bookinfo; %authors; %mailing-lists; ]> FreeBSD Porter's Handbook The FreeBSD Documentation Project April 2000 2000 2001 2002 The FreeBSD Documentation Project &bookinfo.legalnotice; Making a port yourself So, now you are interested in making your own port or upgrading an existing one? Great! What follows are some guidelines for creating a new port for FreeBSD. If you want to upgrade an existing port, you should read this and then read . When this document is not sufficiently detailed, you should refer to /usr/ports/Mk/bsd.port.mk, which all port Makefiles include. Even if you do not hack Makefiles daily, it is well commented, and you will still gain much knowledge from it. Additionally, you may send specific questions to the &a.ports;. Only a fraction of the variables (VAR) that can be overridden are mentioned in this document. Most (if not all) are documented at the start of bsd.port.mk. This file uses a non-standard tab setting. Emacs and Vim should recognize the setting on loading the file. Both vi and ex can be set to use the correct value by typing :set tabstop=4 once the file has been loaded. Quick Porting This section tells you how to do a quick port. In many cases, it is not enough, but we will see. First, get the original tarball and put it into DISTDIR, which defaults to /usr/ports/distfiles. The following assumes that the software compiled out-of-the-box, i.e., there was absolutely no change required for the port to work on your FreeBSD box. If you needed to change something, you will have to refer to the next section too. Writing the <filename>Makefile</filename> The minimal Makefile would look something like this: # New ports collection makefile for: oneko # Date created: 5 December 1994 # Whom: asami # # $FreeBSD$ # PORTNAME= oneko PORTVERSION= 1.1b CATEGORIES= games MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/ MAINTAINER= asami@FreeBSD.org MAN1= oneko.1 MANCOMPRESSED= yes USE_IMAKE= yes .include <bsd.port.mk> See if you can figure it out. Do not worry about the contents of the $FreeBSD$ line, it will be filled in automatically by CVS when the port is imported to our main ports tree. You can find a more detailed example in the sample Makefile section. Writing the description files There are three description files that are required for any port, whether they actually package or not. They are pkg-comment, pkg-descr, and pkg-plist, and their pkg- prefix distinguishes them from other files. <filename>pkg-comment</filename> This is the one-line description of the port. Please do not include the package name (or version number of the software) in the comment. The comment should begin with a capital, and end without a period. Here is an example: A cat chasing a mouse all over the screen <filename>pkg-descr</filename> This is a longer description of the port. One to a few paragraphs concisely explaining what the port does is sufficient. This is not a manual or an in-depth description on how to use or compile the port! Please be careful if you are copying from the README or manpage; too often they are not a concise description of the port or are in an awkward format (e.g., manpages have justified spacing). If the ported software has an official WWW homepage, you should list it here. Prefix one of the websites with WWW: so that automated tools will work correctly. It is recommended that you sign your name at the end of this file, as in: This is a port of oneko, in which a cat chases a poor mouse all over the screen. : (etc.) WWW: http://www.oneko.org/ - Satoshi asami@cs.berkeley.edu <filename>pkg-plist</filename> This file lists all the files installed by the port. It is also called the packing list because the package is generated by packing the files listed here. The pathnames are relative to the installation prefix (usually /usr/local or /usr/X11R6). If you are using the MANn variables (as you should be), do not list any manpages here. Here is a small example: bin/oneko lib/X11/app-defaults/Oneko lib/X11/oneko/cat1.xpm lib/X11/oneko/cat2.xpm lib/X11/oneko/mouse.xpm @dirrm lib/X11/oneko Refer to the &man.pkg.create.1; man page for details on the packing list. You should list all the files, but not the name directories, in the list. Also, if the port creates directories for itself during installation, make sure to add @dirrm lines as necessary to remove them when the port is deleted. It is recommended that you keep all the filenames in this file sorted alphabetically. It will make verifying the changes when you upgrade the port much easier. Creating a packing list manually can be a very tedious task. If the port installs a large numbers of files, creating the packing list automatically might save time. Creating the checksum file Just type make makesum. The ports make rules will automatically generate the file distinfo. Testing the port You should make sure that the port rules do exactly what you want them to do, including packaging up the port. These are the important points you need to verify. pkg-plist does not contain anything not installed by your port pkg-plist contains everything that is installed by your port Your port can be installed multiple times using the reinstall target Your port cleans up after itself upon deinstall Recommended test ordering make install make package make deinstall pkg_add package-name make deinstall make reinstall make package Make sure that there are not any warnings issued in any of the package and deinstall stages. After step 3, check to see if all the new directories are correctly deleted. Also, try using the software after step 4, to ensure that it works correctly when installed from a package. Checking your port with <command>portlint</command> Please use portlint to see if your port conforms to our guidelines. The portlint program is part of the ports collection. In particular, you may want to check if the Makefile is in the right shape and the package is named appropriately. Submitting the port First, make sure you have read the DOs and DON'Ts section. Now that you are happy with your port, the only thing remaining is to put it in the main FreeBSD ports tree and make everybody else happy about it too. We do not need your work directory or the pkgname.tgz package, so delete them now. Next, simply include the output of shar `find port_dir` in a bug report and send it with the &man.send-pr.1; program (see Bug Reports and General Commentary for more information about &man.send-pr.1;. If the uncompressed port is larger than 20KB, you should compress it into a tarfile and use &man.uuencode.1; before including it in the bug report (uuencoded tarfiles are acceptable even if the bug report is smaller than 20KB but are not preferred). Be sure to classify the bug report as category ports and class change-request (Do not mark the report confidential!). Also add a short description of the program you ported to the Description field of the PR and the shar or uuencoded tarfile to the Fix field. The latter one helps the committers a lot, who use scripts for the ports-work. One more time, do not include the original source distfile, the work directory, or the package you built with make package. In the past, we asked you to upload new port submissions in our FTP site (ftp.FreeBSD.org). This is no longer recommended as read access is turned off on the incoming/ directory of that site due to the large amount of pirated software showing up there. After you have submitted your port, please be patient. Sometimes it can take a few months before a port is included in FreeBSD, although it might only take a few days. You can view the list of ports waiting to be committed to FreeBSD. Once we have looked at your port, we will get back to you if necessary, and put it in the tree. Your name will also appear in the list of Additional FreeBSD contributors in the FreeBSD Handbook and other files. Isn't that great?!? :-) You can make our work a lot easier, if you use a good description in the synopsis of the problem report. We prefer something like New port: <short description of the port> for new ports and Update port: <category>/<port> <short description of the update> for port updates. If you stick to this scheme, the chance that one takes a look at your PR soon is much bigger. Slow Porting Ok, so it was not that simple, and the port required some modifications to get it to work. In this section, we will explain, step by step, how to modify it to get it to work with the ports paradigm. How things work First, this is the sequence of events which occurs when the user first types make in your port's directory. You may find that having bsd.port.mk in another window while you read this really helps to understand it. But do not worry if you do not really understand what bsd.port.mk is doing, not many people do... :-> The fetch target is run. The fetch target is responsible for making sure that the tarball exists locally in DISTDIR. If fetch cannot find the required files in DISTDIR it will look up the URL MASTER_SITES, which is set in the Makefile, as well as our main FTP site at ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/, where we put sanctioned distfiles as backup. It will then attempt to fetch the named distribution file with FETCH, assuming that the requesting site has direct access to the Internet. If that succeeds, it will save the file in DISTDIR for future use and proceed. The extract target is run. It looks for your port's distribution file (typically a gzip'd tarball) in DISTDIR and unpacks it into a temporary subdirectory specified by WRKDIR (defaults to work). The patch target is run. First, any patches defined in PATCHFILES are applied. Second, if any patch files named patch-* are found in PATCHDIR (defaults to the files subdirectory), they are applied at this time in alphabetical order. The configure target is run. This can do any one of many different things. If it exists, scripts/configure is run. If HAS_CONFIGURE or GNU_CONFIGURE is set, WRKSRC/configure is run. If USE_IMAKE is set, XMKMF (default: xmkmf -a) is run. The build target is run. This is responsible for descending into the port's private working directory (WRKSRC) and building it. If USE_GMAKE is set, GNU make will be used, otherwise the system make will be used. The above are the default actions. In addition, you can define targets pre-something or post-something, or put scripts with those names, in the scripts subdirectory, and they will be run before or after the default actions are done. For example, if you have a post-extract target defined in your Makefile, and a file pre-build in the scripts subdirectory, the post-extract target will be called after the regular extraction actions, and the pre-build script will be executed before the default build rules are done. It is recommended that you use Makefile targets if the actions are simple enough, because it will be easier for someone to figure out what kind of non-default action the port requires. The default actions are done by the bsd.port.mk targets do-something. For example, the commands to extract a port are in the target do-extract. If you are not happy with the default target, you can fix it by redefining the do-something target in your Makefile. The main targets (e.g., extract, configure, etc.) do nothing more than make sure all the stages up to that one are completed and call the real targets or scripts, and they are not intended to be changed. If you want to fix the extraction, fix do-extract, but never ever touch extract! Now that you understand what goes on when the user types make, let us go through the recommended steps to create the perfect port. Getting the original sources Get the original sources (normally) as a compressed tarball (foo.tar.gz or foo.tar.Z) and copy it into DISTDIR. Always use mainstream sources when and where you can. If you cannot find a FTP/HTTP site that is well-connected to the net, or can only find sites that have irritatingly non-standard formats, you might want to put a copy on a reliable FTP or HTTP server that you control (e.g., your home page). Make sure you set MASTER_SITES to reflect your choice. If you cannot find somewhere convenient and reliable to put the distfile we can house it ourselves on ftp.FreeBSD.org. The distfile must be placed into ~/public_distfiles/ of someone's freefall account. Ask the person who commits your port to do this. This person will also set MASTER_SITES to MASTER_SITE_LOCAL and MASTER_SITE_SUBDIR to their freefall username. If your port's distfile changes all the time for no good reason, consider putting the distfile in your home page and listing it as the first MASTER_SITES. This will prevent users from getting checksum mismatch errors, and also reduce the workload of maintainers of our FTP site. Also, if there is only one master site for the port, it is recommended that you house a backup at your site and list it as the second MASTER_SITES. If your port requires some additional `patches' that are available on the Internet, fetch them too and put them in DISTDIR. Do not worry if they come from a site other than where you got the main source tarball, we have a way to handle these situations (see the description of PATCHFILES below). Modifying the port Unpack a copy of the tarball in a private directory and make whatever changes are necessary to get the port to compile properly under the current version of FreeBSD. Keep careful track of everything you do, as you will be automating the process shortly. Everything, including the deletion, addition, or modification of files should be doable using an automated script or patch file when your port is finished. If your port requires significant user interaction/customization to compile or install, you should take a look at one of Larry Wall's classic Configure scripts and perhaps do something similar yourself. The goal of the new ports collection is to make each port as plug-and-play as possible for the end-user while using a minimum of disk space. Unless explicitly stated, patch files, scripts, and other files you have created and contributed to the FreeBSD ports collection are assumed to be covered by the standard BSD copyright conditions. Patching In the preparation of the port, files that have been added or changed can be picked up with a recursive diff for later feeding to patch. Each set of patches you wish to apply should be collected into a file named patch-* where * denotes the sequence in which the patches will be applied — these are done in alphabetical order, thus aa first, ab second and so on. If you wish, you can use names that indicate the pathnames of the files that are patched, such as patch-Imakefile or patch-src-config.h. These files should be stored in PATCHDIR, from where they will be automatically applied. All patches should be relative to WRKSRC (generally the directory your port's tarball unpacks itself into, that being where the build is done). To make fixes and upgrades easier, you should avoid having more than one patch fix the same file (e.g., patch-aa and patch-ab both changing WRKSRC/foobar.c). Do not put RCS strings in patches. CVS will mangle them when we put the files into the ports tree, and when we check them out again, they will come out different and the patch will fail. RCS strings are surrounded by dollar ($) signs, and typically start with $Id or $RCS. Using the recurse () option to diff to generate patches is fine, but please take a look at the resulting patches to make sure you do not have any unnecessary junk in there. In particular, diffs between two backup files, Makefiles when the port uses Imake or GNU configure, etc., are unnecessary and should be deleted. If you had to edit configure.in and run autoconf to regenerate configure, do not take the diffs of configure (it often grows to a few thousand lines!); define USE_AUTOCONF=yes and take the diffs of configure.in. Also, if you had to delete a file, then you can do it in the post-extract target rather than as part of the patch. Once you are happy with the resulting diff, please split it up into one source file per patch file. Configuring Include any additional customization commands in your configure script and save it in the scripts subdirectory. As mentioned above, you can also do this with Makefile targets and/or scripts with the name pre-configure or post-configure. Handling user input If your port requires user input to build, configure, or install, then set IS_INTERACTIVE in your Makefile. This will allow overnight builds to skip your port if the user sets the variable BATCH in his environment (and if the user sets the variable INTERACTIVE, then only those ports requiring interaction are built). It is also recommended that if there are reasonable default answers to the questions, you check the PACKAGE_BUILDING variable and turn off the interactive script when it is set. This will allow us to build the packages for CDROMs and FTP. Configuring the Makefile Configuring the Makefile is pretty simple, and again we suggest that you look at existing examples before starting. Also, there is a sample Makefile in this handbook, so take a look and please follow the ordering of variables and sections in that template to make your port easier for others to read. Now, consider the following problems in sequence as you design your new Makefile: The original source Does it live in DISTDIR as a standard gzip'd tarball named something like foozolix-1.2.tar.gz? If so, you can go on to the next step. If not, you should look at overriding any of the DISTNAME, EXTRACT_CMD, EXTRACT_BEFORE_ARGS, EXTRACT_AFTER_ARGS, EXTRACT_SUFX, or DISTFILES variables, depending on how alien a format your port's distribution file is. (The most common case is EXTRACT_SUFX=.tar.Z, when the tarball is condensed by regular compress, not gzip.) In the worst case, you can simply create your own do-extract target to override the default, though this should be rarely, if ever, necessary. - Naming and categorisation + Naming The first part of the port's Makefile names the port, describes it's version number, and lists it in the correct category. <makevar>PORTNAME</makevar> and <makevar>PORTVERSION</makevar> You should set PORTNAME to the base name of your port, and PORTVERSION to the version number of the port. <makevar>PORTREVISION</makevar> and <makevar>PORTEPOCH</makevar> <makevar>PORTREVISION</makevar> The PORTREVISION variable is a monotonically increasing value which is reset to 0 with every increase of PORTVERSION (i.e. every time a new official vendor release is made), and appended to the package name if non-zero. PORTREVISION is increased each time a change is made to the FreeBSD port which significantly affects the content or structure of the derived package. Examples of when PORTREVISION should be bumped: Addition of patches to correct security vulnerabilities, bugs, or to add new functionality to the FreeBSD port. Changes to the port makefile to enable or disable compile-time options in the package. Changes in the packing list or the install-time behavior of the package (e.g. change to a script which generates initial data for the package, like ssh host keys). Version bump of a port's shared library dependency (in this case, someone trying to install the old package after installing a newer version of the dependency will fail since it will look for the old libfoo.x instead of libfoo.(x+1)). Silent changes to the port distfile which have significant functional differences, i.e. changes to the distfile requiring a correction to distinfo with no corresponding change to PORTVERSION, where a diff -ru of the old and new versions shows non-trivial changes to the code. Examples of changes which do not require a PORTREVISION bump: Style changes to the port skeleton with no functional change to what appears in the resulting package. Changes to MASTER_SITES or other functional changes to the port which do not affect the resulting package. Trivial patches to the distfile such as correction of typos, which are not important enough that users of the package should go to the trouble of upgrading. Build fixes which cause a package to become compilable where it was previously failing (as long as the changes do not introduce any functional change on any other platforms on which the port did previously build). Since PORTREVISION reflects the content of the package, if no package was previously buildable then there is no need to increase PORTREVISION to mark a change. A rule of thumb is to ask yourself whether a change committed to a port is something which someone, somewhere, would benefit from having (either because of an enhancement, fix, or by virtue that the new package will actually work for them). If yes, the PORTREVISION should be bumped so that automated tools (e.g. pkg_version) will highlight the fact that a new package is available. <makevar>PORTEPOCH</makevar> From time to time a software vendor or FreeBSD porter will do something silly and release a version of their software which is actually numerically less than the previous version. An example of this is a port which goes from foo-20000801 to foo-1.0 (the former will be incorrectly treated as a newer version since 20000801 is a numerically greater value than 1). In situations such as this, the PORTEPOCH version should be increased. If PORTEPOCH is nonzero it is appended to the package name as described in section 0 above. PORTEPOCH is never decreased or reset to zero, because that would cause comparison to a package from an earlier epoch to fail (i.e. the package would not be detected as out of date): the new version number (e.g. 1.0,1 in the above example) is still numerically less than the previous version (20000801), but the ,1 suffix is treated specially by automated tools and found to be greater than the implied suffix ",0" on the earlier package. It is expected that PORTEPOCH will not be used for the majority of ports, and that sensible use of PORTVERSION can often pre-empt it becoming necessary if a future release of the software should change the version structure. However, care is needed by FreeBSD porters when a vendor release is made without an official version number - such as a code "snapshot" release. The temptation is to label the release with the release date, which will cause problems as in the example above when a new "official" release is made. For example, if a snapshot release is made on the date 20000917, and the previous version of the software was version 1.2, the snapshot release should be given a PORTVERSION of 1.2.20000917 or similar, not 20000917, so that the succeeding release, say 1.3, is still a numerically greater value. Example of <makevar>PORTREVISION</makevar> and <makevar>PORTEPOCH</makevar> usage The gtkmumble port, version 0.10, is committed to the ports collection. PORTNAME= gtkmumble PORTVERSION= 0.10 PKGNAME becomes gtkmumble-0.10. A security hole is discovered which requires a local FreeBSD patch. PORTREVISION is bumped accordingly. PORTNAME= gtkmumble PORTVERSION= 0.10 PORTREVISION= 1 PKGNAME becomes gtkmumble-0.10_1 A new version is released by the vendor, numbered 0.2 (it turns out the author actually intended 0.10 to actually mean 0.1.0, not what comes after 0.9 - oops, too late now). Since the new minor version 2 is numerically less than the previous version 10 the PORTEPOCH must be bumped to manually force the new package to be detected as "newer". Since it is a new vendor release of the code, PORTREVISION is reset to 0 (or removed from the makefile). PORTNAME= gtkmumble PORTVERSION= 0.2 PORTEPOCH= 1 PKGNAME becomes gtkmumble-0.2,1 The next release is 0.3. Since PORTEPOCH never decreases, the version variables are now: PORTNAME= gtkmumble PORTVERSION= 0.3 PORTEPOCH= 1 PKGNAME becomes gtkmumble-0.3,1 If PORTEPOCH were reset to 0 with this upgrade, someone who had installed the gtkmumble-0.10_1 package would not detect the gtkmumble-0.3 package as newer, since 3 is still numerically less than 10. <makevar>PKGNAMEPREFIX</makevar> and <makevar>PKGNAMESUFFIX</makevar> Two optional variables, PKGNAMEPREFIX and PKGNAMESUFFIX, are combined with PORTNAME and PORTVERSION to form PKGNAME as ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. Make sure this conforms to our guidelines for a good package name. In particular, you are not allowed to use a hyphen (-) in PORTVERSION. Also, if the package name has the language- or the compiled.specifics part, use PKGNAMEPREFIX and PKGNAMESUFFIX, respectively. Do not make them part of PORTNAME. + + Package Naming Conventions + + The following are the conventions you should follow in naming your + packages. This is to have our package directory easy to scan, as + there are already lots and lots of packages and users are going to + turn away if they hurt their eyes! + + The package name should look like + language_region-name-compiled.specifics-version.numbers. + + The package name is defined as + ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. + Make sure to set the variables to conform to that format. + + + + FreeBSD strives to support the native language of its users. + The language- part should be a two + letter abbreviation of the natural language defined by ISO-639 if + the port is specific to a certain language. Examples are + ja for Japanese, ru for + Russian, vi for Vietnamese, + zh for Chinese, ko for + Korean and de for German. + + If the port is specific to a certain region within the + language area, add the two letter country code as well. + Examples are en_US for US English and + fr_CH for Swiss French. + + The language- part should + be set in the PKGNAMEPREFIX variable. + + + + The first letter of name part + should be lowercase. (The rest of the name can contain + capital letters, so use your own discretion when you are + converting a software name that has some capital letters in it.) + There is a tradition of naming Perl 5 modules by + prepending p5- and converting the double-colon + separator to a hyphen; for example, the + Data::Dumper module becomes + p5-Data-Dumper. If the software in question + has numbers, hyphens, or underscores in its name, you may include + them as well (like kinput2). + + + + If the port can be built with different hardcoded defaults (usually + part of the directory name in a family of ports), the + -compiled.specifics part should state + the compiled-in defaults (the hyphen is optional). Examples are + papersize and font units. + + The compiled.specifics part + should be set in the PKGNAMESUFFIX + variable. + + + + The version string should follow a dash + (-) and be a period-separated list of + integers and single lowercase alphabetics. In particular, + it is not permissible to have another dash inside the + version string. The only exception is the string + pl (meaning `patchlevel'), which can be + used only when there are no major and + minor version numbers in the software. If the software + version has strings like "alpha", "beta", "rc", or "pre", take + the first letter and put it immediately after a period. + If the version string continues after those names, the + numbers should follow the single alphabet without an extra + period between them. + + The idea is to make it easier to sort ports by looking + at the version string. In particular, make sure version + number components are always delimited by a period, and + if the date is part of the string, use the + yyyy.mm.dd + format, not + dd.mm.yyyy + or the non-Y2K compliant + yy.mm.dd + format. + + + + Here are some (real) examples on how to convert the name + as called by the software authors to a suitable package + name: + + + + + + Distribution Name + PKGNAMEPREFIX + PORTNAME + PKGNAMESUFFIX + PORTVERSION + Reason + + + + + + mule-2.2.2 + (empty) + mule + (empty) + 2.2.2 + No changes required + + + + XFree86-3.3.6 + (empty) + XFree86 + (empty) + 3.3.6 + No changes required + + + + EmiClock-1.0.2 + (empty) + emiclock + (empty) + 1.0.2 + No uppercase names for single programs + + + + rdist-1.3alpha + (empty) + rdist + (empty) + 1.3.a + No strings like alpha + allowed + + + + es-0.9-beta1 + (empty) + es + (empty) + 0.9.b1 + No strings like beta + allowed + + + + mailman-2.0rc3 + (empty) + mailman + (empty) + 2.0.r3 + No strings like rc + allowed + + + + v3.3beta021.src + (empty) + tiff + (empty) + 3.3 + What the heck was that anyway? + + + + tvtwm + (empty) + tvtwm + (empty) + pl11 + Version string always required + + + + piewm + (empty) + piewm + (empty) + 1.0 + Version string always required + + + + xvgr-2.10pl1 + (empty) + xvgr + (empty) + 2.10.1 + pl allowed only when no + major/minor version numbers + + + + gawk-2.15.6 + ja- + gawk + (empty) + 2.15.6 + Japanese language version + + + + psutils-1.13 + (empty) + psutils + -letter + 1.13 + Papersize hardcoded at package build time + + + + pkfonts + (empty) + pkfonts + 300 + 1.0 + Package for 300dpi fonts + + + + + + If there is absolutely no trace of version information in the + original source and it is unlikely that the original author will ever + release another version, just set the version string to + 1.0 (like the piewm example above). Otherwise, ask + the original author or use the date string + (yyyy.mm.dd) + as the version. + + + + + Categorisation + <makevar>CATEGORIES</makevar> When a package is created, it is put under /usr/ports/packages/All and links are made from one or more subdirectories of /usr/ports/packages. The names of these subdirectories are specified by the variable CATEGORIES. It is intended to make life easier for the user when he is wading through the pile of packages on the FTP site or the CDROM. Please take a look at the existing categories and pick the ones that are suitable for your port. This list also determines where in the ports tree the port is imported. If you put more than one category here, it is assumed that the port files will be put in the subdirectory with the name in the first category. See the categories section for more discussion about how to pick the right categories. If your port truly belongs to something that is different from all the existing ones, you can even create a new category name. In that case, please send mail to the &a.ports; to propose a new category. - - - - The distribution files - The second part of the Makefile describes the - files that must be downloaded in order to build the port, and where - they can be downloaded from. + + Current list of categories - - <makevar>DISTNAME</makevar> + First, this is the current list of port categories. Those + marked with an asterisk (*) are + virtual categories—those that do not have + a corresponding subdirectory in the ports tree. - DISTNAME is the name of the port as - called by the authors of the software. - DISTNAME defaults to - ${PORTNAME}-${PORTVERSION}, so override it if necessary. - DISTNAME is only used in two places. - First, the distribution file list - (DISTFILES) defaults to - ${DISTNAME}${EXTRACT_SUFX}. - Second, the distribution file is expected to extract into a - subdirectory named WRKSRC, which defaults - to work/${DISTNAME}. + + For non-virtual categories, you will find a one-line + description in the pkg/COMMENT file in that + subdirectory (e.g., + archivers/pkg/COMMENT). + - - PKGNAMEPREFIX and - PKGNAMESUFFIX do not affect - DISTNAME. Also note that when - WRKSRC is equal to - work/${PORTNAME}-${PORTVERSION} - while the original source archive is named something other than - ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}, - you should probably leave DISTNAME - alone— you are better off defining - DISTFILES than having to set both - DISTNAME and WRKSRC - (and possibly EXTRACT_SUFX). - - + + + + + Category + Description + + - - <makevar>MASTER_SITES</makevar> + + + afterstep* + Ports to support the AfterStep window manager. + - Record the directory part of the FTP/HTTP-URL pointing at the - original tarball in MASTER_SITES. Do not forget - the trailing slash (/)! + + archivers + Archiving tools. + - The make macros will try to use this - specification for grabbing the distribution file with - FETCH if they cannot find it already on the - system. + + astro + Astronomical ports. + - It is recommended that you put multiple sites on this list, - preferably from different continents. This will safeguard against - wide-area network problems, and we are even planning to add support - for automatically determining the closest master site and fetching - from there! + + audio + Sound support. + - If the original tarball is part of one of the popular - archives such as X-contrib, GNU, or Perl CPAN, you may be able - refer to those sites in an easy compact form using - MASTER_SITE_* - (e.g., MASTER_SITE_XCONTRIB and - MASTER_SITE_PERL_GNU). Simply set - MASTER_SITES to one of these variables and - MASTER_SITE_SUBDIR to the path within the - archive. Here is an example: + + benchmarks + Benchmarking utilities. + - MASTER_SITES= ${MASTER_SITE_XCONTRIB} -MASTER_SITE_SUBDIR= applications + + biology + Biology-related software. + - These variables are defined in - /usr/ports/Mk/bsd.sites.mk. There are - new archives added all the time, so make sure to check the - latest version of this file before submitting a port. + + cad + Computer aided design tools. + - The user can also set the MASTER_SITE_* - variables in /etc/make.conf to override our - choices, and use their favorite mirrors of these popular archives - instead. - + + chinese + Chinese language support. + - - <makevar>EXTRACT_SUFX</makevar> + + comms + Communication software. Mostly software to talk to + your serial port. + - If you have one distribution file, and it uses an odd suffix to - indicate the compression mechanism, set - EXTRACT_SUFX. - - For example, if the distribution file was named - foo.tgz instead of the more normal - foo.tar.gz, you would write: + + converters + Character code converters. + - DISTNAME= foo -EXTRACT_SUFX= .tgz + + databases + Databases. + - The USE_BZIP2 and USE_ZIP - variables automatically set EXTRACT_SUFX to - .bz2 or .zip as necessary. If - neither of these are set then EXTRACT_SUFX - defaults to .tar.gz. + + deskutils + Things that used to be on the desktop before + computers were invented. + - You never need to set both EXTRACT_SUFX and - DISTFILES. - + + devel + Development utilities. Do not put libraries here just + because they are libraries—unless they truly do not + belong anywhere else, they should not be in this + category. + - - <makevar>DISTFILES</makevar> + + editors + General editors. Specialized editors go in the section + for those tools (e.g., a mathematical-formula editor will go + in math). + - Sometimes the names of the files to be downloaded have no - resemblance to the name of the port. For example, it might be - called source.tar.gz or similar. In other - cases the application's source code might be in several different - archives, all of which must be downloaded. + + elisp* + Emacs-lisp ports. + - If this is the case, set DISTFILES to be a - space separated list of all the files that must be - downloaded. + + emulators + Emulators for other operating systems. Terminal + emulators do not belong + here—X-based ones should go to + x11 and text-based ones to either + comms or misc, + depending on the exact functionality. + - DISTFILES= source1.tar.gz source2.tar.gz + + french + French language support. + - If not explicitly set, DISTFILES defaults to - ${DISTNAME}${EXTRACT_SUFX}. - + + ftp + FTP client and server utilities. If your + port speaks both FTP and HTTP, put it in + ftp with a secondary + category of www. + - - <makevar>EXTRACT_ONLY</makevar> + + games + Games. + - If only some of the DISTFILES must be - extracted—for example, one of them is the source code, while - another is an uncompressed document—list the filenames that - must be extracted in EXTRACT_ONLY. + + german + German language support. + - DISTFILES= source.tar.gz manual.html -EXTRACT_ONLY= source.tar.gz + + gnome* + Ports from the GNU Object Model Environment (GNOME) + Project. + - If none of the DISTFILES - should be uncompressed then set EXTRACT_ONLY to - the empty string. + + graphics + Graphics utilities. + - EXTRACT_ONLY= - + + hebrew + Hebrew language support. + - - <makevar>PATCHFILES</makevar> + + irc + Internet Relay Chat utilities. + - If your port requires some additional patches that are available - by FTP or HTTP, set PATCHFILES to the names of - the files and PATCH_SITES to the URL of the - directory that contains them (the format is the same as - MASTER_SITES). + + ipv6* + IPv6 related software. + - If the patch is not relative to the top of the source tree - (i.e., WRKSRC) because it contains some extra - pathnames, set PATCH_DIST_STRIP accordingly. For - instance, if all the pathnames in the patch have an extra - foozolix-1.0/ in front of the filenames, then set - PATCH_DIST_STRIP=-p1. + + japanese + Japanese language support. + - Do not worry if the patches are compressed; they will be - decompressed automatically if the filenames end with - .gz or .Z. - - If the patch is distributed with some other files, such as - documentation, in a gzip'd tarball, you cannot just use - PATCHFILES. If that is the case, add the name - and the location of the patch tarball to - DISTFILES and MASTER_SITES. - Then, use the EXTRA_PATCHES variable to - point to those files and bsd.port.mk - will automatically apply them for you. In particular, do - not copy patch files into the - PATCHDIR directory—that directory may - not be writable. + + java + Java language support. + - - The tarball will have been extracted alongside the - regular source by then, so there is no need to explicitly extract - it if it is a regular gzip'd or compress'd tarball. If you do the - latter, take extra care not to overwrite something that already - exists in that directory. Also, do not forget to add a command to - remove the copied patch in the pre-clean - target. - - + + kde* + Ports from the K Desktop Environment (KDE) + Project. + - - Multiple distribution files from different sites + + korean + Korean language support. + - Some applications consist of multiple distribution files that - must be downloaded from a number of different sites. For example, - Ghostscript consists of the core of the - program, and then a large number of driver files that are used - depending on the user's printer. Some of these driver files are - supplied with the core, but many others must be downloaded from a - variety of different sites. + + lang + Programming languages. + - To support this, each entry in DISTFILES may - be followed by a colon and a tag name. Each site - listed in MASTER_SITES is then followed by a - colon, and the tag that indicates which distribution files should be - downloaded from this site. + + linux* + Linux applications and support utilities. + - For example, consider an application with the source split in to - source1.tar.gz and - source2.tar.gz, which must be downloaded from - two different sites. The port's Makefile would - include lines like this: + + mail + Mail software. + - MASTER_SITES= ftp://ftp.example1.com/:source1 \ - ftp://ftp.example2.com/:source2 -DISTFILES= source1.tar.gz:source1 \ - source2.tar.gz:source2 + + math + Numerical computation software and other utilities + for mathematics. + - Multiple distribution files can have the same tag. Continuing - the previous example, suppose that there was a third distfile, - source3.tar.gz, that should be downloaded from - ftp.example2.com. The - Makefile would then be written like - this. + + mbone + MBone applications. + - MASTER_SITES= ftp://ftp.example1.com/:source1 \ - ftp://ftp.example2.com/:source2 -DISTFILES= source1.tar.gz:source1 \ - source2.tar.gz:source2 \ - source3.tar.gz:source2 - + + misc + Miscellaneous utilities—basically things that + do not belong anywhere else. This is the only category + that should not appear with any other non-virtual category. + If you have misc with something else in + your CATEGORIES line, that means you can + safely delete misc and just put the port + in that other subdirectory! + - - <makevar>DIST_SUBDIR</makevar> + + net + Miscellaneous networking software. + - Do not let your port clutter - /usr/ports/distfiles. If your port requires a - lot of files to be fetched, or contains a file that has a name that - might conflict with other ports (e.g., - Makefile), set DIST_SUBDIR - to the name of the port (${PORTNAME} or - ${PKGNAMEPREFIX}${PORTNAME} - should work fine). This will change - DISTDIR from the default - /usr/ports/distfiles to - /usr/ports/distfiles/DIST_SUBDIR, - and in effect puts everything that is required for your port into - that subdirectory. + + news + USENET news software. + - It will also look at the subdirectory with the same name on the - backup master site at ftp.FreeBSD.org. - (Setting DISTDIR explicitly in your - Makefile will not accomplish this, so please use - DIST_SUBDIR.) + + offix* + Ports from the OffiX suite. + - - This does not affect the MASTER_SITES you - define in your Makefile. - - - + + palm + Software support for the 3Com Palm(tm) series. + - - <makevar>MAINTAINER</makevar> + + perl5* + Ports that require perl version 5 to run. + - Set your mail-address here. Please. :-) + + picobsd + Ports to support PicoBSD. + - For a detailed description of the responsibilities of maintainers, - refer to the MAINTAINER on - Makefiles section. - + + plan9* + Various programs from Plan9. + - - Dependencies + + print + Printing software. Desktop publishing tools + (previewers, etc.) belong here too. + - Many ports depend on other ports. There are five variables that - you can use to ensure that all the required bits will be on the - user's machine. There are also some pre-supported dependency - variables for common cases, plus a few more to control the behavior - of dependencies. + + python* + Software written in python. + - - <makevar>LIB_DEPENDS</makevar> + + ruby* + Software written in ruby. + - This variable specifies the shared libraries this port depends - on. It is a list of - lib:dir:target - tuples where lib is the name of the - shared library, dir is the - directory in which to find it in case it is not available, and - target is the target to call in that - directory. For example, LIB_DEPENDS= - jpeg.9:${PORTSDIR}/graphics/jpeg:install - will check for a shared jpeg library with major version 9, and - descend into the graphics/jpeg subdirectory - of your ports tree to build and install it if it is not found. - The target part can be omitted if it is - equal to DEPENDS_TARGET (which defaults to - install). + + russian + Russian language support. + - - The lib part is an argument given - to ldconfig -r | grep -wF. There shall be no - regular expressions in this variable. - + + science + Scientific ports that don't fit into other + categories such as astro, + biology and + math. + - The dependency is checked twice, once from within the - extract target and then from within the - install target. Also, the name of the - dependency is put into the package so that - pkg_add will automatically install it if it is - not on the user's system. - + + security + Security utilities. + - - <makevar>RUN_DEPENDS</makevar> + + shells + Command line shells. + - This variable specifies executables or files this port depends - on during run-time. It is a list of - path:dir:target - tuples where path is the name of the - executable or file, dir is the - directory in which to find it in case it is not available, and - target is the target to call in that - directory. If path starts with a slash - (/), it is treated as a file and its existence - is tested with test -e; otherwise, it is - assumed to be an executable, and which -s is - used to determine if the program exists in the user's search - path. + + sysutils + System utilities. + - For example, + + tcl76* + Ports that use Tcl version 7.6 to run. + - RUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \ - wish8.0:${PORTSDIR}/x11-toolkits/tk80 - - will check if the file or directory - /usr/local/etc/innd exists, and build and - install it from the news/inn subdirectory of - the ports tree if it is not found. It will also see if an - executable called wish8.0 is in your search - path, and descend into the x11-toolkits/tk80 - subdirectory of your ports tree to build and install it if it is - not found. + + tcl80* + Ports that use Tcl version 8.0 to run. + - - In this case, innd is actually an - executable; if an executable is in a place that is not expected - to be in a normal user's search path, you should use the full - pathname. - + + tcl81* + Ports that use Tcl version 8.1 to run. + - The dependency is checked from within the - install target. Also, the name of the - dependency is put into the package so that - pkg_add will automatically install it if it is - not on the user's system. The target - part can be omitted if it is the same as - DEPENDS_TARGET. - + + tcl82* + Ports that use Tcl version 8.2 to run. + - - <makevar>BUILD_DEPENDS</makevar> + + textproc + Text processing utilities. It does not include + desktop publishing tools, which go to print/. + - This variable specifies executables or files this port - requires to build. Like RUN_DEPENDS, it is a - list of - path:dir:target - tuples. For example, BUILD_DEPENDS= - unzip:${PORTSDIR}/archivers/unzip will check - for an executable called unzip, and descend - into the archivers/unzip subdirectory of your - ports tree to build and install it if it is not found. + + tk42* + Ports that use Tk version 4.2 to run. + - - build here means everything from extraction to - compilation. The dependency is checked from within the - extract target. The - target part can be omitted if it is - the same as DEPENDS_TARGET - - + + tk80* + Ports that use Tk version 8.0 to run. + - - <makevar>FETCH_DEPENDS</makevar> + + tk81* + Ports that use Tk version 8.1 to run. + - This variable specifies executables or files this port - requires to fetch. Like the previous two, it is a list of - path:dir:target - tuples. For example, FETCH_DEPENDS= - ncftp2:${PORTSDIR}/net/ncftp2 will check for an - executable called ncftp2, and descend into the - net/ncftp2 subdirectory of your ports tree to - build and install it if it is not found. + + tk82* + Ports that use Tk version 8.2 to run. + - The dependency is checked from within the - fetch target. The - target part can be omitted if it is the - same as DEPENDS_TARGET. - + + tkstep80* + Ports that use TkSTEP version 8.0 to run. + - - <makevar>DEPENDS</makevar> + + ukrainian + Ukrainian language support. + - If there is a dependency that does not fall into either of the - above four categories, or your port requires having the source of - the other port extracted in addition to having it installed, - then use this variable. This is a list of - dir:target, - as there is nothing to check, unlike the previous four. The - target part can be omitted if it is the - same as DEPENDS_TARGET. - + + vietnamese + Vietnamese language support. + - - Common dependency variables + + windowmaker* + Ports to support the WindowMaker window + manager + - Define USE_XLIB=yes if your port requires - the X Window System to be installed (it is implied by - USE_IMAKE). Define - USE_GMAKE=yes if your port requires GNU - make instead of BSD make. - Define USE_AUTOCONF=yes if your port requires - GNU autoconf to be run. Define USE_QT=yes if - your port uses the latest qt toolkit. Use - USE_PERL5=yes if your port requires version 5 - of the perl language. (The last is especially important since - some versions of FreeBSD have perl5 as part of the base system - while others do not.) - + + www + Software related to the World Wide Web. HTML language + support belongs here too. + - - Notes on dependencies + + x11 + The X window system and friends. This category is only + for software that directly supports the window system. Do not + put regular X applications here. If your port is an X + application, define USE_XLIB (implied by + USE_IMAKE) and put it in the appropriate + categories. Also, many of them go into other + x11-* categories (see below). + - As mentioned above, the default target to call when a - dependency is required is DEPENDS_TARGET. - It defaults to install. This is a user - variable; it is never defined in a port's - Makefile. If your port needs a special way - to handle a dependency, use the :target part of - the *_DEPENDS variables instead of redefining - DEPENDS_TARGET. + + x11-clocks + X11 clocks. + - When you type make clean, its dependencies - are automatically cleaned too. If you do not wish this to happen, - define the variable NOCLEANDEPENDS in your - environment. + + x11-fm + X11 file managers. + - To depend on another port unconditionally, use the - variable ${NONEXISTENT} as the first field - of BUILD_DEPENDS or - RUN_DEPENDS. Use this only when you need to - the to get to the source of the other port. You can often save - compilation time by specifying the target too. For - instance + + x11-fonts + X11 fonts and font utilities. + - BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract + + x11-servers + X11 servers. + - will always descend to the JPEG port and extract it. + + x11-toolkits + X11 toolkits. + - Do not use DEPENDS unless there is no other - way the behavior you want can be accomplished. It will cause the - other port to always be built (and installed, by default), and the - dependency will go into the packages as well. If this is really - what you need, you should probably write it as - BUILD_DEPENDS and - RUN_DEPENDS instead—at least the - intention will be clear. - + + x11-wm + X11 window managers. + - - Optional dependencies - - Some large applications can be built in a number of - configurations, adding functionality if one of a number of - libraries or applications is available. Since not all users - want those libraries or applications, the ports system - provides hooks that the port author can use to decide which - configuration should be built. Supporting these properly will - make uses happy, and effectively provide 2 or more ports for the - price of one. - - The easiest of these to use is - WITHOUT_X11. If the port can be built both - with and without X support, then it should normally be built - with X support. If WITHOUT_X11 is defined, - then the version that does not have X support should be - built. - - Various parts of GNOME have such knobs, though they are - slightly more difficult to use. The variables to use in the - Makefile are WANT_* - and HAVE_*. If the application can be - built both with or without one of the dependencies listed - below, then the Makefile should set - WANT_PKG, and should build the version that - uses PKG if HAVE_PKG - is defined. - - The WANT_* variables currently - supported this way are WANT_GLIB, - WANT_GTK, WANT_ESOUND, - WANT_IMLIB, and - WANT_GNOME. + + zope* + Zope support. + + + + - - - Specifying the working directory + + Choosing the right category - Each port is extracted in to a working directory, which must be - writeable. The ports system assumes that the - DISTFILES unpack in to a directory called - ${DISTNAME}. In other words, if you have - set: + As many of the categories overlap, you often have to choose + which of the categories should be the primary category of your port. + There are several rules that govern this issue. Here is the list of + priorities, in decreasing order of precedence. - PORTNAME= foo -PORTVERSION= 1.0 + + + Language specific categories always come first. For + example, if your port installs Japanese X11 fonts, then your + CATEGORIES line would read japanese + x11-fonts. + - then the port's distribution files contain a top-level directory, - foo-1.0, and the rest of the files are located - under that directory. + + Specific categories win over less-specific ones. For + instance, an HTML editor should be listed as www + editors, not the other way around. Also, you do not + need to list net when the port belongs to + any of irc, mail, + mbone, news, + security, or www. + - There are a number of variables you can set if that is not the - case. + + x11 is used as a secondary category only + when the primary category is a natural language. In particular, + you should not put x11 in the category line + for X applications. + - - <makevar>WRKSRC</makevar> + + Emacs modes should be + placed in the same ports category as the application + supported by the mode, not in + editors. For example, an + Emacs mode to edit source + files of some programming language should go into + lang. + + - The variable lists the name of the directoy that is created when - the application's distfiles are extracted. If our previous example - extracted into a directory called foo (and not - foo-1.0) you would write: + + If your port truly does not belong anywhere else, put it in + misc. + + - WRKSRC= foo + If you are not sure about the category, please put a comment to + that effect in your send-pr submission so we can + discuss it before we import it. If you are a committer, send a note + to the &a.ports; so we can discuss it first—too often new ports are + imported to the wrong category only to be moved right away. + + - or possibly + + The distribution files - WRKSRC= ${PORTNAME} - + The second part of the Makefile describes the + files that must be downloaded in order to build the port, and where + they can be downloaded from. - <makevar>NO_WRKSUBDIR</makevar> + <makevar>DISTNAME</makevar> - If the port does not extract in to a subdirectory at all then - you should set NO_WRKSUBDIR to indicate - that. + DISTNAME is the name of the port as + called by the authors of the software. + DISTNAME defaults to + ${PORTNAME}-${PORTVERSION}, so override it if necessary. + DISTNAME is only used in two places. + First, the distribution file list + (DISTFILES) defaults to + ${DISTNAME}${EXTRACT_SUFX}. + Second, the distribution file is expected to extract into a + subdirectory named WRKSRC, which defaults + to work/${DISTNAME}. - NO_WRKSUBDIR= yes + + PKGNAMEPREFIX and + PKGNAMESUFFIX do not affect + DISTNAME. Also note that when + WRKSRC is equal to + work/${PORTNAME}-${PORTVERSION} + while the original source archive is named something other than + ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}, + you should probably leave DISTNAME + alone— you are better off defining + DISTFILES than having to set both + DISTNAME and WRKSRC + (and possibly EXTRACT_SUFX). + - - - Building mechanisms + + <makevar>MASTER_SITES</makevar> - If your package uses GNU make, set - USE_GMAKE=yes. If your package uses - configure, set - HAS_CONFIGURE=yes. If your package uses GNU - configure, set - GNU_CONFIGURE=yes (this implies - HAS_CONFIGURE). If you want to give some extra - arguments to configure (the default argument list - --prefix=${PREFIX} for GNU - configure and empty for non-GNU - configure), set those extra arguments in - CONFIGURE_ARGS. If your package uses GNU - autoconf, set - USE_AUTOCONF=yes. This implies - GNU_CONFIGURE, and will cause - autoconf to be run before - configure. + Record the directory part of the FTP/HTTP-URL pointing at the + original tarball in MASTER_SITES. Do not forget + the trailing slash (/)! - If your package is an X application that creates - Makefiles from Imakefiles - using imake, then set - USE_IMAKE=yes. This will cause the configure - stage to automatically do an xmkmf -a. If the - flag is a problem for your port, set - XMKMF=xmkmf. If the port uses - imake but does not understand the - install.man target, - NO_INSTALL_MANPAGES=yes should be set. In - addition, the author of the original port should be shot. :-> + The make macros will try to use this + specification for grabbing the distribution file with + FETCH if they cannot find it already on the + system. - If your port's source Makefile has - something else than all as the main build - target, set ALL_TARGET accordingly. Same goes - for install and - INSTALL_TARGET. - - + It is recommended that you put multiple sites on this list, + preferably from different continents. This will safeguard against + wide-area network problems, and we are even planning to add support + for automatically determining the closest master site and fetching + from there! - - Special considerations + If the original tarball is part of one of the popular + archives such as X-contrib, GNU, or Perl CPAN, you may be able + refer to those sites in an easy compact form using + MASTER_SITE_* + (e.g., MASTER_SITE_XCONTRIB and + MASTER_SITE_PERL_GNU). Simply set + MASTER_SITES to one of these variables and + MASTER_SITE_SUBDIR to the path within the + archive. Here is an example: - There are some more things you have to take into account when you - create a port. This section explains the most common of those. + MASTER_SITES= ${MASTER_SITE_XCONTRIB} +MASTER_SITE_SUBDIR= applications - - Shared Libraries + These variables are defined in + /usr/ports/Mk/bsd.sites.mk. There are + new archives added all the time, so make sure to check the + latest version of this file before submitting a port. - If your port installs one or more shared libraries, define a - INSTALLS_SHLIB make variable, which will instruct - a bsd.port.mk to run - ${LDCONFIG} -m on the directory where the - new library is installed (usually - PREFIX/lib) during - post-install target to register it into the - shared library cache. This variable, when defined, will also - facilitate addition of an appropriate - @exec /sbin/ldconfig -m and - @unexec /sbin/ldconfig -R pair into your - pkg-plist file, so that a user who installed - the package can start using the shared library immediately and - deinstallation will not cause the system to still believe the - library is there. + The user can also set the MASTER_SITE_* + variables in /etc/make.conf to override our + choices, and use their favorite mirrors of these popular archives + instead. + - If you need, you can override default location where the new - library is installed by defining LDCONFIG_DIRS - make variable, which should contain a list of directories into which - shared libraries are to be installed. For example if your port - installs shared libraries into - PREFIX/lib/foo and - PREFIX/lib/bar directories - you could use the following in your - Makefile: + + <makevar>EXTRACT_SUFX</makevar> - INSTALLS_SHLIB= yes -LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar + If you have one distribution file, and it uses an odd suffix to + indicate the compression mechanism, set + EXTRACT_SUFX. + + For example, if the distribution file was named + foo.tgz instead of the more normal + foo.tar.gz, you would write: - Note that content of LDCONFIG_DIRS is passed - through &man.sed.1; just like the rest of pkg-plist, - so PLIST_SUB substitutions also apply here. It is - recommended that you use %%PREFIX%% for - PREFIX, %%LOCALBASE%% for - LOCALBASE and %%X11BASE%% for - X11BASE. - - + DISTNAME= foo +EXTRACT_SUFX= .tgz -:-) - This is to ensure that the correct ldconfig - will be called depending on the format of the package, not the - default format of the system. + For a detailed description of the responsibilities of maintainers, + refer to the MAINTAINER on + Makefiles section. - ---> + + Dependencies - - <makevar>MASTERDIR</makevar> + Many ports depend on other ports. There are five variables that + you can use to ensure that all the required bits will be on the + user's machine. There are also some pre-supported dependency + variables for common cases, plus a few more to control the behavior + of dependencies. - If your port needs to build slightly different versions of - packages by having a variable (for instance, resolution, or paper - size) take different values, create one subdirectory per package to - make it easier for users to see what to do, but try to share as many - files as possible between ports. Typically you only need a very short - Makefile in all but one of the directories if you - use variables cleverly. In the sole Makefiles, - you can use MASTERDIR to specify the directory - where the rest of the files are. Also, use a variable as part of - PKGNAMESUFFIX so - the packages will have different names. - - This will be best demonstrated by an example. This is part of - japanese/xdvi300/Makefile; - - PORTNAME= xdvi -PORTVERSION= 17 -PKGNAMEPREFIX= ja- -PKGNAMESUFFIX= ${RESOLUTION} - : -# default -RESOLUTION?= 300 -.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \ - ${RESOLUTION} != 300 && ${RESOLUTION} != 400 - @${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\"" - @${ECHO} "Possible values are: 118, 240, 300 (default) and 400." - @${FALSE} -.endif + + <makevar>LIB_DEPENDS</makevar> - japanese/xdvi300 also has all the regular - patches, package files, etc. If you type make - there, it will take the default value for the resolution (300) and - build the port normally. + This variable specifies the shared libraries this port depends + on. It is a list of + lib:dir:target + tuples where lib is the name of the + shared library, dir is the + directory in which to find it in case it is not available, and + target is the target to call in that + directory. For example, LIB_DEPENDS= + jpeg.9:${PORTSDIR}/graphics/jpeg:install + will check for a shared jpeg library with major version 9, and + descend into the graphics/jpeg subdirectory + of your ports tree to build and install it if it is not found. + The target part can be omitted if it is + equal to DEPENDS_TARGET (which defaults to + install). - As for other resolutions, this is the entire - xdvi118/Makefile: + + The lib part is an argument given + to ldconfig -r | grep -wF. There shall be no + regular expressions in this variable. + - RESOLUTION= 118 -MASTERDIR= ${.CURDIR}/../xdvi300 + The dependency is checked twice, once from within the + extract target and then from within the + install target. Also, the name of the + dependency is put into the package so that + pkg_add will automatically install it if it is + not on the user's system. + -.include "${MASTERDIR}/Makefile" + + <makevar>RUN_DEPENDS</makevar> - (xdvi240/Makefile and - xdvi400/Makefile are similar). The - MASTERDIR definition tells - bsd.port.mk that the regular set of - subdirectories like FILESDIR and - SCRIPTDIR are to be found under - xdvi300. The RESOLUTION=118 - line will override the RESOLUTION=300 line in - xdvi300/Makefile and the port will be built with - resolution set to 118. - + This variable specifies executables or files this port depends + on during run-time. It is a list of + path:dir:target + tuples where path is the name of the + executable or file, dir is the + directory in which to find it in case it is not available, and + target is the target to call in that + directory. If path starts with a slash + (/), it is treated as a file and its existence + is tested with test -e; otherwise, it is + assumed to be an executable, and which -s is + used to determine if the program exists in the user's search + path. - - Shared library versions + For example, - Please read our policy on - shared library versioning to understand what to do with - shared library versions in general. Do not blindly assume software - authors know what they are doing; many of them do not. It is very - important that these details are carefully considered, as we have - quite a unique situation where we are trying to have dozens of - potentially incompatible software pairs co-exist. Careless port - imports have caused great trouble regarding shared libraries in the - past (ever wondered why the port jpeg-6b has a - shared library version of 9?). If in doubt, send a message to the - &a.ports;. Most of the time, your job ends by determining the right - shared library version and making appropriate patches to implement - it. + RUN_DEPENDS= ${LOCALBASE}/etc/innd:${PORTSDIR}/news/inn \ + wish8.0:${PORTSDIR}/x11-toolkits/tk80 - - + will check if the file or directory + /usr/local/etc/innd exists, and build and + install it from the news/inn subdirectory of + the ports tree if it is not found. It will also see if an + executable called wish8.0 is in your search + path, and descend into the x11-toolkits/tk80 + subdirectory of your ports tree to build and install it if it is + not found. - - Manpages + + In this case, innd is actually an + executable; if an executable is in a place that is not expected + to be in a normal user's search path, you should use the full + pathname. + - The MAN[1-9LN] variables will automatically add - any manpages to pkg-plist (this means you must - not list manpages in the - pkg-plist—see generating PLIST for more). It also - makes the install stage automatically compress or uncompress manpages - depending on the setting of NOMANCOMPRESS in - /etc/make.conf. + The dependency is checked from within the + install target. Also, the name of the + dependency is put into the package so that + pkg_add will automatically install it if it is + not on the user's system. The target + part can be omitted if it is the same as + DEPENDS_TARGET. + - If your port tries to install multiple names for manpages using - symlinks or hardlinks, you must use the MLINKS - variable to identify these. The link installed by your port will - be destroyed and recreated by bsd.port.mk - to make sure it points to the correct file. Any manpages - listed in MLINKS must not be listed in the - pkg-plist. + + <makevar>BUILD_DEPENDS</makevar> - To specify whether the manpages are compressed upon installation, - use the MANCOMPRESSED variable. This variable can - take three values, yes, no and - maybe. yes means manpages are - already installed compressed, no means they are - not, and maybe means the software already respects - the value of NOMANCOMPRESS so - bsd.port.mk does not have to do anything - special. + This variable specifies executables or files this port + requires to build. Like RUN_DEPENDS, it is a + list of + path:dir:target + tuples. For example, BUILD_DEPENDS= + unzip:${PORTSDIR}/archivers/unzip will check + for an executable called unzip, and descend + into the archivers/unzip subdirectory of your + ports tree to build and install it if it is not found. - MANCOMPRESSED is automatically set to - yes if USE_IMAKE is set and - NO_INSTALL_MANPAGES is not set, and to - no otherwise. You do not have to explicitly define - it unless the default is not suitable for your port. + + build here means everything from extraction to + compilation. The dependency is checked from within the + extract target. The + target part can be omitted if it is + the same as DEPENDS_TARGET + + - If your port anchors its man tree somewhere other than - PREFIX, you can use the - MANPREFIX to set it. Also, if only manpages in - certain sections go in a non-standard place, such as some Perl modules - ports, you can set individual man paths using - MANsectPREFIX (where - sect is one of 1-9, - L or N). + + <makevar>FETCH_DEPENDS</makevar> - If your manpages go to language-specific subdirectories, set the - name of the languages to MANLANG. The value of - this variable defaults to "" (i.e., English - only). + This variable specifies executables or files this port + requires to fetch. Like the previous two, it is a list of + path:dir:target + tuples. For example, FETCH_DEPENDS= + ncftp2:${PORTSDIR}/net/ncftp2 will check for an + executable called ncftp2, and descend into the + net/ncftp2 subdirectory of your ports tree to + build and install it if it is not found. - Here is an example that puts it all together. + The dependency is checked from within the + fetch target. The + target part can be omitted if it is the + same as DEPENDS_TARGET. + - MAN1= foo.1 -MAN3= bar.3 -MAN4= baz.4 -MLINKS= foo.1 alt-name.8 -MANLANG= "" ja -MAN3PREFIX= ${PREFIX}/share/foobar -MANCOMPRESSED= yes + + <makevar>DEPENDS</makevar> - This states that six files are installed by this port; + If there is a dependency that does not fall into either of the + above four categories, or your port requires having the source of + the other port extracted in addition to having it installed, + then use this variable. This is a list of + dir:target, + as there is nothing to check, unlike the previous four. The + target part can be omitted if it is the + same as DEPENDS_TARGET. + - ${PREFIX}/man/man1/foo.1.gz -${PREFIX}/man/ja/man1/foo.1.gz -${PREFIX}/share/foobar/man/man3/bar.3.gz -${PREFIX}/share/foobar/man/ja/man3/bar.3.gz -${PREFIX}/man/man4/baz.4.gz -${PREFIX}/man/ja/man4/baz.4.gz + + Common dependency variables - Additionally ${PREFIX}/man/man8/alt-name.8.gz - may or may not be installed by your port. Regardless, a - symlink will be made to join the foo(1) manpage and - alt-name(8) manpage. - - - - - Ports that require Motif - - There are many programs that require a Motif library (available - from several commercial vendors, while there is a free clone reported - to be able to run many applications in - x11-toolkits/lesstif) to compile. Since it is a - popular toolkit and their licenses usually permit redistribution of - statically linked binaries, we have made special provisions for - handling ports that require Motif in a way that we can easily compile - binaries linked either dynamically (for people who are compiling from - the port) or statically (for people who distribute packages). - - - <makevar>USE_MOTIF</makevar> - - If your port requires Motif, define this variable in the - Makefile. This will prevent people who do not own a copy of Motif - from even attempting to build it. - - - - <makevar>MOTIFLIB</makevar> - - This variable will be set by bsd.port.mk to - be the appropriate reference to the Motif library. Please patch the - source to use this wherever the Motif library is referenced in the - Makefile or - Imakefile. - - There are two common cases: - - - - If the port refers to the Motif library as - -lXm in its Makefile or - Imakefile, simply substitute - ${MOTIFLIB} for it. - - - - If the port uses XmClientLibs in its - Imakefile, change it to - ${MOTIFLIB} ${XTOOLLIB} - ${XLIB}. - - - - - Note that MOTIFLIB (usually) expands to - -L/usr/X11R6/lib -lXm or - /usr/X11R6/lib/libXm.a, so there is no need to - add -L or -l in front. - - - - - X11 fonts - - If your port installs fonts for the X Window system, put them in - X11BASE/lib/X11/fonts/local. - This directory is new to XFree86 release 3.3.3. If it does not exist, - please create it, and print out a message urging the user to update - their XFree86 to 3.3.3 or newer, or at least add this directory to the - font path in /etc/XF86Config. - - - - Info files - - The new version of texinfo (included in 2.2.2-RELEASE and onwards) - contains a utility called install-info to add and - delete entries to the dir file. If your port - installs any info documents, please follow these instructions so your - port/package will correctly update the user's - PREFIX/info/dir file. (Sorry - for the length of this section, but is it imperative to weave all the - info files together. If done correctly, it will produce a - beautiful listing, so please bear with me! - - First, this is what you (as a porter) need to know - - &prompt.user; install-info --help -install-info [OPTION]... [INFO-FILE [DIR-FILE]] - Install INFO-FILE in the Info directory file DIR-FILE. - -Options: ---delete Delete existing entries in INFO-FILE; - don't insert any new entries. - : ---entry=TEXT Insert TEXT as an Info directory entry. - : ---section=SEC Put this file's entries in section SEC of the directory. : - - - This program will not actually install info - files; it merely inserts or deletes entries in the - dir file. - - - Here's a seven-step procedure to convert ports to use - install-info. - editors/emacs will be used as an - example. - - - - Look at the texinfo sources and make a patch to insert - @dircategory and @direntry - statements to files that do not have them. This is part of my - patch: - - --- ./man/vip.texi.org Fri Jun 16 15:31:11 1995 -+++ ./man/vip.texi Tue May 20 01:28:33 1997 -@@ -2,6 +2,10 @@ - - @setfilename ../info/vip - @settitle VIP -+@dircategory The Emacs editor and associated tools -+@direntry -+* VIP: (vip). A VI-emulation for Emacs. -+@end direntry - - @iftex - @finalout - : - - The format should be self-explanatory. Many authors leave a - dir file in the source tree that contains all - the entries you need, so look around before you try to write your - own. Also, make sure you look into related ports and make the - section names and entry indentations consistent (we recommend that - all entry text start at the 4th tab stop). - - - Note that you can put only one info entry per file because - of a bug in install-info --delete that - deletes only the first entry if you specify multiple entries in - the @direntry section. - - - You can give the dir entries to - install-info as arguments - ( and ) instead - of patching the texinfo sources. This probably is not a good - idea for ports because you need to duplicate the same information - in three places - (Makefile and - @exec/@unexec of - pkg-plist; see below). However, if you have - Japanese (or other multibyte encoding) info files, you will have - to use the extra arguments to install-info - because makeinfo cannot handle those texinfo - sources. (See Makefile and - pkg-plist of japanese/skk - for examples on how to do this). - - - - Go back to the port directory and do a make clean; - make and verify that the info files are regenerated - from the texinfo sources. Since the texinfo sources are newer than - the info files, they should be rebuilt when you type - make; but many Makefiles - do not include correct dependencies for info files. In - emacs' case, it was necessary to patch the main - Makefile.in so it would descend into the - man subdirectory to rebuild the info - pages. - - --- ./Makefile.in.org Mon Aug 19 21:12:19 1996 -+++ ./Makefile.in Tue Apr 15 00:15:28 1997 -@@ -184,7 +184,7 @@ - # Subdirectories to make recursively. `lisp' is not included - # because the compiled lisp files are part of the distribution - # and you cannot remake them without installing Emacs first. --SUBDIR = lib-src src -+SUBDIR = lib-src src man - - # The makefiles of the directories in $SUBDIR. - SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile - lwlib/Makefile ---- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996 -+++ ./man/Makefile.in Tue Apr 15 00:29:52 1997 -@@ -66,6 +66,7 @@ - ${srcdir}/gnu1.texi \ - ${srcdir}/glossary.texi - -+all: info - info: $(INFO_TARGETS) - - dvi: $(DVI_TARGETS) - - The second hunk was necessary because the default target in - the man subdir is called - info, while the main - Makefile wants to call - all. The installation of the - info info file was also removed because we - already have one with the same name in - /usr/share/info (that patch is not shown - here). - - - - If there is a place in the Makefile that - is installing the dir file, delete it. Your - port may not be doing it. Also, remove any commands that are - otherwise mucking around with the dir - file. - - --- ./Makefile.in.org Mon Aug 19 21:12:19 1996 -+++ ./Makefile.in Mon Apr 14 23:38:07 1997 -@@ -368,14 +368,8 @@ - if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \ - then \ - (cd ${infodir}; \ -- if [ -f dir ]; then \ -- if [ ! -f dir.old ]; then mv -f dir dir.old; \ -- else mv -f dir dir.bak; fi; \ -- fi; \ - cd ${srcdir}/info ; \ -- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); -\ -- (cd $${thisdir}; chmod a+r ${infodir}/dir); \ - for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \ - (cd $${thisdir}; \ - ${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \ - chmod a+r ${infodir}/$$f); \ - - - - (This step is only necessary if you are modifying an existing - port.) Take a look at pkg-plist and delete - anything that is trying to patch up info/dir. - They may be in pkg-install or some other - file, so search extensively. - - Index: pkg-plist -=================================================================== -RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v -retrieving revision 1.15 -diff -u -r1.15 pkg-plist ---- pkg-plist 1997/03/04 08:04:00 1.15 -+++ pkg-plist 1997/04/15 06:32:12 -@@ -15,9 +15,6 @@ - man/man1/emacs.1.gz - man/man1/etags.1.gz - man/man1/ctags.1.gz --@unexec cp %D/info/dir %D/info/dir.bak --info/dir --@unexec cp %D/info/dir.bak %D/info/dir - info/cl - info/cl-1 - info/cl-2 - - - - Add a post-install target to the - Makefile to call - install-info with the installed - info files. (It is no longer necessary to create the - dir file yourself; - install-info automatically creates this - file if it does not exist.) - - Index: Makefile -=================================================================== -RCS file: /usr/cvs/ports/editors/emacs/Makefile,v -retrieving revision 1.26 -diff -u -r1.26 Makefile ---- Makefile 1996/11/19 13:14:40 1.26 -+++ Makefile 1997/05/20 10:25:09 1.28 -@@ -20,5 +20,8 @@ - post-install: - .for file in emacs-19.34 emacsclient etags ctags b2m - strip ${PREFIX}/bin/${file} - .endfor -+.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode -+ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir -+.endfor - - .include <bsd.port.mk> - - - - Edit pkg-plist and add equivalent - @exec statements and also - @unexec for - pkg_delete. + Define USE_XLIB=yes if your port requires + the X Window System to be installed (it is implied by + USE_IMAKE). Define + USE_GMAKE=yes if your port requires GNU + make instead of BSD make. + Define USE_AUTOCONF=yes if your port requires + GNU autoconf to be run. Define USE_QT=yes if + your port uses the latest qt toolkit. Use + USE_PERL5=yes if your port requires version 5 + of the perl language. (The last is especially important since + some versions of FreeBSD have perl5 as part of the base system + while others do not.) + - Index: pkg-plist -=================================================================== -RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v -retrieving revision 1.15 -diff -u -r1.15 pkg-plist ---- pkg-plist 1997/03/04 08:04:00 1.15 -+++ pkg-plist 1997/05/20 10:25:12 1.17 -@@ -16,7 +14,14 @@ - man/man1/etags.1.gz - man/man1/ctags.1.gz -+@unexec install-info --delete %D/info/emacs %D/info/dir - : -+@unexec install-info --delete %D/info/ccmode %D/info/dir - info/cl - info/cl-1 -@@ -87,6 +94,18 @@ - info/viper-3 - info/viper-4 -+@exec install-info %D/info/emacs %D/info/dir - : -+@exec install-info %D/info/ccmode %D/info/dir - libexec/emacs/19.34/i386--freebsd/cvtmail - libexec/emacs/19.34/i386--freebsd/digest-doc + + Notes on dependencies - - The @unexec install-info --delete - commands have to be listed before the info files themselves so - they can read the files. Also, the @exec - install-info commands have to be after the info - files and the @exec command that creates the - the dir file. - - + As mentioned above, the default target to call when a + dependency is required is DEPENDS_TARGET. + It defaults to install. This is a user + variable; it is never defined in a port's + Makefile. If your port needs a special way + to handle a dependency, use the :target part of + the *_DEPENDS variables instead of redefining + DEPENDS_TARGET. - - Test and admire your - work. :-). Check the - dir file before and after each step. - - - + When you type make clean, its dependencies + are automatically cleaned too. If you do not wish this to happen, + define the variable NOCLEANDEPENDS in your + environment. - - The <filename>pkg-<replaceable>*</replaceable></filename> files + To depend on another port unconditionally, use the + variable ${NONEXISTENT} as the first field + of BUILD_DEPENDS or + RUN_DEPENDS. Use this only when you need to + the to get to the source of the other port. You can often save + compilation time by specifying the target too. For + instance - There are some tricks we have not mentioned yet about the - pkg-* files - that come in handy sometimes. + BUILD_DEPENDS= ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract - - <filename>pkg-message</filename> + will always descend to the JPEG port and extract it. - If you need to display a message to the installer, you may place - the message in pkg-message. This capability is - often useful to display additional installation steps to be taken - after a pkg_add or to display licensing - information. + Do not use DEPENDS unless there is no other + way the behavior you want can be accomplished. It will cause the + other port to always be built (and installed, by default), and the + dependency will go into the packages as well. If this is really + what you need, you should probably write it as + BUILD_DEPENDS and + RUN_DEPENDS instead—at least the + intention will be clear. + - - The pkg-message file does not need to be - added to pkg-plist. Also, it will not get - automatically printed if the user is using the port, not the - package, so you should probably display it from the - post-install target yourself. - - + + Optional dependencies + + Some large applications can be built in a number of + configurations, adding functionality if one of a number of + libraries or applications is available. Since not all users + want those libraries or applications, the ports system + provides hooks that the port author can use to decide which + configuration should be built. Supporting these properly will + make uses happy, and effectively provide 2 or more ports for the + price of one. + + The easiest of these to use is + WITHOUT_X11. If the port can be built both + with and without X support, then it should normally be built + with X support. If WITHOUT_X11 is defined, + then the version that does not have X support should be + built. + + Various parts of GNOME have such knobs, though they are + slightly more difficult to use. The variables to use in the + Makefile are WANT_* + and HAVE_*. If the application can be + built both with or without one of the dependencies listed + below, then the Makefile should set + WANT_PKG, and should build the version that + uses PKG if HAVE_PKG + is defined. + + The WANT_* variables currently + supported this way are WANT_GLIB, + WANT_GTK, WANT_ESOUND, + WANT_IMLIB, and + WANT_GNOME. + + - - <filename>pkg-install</filename> + + Specifying the working directory - If your port needs to execute commands when the binary package - is installed with pkg_add you can do this via the - pkg-install script. This script will - automatically be added to the package, and will be run twice by - pkg_add. The first time as - ${SH} pkg-install ${PKGNAME} - PRE-INSTALL and the second time as - ${SH} pkg-install ${PKGNAME} POST-INSTALL. - $2 can be tested to determine which mode - the script is being run in. The PKG_PREFIX - environmental variable will be set to the package installation - directory. See &man.pkg.add.1; for - additional information. + Each port is extracted in to a working directory, which must be + writeable. The ports system assumes that the + DISTFILES unpack in to a directory called + ${DISTNAME}. In other words, if you have + set: - - This script is not run automatically if you install the port - with make install. If you are depending on it - being run, you will have to explicitly call it from your port's - Makefile. - - + PORTNAME= foo +PORTVERSION= 1.0 - - <filename>pkg-req</filename> + then the port's distribution files contain a top-level directory, + foo-1.0, and the rest of the files are located + under that directory. - If your port needs to determine if it should install or not, you - can create a pkg-req requirements - script. It will be invoked automatically at - installation/deinstallation time to determine whether or not - installation/deinstallation should proceed. + There are a number of variables you can set if that is not the + case. - The script will be run at installation time by - pkg_add as - pkg-req ${PKGNAME} INSTALL. - At deinstallation time it will be run by - pkg_delete as - pkg-req ${PKGNAME} DEINSTALL. - + + <makevar>WRKSRC</makevar> - - Changing <filename>pkg-plist</filename> based on make - variables + The variable lists the name of the directoy that is created when + the application's distfiles are extracted. If our previous example + extracted into a directory called foo (and not + foo-1.0) you would write: - Some ports, particularly the p5- ports, need to change their - pkg-plist depending on what options they are - configured with (or version of perl, in the case of p5- ports). To - make this easy, any instances in the pkg-plist of - %%OSREL%%, %%PERL_VER%%, and - %%PERL_VERSION%% will be substituted for - appropriately. The value of %%OSREL%% is the - numeric revision of the operating system (e.g., - 2.2.7). %%PERL_VERSION%% is - the full version number of perl (e.g., 5.00502) - and %%PERL_VER%% is the perl version number minus - the patchlevel (e.g., 5.005). + WRKSRC= foo - If you need to make other substitutions, you can set the - PLIST_SUB variable with a list of - VAR=VALUE - pairs and instances of - %%VAR%%' will be - substituted with VALUE in the - pkg-plist. + or possibly - For instance, if you have a port that installs many files in a - version-specific subdirectory, you can put something like + WRKSRC= ${PORTNAME} + - OCTAVE_VERSION= 2.0.13 -PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION} + + <makevar>NO_WRKSUBDIR</makevar> - in the Makefile and use - %%OCTAVE_VERSION%% wherever the version shows up - in pkg-plist. That way, when you upgrade the port, - you will not have to change dozens (or in some cases, hundreds) of - lines in the pkg-plist. + If the port does not extract in to a subdirectory at all then + you should set NO_WRKSUBDIR to indicate + that. - This substitution (as well as addition of any man pages) will be done between - the do-install and - post-install targets, by reading from - PLIST and writing to TMPPLIST - (default: - WRKDIR/.PLIST.mktmp). So if - your port builds PLIST on the fly, do so in or - before do-install. Also, if your port - needs to edit the resulting file, do so in - post-install to a file named - TMPPLIST. - + NO_WRKSUBDIR= yes + + - Changing the names of - <filename>pkg-<replaceable>*</replaceable></filename> files - - All the names of pkg-* files - are defined using variables so you can change them in your - Makefile if need be. This is especially useful - when you are sharing the same pkg-* files - among several ports or have to write to one of the above files (see - writing to places other than - WRKDIR for why it is a bad idea to write - directly into the pkg-* subdirectory). + Building mechanisms - Here is a list of variable names and their default - values. (PKGDIR defaults to - ${MASTERDIR}.) + If your package uses GNU make, set + USE_GMAKE=yes. If your package uses + configure, set + HAS_CONFIGURE=yes. If your package uses GNU + configure, set + GNU_CONFIGURE=yes (this implies + HAS_CONFIGURE). If you want to give some extra + arguments to configure (the default argument list + --prefix=${PREFIX} for GNU + configure and empty for non-GNU + configure), set those extra arguments in + CONFIGURE_ARGS. If your package uses GNU + autoconf, set + USE_AUTOCONF=yes. This implies + GNU_CONFIGURE, and will cause + autoconf to be run before + configure. - - - - - Variable - Default value - - + If your package is an X application that creates + Makefiles from Imakefiles + using imake, then set + USE_IMAKE=yes. This will cause the configure + stage to automatically do an xmkmf -a. If the + flag is a problem for your port, set + XMKMF=xmkmf. If the port uses + imake but does not understand the + install.man target, + NO_INSTALL_MANPAGES=yes should be set. In + addition, the author of the original port should be shot. :-> - - - COMMENT - ${PKGDIR}/pkg-comment - + If your port's source Makefile has + something else than all as the main build + target, set ALL_TARGET accordingly. Same goes + for install and + INSTALL_TARGET. + + - - DESCR - ${PKGDIR}/pkg-descr - + + Special considerations - - PLIST - ${PKGDIR}/pkg-plist - + There are some more things you have to take into account when you + create a port. This section explains the most common of those. - - PKGINSTALL - ${PKGDIR}/pkg-install - + + Shared Libraries - - PKGDEINSTALL - ${PKGDIR}/pkg-deinstall - + If your port installs one or more shared libraries, define a + INSTALLS_SHLIB make variable, which will instruct + a bsd.port.mk to run + ${LDCONFIG} -m on the directory where the + new library is installed (usually + PREFIX/lib) during + post-install target to register it into the + shared library cache. This variable, when defined, will also + facilitate addition of an appropriate + @exec /sbin/ldconfig -m and + @unexec /sbin/ldconfig -R pair into your + pkg-plist file, so that a user who installed + the package can start using the shared library immediately and + deinstallation will not cause the system to still believe the + library is there. - - PKGREQ - ${PKGDIR}/pkg-req - + If you need, you can override default location where the new + library is installed by defining LDCONFIG_DIRS + make variable, which should contain a list of directories into which + shared libraries are to be installed. For example if your port + installs shared libraries into + PREFIX/lib/foo and + PREFIX/lib/bar directories + you could use the following in your + Makefile: - - PKGMESSAGE - ${PKGDIR}/pkg-message - - - - + INSTALLS_SHLIB= yes +LDCONFIG_DIRS= %%PREFIX%%/lib/foo %%PREFIX%%/lib/bar - Please change these variables rather than overriding - PKG_ARGS. If you change - PKG_ARGS, those files will not correctly be - installed in /var/db/pkg upon install from a - port. + Note that content of LDCONFIG_DIRS is passed + through &man.sed.1; just like the rest of pkg-plist, + so PLIST_SUB substitutions also apply here. It is + recommended that you use %%PREFIX%% for + PREFIX, %%LOCALBASE%% for + LOCALBASE and %%X11BASE%% for + X11BASE. - - - Licensing Problems + + Ports with distribution restrictions + + Licenses vary, and some of them place restrictions on how the + application can be packaged, whether it can be sold for profit, and so + on. + + + It is your responsibility as a porter to read the licensing + terms of the software and make sure that the FreeBSD project will + not be held accountable for violating them by redistributing the + source or compiled binaries either via FTP or CDROM. If in doubt, + please contact the FreeBSD ports mailing list + freebsd-ports@FreeBSD.org. + + + In situations like this, the following variables can be set. In + addition, ports/LEGAL should also be + updated. - Some software packages have restrictive licenses or can be in - violation of the law in some countries (such as violating a patent). - What we can do with - them varies a lot, depending on the exact wordings of the respective - licenses. + + <makevar>NO_PACKAGE</makevar> - - It is your responsibility as a porter to read the licensing - terms of the software and make sure that the FreeBSD project will - not be held accountable for violating them by redistributing the - source or compiled binaries either via FTP or CDROM. If in doubt, - please contact the &a.ports;. - + This variable indicates that we may not generate a binary + package of the application. However, the port's + DISTFILES files may be freely distributed. - There are two variables you can set in the Makefile to handle the - situations that arise frequently: + NO_PACKAGE should also be used if the binary + package is not generally useful, and the application should always + be compiled from the source code. For example, if the application + has configuration information that is site specific hard coded in to + it at compile time. - - - If the port has a do not sell for profit type of - license, set the variable NO_CDROM to a string - describing the reason why. We will make sure such ports will not go - into the CDROM come release time. The distfile and package will - still be available via FTP. - + NO_PACKAGE should be set to a string + describing the reason why the package should not be + generated. + - - If the resulting package needs to be built uniquely for each - site, or the resulting binary package cannot be distributed due to - licensing; set the variable NO_PACKAGE to a - string describing the reason why. We will make sure such packages - will not go on the FTP site, nor into the CDROM come release time. - The distfile will still be included on both however. - + + <makevar>NO_CDROM</makevar> - - If the port has legal restrictions on who can use it (e.g., - patented stuff) or has a no commercial use license, - set the variable RESTRICTED to be the string - describing the reason why. For such ports, the distfiles/packages - will not be available even from our FTP sites. - - + This variable indicates that although we are allowed to generate + binary packages, we are not allowed to put those packages, or the + port's DISTFILES, on to CDROM for resale. The + DISTFILES will still be available via FTP. - - The GNU General Public License (GPL), both version 1 and 2, - should not be a problem for ports. - + NO_PACKAGE and NO_CDROM + can be set simultaneously. + + + + <makevar>RESTRICTED</makevar> + + Set this variable if the application's license also forbids us + from mirroring the application's DISTFILES via + FTP. + + Also set this if the application's license has general + restrictions on who may use it. Examples include: + + + + The application is for non-commercial use only. + + + + The application contains cryptography code which is + forbidden in some countries. + + + + + + <makevar>RESTRICTED_FILES</makevar> - - If you are a committer, make sure you update the - ports/LEGAL file too. - + If only some of the distribution files are restricted then set + this variable to list them. It defaults to ${DISTFILES} + ${PATCHFILES}. + + - - Upgrading + + + + <makevar>MASTERDIR</makevar> + + If your port needs to build slightly different versions of + packages by having a variable (for instance, resolution, or paper + size) take different values, create one subdirectory per package to + make it easier for users to see what to do, but try to share as many + files as possible between ports. Typically you only need a very short + Makefile in all but one of the directories if you + use variables cleverly. In the sole Makefiles, + you can use MASTERDIR to specify the directory + where the rest of the files are. Also, use a variable as part of + PKGNAMESUFFIX so + the packages will have different names. - Another way is to use the GNU Autoconf style of doing - this: + This will be best demonstrated by an example. This is part of + japanese/xdvi300/Makefile; - #ifdef HAVE_SYS_PARAM_H -#include <sys/param.h> -#endif + PORTNAME= xdvi +PORTVERSION= 17 +PKGNAMEPREFIX= ja- +PKGNAMESUFFIX= ${RESOLUTION} + : +# default +RESOLUTION?= 300 +.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \ + ${RESOLUTION} != 300 && ${RESOLUTION} != 400 + @${ECHO} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\"" + @${ECHO} "Possible values are: 118, 240, 300 (default) and 400." + @${FALSE} +.endif - Do not forget to add -DHAVE_SYS_PARAM_H to the - CFLAGS in the Makefile for - this method. + japanese/xdvi300 also has all the regular + patches, package files, etc. If you type make + there, it will take the default value for the resolution (300) and + build the port normally. - Once you have sys/param.h included, you may - use: + As for other resolutions, this is the entire + xdvi118/Makefile: - #if (defined(BSD) && (BSD >= 199103)) + RESOLUTION= 118 +MASTERDIR= ${.CURDIR}/../xdvi300 - to detect if the code is being compiled on a 4.3 Net2 code base - or newer (e.g. FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 - 1.1 and below). +.include "${MASTERDIR}/Makefile" - Use: + (xdvi240/Makefile and + xdvi400/Makefile are similar). The + MASTERDIR definition tells + bsd.port.mk that the regular set of + subdirectories like FILESDIR and + SCRIPTDIR are to be found under + xdvi300. The RESOLUTION=118 + line will override the RESOLUTION=300 line in + xdvi300/Makefile and the port will be built with + resolution set to 118. + - #if (defined(BSD) && (BSD >= 199306)) + + Shared library versions - to detect if the code is being compiled on a 4.4 code base or - newer (e.g. FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 or - above). + Please read our policy on + shared library versioning to understand what to do with + shared library versions in general. Do not blindly assume software + authors know what they are doing; many of them do not. It is very + important that these details are carefully considered, as we have + quite a unique situation where we are trying to have dozens of + potentially incompatible software pairs co-exist. Careless port + imports have caused great trouble regarding shared libraries in the + past (ever wondered why the port jpeg-6b has a + shared library version of 9?). If in doubt, send a message to the + &a.ports;. Most of the time, your job ends by determining the right + shared library version and making appropriate patches to implement + it. - The value of the BSD macro is - 199506 for the 4.4BSD-Lite2 code base. This is - stated for informational purposes only. It should not be used to - distinguish between versions of FreeBSD based only on 4.4-Lite vs. - versions that have merged in changes from 4.4-Lite2. The - __FreeBSD__ macro should be used instead. + + - Use sparingly: + + Manpages - - - __FreeBSD__ is defined in all versions of - FreeBSD. Use it if the change you are making - only affects FreeBSD. Porting gotchas like - the use of sys_errlist[] vs - strerror() are Berkeleyisms, not FreeBSD - changes. - + The MAN[1-9LN] variables will automatically add + any manpages to pkg-plist (this means you must + not list manpages in the + pkg-plist—see generating PLIST for more). It also + makes the install stage automatically compress or uncompress manpages + depending on the setting of NOMANCOMPRESS in + /etc/make.conf. - - In FreeBSD 2.x, __FreeBSD__ is defined to - be 2. In earlier versions, it is - 1. Later versions will bump it to match - their major version number. - + If your port tries to install multiple names for manpages using + symlinks or hardlinks, you must use the MLINKS + variable to identify these. The link installed by your port will + be destroyed and recreated by bsd.port.mk + to make sure it points to the correct file. Any manpages + listed in MLINKS must not be listed in the + pkg-plist. - - If you need to tell the difference between a FreeBSD 1.x - system and a FreeBSD 2.x or 3.x system, usually the right answer - is to use the BSD macros described above. If - there actually is a FreeBSD specific change (such as special - shared library options when using ld) then it - is OK to use __FreeBSD__ and #if - __FreeBSD__ > 1 to detect a FreeBSD 2.x and later - system. If you need more granularity in detecting FreeBSD - systems since 2.0-RELEASE you can use the following: + To specify whether the manpages are compressed upon installation, + use the MANCOMPRESSED variable. This variable can + take three values, yes, no and + maybe. yes means manpages are + already installed compressed, no means they are + not, and maybe means the software already respects + the value of NOMANCOMPRESS so + bsd.port.mk does not have to do anything + special. - #if __FreeBSD__ >= 2 -#include <osreldate.h> -# if __FreeBSD_version >= 199504 - /* 2.0.5+ release specific code here */ -# endif -#endif - - + MANCOMPRESSED is automatically set to + yes if USE_IMAKE is set and + NO_INSTALL_MANPAGES is not set, and to + no otherwise. You do not have to explicitly define + it unless the default is not suitable for your port. - In the hundreds of ports that have been done, there have only - been one or two cases where __FreeBSD__ should - have been used. Just because an earlier port screwed up and used it - in the wrong place does not mean you should do so too. - + If your port anchors its man tree somewhere other than + PREFIX, you can use the + MANPREFIX to set it. Also, if only manpages in + certain sections go in a non-standard place, such as some Perl modules + ports, you can set individual man paths using + MANsectPREFIX (where + sect is one of 1-9, + L or N). - - __FreeBSD_version values + If your manpages go to language-specific subdirectories, set the + name of the languages to MANLANG. The value of + this variable defaults to "" (i.e., English + only). - - - - - Release - __FreeBSD_version - - + Here is an example that puts it all together. - - - 2.0-RELEASE - 119411 - + MAN1= foo.1 +MAN3= bar.3 +MAN4= baz.4 +MLINKS= foo.1 alt-name.8 +MANLANG= "" ja +MAN3PREFIX= ${PREFIX}/share/foobar +MANCOMPRESSED= yes - - 2.1-CURRENT - 199501, 199503 - + This states that six files are installed by this port; - - 2.0.5-RELEASE - 199504 - + ${PREFIX}/man/man1/foo.1.gz +${PREFIX}/man/ja/man1/foo.1.gz +${PREFIX}/share/foobar/man/man3/bar.3.gz +${PREFIX}/share/foobar/man/ja/man3/bar.3.gz +${PREFIX}/man/man4/baz.4.gz +${PREFIX}/man/ja/man4/baz.4.gz - - 2.2-CURRENT before 2.1 - 199508 - + Additionally ${PREFIX}/man/man8/alt-name.8.gz + may or may not be installed by your port. Regardless, a + symlink will be made to join the foo(1) manpage and + alt-name(8) manpage. - - 2.1.0-RELEASE - 199511 - + - - 2.2-CURRENT before 2.1.5 - 199512 - + + Ports that require Motif - - 2.1.5-RELEASE - 199607 - + There are many programs that require a Motif library (available + from several commercial vendors, while there is a free clone reported + to be able to run many applications in + x11-toolkits/lesstif) to compile. Since it is a + popular toolkit and their licenses usually permit redistribution of + statically linked binaries, we have made special provisions for + handling ports that require Motif in a way that we can easily compile + binaries linked either dynamically (for people who are compiling from + the port) or statically (for people who distribute packages). - - 2.2-CURRENT before 2.1.6 - 199608 - + + <makevar>USE_MOTIF</makevar> - - 2.1.6-RELEASE - 199612 - + If your port requires Motif, define this variable in the + Makefile. This will prevent people who do not own a copy of Motif + from even attempting to build it. + - - 2.1.7-RELEASE - 199612 - + + <makevar>MOTIFLIB</makevar> - - 2.2-RELEASE - 220000 - + This variable will be set by bsd.port.mk to + be the appropriate reference to the Motif library. Please patch the + source to use this wherever the Motif library is referenced in the + Makefile or + Imakefile. - - 2.2.1-RELEASE - 220000 (no change) - + There are two common cases: - - 2.2-STABLE after 2.2.1-RELEASE - 220000 (no change) - + + + If the port refers to the Motif library as + -lXm in its Makefile or + Imakefile, simply substitute + ${MOTIFLIB} for it. + - - 2.2-STABLE after texinfo-3.9 - 221001 - + + If the port uses XmClientLibs in its + Imakefile, change it to + ${MOTIFLIB} ${XTOOLLIB} + ${XLIB}. + - - 2.2-STABLE after top - 221002 - + - - 2.2.2-RELEASE - 222000 - + Note that MOTIFLIB (usually) expands to + -L/usr/X11R6/lib -lXm or + /usr/X11R6/lib/libXm.a, so there is no need to + add -L or -l in front. + + - - 2.2-STABLE after 2.2.2-RELEASE - 222001 - + + X11 fonts - - 2.2.5-RELEASE - 225000 - + If your port installs fonts for the X Window system, put them in + X11BASE/lib/X11/fonts/local. + This directory is new to XFree86 release 3.3.3. If it does not exist, + please create it, and print out a message urging the user to update + their XFree86 to 3.3.3 or newer, or at least add this directory to the + font path in /etc/XF86Config. + - - 2.2-STABLE after 2.2.5-RELEASE - 225001 - + + Info files - - 2.2-STABLE after ldconfig -R merge - 225002 - + The new version of texinfo (included in 2.2.2-RELEASE and onwards) + contains a utility called install-info to add and + delete entries to the dir file. If your port + installs any info documents, please follow these instructions so your + port/package will correctly update the user's + PREFIX/info/dir file. (Sorry + for the length of this section, but is it imperative to weave all the + info files together. If done correctly, it will produce a + beautiful listing, so please bear with me! - - 2.2.6-RELEASE - 226000 - + First, this is what you (as a porter) need to know - - 2.2.7-RELEASE - 227000 - + &prompt.user; install-info --help +install-info [OPTION]... [INFO-FILE [DIR-FILE]] + Install INFO-FILE in the Info directory file DIR-FILE. - - 2.2-STABLE after 2.2.7-RELEASE - 227001 - +Options: +--delete Delete existing entries in INFO-FILE; + don't insert any new entries. + : +--entry=TEXT Insert TEXT as an Info directory entry. + : +--section=SEC Put this file's entries in section SEC of the directory. : - - 2.2-STABLE after &man.semctl.2; change - 227002 - + + This program will not actually install info + files; it merely inserts or deletes entries in the + dir file. + - - 2.2.8-RELEASE - 228000 - + Here's a seven-step procedure to convert ports to use + install-info. + editors/emacs will be used as an + example. - - 2.2-STABLE after 2.2.8-RELEASE - 228001 - + + + Look at the texinfo sources and make a patch to insert + @dircategory and @direntry + statements to files that do not have them. This is part of my + patch: - - 3.0-CURRENT before &man.mount.2; change - 300000 - + --- ./man/vip.texi.org Fri Jun 16 15:31:11 1995 ++++ ./man/vip.texi Tue May 20 01:28:33 1997 +@@ -2,6 +2,10 @@ - - 3.0-CURRENT after &man.mount.2; change - 300001 - + @setfilename ../info/vip + @settitle VIP ++@dircategory The Emacs editor and associated tools ++@direntry ++* VIP: (vip). A VI-emulation for Emacs. ++@end direntry - - 3.0-CURRENT after &man.semctl.2; change - 300002 - + @iftex + @finalout + : - - 3.0-CURRENT after ioctl arg changes - 300003 - + The format should be self-explanatory. Many authors leave a + dir file in the source tree that contains all + the entries you need, so look around before you try to write your + own. Also, make sure you look into related ports and make the + section names and entry indentations consistent (we recommend that + all entry text start at the 4th tab stop). - - 3.0-CURRENT after ELF conversion - 300004 - + + Note that you can put only one info entry per file because + of a bug in install-info --delete that + deletes only the first entry if you specify multiple entries in + the @direntry section. + - - 3.0-RELEASE - 300005 - + You can give the dir entries to + install-info as arguments + ( and ) instead + of patching the texinfo sources. This probably is not a good + idea for ports because you need to duplicate the same information + in three places + (Makefile and + @exec/@unexec of + pkg-plist; see below). However, if you have + Japanese (or other multibyte encoding) info files, you will have + to use the extra arguments to install-info + because makeinfo cannot handle those texinfo + sources. (See Makefile and + pkg-plist of japanese/skk + for examples on how to do this). + - - 3.0-CURRENT after 3.0-RELEASE - 300006 - + + Go back to the port directory and do a make clean; + make and verify that the info files are regenerated + from the texinfo sources. Since the texinfo sources are newer than + the info files, they should be rebuilt when you type + make; but many Makefiles + do not include correct dependencies for info files. In + emacs' case, it was necessary to patch the main + Makefile.in so it would descend into the + man subdirectory to rebuild the info + pages. - - 3.0-STABLE after 3/4 branch - 300007 - + --- ./Makefile.in.org Mon Aug 19 21:12:19 1996 ++++ ./Makefile.in Tue Apr 15 00:15:28 1997 +@@ -184,7 +184,7 @@ + # Subdirectories to make recursively. `lisp' is not included + # because the compiled lisp files are part of the distribution + # and you cannot remake them without installing Emacs first. +-SUBDIR = lib-src src ++SUBDIR = lib-src src man - - 3.1-RELEASE - 310000 - + # The makefiles of the directories in $SUBDIR. + SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile src/Makefile oldXMenu/Makefile + lwlib/Makefile +--- ./man/Makefile.in.org Thu Jun 27 15:27:19 1996 ++++ ./man/Makefile.in Tue Apr 15 00:29:52 1997 +@@ -66,6 +66,7 @@ + ${srcdir}/gnu1.texi \ + ${srcdir}/glossary.texi - - 3.1-STABLE after 3.1-RELEASE - 310001 - ++all: info + info: $(INFO_TARGETS) - - 3.1-STABLE after C++ constructor/destructor order - change - 310002 - + dvi: $(DVI_TARGETS) - - 3.2-RELEASE - 320000 - + The second hunk was necessary because the default target in + the man subdir is called + info, while the main + Makefile wants to call + all. The installation of the + info info file was also removed because we + already have one with the same name in + /usr/share/info (that patch is not shown + here). + - - 3.2-STABLE - 320001 - + + If there is a place in the Makefile that + is installing the dir file, delete it. Your + port may not be doing it. Also, remove any commands that are + otherwise mucking around with the dir + file. - - 3.2-STABLE after binary-incompatible IPFW and - socket changes - 320002 - + --- ./Makefile.in.org Mon Aug 19 21:12:19 1996 ++++ ./Makefile.in Mon Apr 14 23:38:07 1997 +@@ -368,14 +368,8 @@ + if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \ + then \ + (cd ${infodir}; \ +- if [ -f dir ]; then \ +- if [ ! -f dir.old ]; then mv -f dir dir.old; \ +- else mv -f dir dir.bak; fi; \ +- fi; \ + cd ${srcdir}/info ; \ +- (cd $${thisdir}; ${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir); +\ +- (cd $${thisdir}; chmod a+r ${infodir}/dir); \ + for f in ccmode* cl* dired-x* ediff* emacs* forms* gnus* info* message* mh-e* sc* vip*; do \ + (cd $${thisdir}; \ + ${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \ + chmod a+r ${infodir}/$$f); \ + - - 3.3-RELEASE - 330000 - + + (This step is only necessary if you are modifying an existing + port.) Take a look at pkg-plist and delete + anything that is trying to patch up info/dir. + They may be in pkg-install or some other + file, so search extensively. - - 3.3-STABLE - 330001 - + Index: pkg-plist +=================================================================== +RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v +retrieving revision 1.15 +diff -u -r1.15 pkg-plist +--- pkg-plist 1997/03/04 08:04:00 1.15 ++++ pkg-plist 1997/04/15 06:32:12 +@@ -15,9 +15,6 @@ + man/man1/emacs.1.gz + man/man1/etags.1.gz + man/man1/ctags.1.gz +-@unexec cp %D/info/dir %D/info/dir.bak +-info/dir +-@unexec cp %D/info/dir.bak %D/info/dir + info/cl + info/cl-1 + info/cl-2 + - - 3.3-STABLE after adding &man.mkstemp.3; - to libc - 330002 - + + Add a post-install target to the + Makefile to call + install-info with the installed + info files. (It is no longer necessary to create the + dir file yourself; + install-info automatically creates this + file if it does not exist.) - - 3.4-RELEASE - 340000 - + Index: Makefile +=================================================================== +RCS file: /usr/cvs/ports/editors/emacs/Makefile,v +retrieving revision 1.26 +diff -u -r1.26 Makefile +--- Makefile 1996/11/19 13:14:40 1.26 ++++ Makefile 1997/05/20 10:25:09 1.28 +@@ -20,5 +20,8 @@ + post-install: + .for file in emacs-19.34 emacsclient etags ctags b2m + strip ${PREFIX}/bin/${file} + .endfor ++.for info in emacs vip viper forms gnus mh-e cl sc dired-x ediff ccmode ++ install-info ${PREFIX}/info/${info} ${PREFIX}/info/dir ++.endfor - - 3.4-STABLE - 340001 - + .include <bsd.port.mk> + - - 3.5-RELEASE - 350000 - + + Edit pkg-plist and add equivalent + @exec statements and also + @unexec for + pkg_delete. - - 3.5-STABLE - 350001 - + Index: pkg-plist +=================================================================== +RCS file: /usr/cvs/ports/editors/emacs/pkg-plist,v +retrieving revision 1.15 +diff -u -r1.15 pkg-plist +--- pkg-plist 1997/03/04 08:04:00 1.15 ++++ pkg-plist 1997/05/20 10:25:12 1.17 +@@ -16,7 +14,14 @@ + man/man1/etags.1.gz + man/man1/ctags.1.gz ++@unexec install-info --delete %D/info/emacs %D/info/dir + : ++@unexec install-info --delete %D/info/ccmode %D/info/dir + info/cl + info/cl-1 +@@ -87,6 +94,18 @@ + info/viper-3 + info/viper-4 ++@exec install-info %D/info/emacs %D/info/dir + : ++@exec install-info %D/info/ccmode %D/info/dir + libexec/emacs/19.34/i386--freebsd/cvtmail + libexec/emacs/19.34/i386--freebsd/digest-doc - - 4.0-CURRENT after 3.4 branch - 400000 - + + The @unexec install-info --delete + commands have to be listed before the info files themselves so + they can read the files. Also, the @exec + install-info commands have to be after the info + files and the @exec command that creates the + the dir file. + + - - 4.0-CURRENT after change in dynamic linker - handling - 400001 - + + Test and admire your + work. :-). Check the + dir file before and after each step. + + + - - 4.0-CURRENT after C++ constructor/destructor - order change - 400002 - + + The <filename>pkg-<replaceable>*</replaceable></filename> files - - 4.0-CURRENT after functioning &man.dladdr.3; - 400003 - + There are some tricks we have not mentioned yet about the + pkg-* files + that come in handy sometimes. - - 4.0-CURRENT after __deregister_frame_info dynamic - linker bug fix (also 4.0-CURRENT after EGCS 1.1.2 - integration) - - 400004 - + + <filename>pkg-message</filename> - - 4.0-CURRENT after &man.suser.9; API change - (also 4.0-CURRENT after newbus) - 400005 - + If you need to display a message to the installer, you may place + the message in pkg-message. This capability is + often useful to display additional installation steps to be taken + after a pkg_add or to display licensing + information. - - 4.0-CURRENT after cdevsw registration change - 400006 - + + The pkg-message file does not need to be + added to pkg-plist. Also, it will not get + automatically printed if the user is using the port, not the + package, so you should probably display it from the + post-install target yourself. + + - - 4.0-CURRENT after the addition of so_cred for - socket level credentials - 400007 - + + <filename>pkg-install</filename> - - 4.0-CURRENT after the addition of a poll syscall - wrapper to libc_r - 400008 - + If your port needs to execute commands when the binary package + is installed with pkg_add you can do this via the + pkg-install script. This script will + automatically be added to the package, and will be run twice by + pkg_add. The first time as + ${SH} pkg-install ${PKGNAME} + PRE-INSTALL and the second time as + ${SH} pkg-install ${PKGNAME} POST-INSTALL. + $2 can be tested to determine which mode + the script is being run in. The PKG_PREFIX + environmental variable will be set to the package installation + directory. See &man.pkg.add.1; for + additional information. - - 4.0-CURRENT after the change of the kernel's - dev_t type to struct - specinfo pointer - 400009 - + + This script is not run automatically if you install the port + with make install. If you are depending on it + being run, you will have to explicitly call it from your port's + Makefile. + + - - 4.0-CURRENT after fixing a hole - in &man.jail.2; - 400010 - + + <filename>pkg-req</filename> - - 4.0-CURRENT after the sigset_t - datatype change - 400011 - + If your port needs to determine if it should install or not, you + can create a pkg-req requirements + script. It will be invoked automatically at + installation/deinstallation time to determine whether or not + installation/deinstallation should proceed. - - 4.0-CURRENT after the cutover to the GCC 2.95.2 - compiler - 400012 - + The script will be run at installation time by + pkg_add as + pkg-req ${PKGNAME} INSTALL. + At deinstallation time it will be run by + pkg_delete as + pkg-req ${PKGNAME} DEINSTALL. + - - 4.0-CURRENT after adding pluggable linux-mode - ioctl handlers - 400013 - + + Changing <filename>pkg-plist</filename> based on make + variables - - 4.0-CURRENT after importing OpenSSL - 400014 - + Some ports, particularly the p5- ports, need to change their + pkg-plist depending on what options they are + configured with (or version of perl, in the case of p5- ports). To + make this easy, any instances in the pkg-plist of + %%OSREL%%, %%PERL_VER%%, and + %%PERL_VERSION%% will be substituted for + appropriately. The value of %%OSREL%% is the + numeric revision of the operating system (e.g., + 2.2.7). %%PERL_VERSION%% is + the full version number of perl (e.g., 5.00502) + and %%PERL_VER%% is the perl version number minus + the patchlevel (e.g., 5.005). - - 4.0-CURRENT after the C++ ABI change in GCC 2.95.2 - from -fvtable-thunks to -fno-vtable-thunks by - default - 400015 - + If you need to make other substitutions, you can set the + PLIST_SUB variable with a list of + VAR=VALUE + pairs and instances of + %%VAR%%' will be + substituted with VALUE in the + pkg-plist. - - 4.0-CURRENT after importing OpenSSH - 400016 - + For instance, if you have a port that installs many files in a + version-specific subdirectory, you can put something like - - 4.0-RELEASE - 400017 - + OCTAVE_VERSION= 2.0.13 +PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION} - - 4.0-STABLE after 4.0-RELEASE - 400018 - + in the Makefile and use + %%OCTAVE_VERSION%% wherever the version shows up + in pkg-plist. That way, when you upgrade the port, + you will not have to change dozens (or in some cases, hundreds) of + lines in the pkg-plist. - - 4.0-STABLE after the introduction of delayed - checksums. - 400019 - + This substitution (as well as addition of any man pages) will be done between + the do-install and + post-install targets, by reading from + PLIST and writing to TMPPLIST + (default: + WRKDIR/.PLIST.mktmp). So if + your port builds PLIST on the fly, do so in or + before do-install. Also, if your port + needs to edit the resulting file, do so in + post-install to a file named + TMPPLIST. + - - 4.0-STABLE after merging libxpg4 code into - libc. - 400020 - + + Changing the names of + <filename>pkg-<replaceable>*</replaceable></filename> files - - 4.0-STABLE after upgrading Binutils to 2.10.0, ELF - branding changes, and tcsh in the base system. - 400021 - + All the names of pkg-* files + are defined using variables so you can change them in your + Makefile if need be. This is especially useful + when you are sharing the same pkg-* files + among several ports or have to write to one of the above files (see + writing to places other than + WRKDIR for why it is a bad idea to write + directly into the pkg-* subdirectory). - - 4.1-RELEASE - 410000 - + Here is a list of variable names and their default + values. (PKGDIR defaults to + ${MASTERDIR}.) - - 4.1-STABLE after 4.1-RELEASE - 410001 - + + + + + Variable + Default value + + - - 4.1-STABLE after &man.setproctitle.3; moved from - libutil to libc. - 410002 - + + + COMMENT + ${PKGDIR}/pkg-comment + - - 4.1.1-RELEASE - 411000 - + + DESCR + ${PKGDIR}/pkg-descr + - - 4.1.1-STABLE after 4.1.1-RELEASE - 411001 - + + PLIST + ${PKGDIR}/pkg-plist + - - 4.2-RELEASE - 420000 - + + PKGINSTALL + ${PKGDIR}/pkg-install + - - 4.2-STABLE after combining libgcc.a and - libgcc_r.a, and associated GCC linkage changes. - 420001 - + + PKGDEINSTALL + ${PKGDIR}/pkg-deinstall + - - 4.3-RELEASE - 430000 - + + PKGREQ + ${PKGDIR}/pkg-req + - - 4.3-STABLE after wint_t introduction. - 430001 - + + PKGMESSAGE + ${PKGDIR}/pkg-message + + + + - - 4.3-STABLE after PCI powerstate API merge. - 430002 - + Please change these variables rather than overriding + PKG_ARGS. If you change + PKG_ARGS, those files will not correctly be + installed in /var/db/pkg upon install from a + port. + + - - 4.4-RELEASE - 440000 - + + Testing you port - - 4.4-STABLE after d_thread_t introduction. - 440001 - + + Portlint - - 4.4-STABLE after mount structure changes (affects - filesystem klds). - 440002 - + Do check your work with portlint + before you submit or commit it. + - - 4.4-STABLE after the userland components of smbfs - were imported. - 440003 - - - 4.5-RELEASE - 450000 - + + <makevar>PREFIX</makevar> - - 4.5-STABLE after the usb structure element rename. - 450001 - + Do try to make your port install relative to + PREFIX. (The value of this variable will be set + to LOCALBASE (default + /usr/local), unless + USE_X_PREFIX or USE_IMAKE is + set, in which case it will be X11BASE (default + /usr/X11R6).) - - 4.5-STABLE after the - sendmail_enable &man.rc.conf.5; - variable was made to take the value - NONE. - 450004 - + Not hard-coding /usr/local or + /usr/X11R6 anywhere in the source will make the + port much more flexible and able to cater to the needs of other + sites. For X ports that use imake, this is + automatic; otherwise, this can often be done by simply replacing the + occurrences of /usr/local (or + /usr/X11R6 for X ports that do not use imake) + in the various scripts/Makefiles in the port to read + PREFIX, as this variable is automatically passed + down to every stage of the build and install processes. - - 4.5-STABLE after accept filtering was fixed so - that is no longer susceptible to an easy DoS. - 450006 - + Make sure your application isn't installing things in + /usr/local instead of PREFIX. + A quick test for this is to do this is: - - 4.6-RELEASE - 460000 - + &prompt.root; make clean; make package PREFIX=/var/tmp/port-name + + If anything is installed outside of PREFIX, + making the package creation process will complain that it + can't find the files. - - 4.6-STABLE &man.sendfile.2; fixed to comply with - documentation, not to count any headers sent against - the amount of data to be sent from the file. - 460001 - + + This does not test for the existence of internal references, + or correct use of LOCALBASE for references to + files from other ports. Testing the installation in + /var/tmp/port-name + to do that that while you have it installed would do that. - - 4.6-STABLE after MFC of `sed -i'. - 460101 - + Do not set USE_X_PREFIX unless your port + truly requires it (i.e., it links against X libs or it needs to + reference files in X11BASE). - - 5.0-CURRENT - 500000 - + The variable PREFIX can be reassigned in your + Makefile or in the user's environment. + However, it is strongly discouraged for individual ports to set this + variable explicitly in the Makefiles. - - 5.0-CURRENT after adding addition ELF header fields, - and changing our ELF binary branding method. - 500001 - + Also, refer to programs/files from other ports with the + variables mentioned above, not explicit pathnames. For instance, if + your port requires a macro PAGER to be the full + pathname of less, use the compiler flag: - - 5.0-CURRENT after kld metadata changes. - 500002 - + -DPAGER=\"${PREFIX}/bin/less\" - - 5.0-CURRENT after buf/bio changes. - 500003 - + or - - 5.0-CURRENT after binutils upgrade. - 500004 - + -DPAGER=\"${LOCALBASE}/bin/less\" - - 5.0-CURRENT after merging libxpg4 code into - libc and after TASKQ interface introduction. - 500005 - + if this is an X port, instead of + -DPAGER=\"/usr/local/bin/less\". This way it will + have a better chance of working if the system administrator has + moved the whole `/usr/local' tree somewhere else. + - - 5.0-CURRENT after the addition of AGP - interfaces. - 500006 - + - - 5.0-CURRENT after Perl upgrade to 5.6.0 - 500007 - + + Upgrading - - 5.0-CURRENT after the update of KAME code to - 2000/07 sources. - 500008 - + When you notice that a port is out of date compared to the latest + version from the original authors, first make sure you have the latest + port. You can find them in the + ports/ports-current directory of the FTP mirror + sites. You may also use CVSup to keep your whole ports collection + up-to-date, as described in the Handbook. - - 5.0-CURRENT after ether_ifattach() and - ether_ifdetach() changes. - 500009 - + The next step is to send a mail to the maintainer, if one is + listed in the port's Makefile. That person may + already be working on an upgrade, or have a reason to not upgrade the + port right now (because of, for example, stability problems of the new + version). - - 5.0-CURRENT after changing mtree defaults - back to original variant, adding -L to follow - symlinks. - 500010 - + If the maintainer asks you to do the upgrade or there is not any + such person to begin with, please make the upgrade and send the + recursive diff (either unified or context diff is fine, but port + committers appear to prefer unified diff more) of the new and old + ports directories to us (e.g., if your modified port directory is + called superedit and the original as in our tree + is superedit.bak, then send us the result of + diff -ruN superedit.bak superedit). Please examine + the output to make sure all the changes make sense. The best way to + send us the diff is by including it via &man.send-pr.1; (category + ports). Please mention any added or deleted files + in the message, as they have to be explicitly specified to CVS when + doing a commit. If the diff is more than about 20KB, please compress + and uuencode it; otherwise, just include it in the PR as is. - - 5.0-CURRENT after kqueue API changed. - 500011 - + + Once again, please use &man.diff.1; and not &man.shar.1; to send + updates to existing ports! + + - - 5.0-CURRENT after &man.setproctitle.3; moved from - libutil to libc. - 500012 - + + <anchor id="porting-dads">Dos and Don'ts - - 5.0-CURRENT after the first SMPng commit. - 500013 - + Here is a list of common dos and don'ts that you encounter during + the porting process.You should check your own port against this list, + but you can also check ports in the PR database that others have + submitted. Submit any comments on ports you check as described in + Bug Reports and General + Commentary. Checking ports in the PR database will both make + it faster for us to commit them, and prove that you know what you are + doing. - - 5.0-CURRENT after <sys/select.h> moved to - <sys/selinfo.h>. - 500014 - + + Strip Binaries - - 5.0-CURRENT after combining libgcc.a and - libgcc_r.a, and associated GCC linkage changes. - 500015 - + Do strip binaries. If the original source already strips the + binaries, fine; otherwise you should add a + post-install rule to it yourself. Here is an + example: - - 5.0-CURRENT after change allowing libc and libc_r - to be linked together, deprecating -pthread - option. - 500016 - + post-install: + strip ${PREFIX}/bin/xdl - - 5.0-CURRENT after switch from struct ucred to - struct xucred to stabilize kernel-exported API for - mountd et al. - 500017 - + Use the &man.file.1; command on the installed executable to + check whether the binary is stripped or not. If it does not say + not stripped, it is stripped. + - - 5.0-CURRENT after addition of CPUTYPE make variable - for controlling CPU-specific optimizations. - 500018 - + + INSTALL_* macros - - 5.0-CURRENT after moving machine/ioctl_fd.h to - sys/fdcio.h - 500019 - + Do use the macros provided in bsd.port.mk + to ensure correct modes and ownership of files in your own + *-install targets. + + + + INSTALL_PROGRAM is a command to install + binary executables. + + + + INSTALL_SCRIPT is a command to install + executable scripts. + - - 5.0-CURRENT after locale names renaming. - 500020 - + + INSTALL_DATA is a command to install + sharable data. + - - 5.0-CURRENT after Bzip2 import. - 500021 - + + INSTALL_MAN is a command to install + manpages and other documentation (it does not compress + anything). + + - - 5.0-CURRENT after SSE support. - 500022 - + These are basically the install command with + all the appropriate flags. See below for an example on how to use + them. + - - 5.0-CURRENT after KSE Milestone 2. - 500023 - + + <makevar>WRKDIR</makevar> - - 5.0-CURRENT after d_thread_t, - and moving UUCP to ports. - 500024 - + Do not write anything to files outside + WRKDIR. WRKDIR is the only + place that is guaranteed to be writable during the port build (see + compiling ports from CDROM for an + example of building ports from a read-only tree). If you need to + modify one of the pkg-* + files, do so by redefining a variable, not by + writing over it. + - - 5.0-CURRENT after ABI change for discriptor - and creds passing on 64 bit platforms. - 500025 - + + <makevar>WRKDIRPREFIX</makevar> - - 5.0-CURRENT after moving to XFree86 4 by default for - package builds, and after the new libc strnstr() function - was added. - 500026 - + Make sure your port honors WRKDIRPREFIX. + Most ports do not have to worry about this. In particular, if you + are referring to a WRKDIR of another port, note + that the correct location is + WRKDIRPREFIXPORTSDIR/subdir/name/work not PORTSDIR/subdir/name/work or .CURDIR/../../subdir/name/work or some such. - - 5.0-CURRENT after the new libc strcasestr() function - was added. - 500027 - + Also, if you are defining WRKDIR yourself, + make sure you prepend + ${WRKDIRPREFIX}${.CURDIR} in the + front. + - - 5.0-CURRENT after the userland components of smbfs - were imported. - 500028 - + + Differentiating operating systems and OS versions - - 5.0-CURRENT after the new C99 specific-width - integer types were added. - (Not incremented.) - + You may come across code that needs modifications or conditional + compilation based upon what version of Unix it is running under. If + you need to make such changes to the code for conditional + compilation, make sure you make the changes as general as possible + so that we can back-port code to FreeBSD 1.x systems and cross-port + to other BSD systems such as 4.4BSD from CSRG, BSD/386, 386BSD, + NetBSD, and OpenBSD. - - 5.0-CURRENT after a change was made in the return - value of sendfile(2). - 500029 - + The preferred way to tell 4.3BSD/Reno (1990) and newer versions + of the BSD code apart is by using the BSD macro + defined in <sys/param.h>. Hopefully that + file is already included; if not, add the code: - - 5.0-CURRENT after the introduction of the - type fflags_t, which is the - appropriate size for file flags. - 500030 - + #if (defined(__unix__) || defined(unix)) && !defined(USG) +#include <sys/param.h> +#endif - - 5.0-CURRENT after the usb structure element rename. - 500031 - + to the proper place in the .c file. We + believe that every system that defines these two symbols has + sys/param.h. If you find a system that + does not, we would like to know. Please send mail to the + &a.ports;. - - 5.0-CURRENT after the introduction of - Perl 5.6.1. - 500032 - + Another way is to use the GNU Autoconf style of doing + this: - - 5.0-CURRENT after the - sendmail_enable &man.rc.conf.5; - variable was made to take the value - NONE. - 500033 - + #ifdef HAVE_SYS_PARAM_H +#include <sys/param.h> +#endif - - 5.0-CURRENT after mtx_init() grew a third argument. - 500034 - + Do not forget to add -DHAVE_SYS_PARAM_H to the + CFLAGS in the Makefile for + this method. - - 5.0-CURRENT with Gcc 3.1. - 500035 + Once you have sys/param.h included, you may + use: - - 5.0-CURRENT without Perl in /usr/src - 500036 - + #if (defined(BSD) && (BSD >= 199103)) - - 5.0-CURRENT after the addition of dlfunc(3) - 500037 - + to detect if the code is being compiled on a 4.3 Net2 code base + or newer (e.g. FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 + 1.1 and below). - - - + Use: - - Note that 2.2-STABLE sometimes identifies itself as - 2.2.5-STABLE after the 2.2.5-RELEASE. The pattern - used to be year followed by the month, but we decided to change it - to a more straightforward major/minor system starting from 2.2. - This is because the parallel development on several branches made - it infeasible to classify the releases simply by their real - release dates. If you are making a port now, you do not have to - worry about old -CURRENTs; they are listed here just for your - reference. - - + #if (defined(BSD) && (BSD >= 199306)) - - Writing something after - <filename>bsd.port.mk</filename> + to detect if the code is being compiled on a 4.4 code base or + newer (e.g. FreeBSD 2.x, 4.4, NetBSD 1.0, BSD/386 2.0 or + above). - Do not write anything after the .include - <bsd.port.mk> line. It usually can be avoided by - including bsd.port.pre.mk somewhere in the - middle of your Makefile and - bsd.port.post.mk at the end. + The value of the BSD macro is + 199506 for the 4.4BSD-Lite2 code base. This is + stated for informational purposes only. It should not be used to + distinguish between versions of FreeBSD based only on 4.4-Lite vs. + versions that have merged in changes from 4.4-Lite2. The + __FreeBSD__ macro should be used instead. - - You need to include either the - pre.mk/post.mk pair or - bsd.port.mk only; do not mix these two. - + Use sparingly: - bsd.port.pre.mk only defines a few - variables, which can be used in tests in the - Makefile, bsd.port.post.mk - defines the rest. + + + __FreeBSD__ is defined in all versions of + FreeBSD. Use it if the change you are making + only affects FreeBSD. Porting gotchas like + the use of sys_errlist[] vs + strerror() are Berkeleyisms, not FreeBSD + changes. + - Here are some important variables defined in - bsd.port.pre.mk (this is not the complete list, - please read bsd.port.mk for the complete - list). + + In FreeBSD 2.x, __FreeBSD__ is defined to + be 2. In earlier versions, it is + 1. Later versions will bump it to match + their major version number. + - - - - - Variable - Description - - + + If you need to tell the difference between a FreeBSD 1.x + system and a FreeBSD 2.x or 3.x system, usually the right answer + is to use the BSD macros described above. If + there actually is a FreeBSD specific change (such as special + shared library options when using ld) then it + is OK to use __FreeBSD__ and #if + __FreeBSD__ > 1 to detect a FreeBSD 2.x and later + system. If you need more granularity in detecting FreeBSD + systems since 2.0-RELEASE you can use the following: - - - ARCH - The architecture as returned by uname - -m (e.g., i386) - + #if __FreeBSD__ >= 2 +#include <osreldate.h> +# if __FreeBSD_version >= 199504 + /* 2.0.5+ release specific code here */ +# endif +#endif + + - - OPSYS - The operating system type, as returned by - uname -s (e.g., - FreeBSD) - + In the hundreds of ports that have been done, there have only + been one or two cases where __FreeBSD__ should + have been used. Just because an earlier port screwed up and used it + in the wrong place does not mean you should do so too. + - - OSREL - The release version of the operating system (e.g., - 2.1.5 or - 2.2.7) - + + __FreeBSD_version values - - OSVERSION - The numeric version of the operating system, same as - __FreeBSD_version. - + + + + + Release + __FreeBSD_version + + - - PORTOBJFORMAT - The object format of the system - (aout or elf) - + + + 2.0-RELEASE + 119411 + - - LOCALBASE - The base of the local tree (e.g., - /usr/local/) - + + 2.1-CURRENT + 199501, 199503 + - - X11BASE - The base of the X11 tree (e.g., - /usr/X11R6) - + + 2.0.5-RELEASE + 199504 + - - PREFIX - Where the port installs itself (see more on - PREFIX). - - - - + + 2.2-CURRENT before 2.1 + 199508 + - - If you have to define the variables - USE_IMAKE, USE_X_PREFIX, or - MASTERDIR, do so before including - bsd.port.pre.mk. - + + 2.1.0-RELEASE + 199511 + - Here are some examples of things you can write after - bsd.port.pre.mk: + + 2.2-CURRENT before 2.1.5 + 199512 + - # no need to compile lang/perl5 if perl5 is already in system -.if ${OSVERSION} > 300003 -BROKEN= perl is in system -.endif + + 2.1.5-RELEASE + 199607 + -# only one shlib version number for ELF -.if ${PORTOBJFORMAT} == "elf" -TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR} -.else -TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR} -.endif + + 2.2-CURRENT before 2.1.6 + 199608 + -# software already makes link for ELF, but not for a.out -post-install: -.if ${PORTOBJFORMAT} == "aout" - ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so -.endif - + + 2.1.6-RELEASE + 199612 + - - Install additional documentation + + 2.1.7-RELEASE + 199612 + - If your software has some documentation other than the standard - man and info pages that you think is useful for the user, install it - under PREFIX/share/doc. - This can be done, like the previous item, in the - post-install target. + + 2.2-RELEASE + 220000 + - Create a new directory for your port. The directory name should - reflect what the port is. This usually means - PORTNAME. However, if you - think the user might want different versions of the port to be - installed at the same time, you can use the whole - PKGNAME. + + 2.2.1-RELEASE + 220000 (no change) + - Make the installation dependent to the variable - NOPORTDOCS so that users can disable it in - /etc/make.conf, like this: + + 2.2-STABLE after 2.2.1-RELEASE + 220000 (no change) + - post-install: -.if !defined(NOPORTDOCS) - ${MKDIR} ${PREFIX}/share/doc/xv - ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv -.endif + + 2.2-STABLE after texinfo-3.9 + 221001 + - All documentation files and directories installed should - be included in pkg-plist with the - %%PORTDOCS%% prefix, for example: + + 2.2-STABLE after top + 221002 + - %%PORTDOCS%%share/doc/pure-ftpd/AUTHORS -%%PORTDOCS%%share/doc/pure-ftpd/CONTACT -%%PORTDOCS%%@dirrm share/doc/pure-ftpd + + 2.2.2-RELEASE + 222000 + - You can also use the pkg-message file to - display messages upon installation. See the using - pkg-message section for - details. + + 2.2-STABLE after 2.2.2-RELEASE + 222001 + - - pkg-message does not need to be added to - pkg-plist. - - + + 2.2.5-RELEASE + 225000 + - - <makevar>PREFIX</makevar> + + 2.2-STABLE after 2.2.5-RELEASE + 225001 + - Do try to make your port install relative to - PREFIX. (The value of this variable will be set - to LOCALBASE (default - /usr/local), unless - USE_X_PREFIX or USE_IMAKE is - set, in which case it will be X11BASE (default - /usr/X11R6).) + + 2.2-STABLE after ldconfig -R merge + 225002 + - Not hard-coding /usr/local or - /usr/X11R6 anywhere in the source will make the - port much more flexible and able to cater to the needs of other - sites. For X ports that use imake, this is - automatic; otherwise, this can often be done by simply replacing the - occurrences of /usr/local (or - /usr/X11R6 for X ports that do not use imake) - in the various scripts/Makefiles in the port to read - PREFIX, as this variable is automatically passed - down to every stage of the build and install processes. + + 2.2.6-RELEASE + 226000 + - Make sure your application isn't installing things in - /usr/local instead of PREFIX. - A quick test for this is to do this is: + + 2.2.7-RELEASE + 227000 + - &prompt.root; make clean; make package PREFIX=/var/tmp/port-name - - If anything is installed outside of PREFIX, - making the package creation process will complain that it - can't find the files. + + 2.2-STABLE after 2.2.7-RELEASE + 227001 + - - This does not test for the existence of internal references, - or correct use of LOCALBASE for references to - files from other ports. Testing the installation in - /var/tmp/port-name - to do that that while you have it installed would do that. + + 2.2-STABLE after &man.semctl.2; change + 227002 + + + + 2.2.8-RELEASE + 228000 + - Do not set USE_X_PREFIX unless your port - truly requires it (i.e., it links against X libs or it needs to - reference files in X11BASE). + + 2.2-STABLE after 2.2.8-RELEASE + 228001 + - The variable PREFIX can be reassigned in your - Makefile or in the user's environment. - However, it is strongly discouraged for individual ports to set this - variable explicitly in the Makefiles. + + 3.0-CURRENT before &man.mount.2; change + 300000 + - Also, refer to programs/files from other ports with the - variables mentioned above, not explicit pathnames. For instance, if - your port requires a macro PAGER to be the full - pathname of less, use the compiler flag: + + 3.0-CURRENT after &man.mount.2; change + 300001 + - -DPAGER=\"${PREFIX}/bin/less\" + + 3.0-CURRENT after &man.semctl.2; change + 300002 + - or + + 3.0-CURRENT after ioctl arg changes + 300003 + - -DPAGER=\"${LOCALBASE}/bin/less\" + + 3.0-CURRENT after ELF conversion + 300004 + - if this is an X port, instead of - -DPAGER=\"/usr/local/bin/less\". This way it will - have a better chance of working if the system administrator has - moved the whole `/usr/local' tree somewhere else. - + + 3.0-RELEASE + 300005 + - - Subdirectories + + 3.0-CURRENT after 3.0-RELEASE + 300006 + - Try to let the port put things in the right subdirectories of - PREFIX. Some ports lump everything and put it in - the subdirectory with the port's name, which is incorrect. Also, - many ports put everything except binaries, header files and manual - pages in the a subdirectory of lib, which does - not bode well with the BSD paradigm. Many of the files should be - moved to one of the following: etc - (setup/configuration files), libexec - (executables started internally), sbin - (executables for superusers/managers), info - (documentation for info browser) or share - (architecture independent files). See man &man.hier.7; for details, - the rules governing - /usr pretty much apply to - /usr/local too. The exception are ports - dealing with USENET news. They may use - PREFIX/news as a destination - for their files. - + + 3.0-STABLE after 3/4 branch + 300007 + - - Cleaning up empty directories + + 3.1-RELEASE + 310000 + - Do make your ports clean up after themselves when they are - deinstalled. This is usually accomplished by adding - @dirrm lines for all directories that are - specifically created by the port. You need to delete subdirectories - before you can delete parent directories. + + 3.1-STABLE after 3.1-RELEASE + 310001 + - : -lib/X11/oneko/pixmaps/cat.xpm -lib/X11/oneko/sounds/cat.au - : -@dirrm lib/X11/oneko/pixmaps -@dirrm lib/X11/oneko/sounds -@dirrm lib/X11/oneko + + 3.1-STABLE after C++ constructor/destructor order + change + 310002 + - However, sometimes @dirrm will give you - errors because other ports also share the same subdirectory. You - can call rmdir from @unexec to - remove only empty directories without warning. + + 3.2-RELEASE + 320000 + - @unexec rmdir %D/share/doc/gimp 2>/dev/null || true + + 3.2-STABLE + 320001 + - This will neither print any error messages nor cause - pkg_delete to exit abnormally even if - PREFIX/share/doc/gimp is not - empty due to other ports installing some files in there. - + + 3.2-STABLE after binary-incompatible IPFW and + socket changes + 320002 + - - UIDs + + 3.3-RELEASE + 330000 + - If your port requires a certain user to be on the installed - system, let the pkg-install script call - pw to create it automatically. Look at - net/cvsup-mirror for an example. + + 3.3-STABLE + 330001 + - If your port must use the same user/group ID number when it is - installed as a binary package as when it was compiled, then you must - choose a free UID from 50 to 999 and register it below. Look at - japanese/Wnn for an example. + + 3.3-STABLE after adding &man.mkstemp.3; + to libc + 330002 + - Make sure you do not use a UID already used by the system or - other ports. This is the current list of UIDs between 50 and - 999. + + 3.4-RELEASE + 340000 + - majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent -cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent -gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh -uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico -xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent -pop:*:68:6:Post Office Owner (popper):/nonexistent:/sbin/nologin -wnn:*:69:7:Wnn:/nonexistent:/nonexistent -pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh -ircd:*:72:72:IRCd hybrid:/nonexistent:/nonexistent -ifmail:*:75:66:Ifmail user:/nonexistent:/nonexistent -www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin -alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent -qmaill:*:83:81:QMail user:/var/qmail:/nonexistent -qmaild:*:82:81:QMail user:/var/qmail:/nonexistent -qmailq:*:85:82:QMail user:/var/qmail:/nonexistent -qmails:*:87:82:QMail user:/var/qmail:/nonexistent -qmailp:*:84:81:QMail user:/var/qmail:/nonexistent -qmailr:*:86:82:QMail user:/var/qmail:/nonexistent -msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh -mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologin -vpopmail:*:89:89::0:0:User &:/usr/local/vpopmail:/nonexistent -smmsp:*:90:90:Sendmail Queue:/nonexistent:/nonexistent -mailman:*:91:91:Mailman User:/usr/local/mailman:/sbin/nologin -drweb:*:426:426:Dr.Web Mail Scanner:/nonexistent:/sbin/nologin + + 3.4-STABLE + 340001 + - Please include a notice when you submit a port (or an upgrade) - that reserves a new UID or GID in this range. This allows us to - keep the list of reserved IDs up to date. - + + 3.5-RELEASE + 350000 + - - Do things rationally + + 3.5-STABLE + 350001 + - The Makefile should do things simply and - reasonably. If you can make it a couple of lines shorter or more - readable, then do so. Examples include using a make - .if construct instead of a shell - if construct, not redefining - do-extract if you can redefine - EXTRACT* instead, and using - GNU_CONFIGURE instead of CONFIGURE_ARGS - += --prefix=${PREFIX}. - + + 4.0-CURRENT after 3.4 branch + 400000 + - - Respect <makevar>CFLAGS</makevar> + + 4.0-CURRENT after change in dynamic linker + handling + 400001 + - The port should respect the CFLAGS variable. - If it does not, please add NO_PACKAGE=ignores - cflags to the Makefile. + + 4.0-CURRENT after C++ constructor/destructor + order change + 400002 + - An example of a Makefile respecting - the CFLAGS variable follows. Note the - +=: + + 4.0-CURRENT after functioning &man.dladdr.3; + 400003 + - CFLAGS += -Wall -Werror + + 4.0-CURRENT after __deregister_frame_info dynamic + linker bug fix (also 4.0-CURRENT after EGCS 1.1.2 + integration) + + 400004 + - Here is an example which does not respect the - CFLAGS variable: + + 4.0-CURRENT after &man.suser.9; API change + (also 4.0-CURRENT after newbus) + 400005 + - CFLAGS = -Wall -Werror + + 4.0-CURRENT after cdevsw registration change + 400006 + + + + 4.0-CURRENT after the addition of so_cred for + socket level credentials + 400007 + - The CFLAGS variable is defined on - FreeBSD systems in /etc/make.conf. The - first example appends additional flags to the - CFLAGS variable, preserving any system-wide - definitions. The second example clobbers anything previously - defined. - + + 4.0-CURRENT after the addition of a poll syscall + wrapper to libc_r + 400008 + - - Configuration files + + 4.0-CURRENT after the change of the kernel's + dev_t type to struct + specinfo pointer + 400009 + - If your port requires some configuration files in - PREFIX/etc, do - not just install them and list them in - pkg-plist. That will cause - pkg_delete to delete files carefully edited by - the user and a new installation to wipe them out. + + 4.0-CURRENT after fixing a hole + in &man.jail.2; + 400010 + - Instead, install sample files with a suffix - (filename.sample - will work well) and print out a message pointing out that the - user has to copy and edit the file before the software can be made - to work. - + + 4.0-CURRENT after the sigset_t + datatype change + 400011 + - - Portlint + + 4.0-CURRENT after the cutover to the GCC 2.95.2 + compiler + 400012 + - Do check your work with portlint - before you submit or commit it. - + + 4.0-CURRENT after adding pluggable linux-mode + ioctl handlers + 400013 + - - Feedback + + 4.0-CURRENT after importing OpenSSL + 400014 + - Do send applicable changes/patches to the original - author/maintainer for inclusion in next release of the code. This - will only make your job that much easier for the next - release. - + + 4.0-CURRENT after the C++ ABI change in GCC 2.95.2 + from -fvtable-thunks to -fno-vtable-thunks by + default + 400015 + - - <filename>README.html</filename> + + 4.0-CURRENT after importing OpenSSH + 400016 + - Do not include the README.html file. This - file is not part of the cvs collection but is generated using the - make readme command. - - + + 4.0-RELEASE + 400017 + - - Miscellanea + + 4.0-STABLE after 4.0-RELEASE + 400018 + - The files pkg-comment, - pkg-descr, and pkg-plist - should each be double-checked. If you are reviewing a port and feel - they can be worded better, do so. + + 4.0-STABLE after the introduction of delayed + checksums. + 400019 + - Do not copy more copies of the GNU General Public License into - our system, please. + + 4.0-STABLE after merging libxpg4 code into + libc. + 400020 + - Please be careful to note any legal issues! Do not let us - illegally distribute software! - + + 4.0-STABLE after upgrading Binutils to 2.10.0, ELF + branding changes, and tcsh in the base system. + 400021 + - - If you are stuck… + + 4.1-RELEASE + 410000 + - Do look at existing examples and the - bsd.port.mk file before asking us questions! - ;-) + + 4.1-STABLE after 4.1-RELEASE + 410001 + - Do ask us questions if you have any trouble! Do not just beat - your head against a wall! :-) - - + + 4.1-STABLE after &man.setproctitle.3; moved from + libutil to libc. + 410002 + - - A Sample <filename>Makefile</filename> + + 4.1.1-RELEASE + 411000 + - Here is a sample Makefile that you can use to - create a new port. Make sure you remove all the extra comments (ones - between brackets)! + + 4.1.1-STABLE after 4.1.1-RELEASE + 411001 + - It is recommended that you follow this format (ordering of - variables, empty lines between sections, etc.). This format is - designed so that the most important information is easy to locate. We - recommend that you use portlint to check the - Makefile. + + 4.2-RELEASE + 420000 + - [the header...just to make it easier for us to identify the ports.] -# New ports collection makefile for: xdvi -[the "version required" line is only needed when the PORTVERSION - variable is not specific enough to describe the port.] -# Date created: 26 May 1995 -[this is the person who did the original port to FreeBSD, in particular, the -person who wrote the first version of this Makefile. Remember, this should -not be changed when upgrading the port later.] -# Whom: Satoshi Asami <asami@FreeBSD.org> -# -# $FreeBSD$ -[ ^^^^^^^^^ This will be automatically replaced with RCS ID string by CVS -when it is committed to our repository. If upgrading a port, do not alter -this line back to "$FreeBSD$". CVS deals with it automatically.] -# + + 4.2-STABLE after combining libgcc.a and + libgcc_r.a, and associated GCC linkage changes. + 420001 + -[section to describe the port itself and the master site - PORTNAME - and PORTVERSION are always first, followed by CATEGORIES, - and then MASTER_SITES, which can be followed by MASTER_SITE_SUBDIR. - PKGNAMEPREFIX and PKGNAMESUFFIX, if needed, will be after that. - Then comes DISTNAME, EXTRACT_SUFX and/or DISTFILES, and then - EXTRACT_ONLY, as necessary.] -PORTNAME= xdvi -PORTVERSION= 18.2 -CATEGORIES= print -[do not forget the trailing slash ("/")! - if you are not using MASTER_SITE_* macros] -MASTER_SITES= ${MASTER_SITE_XCONTRIB} -MASTER_SITE_SUBDIR= applications -PKGNAMEPREFIX= ja- -DISTNAME= xdvi-pl18 -[set this if the source is not in the standard ".tar.gz" form] -EXTRACT_SUFX= .tar.Z + + 4.3-RELEASE + 430000 + -[section for distributed patches -- can be empty] -PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ -PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz + + 4.3-STABLE after wint_t introduction. + 430001 + -[maintainer; *mandatory*! This is the person (preferably with commit - privileges) whom a user can contact for questions and bug reports - this - person should be the porter or someone who can forward questions to the - original porter reasonably promptly. If you really do not want to have - your address here, set it to "ports@FreeBSD.org".] -MAINTAINER= asami@FreeBSD.org + + 4.3-STABLE after PCI powerstate API merge. + 430002 + -[dependencies -- can be empty] -RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript -LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm + + 4.4-RELEASE + 440000 + -[this section is for other standard bsd.port.mk variables that do not - belong to any of the above] -[If it asks questions during configure, build, install...] -IS_INTERACTIVE= yes -[If it extracts to a directory other than ${DISTNAME}...] -WRKSRC= ${WRKDIR}/xdvi-new -[If the distributed patches were not made relative to ${WRKSRC}, you - may need to tweak this] -PATCH_DIST_STRIP= -p1 -[If it requires a "configure" script generated by GNU autoconf to be run] -GNU_CONFIGURE= yes -[If it requires GNU make, not /usr/bin/make, to build...] -USE_GMAKE= yes -[If it is an X application and requires "xmkmf -a" to be run...] -USE_IMAKE= yes -[et cetera.] + + 4.4-STABLE after d_thread_t introduction. + 440001 + -[non-standard variables to be used in the rules below] -MY_FAVORITE_RESPONSE= "yeah, right" + + 4.4-STABLE after mount structure changes (affects + filesystem klds). + 440002 + -[then the special rules, in the order they are called] -pre-fetch: - i go fetch something, yeah + + 4.4-STABLE after the userland components of smbfs + were imported. + 440003 + -post-patch: - i need to do something after patch, great + + 4.5-RELEASE + 450000 + -pre-install: - and then some more stuff before installing, wow + + 4.5-STABLE after the usb structure element rename. + 450001 + -[and then the epilogue] -.include <bsd.port.mk> - + + 4.5-STABLE after the + sendmail_enable &man.rc.conf.5; + variable was made to take the value + NONE. + 450004 + - - Automated package list creation + + 4.5-STABLE after accept filtering was fixed so + that is no longer susceptible to an easy DoS. + 450006 + - First, make sure your port is almost complete, with only - pkg-plist missing. Create an empty - pkg-plist. + + 4.6-RELEASE + 460000 + - &prompt.root; touch pkg-plist + + 4.6-STABLE &man.sendfile.2; fixed to comply with + documentation, not to count any headers sent against + the amount of data to be sent from the file. + 460001 + - Next, create a new set of directories which your port can be - installed, and install any dependencies. + + 4.6-STABLE after MFC of `sed -i'. + 460101 + - &prompt.root; mkdir /var/tmp/port-name -&prompt.root; mtree -U -f /etc/mtree/BSD.local.dist -d -e -p /var/tmp/port-name -&prompt.root; make depends PREFIX=/var/tmp/port-name + + 5.0-CURRENT + 500000 + - Store the directory structure in a new file. + + 5.0-CURRENT after adding addition ELF header fields, + and changing our ELF binary branding method. + 500001 + - &prompt.root; (cd /var/tmp/port-name && find -d * -type d) > OLD-DIRS + + 5.0-CURRENT after kld metadata changes. + 500002 + - If your port honors PREFIX (which it should) - you can then install the port and create the package list. + + 5.0-CURRENT after buf/bio changes. + 500003 + - &prompt.root; make install PREFIX=/var/tmp/port-name -&prompt.root; (cd /var/tmp/port-name && find -d * \! -type d) > pkg-plist + + 5.0-CURRENT after binutils upgrade. + 500004 + - You must also add any newly created directories to the packing - list. + + 5.0-CURRENT after merging libxpg4 code into + libc and after TASKQ interface introduction. + 500005 + - &prompt.root; (cd /var/tmp/port-name && find -d * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm #' >> pkg-plist + + 5.0-CURRENT after the addition of AGP + interfaces. + 500006 + - Finally, you need to tidy up the packing list by hand; it isn't - all automated. Manual pages should be listed in - the port's Makefile under - MANn, and not in the - package list. User configuration files should be removed, or - installed as - filename.sample. - The info/dir file should not be listed - and appropriate install-info lines should - be added as noted in the info - files section. Any - libraries installed by the port should be listed as specified in the - shared libraries section. - + + 5.0-CURRENT after Perl upgrade to 5.6.0 + 500007 + + + + 5.0-CURRENT after the update of KAME code to + 2000/07 sources. + 500008 + - - Package Names + + 5.0-CURRENT after ether_ifattach() and + ether_ifdetach() changes. + 500009 + - The following are the conventions you should follow in naming your - packages. This is to have our package directory easy to scan, as - there are already lots and lots of packages and users are going to - turn away if they hurt their eyes! + + 5.0-CURRENT after changing mtree defaults + back to original variant, adding -L to follow + symlinks. + 500010 + - The package name should look like - language_region-name-compiled.specifics-version.numbers. + + 5.0-CURRENT after kqueue API changed. + 500011 + - The package name is defined as - ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PORTVERSION}. - Make sure to set the variables to conform to that format. + + 5.0-CURRENT after &man.setproctitle.3; moved from + libutil to libc. + 500012 + - - - FreeBSD strives to support the native language of its users. - The language- part should be a two - letter abbreviation of the natural language defined by ISO-639 if - the port is specific to a certain language. Examples are - ja for Japanese, ru for - Russian, vi for Vietnamese, - zh for Chinese, ko for - Korean and de for German. + + 5.0-CURRENT after the first SMPng commit. + 500013 + - If the port is specific to a certain region within the - language area, add the two letter country code as well. - Examples are en_US for US English and - fr_CH for Swiss French. + + 5.0-CURRENT after <sys/select.h> moved to + <sys/selinfo.h>. + 500014 + - The language- part should - be set in the PKGNAMEPREFIX variable. - + + 5.0-CURRENT after combining libgcc.a and + libgcc_r.a, and associated GCC linkage changes. + 500015 + - - The first letter of name part - should be lowercase. (The rest of the name can contain - capital letters, so use your own discretion when you are - converting a software name that has some capital letters in it.) - There is a tradition of naming Perl 5 modules by - prepending p5- and converting the double-colon - separator to a hyphen; for example, the - Data::Dumper module becomes - p5-Data-Dumper. If the software in question - has numbers, hyphens, or underscores in its name, you may include - them as well (like kinput2). - + + 5.0-CURRENT after change allowing libc and libc_r + to be linked together, deprecating -pthread + option. + 500016 + - - If the port can be built with different hardcoded defaults (usually - part of the directory name in a family of ports), the - -compiled.specifics part should state - the compiled-in defaults (the hyphen is optional). Examples are - papersize and font units. + + 5.0-CURRENT after switch from struct ucred to + struct xucred to stabilize kernel-exported API for + mountd et al. + 500017 + - The compiled.specifics part - should be set in the PKGNAMESUFFIX - variable. - + + 5.0-CURRENT after addition of CPUTYPE make variable + for controlling CPU-specific optimizations. + 500018 + - - The version string should follow a dash - (-) and be a period-separated list of - integers and single lowercase alphabetics. In particular, - it is not permissible to have another dash inside the - version string. The only exception is the string - pl (meaning `patchlevel'), which can be - used only when there are no major and - minor version numbers in the software. If the software - version has strings like "alpha", "beta", "rc", or "pre", take - the first letter and put it immediately after a period. - If the version string continues after those names, the - numbers should follow the single alphabet without an extra - period between them. + + 5.0-CURRENT after moving machine/ioctl_fd.h to + sys/fdcio.h + 500019 + + + + 5.0-CURRENT after locale names renaming. + 500020 + - The idea is to make it easier to sort ports by looking - at the version string. In particular, make sure version - number components are always delimited by a period, and - if the date is part of the string, use the - yyyy.mm.dd - format, not - dd.mm.yyyy - or the non-Y2K compliant - yy.mm.dd - format. - - + + 5.0-CURRENT after Bzip2 import. + 500021 + - Here are some (real) examples on how to convert the name - as called by the software authors to a suitable package - name: + + 5.0-CURRENT after SSE support. + 500022 + - - - - - Distribution Name - PKGNAMEPREFIX - PORTNAME - PKGNAMESUFFIX - PORTVERSION - Reason - - + + 5.0-CURRENT after KSE Milestone 2. + 500023 + - - - mule-2.2.2 - (empty) - mule - (empty) - 2.2.2 - No changes required - + + 5.0-CURRENT after d_thread_t, + and moving UUCP to ports. + 500024 + - - XFree86-3.3.6 - (empty) - XFree86 - (empty) - 3.3.6 - No changes required - + + 5.0-CURRENT after ABI change for discriptor + and creds passing on 64 bit platforms. + 500025 + - - EmiClock-1.0.2 - (empty) - emiclock - (empty) - 1.0.2 - No uppercase names for single programs - + + 5.0-CURRENT after moving to XFree86 4 by default for + package builds, and after the new libc strnstr() function + was added. + 500026 + - - rdist-1.3alpha - (empty) - rdist - (empty) - 1.3.a - No strings like alpha - allowed - + + 5.0-CURRENT after the new libc strcasestr() function + was added. + 500027 + - - es-0.9-beta1 - (empty) - es - (empty) - 0.9.b1 - No strings like beta - allowed - + + 5.0-CURRENT after the userland components of smbfs + were imported. + 500028 + - - mailman-2.0rc3 - (empty) - mailman - (empty) - 2.0.r3 - No strings like rc - allowed - + + 5.0-CURRENT after the new C99 specific-width + integer types were added. + (Not incremented.) + - - v3.3beta021.src - (empty) - tiff - (empty) - 3.3 - What the heck was that anyway? - + + 5.0-CURRENT after a change was made in the return + value of sendfile(2). + 500029 + - - tvtwm - (empty) - tvtwm - (empty) - pl11 - Version string always required - + + 5.0-CURRENT after the introduction of the + type fflags_t, which is the + appropriate size for file flags. + 500030 + - - piewm - (empty) - piewm - (empty) - 1.0 - Version string always required - + + 5.0-CURRENT after the usb structure element rename. + 500031 + - - xvgr-2.10pl1 - (empty) - xvgr - (empty) - 2.10.1 - pl allowed only when no - major/minor version numbers - + + 5.0-CURRENT after the introduction of + Perl 5.6.1. + 500032 + - - gawk-2.15.6 - ja- - gawk - (empty) - 2.15.6 - Japanese language version - + + 5.0-CURRENT after the + sendmail_enable &man.rc.conf.5; + variable was made to take the value + NONE. + 500033 + - - psutils-1.13 - (empty) - psutils - -letter - 1.13 - Papersize hardcoded at package build time - + + 5.0-CURRENT after mtx_init() grew a third argument. + 500034 + - - pkfonts - (empty) - pkfonts - 300 - 1.0 - Package for 300dpi fonts - - - - + + 5.0-CURRENT with Gcc 3.1. + 500035 - If there is absolutely no trace of version information in the - original source and it is unlikely that the original author will ever - release another version, just set the version string to - 1.0 (like the piewm example above). Otherwise, ask - the original author or use the date string - (yyyy.mm.dd) - as the version. - + + 5.0-CURRENT without Perl in /usr/src + 500036 + - - Categories + + 5.0-CURRENT after the addition of dlfunc(3) + 500037 + - As you already know, ports are classified in several categories. - But for this to work, it is important that porters and users understand - what each category is for and how we decide what to put in each - category. + + + - - Current list of categories + + Note that 2.2-STABLE sometimes identifies itself as + 2.2.5-STABLE after the 2.2.5-RELEASE. The pattern + used to be year followed by the month, but we decided to change it + to a more straightforward major/minor system starting from 2.2. + This is because the parallel development on several branches made + it infeasible to classify the releases simply by their real + release dates. If you are making a port now, you do not have to + worry about old -CURRENTs; they are listed here just for your + reference. + + - First, this is the current list of port categories. Those - marked with an asterisk (*) are - virtual categories—those that do not have - a corresponding subdirectory in the ports tree. + + Writing something after + <filename>bsd.port.mk</filename> + + Do not write anything after the .include + <bsd.port.mk> line. It usually can be avoided by + including bsd.port.pre.mk somewhere in the + middle of your Makefile and + bsd.port.post.mk at the end. - For non-virtual categories, you will find a one-line - description in the pkg/COMMENT file in that - subdirectory (e.g., - archivers/pkg/COMMENT). + You need to include either the + pre.mk/post.mk pair or + bsd.port.mk only; do not mix these two. + bsd.port.pre.mk only defines a few + variables, which can be used in tests in the + Makefile, bsd.port.post.mk + defines the rest. + + Here are some important variables defined in + bsd.port.pre.mk (this is not the complete list, + please read bsd.port.mk for the complete + list). + - Category + Variable Description - afterstep* - Ports to support the AfterStep window manager. + ARCH + The architecture as returned by uname + -m (e.g., i386) - archivers - Archiving tools. + OPSYS + The operating system type, as returned by + uname -s (e.g., + FreeBSD) - astro - Astronomical ports. + OSREL + The release version of the operating system (e.g., + 2.1.5 or + 2.2.7) - audio - Sound support. + OSVERSION + The numeric version of the operating system, same as + __FreeBSD_version. - benchmarks - Benchmarking utilities. + PORTOBJFORMAT + The object format of the system + (aout or elf) - biology - Biology-related software. + LOCALBASE + The base of the local tree (e.g., + /usr/local/) - cad - Computer aided design tools. + X11BASE + The base of the X11 tree (e.g., + /usr/X11R6) - chinese - Chinese language support. + PREFIX + Where the port installs itself (see more on + PREFIX). + + + - - comms - Communication software. Mostly software to talk to - your serial port. - + + If you have to define the variables + USE_IMAKE, USE_X_PREFIX, or + MASTERDIR, do so before including + bsd.port.pre.mk. + - - converters - Character code converters. - + Here are some examples of things you can write after + bsd.port.pre.mk: - - databases - Databases. - + # no need to compile lang/perl5 if perl5 is already in system +.if ${OSVERSION} > 300003 +BROKEN= perl is in system +.endif - - deskutils - Things that used to be on the desktop before - computers were invented. - +# only one shlib version number for ELF +.if ${PORTOBJFORMAT} == "elf" +TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR} +.else +TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR} +.endif - - devel - Development utilities. Do not put libraries here just - because they are libraries—unless they truly do not - belong anywhere else, they should not be in this - category. - +# software already makes link for ELF, but not for a.out +post-install: +.if ${PORTOBJFORMAT} == "aout" + ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so +.endif + - - editors - General editors. Specialized editors go in the section - for those tools (e.g., a mathematical-formula editor will go - in math). - + + Install additional documentation - - elisp* - Emacs-lisp ports. - + If your software has some documentation other than the standard + man and info pages that you think is useful for the user, install it + under PREFIX/share/doc. + This can be done, like the previous item, in the + post-install target. - - emulators - Emulators for other operating systems. Terminal - emulators do not belong - here—X-based ones should go to - x11 and text-based ones to either - comms or misc, - depending on the exact functionality. - + Create a new directory for your port. The directory name should + reflect what the port is. This usually means + PORTNAME. However, if you + think the user might want different versions of the port to be + installed at the same time, you can use the whole + PKGNAME. - - french - French language support. - + Make the installation dependent to the variable + NOPORTDOCS so that users can disable it in + /etc/make.conf, like this: - - ftp - FTP client and server utilities. If your - port speaks both FTP and HTTP, put it in - ftp with a secondary - category of www. - + post-install: +.if !defined(NOPORTDOCS) + ${MKDIR} ${PREFIX}/share/doc/xv + ${INSTALL_MAN} ${WRKSRC}/docs/xvdocs.ps ${PREFIX}/share/doc/xv +.endif - - games - Games. - + All documentation files and directories installed should + be included in pkg-plist with the + %%PORTDOCS%% prefix, for example: - - german - German language support. - + %%PORTDOCS%%share/doc/pure-ftpd/AUTHORS +%%PORTDOCS%%share/doc/pure-ftpd/CONTACT +%%PORTDOCS%%@dirrm share/doc/pure-ftpd - - gnome* - Ports from the GNU Object Model Environment (GNOME) - Project. - + You can also use the pkg-message file to + display messages upon installation. See the using + pkg-message section for + details. - - graphics - Graphics utilities. - + + pkg-message does not need to be added to + pkg-plist. + + - - hebrew - Hebrew language support. - + + Subdirectories - - irc - Internet Relay Chat utilities. - + Try to let the port put things in the right subdirectories of + PREFIX. Some ports lump everything and put it in + the subdirectory with the port's name, which is incorrect. Also, + many ports put everything except binaries, header files and manual + pages in the a subdirectory of lib, which does + not bode well with the BSD paradigm. Many of the files should be + moved to one of the following: etc + (setup/configuration files), libexec + (executables started internally), sbin + (executables for superusers/managers), info + (documentation for info browser) or share + (architecture independent files). See man &man.hier.7; for details, + the rules governing + /usr pretty much apply to + /usr/local too. The exception are ports + dealing with USENET news. They may use + PREFIX/news as a destination + for their files. + + + + Cleaning up empty directories + + Do make your ports clean up after themselves when they are + deinstalled. This is usually accomplished by adding + @dirrm lines for all directories that are + specifically created by the port. You need to delete subdirectories + before you can delete parent directories. + + : +lib/X11/oneko/pixmaps/cat.xpm +lib/X11/oneko/sounds/cat.au + : +@dirrm lib/X11/oneko/pixmaps +@dirrm lib/X11/oneko/sounds +@dirrm lib/X11/oneko + + However, sometimes @dirrm will give you + errors because other ports also share the same subdirectory. You + can call rmdir from @unexec to + remove only empty directories without warning. - - ipv6* - IPv6 related software. - + @unexec rmdir %D/share/doc/gimp 2>/dev/null || true - - japanese - Japanese language support. - + This will neither print any error messages nor cause + pkg_delete to exit abnormally even if + PREFIX/share/doc/gimp is not + empty due to other ports installing some files in there. + - - java - Java language support. - + + UIDs - - kde* - Ports from the K Desktop Environment (KDE) - Project. - + If your port requires a certain user to be on the installed + system, let the pkg-install script call + pw to create it automatically. Look at + net/cvsup-mirror for an example. - - korean - Korean language support. - + If your port must use the same user/group ID number when it is + installed as a binary package as when it was compiled, then you must + choose a free UID from 50 to 999 and register it below. Look at + japanese/Wnn for an example. - - lang - Programming languages. - + Make sure you do not use a UID already used by the system or + other ports. This is the current list of UIDs between 50 and + 999. - - linux* - Linux applications and support utilities. - + majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent +cyrus:*:60:60:the cyrus mail server:/nonexistent:/nonexistent +gnats:*:61:1:GNATS database owner:/usr/local/share/gnats/gnats-db:/bin/sh +uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico +xten:*:67:67:X-10 daemon:/usr/local/xten:/nonexistent +pop:*:68:6:Post Office Owner (popper):/nonexistent:/sbin/nologin +wnn:*:69:7:Wnn:/nonexistent:/nonexistent +pgsql:*:70:70:PostgreSQL pseudo-user:/usr/local/pgsql:/bin/sh +ircd:*:72:72:IRCd hybrid:/nonexistent:/nonexistent +ifmail:*:75:66:Ifmail user:/nonexistent:/nonexistent +www:*:80:80:World Wide Web Owner:/nonexistent:/sbin/nologin +alias:*:81:81:QMail user:/var/qmail/alias:/nonexistent +qmaill:*:83:81:QMail user:/var/qmail:/nonexistent +qmaild:*:82:81:QMail user:/var/qmail:/nonexistent +qmailq:*:85:82:QMail user:/var/qmail:/nonexistent +qmails:*:87:82:QMail user:/var/qmail:/nonexistent +qmailp:*:84:81:QMail user:/var/qmail:/nonexistent +qmailr:*:86:82:QMail user:/var/qmail:/nonexistent +msql:*:87:87:mSQL-2 pseudo-user:/var/db/msqldb:/bin/sh +mysql:*:88:88:MySQL Daemon:/var/db/mysql:/sbin/nologin +vpopmail:*:89:89::0:0:User &:/usr/local/vpopmail:/nonexistent +smmsp:*:90:90:Sendmail Queue:/nonexistent:/nonexistent +mailman:*:91:91:Mailman User:/usr/local/mailman:/sbin/nologin +drweb:*:426:426:Dr.Web Mail Scanner:/nonexistent:/sbin/nologin - - mail - Mail software. - + Please include a notice when you submit a port (or an upgrade) + that reserves a new UID or GID in this range. This allows us to + keep the list of reserved IDs up to date. + - - math - Numerical computation software and other utilities - for mathematics. - + + Do things rationally - - mbone - MBone applications. - + The Makefile should do things simply and + reasonably. If you can make it a couple of lines shorter or more + readable, then do so. Examples include using a make + .if construct instead of a shell + if construct, not redefining + do-extract if you can redefine + EXTRACT* instead, and using + GNU_CONFIGURE instead of CONFIGURE_ARGS + += --prefix=${PREFIX}. + - - misc - Miscellaneous utilities—basically things that - do not belong anywhere else. This is the only category - that should not appear with any other non-virtual category. - If you have misc with something else in - your CATEGORIES line, that means you can - safely delete misc and just put the port - in that other subdirectory! - + + Respect <makevar>CFLAGS</makevar> - - net - Miscellaneous networking software. - + The port should respect the CFLAGS variable. + If it does not, please add NO_PACKAGE=ignores + cflags to the Makefile. - - news - USENET news software. - + An example of a Makefile respecting + the CFLAGS variable follows. Note the + +=: - - offix* - Ports from the OffiX suite. - + CFLAGS += -Wall -Werror - - palm - Software support for the 3Com Palm(tm) series. - + Here is an example which does not respect the + CFLAGS variable: - - perl5* - Ports that require perl version 5 to run. - + CFLAGS = -Wall -Werror - - picobsd - Ports to support PicoBSD. - + The CFLAGS variable is defined on + FreeBSD systems in /etc/make.conf. The + first example appends additional flags to the + CFLAGS variable, preserving any system-wide + definitions. The second example clobbers anything previously + defined. + - - plan9* - Various programs from Plan9. - + + Configuration files - - print - Printing software. Desktop publishing tools - (previewers, etc.) belong here too. - + If your port requires some configuration files in + PREFIX/etc, do + not just install them and list them in + pkg-plist. That will cause + pkg_delete to delete files carefully edited by + the user and a new installation to wipe them out. - - python* - Software written in python. - + Instead, install sample files with a suffix + (filename.sample + will work well) and print out a message pointing out that the + user has to copy and edit the file before the software can be made + to work. + - - ruby* - Software written in ruby. - + + Feedback - - russian - Russian language support. - + Do send applicable changes/patches to the original + author/maintainer for inclusion in next release of the code. This + will only make your job that much easier for the next + release. + - - science - Scientific ports that don't fit into other - categories such as astro, - biology and - math. - + + <filename>README.html</filename> - - security - Security utilities. - + Do not include the README.html file. This + file is not part of the cvs collection but is generated using the + make readme command. + + - - shells - Command line shells. - + + Miscellanea - - sysutils - System utilities. - + The files pkg-comment, + pkg-descr, and pkg-plist + should each be double-checked. If you are reviewing a port and feel + they can be worded better, do so. - - tcl76* - Ports that use Tcl version 7.6 to run. - + Do not copy more copies of the GNU General Public License into + our system, please. - - tcl80* - Ports that use Tcl version 8.0 to run. - + Please be careful to note any legal issues! Do not let us + illegally distribute software! + - - tcl81* - Ports that use Tcl version 8.1 to run. - + + If you are stuck… - - tcl82* - Ports that use Tcl version 8.2 to run. - + Do look at existing examples and the + bsd.port.mk file before asking us questions! + ;-) - - textproc - Text processing utilities. It does not include - desktop publishing tools, which go to print/. - + Do ask us questions if you have any trouble! Do not just beat + your head against a wall! :-) + + - - tk42* - Ports that use Tk version 4.2 to run. - + + A Sample <filename>Makefile</filename> - - tk80* - Ports that use Tk version 8.0 to run. - + Here is a sample Makefile that you can use to + create a new port. Make sure you remove all the extra comments (ones + between brackets)! - - tk81* - Ports that use Tk version 8.1 to run. - + It is recommended that you follow this format (ordering of + variables, empty lines between sections, etc.). This format is + designed so that the most important information is easy to locate. We + recommend that you use portlint to check the + Makefile. - - tk82* - Ports that use Tk version 8.2 to run. - + [the header...just to make it easier for us to identify the ports.] +# New ports collection makefile for: xdvi +[the "version required" line is only needed when the PORTVERSION + variable is not specific enough to describe the port.] +# Date created: 26 May 1995 +[this is the person who did the original port to FreeBSD, in particular, the +person who wrote the first version of this Makefile. Remember, this should +not be changed when upgrading the port later.] +# Whom: Satoshi Asami <asami@FreeBSD.org> +# +# $FreeBSD$ +[ ^^^^^^^^^ This will be automatically replaced with RCS ID string by CVS +when it is committed to our repository. If upgrading a port, do not alter +this line back to "$FreeBSD$". CVS deals with it automatically.] +# - - tkstep80* - Ports that use TkSTEP version 8.0 to run. - +[section to describe the port itself and the master site - PORTNAME + and PORTVERSION are always first, followed by CATEGORIES, + and then MASTER_SITES, which can be followed by MASTER_SITE_SUBDIR. + PKGNAMEPREFIX and PKGNAMESUFFIX, if needed, will be after that. + Then comes DISTNAME, EXTRACT_SUFX and/or DISTFILES, and then + EXTRACT_ONLY, as necessary.] +PORTNAME= xdvi +PORTVERSION= 18.2 +CATEGORIES= print +[do not forget the trailing slash ("/")! + if you are not using MASTER_SITE_* macros] +MASTER_SITES= ${MASTER_SITE_XCONTRIB} +MASTER_SITE_SUBDIR= applications +PKGNAMEPREFIX= ja- +DISTNAME= xdvi-pl18 +[set this if the source is not in the standard ".tar.gz" form] +EXTRACT_SUFX= .tar.Z - - ukrainian - Ukrainian language support. - +[section for distributed patches -- can be empty] +PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/ +PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz - - vietnamese - Vietnamese language support. - +[maintainer; *mandatory*! This is the person (preferably with commit + privileges) whom a user can contact for questions and bug reports - this + person should be the porter or someone who can forward questions to the + original porter reasonably promptly. If you really do not want to have + your address here, set it to "ports@FreeBSD.org".] +MAINTAINER= asami@FreeBSD.org - - windowmaker* - Ports to support the WindowMaker window - manager - +[dependencies -- can be empty] +RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript +LIB_DEPENDS= Xpm.5:${PORTSDIR}/graphics/xpm - - www - Software related to the World Wide Web. HTML language - support belongs here too. - +[this section is for other standard bsd.port.mk variables that do not + belong to any of the above] +[If it asks questions during configure, build, install...] +IS_INTERACTIVE= yes +[If it extracts to a directory other than ${DISTNAME}...] +WRKSRC= ${WRKDIR}/xdvi-new +[If the distributed patches were not made relative to ${WRKSRC}, you + may need to tweak this] +PATCH_DIST_STRIP= -p1 +[If it requires a "configure" script generated by GNU autoconf to be run] +GNU_CONFIGURE= yes +[If it requires GNU make, not /usr/bin/make, to build...] +USE_GMAKE= yes +[If it is an X application and requires "xmkmf -a" to be run...] +USE_IMAKE= yes +[et cetera.] - - x11 - The X window system and friends. This category is only - for software that directly supports the window system. Do not - put regular X applications here. If your port is an X - application, define USE_XLIB (implied by - USE_IMAKE) and put it in the appropriate - categories. Also, many of them go into other - x11-* categories (see below). - +[non-standard variables to be used in the rules below] +MY_FAVORITE_RESPONSE= "yeah, right" - - x11-clocks - X11 clocks. - +[then the special rules, in the order they are called] +pre-fetch: + i go fetch something, yeah - - x11-fm - X11 file managers. - +post-patch: + i need to do something after patch, great - - x11-fonts - X11 fonts and font utilities. - +pre-install: + and then some more stuff before installing, wow - - x11-servers - X11 servers. - +[and then the epilogue] +.include <bsd.port.mk> + - - x11-toolkits - X11 toolkits. - + + Automated package list creation - - x11-wm - X11 window managers. - + First, make sure your port is almost complete, with only + pkg-plist missing. Create an empty + pkg-plist. - - zope* - Zope support. - - - - - + &prompt.root; touch pkg-plist - - Choosing the right category + Next, create a new set of directories which your port can be + installed, and install any dependencies. - As many of the categories overlap, you often have to choose - which of the categories should be the primary category of your port. - There are several rules that govern this issue. Here is the list of - priorities, in decreasing order of precedence. + &prompt.root; mkdir /var/tmp/port-name +&prompt.root; mtree -U -f /etc/mtree/BSD.local.dist -d -e -p /var/tmp/port-name +&prompt.root; make depends PREFIX=/var/tmp/port-name - - - Language specific categories always come first. For - example, if your port installs Japanese X11 fonts, then your - CATEGORIES line would read japanese - x11-fonts. - + Store the directory structure in a new file. - - Specific categories win over less-specific ones. For - instance, an HTML editor should be listed as www - editors, not the other way around. Also, you do not - need to list net when the port belongs to - any of irc, mail, - mbone, news, - security, or www. - + &prompt.root; (cd /var/tmp/port-name && find -d * -type d) > OLD-DIRS - - x11 is used as a secondary category only - when the primary category is a natural language. In particular, - you should not put x11 in the category line - for X applications. - + If your port honors PREFIX (which it should) + you can then install the port and create the package list. - - Emacs modes should be - placed in the same ports category as the application - supported by the mode, not in - editors. For example, an - Emacs mode to edit source - files of some programming language should go into - lang. - - + &prompt.root; make install PREFIX=/var/tmp/port-name +&prompt.root; (cd /var/tmp/port-name && find -d * \! -type d) > pkg-plist - - If your port truly does not belong anywhere else, put it in - misc. - - + You must also add any newly created directories to the packing + list. - If you are not sure about the category, please put a comment to - that effect in your send-pr submission so we can - discuss it before we import it. If you are a committer, send a note - to the &a.ports; so we can discuss it first—too often new ports are - imported to the wrong category only to be moved right away. - + &prompt.root; (cd /var/tmp/port-name && find -d * -type d) | comm -13 OLD-DIRS - | sed -e 's#^#@dirrm #' >> pkg-plist + + Finally, you need to tidy up the packing list by hand; it isn't + all automated. Manual pages should be listed in + the port's Makefile under + MANn, and not in the + package list. User configuration files should be removed, or + installed as + filename.sample. + The info/dir file should not be listed + and appropriate install-info lines should + be added as noted in the info + files section. Any + libraries installed by the port should be listed as specified in the + shared libraries section. Changes to this document and the ports system If you maintain a lot of ports, you should consider following the &a.ports;. Important changes to the way ports work will be announced there. You can always find more detailed information on the latest changes by looking at the bsd.port.mk CVS log. Other resources to assist port maintainers include a list of package building logs and errors and the FreeBSD Ports distfiles survey.