[BACK]Return to checklist.html CVS log [TXT][DIR] Up to [local] / www

Annotation of www/checklist.html, Revision 1.58

1.14      rohee       1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
1.1       marc        2: <html>
1.20      turan       3: <head>
                      4: <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                      5: <meta name="resource-type" content="document">
                      6: <meta name="description" CONTENT="How to make/update an OpenBSD port.">
                      7: <meta name="keywords" content="openbsd,ports">
                      8: <meta name="distribution" content="global">
1.55      jose        9: <meta name="copyright" content="This document copyright 1998-2004 by OpenBSD.">
1.20      turan      10:
                     11: <title>OpenBSD Porting Checklist</title>
1.45      jsyn       12: </head>
1.20      turan      13:
1.53      jose       14: <body text="#000000" bgcolor="#FFFFFF" link="#23238E">
1.43      jsyn       15: <a href="index.html"><img alt="[OpenBSD]" height="30" width="141" src="images/smalltitle.gif" border="0"></a>
1.20      turan      16:
                     17: <h2><font color="#e00000">OpenBSD Porting Checklist</font></h2>
                     18:
                     19: This document describes how to make or upgrade a port.  It is a useful
1.33      pvalchev   20: reminder of things to do.  This is neither totally accurate nor perfect.
1.45      jsyn       21: Direct comments and questions to <a href="mailto:ports@openbsd.org">
                     22: ports@openbsd.org</a>.
1.20      turan      23:
                     24: <hr>
                     25: <ol>
                     26:
1.22      rohee      27: <li>
1.20      turan      28: If you want to be a maintainer, subscribe to
1.53      jose       29: <a href="mailto:ports@openbsd.org">ports@openbsd.org.</a>
1.20      turan      30: <ul><li>
                     31: This is where all ports discussions take place.
                     32: <li>
                     33: Reading this list is important since many announcements go over this list.
                     34: <li>
1.33      pvalchev   35: You will find a lot of porting-savvy people there.  They can often give you
1.20      turan      36: good advice or test ports for you.
                     37: </ul>
                     38:
1.22      rohee      39: <br><li>
1.29      espie      40: Being a maintainer means <strong>more</strong> than just submitting ports.
                     41: It also means trying to keep them up-to-date, and to answer questions about
                     42: them.
                     43:
1.45      jsyn       44: <br><br><li>
1.20      turan      45: Check out a copy of the ports tree from cvs.
1.33      pvalchev   46: You can find instructions on how to do this at
1.20      turan      47: <a href="http://www.openbsd.org/anoncvs.html">
                     48: http://www.openbsd.org/anoncvs.html</a>.
                     49:
1.22      rohee      50: <br><br><li>
1.20      turan      51: Pick a place to put your port and create the basic
                     52: infrastructure there.  Use the template Makefile at
                     53: <code>/usr/ports/infrastructure/templates/Makefile.template</code>.
1.44      pvalchev   54: NEED_VERSION is obsolete and should not be used in new ports.
                     55: As you are a port developer, you are supposed to update
                     56: your ports tree, including bsd.port.mk.
1.20      turan      57: <ul><li>
1.49      cannings   58: Create the directory <code>pkg</code>.
1.20      turan      59: <li>
1.45      jsyn       60: Create the empty files <code>pkg/DESCR, pkg/PLIST</code>.
1.20      turan      61: </ul>
                     62:
1.22      rohee      63: <br><li>
1.20      turan      64: Add the fetch portions of the Makefile.
                     65: <ul><li>
1.37      pvalchev   66: Fill in EXTRACT_SUFX if it's anything besides .tar.gz.  Other examples are
1.20      turan      67: .tar.Z, or .tgz.
                     68: <li>
1.45      jsyn       69: Fill in DISTNAME which is the name of the file minus the extract suffix.
                     70: E.g., if you have foo-1.0.tar.gz, DISTNAME is foo-1.0.
1.20      turan      71: <li>
                     72: Fill in MASTER_SITES which is a URL to the directory where the distfile
1.45      jsyn       73: is kept.  E.g., ftp://ftp.openbsd.org/pub/OpenBSD/distfiles/.
                     74: <strong>Don't forget the trailing slash.</strong>
                     75: Try to have at least three distinct sites as well.
