Annotation of www/checklist.html, Revision 1.1
1.1 ! marc 1: <html>
! 2: <head>
! 3: <meta http-equiv="Content-Type"
! 4: content="text/html; charset=iso-8859-1">
! 5: <meta name="resource-type"
! 6: content="document">
! 7: <meta name="description"
! 8: CONTENT="How to make an OpenBSD port; Marc's porting checklist">
! 9: <meta name="keywords"
! 10: content="openbsd,ports">
! 11: <meta name="distribution"
! 12: content="global">
! 13: <meta name="copyright"
! 14: content="This document copyright 1998 by the OpenBSD project">
! 15: <title>Marc's Porting Checklist</title>
! 16: <link rev="made" HREF="mailto:www@openbsd.org">
! 17: </head>
! 18: <body text="#000000" bgcolor="#FFFFFF" link="#23238E">
! 19: <img height=30 width=141 src=images/smalltitle.gif alt="[OpenBSD]" >
! 20:
! 21: <h2><font color=#e00000>Marc's Porting Checklist</font></h2>
! 22:
! 23: I use this checklist as a reminder of things to do when creating
! 24: new ports and when validating old ports. I don't claim this list
! 25: is totally accurate, much less perfect, but only hope that some
! 26: find it useful. Direct your questions and/or comments to me at
! 27: <a href=mailto:marc@snafu.org>marc@snafu.org</a>.
! 28: <p>
! 29: <ol>
! 30: <li>Create Makefile -- start with this skeleton
! 31: <a href="#makefile">makefile</a>.
! 32: <p>
! 33: <li><code>make fetch</code><br>
! 34: This verifies that the master site, distname, and extract suffix are
! 35: correct.
! 36: <p>
! 37: <li><code>make makesum</code><br>
! 38: This creates the files directory and the md5 checksum for the
! 39: fetched files.
! 40: <p>
! 41: <li><code>make extract</code><br>
! 42: Ensures that the file can be extracted into the work directory.
! 43: This also verifies that the checksum created in step 3 is good.
! 44: <p>
! 45: <li>Create initial patches<br>
! 46: When the extract is complete cd to the work directory and read
! 47: any install docs. You may need to modify the WRKSRC variable
! 48: in the makefile as well as generate initial patches to configure
! 49: for openbsd.
! 50: <p>Note: Patches go in the directory `patches' and are names patch-xx
! 51: where xx should be aa, ab, ..., az, ba, bb ... zz.
! 52: <ul>
! 53: <li>only patch one source file per patchfile, please
! 54: <li>use diff -u to generate patches
! 55: <li>all patches MUST be relative to ${WRKSRC}
! 56: </ul>
! 57: <p>
! 58: <li><code>make patch</code><br>
! 59: this will apply patches to the extracted sources. If you want
! 60: to see the output use the command:
! 61: <p><code>make PATCH_DEBUG=YES patch</code>
! 62: <p>The easiest way to re-run patches is to `make clean && make patch'.
! 63: This will delete the work directory and re-extract and patch.
! 64: <p>
! 65: <li>add configuration options to Makefile and/or create configuration
! 66: script.<br>
! 67: You can add a port configuration script named `configure' to a
! 68: directory named scripts. This will be run before any
! 69: configuration specified by GNU_CONFIGURE or HAS_CONFIGURE is run.
! 70: <p>If GNU_CONFIGURE is used you may want to run ./configure --help
! 71: to see what options are available. Anything thay you may want to
! 72: override can be changed by adding the --option flags to the
! 73: CONFIGURE_ARGS parameter in the Makefile
! 74: <p>
! 75: <li><code>make configure</code><br>
! 76: Peruse the output (if any) and tweak any options in the Makefile.
! 77: To repeat issue the command `make clean && make configure'.
! 78: <p>Note: make sure host dependent files go in /etc or /etc/<name>, but
! 79: NEVER replace existing files in /etc. Best to have install place
! 80: in /usr/local/lib/<name> and then copy to /etc or /etc/<name> only
! 81: the files do not exist.
! 82: <p>The OpenBSD file locations are:
! 83: <pre>
! 84: user executables: /usr/local/bin
! 85: system admin executables: /usr/local/sbin
! 86: program executables: /usr/local/libexec
! 87: libraries /usr/local/lib
! 88: architecture dependent data /usr/local/lib/<name>
! 89: installed include files: /usr/local/include or
! 90: /usr/local/include/<name>
! 91: single-machine data: /etc or /etc/<name>
! 92: local state: /var/run
! 93: GNU info files: /usr/local/info
! 94: man pages: /usr/local/man/...
! 95: read-only architecture-independent: /usr/local/share/<name>
! 96: misc documentation: /usr/local/share/doc/<name>
! 97: </pre>
! 98: <p>
! 99: <li><code>make</code><br>
! 100: Begin a cycle of makes until the port is ready. Patch (see above)
! 101: clean, and make until the port is generated. Get rid of all warnings
! 102: if possible, especially security related warnings.
! 103: <p>
! 104: <li><code>mkdir pkg; touch pkg/{DESCR,COMMENT,PLIST}</code><br>
! 105: Create dummy versions of the package files. Edit DESCR and COMMENT.
! 106: <p>COMMENT is the one-line description of the port. Do NOT include the
! 107: package name (or version number of the software) in the comment.
! 108: <p>DESCR is a longer description of the port. One to a few paragraphs
! 109: concisely explaining what the port does is sufficient.
! 110: <p>PLIST is kept empty at this point.
! 111: <p>
! 112: <li><code>sudo make install</code><br>
! 113: install the application.
! 114: <p>
! 115: <li>Create pkg/PLIST<br>
! 116: After the install is complete use the developers command:
! 117: <p><code>make plist</code>
! 118: <p>which makes a the file PLIST-auto in the pkg directory. This file
! 119: is a candidate packing list. Beware: the files are found by
! 120: timestamp. This means it does NOT:
! 121: <ul>
! 122: <li>list any files installed with `tar' as their timestamp
! 123: will not change and thus won't be found by `find'
! 124: <li>update the <code>info/dir</code> file if .info files are
! 125: added. You'll have to add that by hand. Also, be sure that
! 126: the <code>info/dir</code> is not part of the PLIST.
! 127: <li>try to do anything special with links or symbolic links. A
! 128: cursory test of tar shows it does the right thing with links
! 129: and symbolic links so I don't see why we need to special case
! 130: anything in the packing list. But still...
! 131: </ul>
! 132: <p>Peruse `PLIST-auto' and verify that everything was installed and
! 133: that it was installed in the proper locations. Anything not installed
! 134: can be added to a port Makefile `post-install' rule.
! 135: <p>Copy `PLIST-auto' to `PLIST'
! 136: <p>
! 137: <li>uninstall and reinstall; repeat until perfect.<br>
! 138: <em>Perfect</em> is when everything installs and uninstalls
! 139: in its proper location. `pkg_delete <pkg_name>' is used to
! 140: uninstall. `sudo make reinstall' is used to reinstall. See the
! 141: `pkg_create' man page for other commands that may be added to PLIST
! 142: to ensure all is cleaned up. After an uninstall the command
! 143: <p><code>find /usr/local -newer work/.install_started -print</code>
! 144: <p>should only list standard directory names.
! 145: <p>
! 146: <li>Create package:<br>
! 147: After the port installs correctly issue the command
! 148: <code>make package</code> to create a package. To test the
! 149: package first do a <code>pkg_delete</code> and then do a
! 150: <code>pkg_add</code> The results after an add should EXACTLY
! 151: match the results after a `make install'.
! 152: </ol>
! 153: <hr>
! 154: <a name=makefile>
! 155: <h2><font color=#e00000>Skeleton ports makefile</font></h2>
! 156: </a>
! 157:
! 158: <code>;;;</code> indicates values that must be supplied by the
! 159: porter. Remove extraneous comments when done.
! 160: <pre>
! 161: # OpenBSD makefile for: ;;;
! 162: # Version required: ;;;
! 163: # Date created: ;;;
! 164: # Whom: you@your.domain
! 165: #
! 166: # $OpenBSD:$
! 167: #
! 168:
! 169: # What port/package will be created
! 170: #
! 171: DISTNAME= ;;;
! 172: #DIST_SUBDIR= ;;;
! 173: #PKGNAME= ;;;
! 174: CATEGORIES= ;;;
! 175:
! 176: # Reasons why the port/package shouldn't be built
! 177: #
! 178: #COMES_WITH= 2.3
! 179: #ONLY_FOR_ARCHS= list architectures here
! 180: #BROKEN= "reason"
! 181: #NO_CDROM= "reason"
! 182: #RESTRICTED= "reason"
! 183:
! 184: # where to send bitches about this port
! 185: #
! 186: MAINTAINER= ports@openbsd.org
! 187:
! 188: # where the source files and patches can be fetched
! 189: #
! 190: MASTER_SITES= ;;;
! 191: #MASTER_SITE_SUBDIR= ;;;
! 192: #DISTFILES= ;;;
! 193: #PATCH_SITES= ;;;
! 194: #PATCHFILES= ;;;
! 195:
! 196: # How to extract the sources
! 197: #
! 198: #EXTRACT_SUFX= .tar.Z
! 199: #EXTRACT_CMD= ;;;
! 200: #EXTRACT_BEFORE_ARGS= ;;;
! 201: #EXTRACT_AFTER_ARGS= ;;;
! 202:
! 203: # Dependencies
! 204: #
! 205: #FETCH_DEPENDS= ;;;
! 206: #BUILD_DEPENDS= ;;;
! 207: #RUN_DEPENDS= ;;;
! 208: #LIB_DEPENDS= ;;;
! 209: #OS_RELEASE!= uname -r
! 210: #OS_HAS_XPM= 2.3
! 211: #.if ( ${OS_RELEASE} < ${OS_HAS_XPM} )
! 212: #LIB_DEPENDS+= Xpm\\.4\\.:${PORTSDIR}/graphics/xpm
! 213: #.endif
! 214:
! 215: # Is the build automagic or is it interactive
! 216: #
! 217: #IS_INTERACTIVE= yes
! 218:
! 219: # build/configuration variables
! 220: #
! 221: #USE_GMAKE= yes
! 222: #USE_IMAKE= yes
! 223: #USE_X11= yes (assumed if USE_IMAKE is yes)
! 224:
! 225: #GNU_CONFIGURE= yes
! 226: #HAS_CONFIGURE= yes (assumed if GNU_CONFIGURE is yes)
! 227: #CONFIGURE_SCRIPT= ;;; (if other than configure)
! 228: #.if (${MACHINE_ARCH} != "alpha")
! 229: #CONFIGURE_ARGS+= --enable-shared
! 230: #.endif
! 231: #CONFIGURE_ARGS+= --enable-static
! 232: #CONFIGURE_ENV= ${SETENV}
! 233:
! 234:
! 235: # Things that we don't want to do for this port/package
! 236: #
! 237: #NO_DEPENDS= yes
! 238: #NO_WRKDIR= yes
! 239: #NO_WRKSUBDIR= yes
! 240: #NO_CHECKSUM= yes
! 241: #NO_EXTRACT= yes
! 242: #NO_PATCH= yes
! 243: #NO_CONFIGURE= yes
! 244: #NO_BUILD= yes
! 245: #NO_INSTALL= yes
! 246: #NO_MTREE= yes
! 247: #NO_PACKAGE= yes
! 248:
! 249: # This section is only needed if man pages are distributed in compressed
! 250: # form. Define MANCOMPRESSED and the man pages by section. The pages
! 251: # will be uncompressed after being installed.
! 252: #
! 253: #MANCOMPRESSED= yes
! 254: #MAN1= ;;;
! 255: #MAN3= ;;;
! 256: #MAN4= ;;;
! 257: #MAN5= ;;;
! 258: #MAN8= ;;;
! 259:
! 260: # Overrides for default values
! 261: #
! 262: #MAKEFILE= ;;;
! 263: #MAKE_FLAGS= ;;;
! 264: #MAKE_ENV= ;;;
! 265: #SCRIPTS_ENV= ;;;
! 266: #LDFLAGS= ;;;
! 267: #WRKDIR= ;;; if other than work
! 268: #WRKSRC= ;;; if other than ${WRKDIR}/$DISTNAME
! 269:
! 270: #ALL_TARGET= ;;;
! 271: #INSTALL_TARGET= ;;;
! 272:
! 273: # This target may be necessary if a shared library may have been created
! 274: #
! 275: #post-install:
! 276: # ${LDCONFIG} -m ${PREFIX}/lib
! 277:
! 278: .include <bsd.port.mk>
! 279: </pre>
! 280: <hr>
! 281: <a href="porting.html"><img height=24 width=24 src=back.gif
! 282: border=0 alt=Porting></a>
! 283: <a href=mailto:www@openbsd.org>www@openbsd.org</a>
! 284: <br><small>$OpenBSD: porting.html,v 1.7 1998/07/30 14:58:43 espie Exp $</small>
! 285: </body>
! 286: </html>