| 20 | 
 There are numerous ways that one can specify compile--time package | 
 There are numerous ways that one can specify compile--time package | 
| 21 | 
 inclusion or exclusion and they are all implemented by the | 
 inclusion or exclusion and they are all implemented by the | 
| 22 | 
 \texttt{genmake2} program which was previously described in Section | 
 \texttt{genmake2} program which was previously described in Section | 
| 23 | 
 \ref{sect:buildingCode}.  The options are as follows: | 
 \ref{sec:buildingCode}.  The options are as follows: | 
| 24 | 
 \begin{enumerate} | 
 \begin{enumerate} | 
| 25 | 
 \item Setting the \texttt{genamake2} options \texttt{--enable PKG} | 
 \item Setting the \texttt{genamake2} options \texttt{--enable PKG} | 
| 26 | 
   and/or \texttt{--disable PKG} specifies inclusion or exclusion. | 
   and/or \texttt{--disable PKG} specifies inclusion or exclusion. | 
| 244 | 
 \subsubsection{Adding a package to PARAMS.h and  packages\_boot()} | 
 \subsubsection{Adding a package to PARAMS.h and  packages\_boot()} | 
| 245 | 
  | 
  | 
| 246 | 
 An MITgcm package directory contains all the code needed for that package apart | 
 An MITgcm package directory contains all the code needed for that package apart | 
| 247 | 
 from one variable for each package. This variable is the {\tt use\$\{Pkg\} }  | 
 from one variable for each package. This variable is the {\it use\$\{Pkg\} }  | 
| 248 | 
 flag. This flag, which is of type logical, {\bf must} be declared in the  | 
 flag. This flag, which is of type logical, {\bf must} be declared in the  | 
| 249 | 
 shared header file {\it PARAMS.h} in the {\it PARM\_PACKAGES} block. This  | 
 shared header file {\it PARAMS.h} in the {\it PARM\_PACKAGES} block. This  | 
| 250 | 
 convention is used to support a single runtime control file {\it data.pkg}  | 
 convention is used to support a single runtime control file {\it data.pkg}  | 
| 252 | 
 flag controlling the runtime use of a package. This routine needs to be able to  | 
 flag controlling the runtime use of a package. This routine needs to be able to  | 
| 253 | 
 read the flags for packages that were not built at compile time. Therefore | 
 read the flags for packages that were not built at compile time. Therefore | 
| 254 | 
 when adding a new package, in addition to creating the per-package directory | 
 when adding a new package, in addition to creating the per-package directory | 
| 255 | 
 in the {\it pkg/} subdirectory a developer should add a {\tt use\$\{Pkg\} } | 
 in the {\it pkg/} subdirectory a developer should add a {\it use\$\{Pkg\} } | 
| 256 | 
 flag to {\it PARAMS.h} and a {\tt use\$\{Pkg\} } entry to the  | 
 flag to {\it PARAMS.h} and a {\it use\$\{Pkg\} } entry to the  | 
| 257 | 
 {\it packages\_boot()} {\it PACKAGES} namelist. | 
 {\it packages\_boot()} {\it PACKAGES} namelist. | 
| 258 | 
 The only other package specific code that should appear outside the individual  | 
 The only other package specific code that should appear outside the individual  | 
| 259 | 
 package directory are calls to the specific package API. | 
 package directory are calls to the specific package API. |