1.20      turan      76: Place the most easily accessible first as they are traversed in order.
                     77: <li>
                     78: Keep in mind that fetch references the file as
1.32      naddy      79: ${MASTER_SITES}${DISTNAME}${EXTRACT_SUFX}.  All three are used.  Don't
1.20      turan      80: set DISTNAME to point to the file directly.
                     81: <li>
1.33      pvalchev   82: You can check to see if you have filled these values in correctly by typing
1.45      jsyn       83: <b>make fetch-all</b>.
1.20      turan      84: </ul>
                     85: <p>
                     86: For more complex ports, you have more options and tools available to you:
                     87: <ul><li>
                     88: You also have the variable PATCHFILES available.  This is a list of vendor
1.22      rohee      89: (not OpenBSD) patches to the port.  Common uses are things like security
1.20      turan      90: or reliability fixes.
                     91: <li>
                     92: If your ports are available over large public mirrors such as GNU, SunSite, or
                     93: CPAN, we have already provided a list of sites for your use in
1.48      david      94: /usr/ports/infrastructure/templates/network.conf.template.
1.20      turan      95: Set MASTER_SITES to ${MASTER_SITE_GNU}, or ${MASTER_SITE_SUNSITE}, etc.
1.42      pvalchev   96: To simplify this process, use the construct ${MASTER_SITE_FOO:=subdir/} to
                     97: append the distribution subdirectory.
1.20      turan      98: <li>
                     99: Ports normally correspond to given versions of software. Once they are retrieved, files are checksummed and compared to the recorded
1.40      naddy     100: checksum(s) in distinfo. So, to avoid confusion, DISTFILES and PATCHFILES should have clearly visible version numbers:
1.20      turan     101: don't retrieve foo-latest.tar.gz if it is a link to foo-1.0.5.tar.gz. If necessary, gently ask the original program author
                    102: to make such distinctions clear.
                    103: <li>
                    104: If a given port needs more than about 5 DISTFILES + PATCHFILES to work, use DIST_SUBDIR to avoid cluttering
                    105: /usr/ports/distfiles too much.
                    106: <li>
                    107: DIST_SUBDIR must not include version numbers. When the port is updated to a later version, some distfiles may not change, but will be
                    108: refetched if DIST_SUBDIR is changed. Even if all distfiles change, it is easier for the user to track cruft.
                    109: <li>
                    110: All DISTFILES and PATCHFILES don't necessarily come from the same set of MASTER_SITES. Supplementary sites can be
                    111: defined using the variables MASTER_SITES0 to MASTER_SITES9. Just write DISTFILES=foo-1.0.5.tar.gz:5 to
                    112: retrieve foo-1.0.5.tar.gz from MASTER_SITES5.
                    113: <li>
                    114: Some ports don't always need to retrieve all files in all circumstances. For instance, some ports may have some compilation options, and
                    115: associated files which are only required in such a case. Or they may need some files for some architectures only. In such a case, those
                    116: supplementary optional files must be mentioned in the SUPDISTFILES variable. Targets such as makesum or
                    117: mirror-distfiles will fetch those supplementary files that the casual user doesn't need.
                    118: </ul>
1.1       marc      119:
1.22      rohee     120: <br><li>
1.40      naddy     121: Create a checksum in <i>distinfo</i> by typing <b>make makesum</b>.
1.45      jsyn      122: Then verify the checksum is correct by typing <b>make checksum</b>.
1.20      turan     123: <ul><li>
                    124: In some rare cases, files checksums can't be verified reliably. By all means, porters should try to find sites that are reliable. Communicating
                    125: with the software author and the archive site maintainer at this stage is highly desirable. In the worst case, non-checksummable files can be
                    126: mentioned in the IGNOREFILES variable.
                    127: <li>
                    128: All files in DISTFILES are usually processed during make extract. EXTRACT_ONLY may be used to limit extraction to a
                    129: subset of files (possibly empty). The customary use of this variable is to customize extraction: for instance, if some DISTFILES need
                    130: some special treatment, they will be removed from EXTRACT_ONLY and handled manually at post-extract stage.
                    131: For historic reasons, make extract does set up the working directory first along with extracting files. Thus, providing a
                    132: pre-extract or a do-extract target is highly unusual (and fairly suspicious behavior, indicative of a high degree of obfuscation
                    133: in the port).
                    134: <li>
                    135: Patches that need specific treatment should be mentioned in DISTFILES, and removed from EXTRACT_ONLY, for historic reasons.
                    136: </ul>
1.1       marc      137:
1.22      rohee     138: <br><li>
1.20      turan     139: Extract the port with <b>make extract</b>.  Pay attention to where the base
1.38      pvalchev  140: of the sources are.  Usually, it's <i>w-${PKGNAME}${FLAVOR_EXT}/${DISTNAME}</i>. You may need to
                    141: modify the Makefile's WRKDIST variable if it is different.
1.9       espie     142:
1.22      rohee     143: <br><br><li>
1.20      turan     144: Read the installation documentation and note what you have to do to build
                    145: the port and any special options that might be needed.
1.22      rohee     146:
                    147: <br><br><li>
1.20      turan     148: Now is also a good time to figure out what kind of licensing restrictions
1.33      pvalchev  149: apply to your port.  Many are freely redistributable but then again, quite
1.20      turan     150: a few are not.  We need four questions answered to distribute ports
                    151: properly.  These are the PERMIT_* values in the Makefile.
                    152: <ul><li>
                    153: PERMIT_PACKAGE_CDROM tells us if we can put the package on the cdrom.
                    154: <li>
                    155: PERMIT_PACKAGE_FTP tells us if we can put the package on the ftp sites.
                    156: <li>
                    157: PERMIT_DISTFILES_CDROM tells us if we can mirror the distfiles on the cdrom.
                    158: <li>
                    159: PERMIT_DISTFILES_FTP tells us if we can mirror the distfiles on the ftp sites.
1.45      jsyn      160: </ul>
                    161: <p>
1.20      turan     162: Set these values to Yes if it is permitted or to a comment string stating why
                    163: it is not.  Pay attention to any special conditions you may need to fulfill
1.45      jsyn      164: later on.  E.g., some ports require to install a copy of the license.  We
1.57      xsa       165: recommend you place the license in
                    166: <code>/usr/local/share/doc/&lt;name&gt;/</code>.
                    167: <p>
                    168: In addition to the PERMIT_* values, put a license marker like
                    169: <code># License</code> above them as a comment, this way we know why
                    170: the PERMIT_* values are set the way they are.
1.20      turan     171:
1.22      rohee     172: <br><br><li>
1.20      turan     173: Add configuration options to Makefile and/or create the configuration script.
                    174: <ul><li>
                    175: You can add a port configuration script named `configure' to a directory
                    176: named <code>scripts/</code>. This will be run before any configuration
1.40      naddy     177: specified by CONFIGURE_STYLE is run.
1.20      turan     178: <li>
1.40      naddy     179: If GNU configure is used you may want to run ./configure --help
1.20      turan     180: to see what options are available.
                    181: <li>
                    182: Anything that you may want to override can be changed by adding the
                    183: --option flags to the CONFIGURE_ARGS parameter in the Makefile.
                    184: <li>
                    185: Use CONFIGURE_ARGS+= to append to the variable.  CONFIGURE_ARGS= will
                    186: overwrite it.
                    187: </ul>
                    188:
1.22      rohee     189: <br><li>
1.20      turan     190: Try building the port with <b>make build</b>.
                    191: <ul><li>
                    192: If you're lucky, the port will go all the way through without errors.
                    193: <li>
                    194: If it exits with an error, you will need to generate patches for your port.
1.33      pvalchev  195: Figure out what needs to be changed and make a patch for it.
1.20      turan     196: <li>
                    197: Patches must be relative to ${WRKDIST}.
                    198: <li> The easiest way to reset the port and test your patches is
                    199: <b>make clean patch</b>. This will delete the work directory, re-extract,
                    200: and patch your port.
                    201: </ul>
                    202:
1.22      rohee     203: <br><li>
1.26      reinhard  204: Begin and cycle of <b>make build</b>, generate a patch (or use <b>make
                    205: update-patches</b>), and
1.20      turan     206: <b>make clean patch</b>.
                    207: <ul><li>
                    208: Patches go in the directory <i>patches/</i> and should be named patch-* with
                    209: * being something meaningful.  We recommend you name your patches
1.26      reinhard  210: patch-FILENAME where FILENAME is the name of the file it is patching.
                    211: (<tt>make update-patches</tt> does this automatically for you.)
1.20      turan     212: <li>
                    213: Applying PATCHFILES is the first half of the make patch stage. It can be
                    214: invoked separately as make distpatch, which is a convenient target for
                    215: porters. Ignore this if you haven't set it.
                    216: <li>
1.52      margarid  217: Only patch one source file per patchfile, please.
1.20      turan     218: <li>
1.52      margarid  219: Use <b>make update-patches</b> to generate patches.
1.20      turan     220: <li>
1.52      margarid  221: All patches MUST be relative to ${WRKDIST}.
1.20      turan     222: <li>
                    223: Check that patches <strong>DON'T</strong> contain tags that cvs
                    224: will replace.  If they do, your patches won't apply after you check
                    225: them in.  You can check in your changes with -kk to avoid this.
                    226: <li>
1.52      margarid  227: Write a small explanation at the beginning of the patchfile about its purpose
                    228: (not mandatory).
1.20      turan     229: <li>
                    230: <b>Please</b> feed your patches back to the author of that piece of software.
                    231: </ul>
                    232:
1.22      rohee     233: <br><li>
1.45      jsyn      234: Try setting <code>SEPARATE_BUILD</code>.
1.20      turan     235: <ul><li>
                    236: If the port can build with object files outside its source tree,
1.40      naddy     237: this is cleaner (many programs using <code>CONFIGURE_STYLE=gnu</code> can),
1.20      turan     238: and may help people who mount their ports tree on several arches.
                    239: <li>
                    240: This can also spare you some effort, as you will possibly be able to
                    241: restart the cycle at <code>configure</code> most of the time.
                    242: </ul>
                    243:
1.22      rohee     244: <br><li>
1.20      turan     245: Peruse the output (if any) and tweak any options in the Makefile.
                    246: To repeat issue the command `<b>make clean configure</b>'.
                    247: <p>
1.45      jsyn      248: Note: make sure host-dependent files go in <i>/etc</i> or
                    249: <i>/etc/&lt;name&gt;</i>, but <strong>NEVER REPLACE OR MODIFY</strong>
                    250: existing files in <i>/etc</i>.  Best to have install place them
1.20      turan     251: in <i>/usr/local/share/&lt;name&gt;</i> and then copy to
                    252: <i>/etc</i> or <i>/etc/&lt;name&gt;</i> only if the files do not exist.
                    253: If the files exist, display a message that says such-and-such files need
                    254: to be modified.  This also guarantees that the files will be included in
1.40      naddy     255: the package since everything under <i>/usr/local</i> is included in the PLIST.
                    256: After a package has been installed the contents of <code>pkg/MESSAGE</code>
                    257: will be displayed if it exists.
1.20      turan     258:
                    259: <p>
                    260: The OpenBSD file locations are:
                    261: <pre>
1.1       marc      262:    user executables:                   /usr/local/bin
                    263:    system admin executables:           /usr/local/sbin
                    264:    program executables:                        /usr/local/libexec
1.56      xsa       265:    libraries:                          /usr/local/lib
                    266:    architecture dependent data:                /usr/local/lib/&lt;name&gt;
1.1       marc      267:    installed include files:            /usr/local/include or
1.14      rohee     268:                                        /usr/local/include/&lt;name&gt;
                    269:    single-machine data:                        /etc or /etc/&lt;name&gt;
1.1       marc      270:    local state:                                /var/run
1.35      brad      271:    games score files:                  /var/games
1.1       marc      272:    GNU info files:                     /usr/local/info
                    273:    man pages:                          /usr/local/man/...
1.14      rohee     274:    read-only architecture-independent: /usr/local/share/&lt;name&gt;
                    275:    misc documentation:                 /usr/local/share/doc/&lt;name&gt;
1.56      xsa       276:    examples files:                     /usr/local/share/examples/&lt;name&gt;
1.20      turan     277: </pre>
1.9       espie     278:
1.22      rohee     279: <li>
1.20      turan     280: Begin a cycle of makes until the port is ready.  Patch (see above)
                    281: clean, and make until the port is generated.  Get rid of all warnings
                    282: if possible, especially security related warnings.
1.22      rohee     283:
                    284: <br><br><li>
1.20      turan     285: Control SEPARATE_BUILD semantics.
                    286: You have to do this only if the port builds with
                    287: SEPARATE_BUILD defined.
1.45      jsyn      288: Ideally, the port should not modify any file in
1.20      turan     289: ${WRKSRC} after <b>make patch</b>.
                    290: You can check this by making sure you don't have any write access
                    291: to ${WRKSRC}. Then you can set
1.45      jsyn      292: <code>SEPARATE_BUILD=concurrent</code> -- someone can use the same
1.20      turan     293: source tree to build on distinct arches simultaneously.
1.45      jsyn      294: Otherwise, set <code>SEPARATE_BUILD=simple</code> -- building on
                    295: distinct arches simultaneously may be met with problems, as some
1.20      turan     296: source files may be regenerated at awkward moments.
1.9       espie     297:
1.22      rohee     298: <br><br><li>
1.31      reinhard  299: Add <i>COMMENT</i> in Makefile.
1.20      turan     300: COMMENT is a <strong>SHORT</strong> one-line description of the port
1.24      espie     301: (max. 60 characters). Do <strong>NOT</strong> include the package
                    302: name (or version number of the software) in the comment.
                    303: Do <strong>NOT</strong> start with an uppercase letter
1.45      jsyn      304: unless semantically significant, and
1.24      espie     305: do <strong>NOT</strong> end with a period.
1.54      jmc       306: <strong>DON'T EVER START WITH AN INDEFINITE ARTICLE SUCH AS `a' or `an';
1.24      espie     307: remove the article altogether.</strong>
1.31      reinhard  308:
                    309: <br><br><li>
                    310: Edit <i>pkg/DESCR</i>, <i>pkg/PLIST</i>.
1.45      jsyn      311: <ul><li>
1.20      turan     312: DESCR is a longer description of the port. One to a few paragraphs
1.39      jufi      313: concisely explaining what the port does is sufficient. It is also advised to
1.46      pvalchev  314: wrap your lines at 72 characters. This can be done by first editing the DESCR
                    315: file and then running it through 'fmt -w 72'.
1.20      turan     316: <li>
                    317: PLIST is kept empty at this point.
                    318: </ul>
                    319:
1.22      rohee     320: <br><li>
1.51      sturm     321: If the application needs to create a user or a group, choose the lowest free
                    322: id from <code>/usr/ports/infrastructure/db/user.list</code> for your port to
                    323: use and make sure your port gets added to this file at commit time.
                    324:
                    325: <br><br><li>
1.45      jsyn      326: Install the application with <b>make install</b>.
1.20      turan     327: If the port installs dynamic libraries, check their symbol tables
                    328: with <code>nm</code>, as some mistaken software strips dynamic libraries,
1.34      jsyn      329: which may lead to weird failures later. On the other hand, executable binaries
                    330: SHOULD be stripped; <code>file</code> can be used to determine this.  If the
                    331: port already contains code for stripping binaries, use it (i.e., an
                    332: 'install-strip' target); otherwise, add a provision in the port Makefile.
1.20      turan     333:
1.22      rohee     334: <br><br><li>
1.20      turan     335: <strong>Check port for security holes again</strong>. This is
                    336: especially important for network and setuid programs. See
1.50      jolan     337: <a href="porting.html#Security">our security recommendations</a>
1.20      turan     338: for that. Log interesting stuff and fixes in the
                    339: <code>pkg/SECURITY</code> file.  This file
                    340: should list audited potential problems, along with relevant patches,
                    341: so that another person can see at first glance what has been done.
                    342: Example:
1.14      rohee     343: <pre>
                    344:       &#36;OpenBSD&#36;
1.9       espie     345:
                    346:       ${WRKDIR}/receiver.c
                    347:          call to mktemp (wrapper function do_mktemp) does seem to be correct.
                    348:
                    349:       The server makes extensive use of strlcpy/strlcat/snprintf.
1.20      turan     350: </pre>
                    351:
1.22      rohee     352: <li>
1.20      turan     353: Create pkg/PLIST.  After the install is complete use the developer's command,
1.33      pvalchev  354: <b>make plist</b> which makes the file PLIST in the <i>pkg</i> directory.
1.20      turan     355: This file is a candidate packing list.
                    356: <p>
                    357: Beware! The files are found by timestamp.  This means it does NOT:
1.45      jsyn      358: <ul><li>
1.20      turan     359: list any files installed with `tar' as their timestamp
1.45      jsyn      360: will not change and thus won't be found by `find'.
1.20      turan     361: <li>
                    362: Update the <code>info/dir</code> file if .info files are added.
                    363: Also, be sure that the <code>info/dir</code> is not part of the PLIST.
                    364: <li>
                    365: Try to do anything special with links or symbolic links.  A
                    366: cursory test of tar shows it does the right thing with links
                    367: and symbolic links so I don't see why we need to special case
                    368: anything in the packing list.  But still...
                    369: </ul>
                    370: <p>
1.33      pvalchev  371: Peruse `PLIST' and verify that everything was installed and
1.20      turan     372: that it was installed in the proper locations.  Anything not installed
                    373: can be added to a port Makefile `post-install' rule.
                    374:
                    375: <p>
1.45      jsyn      376: Ports that install shared libraries will have another file called PFRAG.shared.
                    377: <ul><li>
1.33      pvalchev  378: PLIST describes the files being independent of whether the architecture supports shared libraries or not.
                    379: <li>
                    380: PFRAG.shared describes only the files being additionally installed on those architectures that support
1.20      turan     381: shared libraries.
                    382: <li>
1.33      pvalchev  383: PFRAG.noshared describes only the files being additionally installed on architectures that do not
                    384: support shared libraries.
1.20      turan     385: </ul>
                    386:
1.22      rohee     387: <br><li>
1.45      jsyn      388: Keep repeating uninstall and reinstall until perfect.
1.20      turan     389: <em>Perfect</em> is when everything installs and uninstalls
                    390: in its proper location.  `pkg_delete &lt;pkg_name&gt;' is
                    391: used to uninstall.  `sudo make reinstall' is used to reinstall.  See the
                    392: `pkg_create' man page for other commands that may be added
1.45      jsyn      393: to PLIST to ensure all is cleaned up.  After an uninstall the command:
                    394: <pre>
                    395: $ find /usr/local -newer w-${PKGNAME}${FLAVOR_EXT}/fake-${MACHINE_ARCH}[-${FLAVOR}]/.install_started -print
                    396: </pre>
                    397: should only list standard directory names.
1.20      turan     398:
1.22      rohee     399: <br><br><li>
1.45      jsyn      400: Test the packaging.
1.20      turan     401: After the port installs correctly issue the command
                    402: <code>make package</code> to create a package.  To test the
                    403: package first do a <code>pkg_delete</code> and then do a
                    404: <code>pkg_add</code>   The results after an add should EXACTLY
                    405: match the results after a `make install'.
1.9       espie     406:
1.22      rohee     407: <br><br><li>
1.20      turan     408: Mail <a href="mailto:ports@openbsd.org">ports@openbsd.org</a> with a short
                    409: note asking for comments and testing.  Attach the port to this email and
1.53      jose      410: send it out.
1.20      turan     411: <p>
                    412: Try to get others to test it on a variety of platforms for you.
                    413: <ul><li>
                    414: The DEC Alpha is good  because it has only static libraries and because
1.45      jsyn      415: <code>sizeof(int) != sizeof(long)</code>.
1.20      turan     416: <li>
                    417: Sun SPARC is good because it is very common and because its byte order is
                    418: the reverse of i386; if you developed on SPARC, of course, you'd want it
1.45      jsyn      419: tested on i386.
1.20      turan     420: </ul>
                    421:
1.22      rohee     422: <br><li>
1.20      turan     423: Incorporate any feedback you get. Test it again on your platform.
                    424: Get those who gave you feedback to test it again from your new port.
                    425:
1.22      rohee     426: <br><br><li>
1.20      turan     427: Finally, include it in the "ports" tree.
                    428: If you do not have CVS access, ask someone on
1.30      espie     429: <a href="mailto:ports@openbsd.org">ports@openbsd.org</a> to commit it.
1.9       espie     430:
1.22      rohee     431: <br><br><li>
1.20      turan     432: If you are a developer with CVS access, check it in.
                    433: We normally use "import" for a new port,
                    434: rather than adding a zillion (or a dozen) files individually.
                    435: Import uses "vendor branch" version numbers like 1.1.1.1, but don't worry
                    436: about that! :-) If you make changes to a specific file (edit, then
                    437: cvs commit), it will be 1.2, and that will be used.
                    438: <p>
                    439: In short, import is typically used when a port is created.
                    440: From that point on cvs add and cvs rm are typically used to add or remove
1.53      jose      441: files, and the normal edit-&gt;commit cycle for changes.
1.20      turan     442: You might use something like this:
                    443: <pre>
1.45      jsyn      444: $ cd kaffe1
1.47      david     445: $ make clean   # you really don't want to check in all of work!
1.45      jsyn      446: $ cvs -d cvs.openbsd.org:/cvs import -m 'kaffe port' ports/lang/kaffe1 \
1.58    ! david     447:        <i>YourName</i> <i>YourName_YYYY-MMM-DD</i>
1.20      turan     448: </pre>
                    449: <ul><li>
                    450: -d cvs.openbsd.org:/cvs says where cvs lives. This can be omitted if you
1.21      form      451: have a CVSROOT environment variable defined.
1.20      turan     452: <li>
                    453: -m 'kaffe port' is your login message.  Change it to whatever you like
                    454: <li>
                    455: ports/lang/kaffe1 is the path relative to /cvs where the port lives
                    456: <li>
1.45      jsyn      457: <i>YourName</i> (replaced with your login name) is the 'vendor tag'.
1.20      turan     458: You imported it so you are the vendor.
                    459: <li>
                    460: <i>YourName_YYYY-MMM-DD</i> (e.g., ian_2000-Jan-01)
                    461: is the 'vendor release tag'.  This is as good as any.
                    462: </ul>
1.45      jsyn      463: <br>
1.20      turan     464: As a real example, here is the output of checking in the Kaffe1 port,
                    465: which one of us did on September 8, 1998:
                    466: <pre>
1.4       ian       467: $ cd kaffe1
                    468: $ make clean >/dev/null
                    469: $ cvs import -m 'kaffe1.0(==JDK1.1) port' ports/lang/kaffe1 ian ian_1998-Sep-08
                    470: ian@cvs.openbsd.org's password: (not shown, obviously)
                    471: I ports/lang/kaffe1/CVS
                    472: I ports/lang/kaffe1/files/CVS
                    473: I ports/lang/kaffe1/pkg/CVS
                    474: N ports/lang/kaffe1/Makefile
                    475: cvs server: Importing /cvs/ports/lang/kaffe1/files
                    476: N ports/lang/kaffe1/files/md5
                    477: cvs server: Importing /cvs/ports/lang/kaffe1/pkg
                    478: N ports/lang/kaffe1/pkg/COMMENT
                    479: N ports/lang/kaffe1/pkg/DESCR
                    480: N ports/lang/kaffe1/pkg/PLIST
                    481:
                    482: No conflicts created by this import
                    483: $
1.20      turan     484: </pre>
                    485:
1.22      rohee     486: <li>
1.20      turan     487: Last but not least, add a one-line entry for the new port
1.45      jsyn      488: in its parent directory's Makefile, e.g., for ports/lang/kaffe1,
1.20      turan     489: add it to ports/lang/Makefile.
                    490:
1.22      rohee     491: <br><br><li>
1.20      turan     492: Maintain the port!  As time goes by, problems may arise, or new versions
                    493: of the software may be released. You should strive to keep your port up
1.22      rohee     494: to date.  In other words - iterate, test, test, iterate...
1.29      espie     495:
1.45      jsyn      496: <br><br><li>
1.29      espie     497: When updating a port, remember to handle dependencies! You shouldn't break any
                    498: port that depends on yours. In case of problems, communicate with the
                    499: maintainers of such ports. Likewise, be alert for dependency updates, and
                    500: check that the maintainer did their job.
1.22      rohee     501: </ol>
1.20      turan     502:
                    503: Thank you for supporting the OpenBSD "ports" process!
                    504: <hr>
1.53      jose      505: <a href="porting.html"><img height=24 width=24 src="back.gif"
                    506:  border=0 alt="Porting"></a>
1.20      turan     507: <a href="mailto:www@openbsd.org">www@openbsd.org</a>
1.58    ! david     508: <br><small>$OpenBSD: checklist.html,v 1.57 2004/02/12 09:12:23 xsa Exp $</small>
1.20      turan     509: </body>
1.1       marc      510: </html>