<!DOCTYPE ARTICLE PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
<!ENTITY % buildents SYSTEM "entities.sgml">
<!ENTITY % langents SYSTEM "langentities.sgml">
%buildents;
%langents;
]>

<article class="whitepaper" status="DRAFT" lang="en" id="maketool-help"
         revision="$Id: help.sgml,v 1.22 2003/11/01 02:29:37 gnb Exp $"
         vendor="Greg Banks">
<artheader>
  <title>Maketool</title>
  <author>
    <firstname>Greg</firstname>
    <surname>Banks</surname>
  </author>
  <pubdate role="cvs">$Date: 2003/11/01 02:29:37 $</pubdate>
  <releaseinfo>This is version &version;</releaseinfo>
  <copyright>
    <year>2000</year>
    <year>2001</year>
    <year>2002</year>
    <year>2003</year>
    <holder role="mailto:gnb@alphalink.com.au">Greg Banks</holder> 
  </copyright>
  <legalnotice>
    <title>Copyright</title>
    <para>Permission is granted to copy, distribute and/or modify
    this document under the terms of the Open Publication License,
    version 2.0.</para>
  </legalnotice>
  
  <abstract>
    <para>
    Maketool is a GUI program for running the GNU make utility, or
    &gmake;, to build software.
    </para>
    <para>
    GNU make is a powerful utility for organising the process of
    compiling and linking software, and is widely used in Open Source
    and commercial software.
    </para>
  </abstract>

</artheader>


<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="main-window" xreflabel="Main window">
<title>Main window</title>

<graphic format="GIF" fileref="mainwin.gif"></graphic>

<para>
This is maketool's main window.  The various parts of the main window are:
</para>


<variablelist>

  <varlistentry>
    <term>menubar</term>
    <listitem>
      <anchor id="main-menubar" xreflabel="Menubar">
      <para>
      Each menu contains commands which allow you to drive maketool.
      The menubar can be detached from maketool by dragging the handle
      at the left.  Each menu can be detached from maketool by selecting
      the dashed line at it's top.
      </para>
      <para>
      See also <xref linkend="file-menu">, <xref linkend="edit-menu">,
      <xref linkend="build-menu">, <xref linkend="view-menu">, and
      <xref linkend="help-menu">.
      </para>
    </listitem>
  </varlistentry>
  
  <varlistentry>
    <term>toolbar</term>
    <listitem>
      <anchor id="main-toolbar" xreflabel="Toolbar">
      <para>
      Each tool is a shortcut to a menu item, arranged for your
      convenience.  The toolbar can be detached from maketool
      by dragging the handle at the left.
      </para>
      <para>
      See also <xref linkend="again-tool">,
      <xref linkend="stop-tool">, <xref linkend="all-tool"> tool,
      <xref linkend="clean-tool"> tool, <xref linkend="clear-tool">,
      <xref linkend="edit-next-tool"> tool,
      <xref linkend="edit-file-next-tool"> tool,
      <xref linkend="print-tool">.
      </para>
    </listitem>
  </varlistentry>
  
  <varlistentry>
    <term>log window<anchor id="log-window" xreflabel="Log window"></term>
    <listitem>
      <anchor id="main-log-window" xreflabel="Log Window">
      <para>
      This window shows the output of &gmake;.
      As shown in the example, errors and warnings are highlighted;
      double-clicking on an error or warning will start an editor
      showing you the line in the source file which caused the
      error or warning.
      </para>
      <para>
      Errors and warnings are distinguished by both colors and icons.
      You can change the colors in the <xref linkend="colors-pane">.
      </para>
      <para>
      The presentation of text in the log window is controlled by
      various options in the <xref linkend="view-menu">.
      </para>
    </listitem>
  </varlistentry>
  
  <varlistentry>
    <term>status bar</term>
    <listitem>
      <anchor id="main-statusbar" xreflabel="Statusbar">
      <para>
      Messages from maketool itself (rather than &gmake;) are displayed here.
      </para>
    </listitem>
  </varlistentry>
  
  <varlistentry>
    <term>progress indicator</term>
    <listitem>
      <anchor id="main-progress" xreflabel="Progress Indicator">
      <para>
      When &gmake; is running, this area displays an animation of a
      brick wall building itself, to show you that something is happening.
      </para>
    </listitem>
  </varlistentry>
  
</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="ok" xreflabel="Ok Button">
<title>Ok Button</title>

<graphic format="GIF" fileref="ok.gif"></graphic>

<para>
Click this button to apply all the changes you have made to this
dialog window and close the window.
</para>

<para>
See also:
<xref linkend="apply">,
<xref linkend="cancel">
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="apply" xreflabel="Apply Button">
<title>Apply Button</title>

<graphic format="GIF" fileref="apply.gif"></graphic>

<para>
Click this button to apply all the changes you have made to this
dialog window, without closing the dialog window.
</para>

<para>
See also:
<xref linkend="ok">,
<xref linkend="cancel">
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="cancel" xreflabel="Cancel Button">
<title>Cancel Button</title>

<graphic format="GIF" fileref="cancel.gif"></graphic>

<para>
Click this button to discard all the changes you have made to this
dialog window and close the dialog.
</para>

<para>
See also:
<xref linkend="ok">,
<xref linkend="apply">
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="file-menu" xreflabel="File menu">
<title>File menu</title>

<graphic format="GIF" fileref="file-menu.gif"></graphic>

<variablelist>

  <varlistentry>
    <term><guibutton>Open Log...</guibutton></term>
    <listitem>
      <anchor id="file-open-log" xreflabel="Open Log">
      <para>
      Shows the <xref linkend="open-log-file-window"> which allows you
      to choose a filename of &gmake; output to be opened and displayed
      in maketool.  This file can be a file saved by the
      <guibutton>Save Log...</guibutton> menu item, or a file
      generated from the command line using a command like:
      </para>
<programlisting>
# If you use sh, ksh, bash
gmake some-target 2>&1 | tee <emphasis>make.log</emphasis>
#  ...or...
gmake some-target > <emphasis>make.log</emphasis> 2>&1
# If you use csh, tcsh
gmake some-target |& tee <emphasis>make.log</emphasis>
#  ...or...
gmake some-target >& <emphasis>make.log</emphasis>
</programlisting>
    <para>
    <!-- space out the listitem -->
    </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Save Log...</guibutton></term>
    <listitem>
      <anchor id="file-save-log" xreflabel="Save Log">
      <para>
      Shows the <xref linkend="save-log-file-window"> which allows you
      to choose a filename to which the text in the <xref linkend="log-window">
      will be saved.  The file will contain the raw text from all
      &gmake; runs, exactly as &gmake; emitted it.  The file can later be
      loaded into maketool again using the <guibutton>Open Log...</guibutton>
      menu item, or viewed in a text editor.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Change Directory...</guibutton></term>
    <listitem>
      <anchor id="file-change-directory" xreflabel="Change Directory">
      <para>
      Shows the <xref linkend="change-directory-window"> which allows you
      to choose a directory.  Maketool will make that directory it's
      current directory.  Maketool will then scan any Makefile present
      in the directory and show the targets defined by the Makefile
      in the <xref linkend="build-menu">.  Maketool will also detect
      what if any make system (see <xref linkend="make-systems">) is
      in use in that directory, and show menu items accordingly.  Finally,
      maketool will add the old directory to the
      <guibutton>Previous Directories</guibutton> menu.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Previous Directories</guibutton></term>
    <listitem>
      <anchor id="file-previous-directories" xreflabel="Previous Directories">
      <para>
      Lists the last directories in which maketool has been used.
      Select a directory, and maketool will change to that directory
      as if you had used the <guibutton>Change Directory...</guibutton>
      menu item.  The previous directories are saved along with
      maketool's preferences, and will be there next time you start
      maketool.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Edit Makefile...</guibutton></term>
    <listitem>
      <anchor id="file-edit-makefile" xreflabel="Edit Makefile">
      <para>
      Starts up an editor session editing the Makefile in the current
      directory.  If the current directory uses a system like
      <command>autoconf</command> or <command>Imake</command> to
      generate the Makefile from another source file, that other
      source file will be edited instead.
      </para>
      <para>
      The filenames checked by this menu item are (in order):
      </para>
      <itemizedlist>
	<listitem>
	  <para>
	  The filename, if any, specified by <xref linkend="general-makefile"> 
	  in the Preferences.
	  </para>
	</listitem>
      
	<listitem>
	  <para>
	  The filenames searched by the current make program.  For
	  &gmake;, these are:
	  </para>
	    <itemizedlist>
	      <listitem>
		<para>
		&GNUmakefile;
		</para>
	      </listitem>
	      <listitem>
		<para>
		&makefile;
		</para>
	      </listitem>
	      <listitem>
		<para>
		&Makefile;
		</para>
	      </listitem>
	    </itemizedlist>
	</listitem>
      </itemizedlist>
      <para>
      If no Makefile is present, or it's filename is
      &Makefile;, the following filenames are also checked (in order):
      </para>
      <itemizedlist>
	<listitem>
	  <para>
	  &Makefileam; (for <command>automake</command>)
	  </para>
	</listitem>
	<listitem>
	  <para>
	  &Makefilein; (for <command>autoconf</command>)
	  </para>
	</listitem>
	<listitem>
	  <para>
	  &Imakefile; (for <command>Imake</command>)
	  </para>
	</listitem>
      </itemizedlist>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Print...</guibutton></term>
    <listitem>
      <anchor id="file-print" xreflabel="Print">
      <para>
      Shows the <xref linkend="print-window"> to allow you to print
      the contents of the <xref linkend="log-window"> to a printer.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Exit</guibutton></term>
    <listitem>
      <anchor id="file-exit" xreflabel="Exit">
      <para>
      Quits maketool.
      </para>
      <para>
      Note that if you haven't saved the contents of the
      <xref linkend="log-window">, maketool will <emphasis>NOT</emphasis>
      ask you if you want to save.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="edit-menu" xreflabel="Edit menu">
<title>Edit menu</title>

<graphic format="GIF" fileref="edit-menu.gif"></graphic>

<variablelist>

  <varlistentry>
    <term><guibutton>Edit Error</guibutton></term>
    <listitem>
      <anchor id="edit-edit-error" xreflabel="Edit Error">
      <para>
      Starts an editor session editing the source file and line
      mentioned in the line currently selected in the
      <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Edit Next Error</guibutton></term>
    <listitem>
      <anchor id="edit-edit-next-error" xreflabel="Edit Next Error">
      <para>
      Searches forwards in the <xref linkend="log-window"> for the next
      error or warning message, starting at the currently selected
      line, and starts an editor session editing the source file and line
      mentioned in that line.
      </para>
      <para>
      If the <xref linkend="general-edit-next-ignores-warnings"> option is set,
      <guibutton>Edit Next Error</guibutton> will ignore warnings and
      only find errors.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Edit Prev Error</guibutton></term>
    <listitem>
      <anchor id="edit-edit-prev-error" xreflabel="Edit Prev Error">
      <para>
      Like <guibutton>Edit Next Error</guibutton> but searches backwards.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Edit Next File Error</guibutton></term>
    <listitem>
      <anchor id="edit-edit-next-file-error" xreflabel="Edit Next File Error">
      <para>
      Like <guibutton>Edit Next Error</guibutton> but first skips to
      the next source file.  This is useful when an error early in a
      source file confuses the compiler and generates many spurious errors.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Copy</guibutton></term>
    <listitem>
      <anchor id="edit-copy" xreflabel="Copy">
      <para>
      Copies the text of the currently selected line in the
      <xref linkend="log-window"> to the clipboard, from where it can
      be pasted into a text editor.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Find...</guibutton></term>
    <listitem>
      <anchor id="edit-find" xreflabel="Find">
      <para>
      Shows the <xref linkend="find-window"> which allows you to
      search the contents of the <xref linkend="log-window">.
      This menu item is available when there is text in the log
      window.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Find Again...</guibutton></term>
    <listitem>
      <anchor id="edit-find-again" xreflabel="Find Again">
      <para>
      Repeats the last search (from the <xref linkend="find-window">).
      This menu item is available once a search has been performed.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Preferences...</guibutton></term>
    <listitem>
      <anchor id="edit-preferences" xreflabel="Preferences">
      <para>
      Shows the <xref linkend="preferences-window"> which allows you
      to edit maketool's various options and parameters.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="build-menu" xreflabel="Build menu">
<title>Build menu</title>

<graphic format="GIF" fileref="build-menu.gif"></graphic>

<variablelist>

  <varlistentry>
    <term><guibutton>Again</guibutton></term>
    <listitem>
      <para>
      Runs &gmake; with the same target you used last time you ran
      &gmake; (from the <xref linkend="build-menu">, the
      <xref linkend="all-tool"> tool, or the <xref linkend="clean-tool"> tool).
      The target is shown in brackets.  This menu item is available when
      &gmake; has been run at least once.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Stop</guibutton></term>
    <listitem>
      <para>
      Stops a running &gmake;.  This menu item is only available while a
      &gmake; is running.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Pause/Resume</guibutton></term>
    <listitem>
      <para>
      <guibutton>Pause</guibutton> pauses a running &gmake;, and
      <guibutton>Resume</guibutton> resumes running a paused &gmake;.
      This menu item is only available while a &gmake; is running
      and paused respectively.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Dryrun Only</guibutton></term>
    <listitem>
      <para>
      While this checkbox is on, &gmake; does not perform any building, and
      instead only shows the commands it would use for building.  This is
      useful for debugging &Makefile;s.
      </para>
      <para>
      This option uses the <option>-n</option> flag to &gmake;.
      </para>
    </listitem>
  </varlistentry>
  
  <varlistentry>
    <term><guibutton>Makefile</guibutton></term>
    <listitem>
      <para>
      Updates the &Makefile; from whatever files are used to create it.
      This command only appears if the current directory uses a make
      system (see <xref linkend="make-systems">) to generate the &Makefile;.
      </para>
      <para>
      Maketool can also perform this update automatically every
      time a target is built; see the <xref linkend="general-enable-make-makefile">
      checkbox.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>make system commands</term>
    <listitem>
      <para>
      The section of the menu between the first and second separators
      shows commands related to the make system used in the current directory.
      See <xref linkend="make-systems"> for a description of
      each command.
      </para>
      <para>
      This section is updated when the current directory
      is changed using the <xref linkend="file-change-directory"> menu item.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>standard targets</term>
    <listitem>
      <para>
      The section of the menu between the second and third separators
      shows all the targets defined by the Makefile in the current
      directory, which are standard targets described by the GNU
      Makefile Standards.  Those targets, and their standard meanings
      are described in <xref linkend="standard-targets">.
      </para>
      <para>
      Selecting a target causes that target to be built using &gmake; and
      the output from &gmake; to be displayed in the <xref linkend="log-window">.
      </para>
      <para>
      This section is updated when the current directory is changed
      using the <xref linkend="file-change-directory"> menu item.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>non-standard targets</term>
    <listitem>
      <para>
      The section of the menu after the third separator
      shows all the targets defined by the Makefile in the current
      directory, except those which are standard targets,
      and except certain targets which maketool considers
      "internal" to the Makefile.
      </para>
      <para>
      Selecting a target causes that target to be built using &gmake; and
      the output from &gmake; to be displayed in the <xref linkend="log-window">.
      </para>
      <para>
      This section is updated when the current directory is changed
      using the <xref linkend="file-change-directory"> menu item.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="view-menu" xreflabel="View menu">
<title>View menu</title>

<graphic format="GIF" fileref="view-menu.gif"></graphic>

<variablelist>

  <varlistentry>
    <term><guibutton>Clear Log</guibutton></term>
    <listitem>
      <anchor id="view-clear-log" xreflabel="Clear Log">
      <para>
      Clears all text in the log window.  This menu item is
      available when there is text in the log window.  See
      <xref linkend="clear-tool">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Collapse All</guibutton></term>
    <listitem>
      <anchor id="view-collapse-all" xreflabel="Collapse All">
      <para>
      Collapses all the text in the log window so that only the top
      level entries (i.e. &gmake; runs and loaded log files) are
      visible.  This menu item is available when there is text in
      the log window.  
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Toolbar</guibutton></term>
    <listitem>
      <anchor id="view-toolbar" xreflabel="Toolbar">
      <para>
      Controls whether the <xref linkend="main-toolbar"> is visible.
      Hiding the toolbar reduces the amount of screen space maketool
      needs.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Statusbar</guibutton></term>
    <listitem>
      <anchor id="view-statusbar" xreflabel="Statusbar">
      <para>
      Controls whether the <xref linkend="main-statusbar"> is visible.
      Hiding the statusbar reduces the amount of screen space maketool
      needs.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Errors</guibutton></term>
    <listitem>
      <anchor id="view-errors" xreflabel="Errors">
      <para>
      Controls whether lines of text which are classified as errors
      by the filtering engine, are visible in the log window.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Warnings</guibutton></term>
    <listitem>
      <anchor id="view-warnings" xreflabel="Warnings">
      <para>
      Controls whether lines of text which are classified as warnings
      by the filtering engine, are visible in the log window.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Information</guibutton></term>
    <listitem>
      <anchor id="view-information" xreflabel="Information">
      <para>
      Controls whether lines of text which are classified as information
      (i.e. all lines which are not classified as errors or warnings,
      and do not have summaries like compile lines) by the filtering
      engine, are visible in the log window.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Summary</guibutton></term>
    <listitem>
      <anchor id="view-summary" xreflabel="Summary">
      <para>
      Controls whether lines of text which are not classified as warnings
      or error but have short summaries (e.g. "Compiling fred.c") generated
      by the filtering engine, are visible in the log window.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Indent Directories</guibutton></term>
    <listitem>
      <anchor id="view-indent-directories" xreflabel="Indent Directories">
      <para>
      If this checkbox is on, the text of recursive multiple-directory
      &gmake; runs in the log window is indented according
      to depth in the directory structure.  Each directory is accompanied
      by a collapse/expand button so that entire sub-trees can be
      conveniently hidden with the click of a button.  See the
      <xref linkend="view-collapse-all"> menu item.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="help-menu" xreflabel="Help menu">
<title>Help menu</title>

<graphic format="GIF" fileref="help-menu.gif"></graphic>

<variablelist>

  <varlistentry>
    <term><guibutton>About Maketool...</guibutton></term>
    <listitem>
      <anchor id="help-about-maketool" xreflabel="About Maketool">
      <para>
      Shows the <xref linkend="about-maketool-window">, which contains
      copyright, licence, and version information about maketool.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>About GNU make...</guibutton></term>
    <listitem>
      <anchor id="help-about-make" xreflabel="About GNU make">
      <para>
      Shows the <xref linkend="about-make-window">, which shows
      copyright, licence, and version information about the &gmake;
      program.  Note that if a different make program is selected
      in the <xref linkend="programs-make"> entry of the Preferences,
      this menu item will reflect the name of that make program, e.g.
      <guibutton>About BSD 4.4 pmake</guibutton>.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Help on...</guibutton></term>
    <listitem>
      <anchor id="help-help-on" xreflabel="Help on">
      <para>
      Allows you to interactively pick a component of the maketool
      user interface and see the help text for that component.  When
      the menu item is selected, the cursor changes to a question
      mark (<guibutton>?</guibutton>); move the cursor over any
      component of the maketool user interface and click.  The help
      text for that component will be displayed in the help browser.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Table of Contents...</guibutton></term>
    <listitem>
      <anchor id="help-table-of-contents" xreflabel="Table of Contents">
      <para>
      Shows the maketool help Table of Contents in the help browser.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Web Page...</guibutton></term>
    <listitem>
      <anchor id="help-web-page" xreflabel="Web Page">
      <para>
      Shows the maketool web page in the help browser.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="again-tool" xreflabel="Again tool">
<title>Again tool</title>

<graphic format="GIF" fileref="tools-again.gif"></graphic>

<para>
Click this tool to run &gmake; with the same target you used last
time you ran &gmake; (from the <xref linkend="build-menu">, the
<xref linkend="all-tool"> tool, or the <xref linkend="clean-tool"> tool).
The tooltip shows you which target this will be.
</para>

<para>
This tool becomes available once you have started at least
one &gmake; run.
</para>

<para>
See also:
<xref linkend="all-tool"> tool,
<xref linkend="clean-tool"> tool,
<xref linkend="pause-tool"> tool
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="stop-tool" xreflabel="Stop tool">
<title>Stop tool</title>

<graphic format="GIF" fileref="tools-stop.gif"></graphic>

<para>
Click this tool to stop the current &gmake; run.
</para>

<para>
This tool becomes available only during a &gmake; run.
</para>

<para>
See also:
<xref linkend="all-tool"> tool,
<xref linkend="clean-tool"> tool,
<xref linkend="pause-tool"> tool
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="pause-tool" xreflabel="Pause tool">
<title>Pause tool</title>

<graphic format="GIF" fileref="tools-pause.gif"></graphic>

<para>
Click this tool to pause the current &gmake; run.  Click
it again to resume the run.  This is useful for stopping
the build temporarily e.g. while you do something else in
a shell window.
</para>

<para>
This tool becomes available only during a &gmake; run.
</para>

<para>
See also:
<xref linkend="again-tool"> tool,
<xref linkend="stop-tool"> tool
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="all-tool" xreflabel="Build All">
<title>Build All tool</title>

<graphic format="GIF" fileref="tools-all.gif"></graphic>

<para>
Click this tool to run &gmake; with the target <varname>all</varname>.
Makefiles which adhere to GNU Makefile standards will compile and link
all programs and libraries (but not necessarily any documentation).
</para>

<para>
This tool becomes available if the &Makefile; in the current directory
defines an <varname>all</varname> target.  Like all build tools and
menu items, it becomes unavailable while &gmake; is running.
</para>

<para>
See also:
<xref linkend="clean-tool"> tool.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="clean-tool" xreflabel="Clean">
<title>Clean tool</title>

<graphic format="GIF" fileref="tools-clean.gif"></graphic>

<para>
Click this tool to run &gmake; with the target <varname>clean</varname>.
Makefiles which adhere to GNU Makefile standards will delete all
files which are normally created by building, such as programs,
libraries, and object files, but not files which record the
 configuration.
</para>

<para>
Use this to force a complete rebuild after changing the
configuration, or after setting variables like
<varname>CFLAGS</varname> or <varname>CC</varname>
in the <xref linkend="variables-pane">.
</para>

<para>
This tool becomes available if the &Makefile; in the current directory
defines a <varname>clean</varname> target.  Like all build tools and
menu items, it becomes unavailable while &gmake; is running.
</para>

<para>
See also:
<xref linkend="all-tool"> tool
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="clear-tool" xreflabel="Clear Log tool">
<title>Clear Log tool</title>

<graphic format="GIF" fileref="tools-clear.gif"></graphic>

<para>
Click this tool to delete all text in the log window.
</para>

<para>
This toolbar button becomes available when the log window contains text.
</para>

<para>
See the <xref linkend="view-clear-log"> menu item.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="edit-next-tool" xreflabel="Edit Next Error">
<title>Edit Next Error tool</title>

<graphic format="GIF" fileref="tools-edit-next.gif"></graphic>

<para>
Click this tool to edit the next error or warning after the
currently selected line in the log window.  If the <guilabel>Edit Next
ignores warnings</guilabel> toggle in the <guilabel>Preferences</guilabel>
window is set, this button will skip over warnings and only find errors.
</para>

<para>
This tool becomes available when the log window contains text.
</para>

<para>
See also:
<xref linkend="edit-file-next-tool">
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="edit-file-next-tool" xreflabel="Edit File Next Error">
<title>Edit File Next Error tool</title>

<graphic format="GIF" fileref="tools-edit-file-next.gif"></graphic>

<para>
Click this tool to edit the next error or warning after the
currently selected line in the log window.  Unlike the
<xref linkend="edit-next-tool"> tool, this tool first skips all errors
and warnings in the same file (compilation unit) as the selected
line.  This is useful when an error early in the file confuses
the compiler.  If the <xref linkend="general-edit-next-ignores-warnings">
option is set, this tool will skip over warnings and only find errors.
</para>

<para>
This tool becomes available when the log window contains text.
</para>

<para>
See also:
<xref linkend="edit-next-tool"> tool.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="print-tool" xreflabel="Print tool">
<title>Print tool</title>

<graphic format="GIF" fileref="tools-print.gif"></graphic>

<para>
Click this tool to pop up the <xref linkend="print-window">
which you can use to print the text in the log window.
</para>

<para>
This tool becomes available when the log window contains text.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="open-log-file-window" xreflabel="Open Log File window">
<title>Open Log File window</title>

<graphic format="GIF" fileref="open-log-file-window.gif"></graphic>

<para>
This window is shown when you select the <xref linkend="file-open-log">
menu item, and allows you to choose a file to be loaded into the log
window.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="save-log-file-window" xreflabel="Save Log File window">
<title>Save Log File window</title>


<graphic format="GIF" fileref="save-log-file-window.gif"></graphic>

<para>
This window is shown when you select the <xref linkend="file-save-log">
menu item, and allows you to choose a filename to which the contents
of the log window will be saved.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="change-directory-window" xreflabel="Change Directory window">
<title>Change Directory window</title>


<graphic format="GIF" fileref="change-directory-window.gif"></graphic>

<para>
This window is shown when you select the <xref linkend="file-change-directory">
menu item, and allows you to choose a directory.  Maketool will make that
directory its working directory and update the <xref linkend="build-menu">
to reflect the targets in that directory's Makefile.  See the
<xref linkend="file-previous-directories"> menu.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="print-window" xreflabel="Print window">
<title>Print window</title>


<graphic format="GIF" fileref="print-window.gif"></graphic>

<para>
This window is shown when you select the <xref linkend="file-print">
menu item, and allows you to send the contents of the log window
to a printer.
</para>

<variablelist>

  <varlistentry>
    <term><guibutton>Print to printer</guibutton></term>
    <listitem>
      <para>
      If this checkbox is selected, the print output will be sent to
      the printer currently selected in the adjacent combo box.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Print to file</guibutton></term>
    <listitem>
      <para>
      If this checkbox is selected, the print output will be sent to
      the filename currently selected in the adjacent combo box.
      Click the <guibutton>Browse</guibutton> button to choose a
      new filename.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>&OK;</term>
    <listitem>
      <para>
      Click &OK; to generate the print output and
      send it to the currently selected destination.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Page Setup...</guibutton></term>
    <listitem>
      <para>
      Click <guibutton>Page Setup...</guibutton> to show the
      <xref linkend="page-setup-pane"> of the Preferences.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>&Cancel;</term>
    <listitem>
      <para>
      Click &Cancel; to close the Print window without generating
      any print output.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="find-window" xreflabel="Find window">
<title>Find window</title>


<graphic format="GIF" fileref="find-window.gif"></graphic>

<para>
This window is shown when you select the <xref linkend="edit-find"> menu
item, and allows you to search for words or regular expressions in
the text in the log window.
</para>

<variablelist>

  <varlistentry>
    <term><guibutton>Search for:</guibutton></term>
    <listitem>
      <para>
      Enter the string or regular expression you want to search for,
      in this text field.
      </para>
      <para>
      You can use the PageUp key on the keyboard to recall the last
      string you searched for; use the PageUp and PageDown keys to
      move through the history of all previous search strings.  Press
      the Return key on the keyboard to perform the search.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Literal</guibutton></term>
    <listitem>
      <para>
      Select this checkbox if you want the string in the
      <guibutton>Search for</guibutton> text field to be 
      interpreted as a plain string, i.e. regular expression
      metacharacters are not significant.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Regular Expression</guibutton></term>
    <listitem>
      <para>
      Select this checkbox if you want the string in the
      <guibutton>Search for</guibutton> text field to be 
      interpreted as a regular expression, i.e. regular expression
      metacharacters are significant. See the system
      manual page regex(7) for details of regular expression
      syntax.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Search Forwards</guibutton></term>
    <listitem>
      <para>
      Select this checkbox if you want maketool to search for
      the search string starting at the currently selected line
      in the log window and moving forwards (towards the end of
      the log window).
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Search Backwards</guibutton></term>
    <listitem>
      <para>
      Select this checkbox if you want maketool to search for
      the search string starting at the currently selected line
      in the log window and moving backwards (towards the start
      of the log window).
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Wrap</guibutton></term>
    <listitem>
      <para>
      Select this checkbox if you want maketool to continue searching
      from the start of the log window when it reaches the end without
      finding a matching line (or, if the <guibutton>Search
      Backwards</guibutton> checkbox is on, continue from the end when
      it reaches the start without finding a matching line).
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Find</guibutton></term>
    <listitem>
      <para>
      Click <guibutton>Find</guibutton> to perform the search.  If maketool
      can find a line in the log window matching the parameters in the
      Find window, it will select that line, otherwise it will beep and
      show the message "Pattern not found" in the statusbar.
      </para>
      <para>
      Once you have performed a search, you can repeat the search without
      opening the Find window by using the <xref linkend="edit-find-again">
      menu item.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Close</guibutton></term>
    <listitem>
      <para>
      Click <guibutton>Close</guibutton> to close the Find window.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="preferences-window" xreflabel="Preferences window">
<title>Preferences window</title>

<para>
This window allows you to set preferences which control various
aspects of maketool's operation.  All the preferences are saved
in the file <filename>$HOME/.maketoolrc</filename> when you press
the &OK; button and at certain other times.
</para>

<para>
The Preferences window is divided into several panes:
</para>

<itemizedlist>
  <listitem>
    <para>
    <xref linkend="general-pane">
    </para>
  </listitem>
  <listitem>
    <para>
    <xref linkend="variables-pane">
    </para>
  </listitem>
  <listitem>
    <para>
    <xref linkend="programs-pane">
    </para>
  </listitem>
  <listitem>
    <para>
    <xref linkend="colors-pane">
    </para>
  </listitem>
  <listitem>
    <para>
    <xref linkend="page-setup-pane">
    </para>
  </listitem>
</itemizedlist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="general-pane" xreflabel="General pane">
<title>General pane</title>

<graphic format="GIF" fileref="general-pane.gif"></graphic>

<para>
This pane is part of the <xref linkend="preferences-window"> which
is shown when you select the <xref linkend="edit-preferences"> menu item.
</para>

<variablelist>

  <varlistentry>
    <term><guibutton>Make runs commands</guibutton></term>
    <listitem>
      <anchor id="general-parallelism" xreflabel="Make runs commands">
      <para>
      This area controls the way in which &gmake;
      runs the commands specified in the Makefile to build targets.
      </para>

      <itemizedlist>
	<listitem>
	  <para>
	  in series: commands are run one at a time, one after the other.
	  </para>
	</listitem>
	<listitem>
	  <para>
	  in parallel, with a limit on the number of processes
	  (commands) run at the same time.  Equivalent to using
	  the <option>-j</option> option to &gmake;.
	  </para>
	</listitem>
	<listitem>
	  <para>
	  in parallel, with a limit on the machine load (number of
	  commands which can execute at any time).  Equivalent to
	  using the <option>-l</option> option to &gmake;.
	  </para>
	</listitem>
      </itemizedlist>

    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Automatically edit first error</guibutton></term>
    <listitem>
      <anchor id="general-auto-edit-error"
      	  xreflabel="Automatically edit first error">
      <para>
      If this checkbox is on, maketool will automatically open a text
      editor on the filename and line number mentioned in the first
      error message in a &gmake; run, as soon as the error message is
      added to the log window.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Edit Next ignores warnings</guibutton></term>
    <listitem>
      <anchor id="general-edit-next-ignores-warnings"
      	  xreflabel="Edit Next ignores warnings">
      <para>
      If this checkbox is on, maketool will skip warning messages
      and only select error messages when you use the
      <xref linkend="edit-edit-next-error">, 
      <xref linkend="edit-edit-prev-error">, or
      <xref linkend="edit-edit-next-file-error"> menu items, or the
      <xref linkend="edit-next-tool"> or
      <xref linkend="edit-file-next-tool"> tools.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Continue despite failures</guibutton></term>
    <listitem>
      <anchor id="general-continue-despite-failures"
      	  xreflabel="Continue despite failures">
      <para>
      If this checkbox is on, &gmake; will continue building targets
      after a target fails to be built.  The normal behaviour of &gmake;
      is to stop when the first target fails.  Equivalent to using the
      <option>-k</option> option to &gmake;.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Build Makefile from Imakefile or Makefile.in</guibutton></term>
    <listitem>
      <anchor id="general-enable-make-makefile"
	  xreflabel="Build Makefile from Imakefile or Makefile.in">
      <para>
      If this checkbox is on, maketool will attempt to rebuild the Makefile
      in the working directory from a &Makefileam;, &Makefilein; or
      &Imakefile; file, every time a target is built.  See
      <xref linkend="make-systems"> for more information.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Scroll to end on output</guibutton></term>
    <listitem>
      <anchor id="general-scroll-on-output"
      	  xreflabel="Scroll to end on output">
      <para>
      If this checkbox is on, maketool will scroll to the end of the log
      window every time new text is added to the end of the log window.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>On starting each build:</guibutton></term>
    <listitem>
      <anchor id="general-start-build-action"
      	  xreflabel="On starting each build">
      <para>
      This combobox allows you to specify an action which maketool
      will perform just before starting each &gmake;
      run.
      </para>

      <itemizedlist>
	<listitem>
	  <para>
	  Do nothing: maketool does not do anything special before each build.
	  </para>
	</listitem>
	<listitem>
	  <para>
	  Clear log: maketool clears all text from the log window before
	  each build (as if you had used the <xref linkend="view-clear-log">
	  menu item).
	  </para>
	</listitem>
	<listitem>
	  <para>
	  Collapse all log items: maketool collapses all the indented text
	  in the log window (as if you had used the
	  <xref linkend="view-collapse-all"> menu item).
	  </para>
	</listitem>
      </itemizedlist>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>On finishing each build:</guibutton></term>
    <listitem>
      <anchor id="general-finish-build-action"
      	  xreflabel="On finishing each build">
      <para>
      This combobox allows you to specify an action which maketool
      will perform just after finishing each &gmake;
      run.
      </para>

      <itemizedlist>
	<listitem>
	  <para>
	  Do nothing: maketool does not do anything special after each build.
	  </para>
	</listitem>
	<listitem>
	  <para>
	  Beep: maketool emits a beep after each build.
	  </para>
	</listitem>
	<listitem>
	  <para>
	  Run command: maketool runs the command in the adjacent text field
	  after each build, using all the maketool
	  <xref linkend="percent-escapes"> and environment variable overrides.
	  Maketool does not show the output of this command, wait for
	  its completion, or take any notice of its exit code.
	  </para>
	  <para>
	  Typically, you would use this command to notify yourself that a
	  build has finished.
	  </para>
	</listitem>
	<listitem>
	  <para>
	  Show dialog: maketool shows a dialog (shown below) after each
	  build, which describes the target built and how many errors and
	  warnings were found.
	  </para>
      	  <graphic format="GIF" fileref="finished-dialog.gif"></graphic>
	  <para>
	  This is useful when your window manager provides multiple virtual
	  desktops; you can start a build, change to another virtual
	  desktop, and be notified when the build finishes.
	  <footnote>
	    <para>
	    You may need to configure your window manager to show
	    dialogs on the current virtual desktop instead of with the 
	    parent application.
	    </para>
	  </footnote>
	  </para>
	</listitem>
      </itemizedlist>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Makefile:</guibutton></term>
    <listitem>
      <anchor id="general-makefile" xreflabel="Makefile">
      <para>
      This combobox can be used to force &gmake; to use a different
      filename than the default for the Makefile (equivalent to the
      <option>-f</option> option).  You can select one of the standard
      filenames in the menu, or type in any filename, or click the
      <guibutton>Browse</guibutton> button to choose a filename.
      </para>
      <para>
      If you enter an absolute pathname (i.e. one that begins with
      the root directory, such as <filename>/usr/foo/bar/Makefile</filename>),
      that one Makefile will be used regardless of maketool's working
      directory.  This is probably not what you want, as most Makefiles
      are not written to be used like that.
      </para>
      <para>
      Normally you do not need to use the <guibutton>Makefile</guibutton>
      combobox, as &gmake; will figure out which Makefile to use by itself.
      Use the combobox only when you need to force &gmake; to use a
      non-standard filename for the Makefile.  For example, when testing
      new Makefile features a name of <filename>Makefile.test</filename>
      would be useful.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="variables-pane" xreflabel="Variables pane">
<title>Variables pane</title>


<graphic format="GIF" fileref="variables-pane.gif"></graphic>

<para>
This pane is part of the <xref linkend="preferences-window"> which
is shown when you select the <xref linkend="edit-preferences"> menu item.
It allows you to set up &gmake; variable overrides which are used
every time you build a target.
</para>

<para>
The main scrolling list shows the current set of variable overrides,
with their name, value, and type.  The other items on this pane allow
you to add, change and remove from this set.  Clicking the
&OK; button accepts the variable overrides so that they will apply
to the next &gmake; run
<footnote>
  <para>
  Variable overrides are currently not saved in the preferences file, so
  you have to enter them every time you start maketool.
  </para>
</footnote>
.
</para>


<para>
Maketool supports overriding &gmake; variables in two different ways,
shown in the scrolling list as the `Type' of the variable override.
</para>
<variablelist>

  <varlistentry>
    <term>Make</term>
    <listitem>
      <para>
      Variable overrides of this type are passed the &gmake; on the
      commandline as a sequence of arguments of the form
      <option>NAME='VALUE'</option>.  The %v escape sequence in
      maketool commands is replaced with this sequence of options
      (see <xref linkend="percent-escapes"> for other sequences).
      </para>
      <para>
      Note that the behaviour of the Make type variable overrides
      with recursive builds depends on which make program is selected
      in the <xref linkend="programs-make"> field in the Preferences;
      &gmake; will pass down the overrides to child makes and subdirectories,
      many other make programs do not.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>Environ</term>
    <listitem>
      <para>
      Variable overrides of this type are passed to &gmake; in the
      process environment, as if you had used the shell
      <command>export</command> (sh, ksh, bash) or
      <command>setenv</command> (csh, tcsh) commands.
      </para>
      <para>
      Note that the behaviour of variables set in the environment depends
      on which make program is selected in the <xref linkend="programs-make">
      field in the Preferences, and how the Makefile is written.  The value
      you specify may well be ignored.
      </para>
      <para>
      Environ type variables are useful for passing variables to
      autoconf &configure; scripts, particularly the <varname>CC</varname>
      and <varname>CFLAGS</varname> variables.
      </para>
    </listitem>
  </varlistentry>

</variablelist>


<para>
To add a new variable override:
</para>
<itemizedlist>
  <listitem>
    <para>
    enter a name in the <guibutton>Name</guibutton> text field, 
    </para>
  </listitem>
  <listitem>
    <para>
    enter a value in the <guibutton>Value</guibutton> text field, 
    </para>
  </listitem>
  <listitem>
    <para>
    choose a type from the <guibutton>Type</guibutton> combobox, and
    </para>
  </listitem>
  <listitem>
    <para>
    click <guibutton>Set</guibutton> to add the new variable override
    to the scrolling list.
    </para>
  </listitem>
  <listitem>
    <para>
    click &OK; to accept the set of variable overrides in the scrolling list.
    </para>
  </listitem>
</itemizedlist>


<para>
To change an existing variable override:
</para>
<itemizedlist>
  <listitem>
    <para>
    select a variable override in the scrolling list,
    </para>
  </listitem>
  <listitem>
    <para>
    change the value in the <guibutton>Value</guibutton>
    text field or the type in the <guibutton>Type</guibutton> combobox. 
    </para>
  </listitem>
  <listitem>
    <para>
    click <guibutton>Set</guibutton> to change the variable override.
    </para>
  </listitem>
  <listitem>
    <para>
    click &OK; to accept the set of variable overrides in the scrolling list.
    </para>
  </listitem>
</itemizedlist>


<para>
To remove a variable override:
</para>
<itemizedlist>
  <listitem>
    <para>
    select a variable override in the scrolling list,
    </para>
  </listitem>
  <listitem>
    <para>
    click <guibutton>Unset</guibutton> to remove the variable override.
    </para>
  </listitem>
  <listitem>
    <para>
    click &OK; to accept the set of variable overrides in the scrolling list.
    </para>
  </listitem>
</itemizedlist>


<para>
The controls on this pane are described in detail below.
</para>
<variablelist>

  <varlistentry>
    <term><guibutton>Name</guibutton></term>
    <listitem>
      <para>
      This text field shows the name of the currently selected variable
      override and allows you to enter names of new variable overrides.
      Names must obey the same rules as &gmake; variable names (see the
      &gmake; documentation).
      </para>
      <para>
      In addition to the normal TAB key for moving between fields in
      a window, you can use the equals (=) key to advance to the
      <guibutton>Value</guibutton> text field.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Value</guibutton></term>
    <listitem>
      <para>
      This text field shows the value of the currently selected variable
      override and allows you to enter values of new variable overrides.
      Values can be any string and may include whitespace
      <footnote>
	<para>
	There is currently no way you can enter TAB or newline characters in
	<guibutton>Value</guibutton> text field.
	</para>
      </footnote>
      and shell metacharacters (although see <xref linkend="metacharacters">
      for pitfalls with metacharacters).  Maketool will quote the string
      if necessary before passing it to a shell.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Type</guibutton></term>
    <listitem>
      <para>
      This combobox shows the type of the currently selected variable
      override and allows you to choose types of new variable overrides.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Set</guibutton></term>
    <listitem>
      <para>
      Click <guibutton>Set</guibutton> to add the name, value and type
      combination currently in the <guibutton>Name</guibutton>,
      <guibutton>Value</guibutton> and <guibutton>Type</guibutton> fields
      into the scrolling list.  Note that you need to click the
      &OK; or &Apply; buttons before the variable override will be used
      in the next &gmake; run.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Unset</guibutton></term>
    <listitem>
      <para>
      Click <guibutton>Unset</guibutton> to remove the variable override
      corresponding to the name currently in the <guibutton>Name</guibutton>
      text field from the scrolling list.  Note that you need to click the
      &OK; or &Apply; button before the variable override will be removed
      from the next &gmake; run.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="programs-pane" xreflabel="Programs pane">
<title>Programs pane</title>


<graphic format="GIF" fileref="programs-pane.gif"></graphic>

<para>
This pane is part of the <xref linkend="preferences-window"> which
is shown when you select the <xref linkend="edit-preferences"> menu item.
It allows you to control the way in which maketool runs programs to do
various tasks.
</para>


<variablelist>

  <varlistentry>
    <term><guibutton>Make Program:</guibutton></term>
    <listitem>
      <anchor id="programs-make" xreflabel="Make Program">
      <para>
      This combobox allows you to choose which make program will be used
      to build targets.  Maketool knows about several make programs
      including GNU &gmake;, BSD 4.4 <command>pmake</command>,
      Solaris <command>make</command> and IRIX <command>smake</command>.
      For each make program, maketool knows the commandline
      options and other features of the make program necessary to
      implement maketool features; many of the <xref linkend="percent-escapes">
      used to construct commands depend on the value of this combobox.
      </para>
      <para>
      This combobox appeared in maketool version 0.8; before that maketool
      could only be used with &gmake;.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Make a target:</guibutton></term>
    <listitem>
      <anchor id="programs-make-target" xreflabel="Make a target">
      <para>
      The string in this text field is expanded (see
      <xref linkend="percent-escapes">) and run when you start
      building a target, e.g. <varname>all</varname>, from the
      <xref linkend="build-menu"> menu or the <xref linkend="all-tool">
      or <xref linkend="clean-tool"> tools.  The expanded command is
      appended to the log window as a new top-level indented item; the
      command's output is filtered for errors and warnings and appended
      to the log window.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>List make targets:</guibutton></term>
    <listitem>
      <anchor id="programs-list-targets" xreflabel="List make targets">
      <para>
      The string in this text field is expanded (see
      <xref linkend="percent-escapes">) and run when maketool
      starts and every time maketool changes working directory
      (i.e. you use the <xref linkend="file-change-directory">
      menu item or the <xref linkend="file-previous-directories">
      menu).  The command's output is filtered to extract the
      set of targets defined by the &Makefile;, in a way which
      depends on the make program selected in the
      <guibutton>Make Program:</guibutton> combobox.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>List make version:</guibutton></term>
    <listitem>
      <anchor id="programs-list-version" xreflabel="List make version">
      <para>
      The string in this text field is expanded (see
      <xref linkend="percent-escapes">) and run the first time you
      open the <xref linkend="about-make-window">.  The command's
      output is displayed in the About Make window.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Edit source files:</guibutton></term>
    <listitem>
      <anchor id="programs-edit" xreflabel="Edit source files">
      <para>
      The string in this text field is expanded (see
      <xref linkend="percent-escapes">) and run every time you edit
      a source file (using the <xref linkend="edit-edit-error">,
      <xref linkend="edit-edit-next-error">,
      <xref linkend="edit-edit-next-file-error">, or
      <xref linkend="edit-edit-prev-error"> menu items, the
      <xref linkend="edit-next-tool"> or 
      <xref linkend="edit-file-next-tool"> tools, or double-clicking
      on an error or warning in the log window.  Maketool discards
      the command's output and does not wait for the command to
      finish or check the command's exit code.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Build makefile:</guibutton></term>
    <listitem>
      <anchor id="programs-make-makefile" xreflabel="Build makefile">
      <para>
      If the <xref linkend="general-enable-make-makefile"> checkbox in
      the Preferences is on, the string in this text field is expanded (see
      <xref linkend="percent-escapes">) and run just before you start
      building a target, e.g. <varname>all</varname>, from the
      <xref linkend="build-menu"> menu or the <xref linkend="all-tool">
      or <xref linkend="clean-tool"> tools.  The expanded command is
      appended to the log window as a new top-level indented item; the
      command's output is filtered for errors and warnings and appended
      to the log window.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Help browser:</guibutton></term>
    <listitem>
      <anchor id="programs-help-browser" xreflabel="Help browser:">
      <para>
      This text field specifies the command run when maketool's
      help text or web page is viewed.  The program must be capable
      of displaying HTML text and resolving <filename>file:</filename>
      and <filename>http:</filename> URLs.  The only percent escape
      (see <xref linkend="percent-escapes">) expanded is <option>%u</option>.
      Maketool discards the command's output and does not wait for the
      command to finish or check the command's exit code.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="colors-pane" xreflabel="Colors pane">
<title>Colors pane</title>


<graphic format="GIF" fileref="colors-pane.gif"></graphic>

<para>
This pane is part of the <xref linkend="preferences-window"> which
is shown when you select the <xref linkend="edit-preferences"> menu item.
It allows you to control the colours used to show errors, warnings,
and summarised lines in the log window.
</para>

<para>
The colours are organised by the error severity: information, warning,
error, and summary.  For each of these there are a pair of colours,
background and foreground.  Each colour has two controls:
</para>

<itemizedlist>
  <listitem>
    <anchor id="colors-text-field" xreflabel="Colors text field">
    <para>
    A text field which shows the hexadecimal value of the colour.
    You can type hexadecimal colours directly into this field.
    If the text field is empty, the default foreground or background
    of the GTK theme will be used.
    </para>
  </listitem>
  <listitem>
    <para>
    <anchor id="colors-choose" xreflabel="Colors Choose button">
    A <guibutton>Choose...</guibutton> button which when clicked
    pops up a standard GTK colour selection dialog.  Pressing
    <guibutton>OK</guibutton> in that dialog writes the hexadecimal
    value of the currently selected colour into the text field.
    </para>
  </listitem>
</itemizedlist>

<para>
The Colours pane also contains a Sample area which shows you how
the currently selected areas will appear in the log window, and
these buttons:
</para>

<variablelist>

  <varlistentry>
    <term><guibutton>Reset to Old</guibutton></term>
    <listitem>
      <anchor id="colors-reset-to-old" xreflabel="Reset to Old">
      <para>
      Click this button to reset the colours to the colours which
      were in force when the Preferences were last saved.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Reset to Defaults</guibutton></term>
    <listitem>
      <anchor id="colors-reset-to-defaults" xreflabel="Reset to Defaults">
      <para>
      Click this button to reset the colours to the compiled-in
      default colours.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="page-setup-pane" xreflabel="Page Setup pane">
<title>Page Setup pane</title>

<graphic format="GIF" fileref="page-setup-pane.gif"></graphic>

<para>
This pane is part of the <xref linkend="preferences-window"> which
is shown when you select the <xref linkend="edit-preferences"> menu item.
It is used to configure the page geometry in printed output generated by
the <xref linkend="print-window">.
</para>

<variablelist>

  <varlistentry>
    <term><guibutton>Name:</guibutton></term>
    <listitem>
      <anchor id="page-setup-paper-name" xreflabel="Paper Size Name">
      <para>
      This combobox is used to select one of several international
      standard paper sizes, or <guibutton>Custom</guibutton> which
      allows any paper size to be used.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Name:</guibutton></term>
    <listitem>
      <anchor id="page-setup-paper-orientation" xreflabel="Paper Size Orientation">
      <para>
      This combobox is used to select landscape or portrait orientation.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Name:</guibutton></term>
    <listitem>
      <anchor id="page-setup-paper-width" xreflabel="Paper Size Width">
      <para>
      The text box shows the paper width in millimetres, or for
      <guibutton>Custom</guibutton> paper, allows you to enter a
      custom paper width.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Name:</guibutton></term>
    <listitem>
      <anchor id="page-setup-paper-height" xreflabel="Paper Size Height">
      <para>
      The text box shows the paper height in millimetres, or for
      <guibutton>Custom</guibutton> paper, allows you to enter a
      custom paper height.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Left:</guibutton></term>
    <listitem>
      <anchor id="page-setup-margins-left" xreflabel="Mergins Left">
      <para>
      This text field allows you to specify the left margin used
      for printed output, in millimetres.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Name:</guibutton></term>
    <listitem>
      <anchor id="page-setup-margins-right" xreflabel="Margins Right">
      <para>
      This text field allows you to specify the right margin used
      for printed output, in millimetres.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Name:</guibutton></term>
    <listitem>
      <anchor id="page-setup-margins-top" xreflabel="Margins Top">
      <para>
      This text field allows you to specify the top margin used
      for printed output, in millimetres.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Name:</guibutton></term>
    <listitem>
      <anchor id="page-setup-margins-bottom" xreflabel="Margins Bottom">
      <para>
      This text field allows you to specify the bottom margin used
      for printed output, in millimetres.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="configure-window" xreflabel="Configure Options window">
<title>Configure Options window</title>

<graphic format="GIF" fileref="configure-window-basic.gif"></graphic>

<para>
This window allows you to choose among the various configuration
options provided by the <xref linkend="autoconf"> &configure;
script in the current directory.
</para>

<para>
This window can be opened automatically when the &Makefile;
is being updated (if the <xref linkend="general-enable-make-makefile"> checkbox
is on), or manually by selecting <guibutton>Makefile</guibutton>
or <guibutton>Run configure...</guibutton> from the <xref linkend="build-menu">.
See <xref linkend="make-systems"> for more information.
</para>

<para>
When the window is opened, the options you chose the last time
are the default values.
  <footnote>
    <para>
    An exception is the <guibutton>Do not create output files</guibutton>
    option, which for obvious reasons is not saved in
    <filename>config.status</filename>.
    </para>
  </footnote>
This information is read from the <filename>config.status</filename>
file, so it will be used even if you have never used maketool in this
directory before.
</para>

<para>
The window has two modes, <emphasis>Basic</emphasis> (the default)
and <emphasis>Advanced</emphasis>.  The <guibutton>Advanced...</guibutton>
button toggles between these two modes.
</para>

<section>
<title>Basic mode</title>

<para>
In Basic mode, the window has the following panes:
</para>

<variablelist>

  <varlistentry>
    <term><guibutton>Directory and file names</guibutton></term>
    <listitem>
      <para>
      Contains options related to directories and filenames
      used by the software package.  In Basic mode the only
      option is <guibutton>Install architecture-independent
      files in PREFIX</guibutton>, which specifies the
      directory under which all the software project's files
      will be installed (e.g. <filename>/usr/local</filename>).
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Features and packages</guibutton></term>
    <listitem>
      <para>
      Contains options which control user-selectable features of the
      &configure; script.  The exact contents depend on the particular
      script, and this may pane may not even be present if &configure;
      is particularly simple.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Preview</guibutton></term>
    <listitem>
      <para>
      Shows the command line of the &configure; script that corresponds to
      the options you have chosen.  Note that the tooltip on each option
      shows you the name of the commandline option passed to &configure;.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

</section> <!-- basic mode -->

<section>
<title>Advanced mode</title>

<graphic format="GIF" fileref="configure-window-advanced.gif"></graphic>

<para>
In Advanced mode, more options become available in all the panes,
and two new panes appear:
</para>

<variablelist>

  <varlistentry>
    <term><guibutton>Configuration</guibutton></term>
    <listitem>
      <para>
      Contains options related to the behaviour of the &configure; script
      itself.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Host Type</guibutton></term>
    <listitem>
      <para>
      Contains options related to cross-compilation.  This may pane may
      not be present if &configure; is particularly simple.
      </para>
    </listitem>
  </varlistentry>

</variablelist>


</section> <!-- advanced mode -->

</section> <!-- configure-window -->

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="about-maketool-window" xreflabel="About Maketool window">
<title>About Maketool window</title>


<graphic format="GIF" fileref="about-maketool-window.gif"></graphic>

<para>
This window shows information about Maketool's version, who owns
the copyright, what kinds of warranty you don't have.  
The <guibutton>Options...</guibutton> button shows the 
<xref linkend="compile-options-window">.  The
<guibutton>Licence...</guibutton> button shows the 
<xref linkend="licence-window">.
</para>


</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="compile-options-window" xreflabel="Compile options window">
<title>Compile options window</title>

<graphic format="GIF" fileref="compile-options-window.gif"></graphic>

<para>
This window shows a listing of all the error filters, makefile
systems, and make programs for which support is compiled into
the maketool executable.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="licence-window" xreflabel="Licence window">
<title>Licence window</title>

<graphic format="GIF" fileref="licence-window.gif"></graphic>

<para>
This window shows the text of the GNU General Public License
(or GPL) which is the licence under whose terms Maketool
is distributed.
</para>

<para>
For more information on the GPL, please read
<ulink url="http://www.gnu.org/licenses/gpl-faq.txt">the GPL FAQ</ulink>.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="about-make-window" xreflabel="About Make window">
<title>About Make window</title>

<graphic format="GIF" fileref="about-make-window.gif"></graphic>

<para>
This window shows information about GNU make, extracted from
the <command>gmake --version</command> command.  Note that if
a different make program is selected in the <xref linkend="programs-make">
entry of the Preferences, this window will show information
about that make program instead.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="percent-escapes" xreflabel="% Escape Characters">
<title>% Escape Characters</title>

<para>
Percent escapes are used when constructing various shell commands
which are run by maketool at various times.  The command strings
are scanned for the escape sequences described below, which are
replaced with their expanded text as described below.
</para>

<para>
The various context in which escapes are expanded are:
</para>

<variablelist>

  <varlistentry>
    <term>build target</term>
    <listitem>
      <para>
      The make program is being run to build a target.  This happens
      when a menu item from the <xref linkend="build-menu"> is selected
      or the <xref linkend="all-tool"> tool or <xref linkend="clean-tool">
      tool is clicked.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>list targets</term>
    <listitem>
      <para>
      The make program is being run to generate the list of available targets
      in the current directory.  This happens automatically when maketool
      starts or when the current directory is changed using the
      <xref linkend="file-change-directory"> menu item or the
      <xref linkend="file-previous-directories"> menu item.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>list version</term>
    <listitem>
      <para>
      The make program is being run to emit text describing itself, e.g.
      copyright and version messages.  This happens the first time
      the <xref linkend="help-about-make"> dialog is opened, and subsequently
      after the make program is changed in the <xref linkend="programs-pane">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>edit source</term>
    <listitem>
      <para>
      A source file is being edited.  This happens when an error or
      warning line in the <xref linkend="log-window"> is double-clicked,
      the <xref linkend="file-edit-makefile">, <xref linkend="edit-edit-error">,
      <xref linkend="edit-edit-next-error">, <xref linkend="edit-edit-prev-error">,
      or <xref linkend="edit-edit-next-file-error"> menu items are selected,
      or the <xref linkend="edit-next-tool"> tool or the
      <xref linkend="edit-file-next-tool"> tool are clicked.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>build makefile</term>
    <listitem>
      <para>
      The Makefile in the current directory is out of date and the
      make program is being run to rebuild it.  This happens automatically
      before any target is built if the
      <xref linkend="general-enable-make-makefile"> option is enabled.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>finished build</term>
    <listitem>
      <para>
      A build has just finished and the command specified in the 
      <xref linkend="general-finish-build-action"> item is being
      run to inform the user.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>help</term>
    <listitem>
      <para>
      The help browser is started to view either a local HTML help
      file or the maketool web page.  Note that the table below,
      "!help" means every context except this one.
      </para>
    </listitem>
  </varlistentry>

</variablelist>

<para>
The available percent escapes are:
</para>


<table frame="none">
    <title>Percent Escapes</title>
    <tgroup cols="3">
    	<colspec colwidth="1*">
    	<colspec colwidth="2*">
    	<colspec colwidth="10*">
	<thead>
	    <row>
		<entry>Escape</entry>
		<entry>Context</entry>
		<entry>Meaning</entry>
	    </row>
	</thead>
	<tbody>
	    <row>
		<entry>%D</entry>
		<entry>!help</entry>
		<entry>
  		    maketool's data directory, e.g.
		    <filename>/usr/local/share/maketool</filename>.
		</entry>
	    </row>
	    <row>
		<entry>%M</entry>
		<entry>!help</entry>
		<entry>
    	    	    the make program currently selected in the
    	    	    <xref linkend="programs-pane">, e.g.
		    <option>gmake</option>
		</entry>
	    </row>
	    <row>
		<entry>%S</entry>
		<entry>!help</entry>
		<entry>
    	    	    the name of the makefile system automatically
    	    	    detected when maketool is started or the current
		    directory is changed, e.g.
		    <option>automake</option>.
		</entry>
	    </row>
	    <row>
		<entry>%V</entry>
		<entry>!help</entry>
		<entry>
    	    	    the flags which cause make to print its version
    	    	    to stdout or stderr and exit, e.g.
		    <option>--version</option>.
		</entry>
	    </row>
	    <row>
		<entry>%f</entry>
		<entry>edit source</entry>
		<entry>
    	    	    the source file name
		</entry>
	    </row>
	    <row>
		<entry>%k</entry>
		<entry>!help</entry>
		<entry>
    	    	    the flag which causes make to keep
    	    	    on building targets when targets fail, e.g.
		    <option>-k</option>.
		</entry>
	    </row>
	    <row>
		<entry>%l</entry>
		<entry>edit source</entry>
		<entry>
    	    	    the source line number
		</entry>
	    </row>
	    <row>
		<entry>%m</entry>
		<entry>!help</entry>
		<entry>
    	    	    if a makefile is defined in the
    	    	    <xref linkend="general-pane">, expands to the
		    make flags necessary to use that makefile,
		    e.g. <option>-f /my/makefile</option>.
		</entry>
	    </row>
	    <row>
		<entry>%n</entry>
		<entry>!help</entry>
		<entry>
    	    	    flags which cause make to print the commands it
    	    	    would run instead of running them, e.g.
		    <option>-n</option>.
		</entry>
	    </row>
	    <row>
		<entry>%p</entry>
		<entry>!help</entry>
		<entry>
    	    	    to the flags which implement the
    	    	    parallelism policy controlled by the 
		    <xref linkend="general-parallelism"> options,
		    e.g. <option>-j8</option>
		</entry>
	    </row>
	    <row>
		<entry>%q</entry>
		<entry>!help</entry>
		<entry>
    	    	    the flags which cause make to dump
    	    	    its internal database to stdout or stderr, e.g.
		    <option>-n -p</option>.  Useful only for listing
		    available targets.
		</entry>
	    </row>
	    <row>
		<entry>%t</entry>
		<entry>build target</entry>
		<entry>
    	    	    target to be built
		</entry>
	    </row>
	    <row>
		<entry>%t</entry>
		<entry>list targets</entry>
		<entry>
    	    	    the string <option>_no_such_target_</option>
		</entry>
	    </row>
	    <row>
		<entry>%t</entry>
		<entry>finished build</entry>
		<entry>
    	    	    target which has just been built
		</entry>
	    </row>
	    <row>
		<entry>%t</entry>
		<entry>build makefile</entry>
		<entry>
    	    	    filename of the makefile to be built
		</entry>
	    </row>
	    <row>
		<entry>%u</entry>
		<entry>help</entry>
		<entry>
    	    	    A URL pointing to either a local help HTML file or
		    the maketool web page.
		</entry>
	    </row>
	    <row>
		<entry>%v</entry>
		<entry>!help</entry>
		<entry>
    	    	    set of make arguments of the form
    	    	    <option>VAR=VALUE</option> for all the variables
		    of type Make in the <xref linkend="variables-pane">,
		    e.g. <option>CC=cc</option>.  Values have whitespace
		    and shell metacharacters protected with quoting, but
		    see <xref linkend="metacharacters"> for why shell
		    metacharacters should be avoided.
		</entry>
	    </row>
	    <row>
	    	<!-- empty row for spacing -->
		<entry></entry>
		<entry></entry>
		<entry></entry>
	    </row>
	    <row>
		<entry>%{x:+y}</entry>
		<entry>!help</entry>
		<entry>
    	    	    if the simple expansion <option>%x</option> has a
    	    	    non-empty value, expands to the expansion of
		    <option>y</option>, otherwise expands to
		    an empty string.  For example,
		    <option>%{l:+-line %l}</option> expands
		    to <option>-line 23</option> if <option>%l</option>
		    is 23, and expands to the empty string if
		    <option>%l</option> is not defined.  Note that while
		    <option>y</option> may contain other simple % escapes
		    the <option>%{x:+y}</option> compound escape cannot
		    be nested.
		</entry>
	    </row>
	</tbody>
    </tgroup>
</table>

</section>
<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="metacharacters" xreflabel="Metacharacters">
<title>Metacharacters</title>

<para>
Metacharacters are "magical" characters which are interpreted
in special ways when encountered by a program in it's input.
Many different UNIX programs implement metacharacters, and
the concept is one the most useful and powerful features of a
UNIX system.
</para>

<para>
However, like any powerful tool, unless you know what you're doing
you can have some very unpleasant experiences with metacharacters.
So unless you know exactly what you're doing, it's wise to avoid using
metacharacters in filenames and other data used in
<command>maketool</command>.  Here be dragons!
</para>

<para>
Usually, metacharacters are the odd punctuation characters
around the edge of your keyboard, such as $ * or &amp;.  If you
stick to using letters, numbers, and the / (slash) - (dash)
. (dot) and _ (underscore) characters, you should be fine.
</para>

<para>
If you're still reading this, you either know what you're doing,
or you want to know.  To discourage you further, here are some of the
reasons why metacharacters can cause unwanted consenquences and
make debugging painful.
</para>

<itemizedlist>

  <listitem>
    <para>
    Many different UNIX programs (e.g. the shell, &gmake;,
    <command>sed</command>, <command>m4</command>, <command>awk</command>
    and the C compiler) interpret metacharacters.
    </para>
  </listitem>

  <listitem>
    <para>
    Sometimes it's not easy to tell which programs are going to be
    involved in processing data, especially if you use someone else's
    complex shell script.
    </para>
  </listitem>

  <listitem>
    <para>
    All programs have a quoting convention which enables you to quote
    metacharacters, usually by proceeding the metacharacter with a
    \ (backslash) character.  However, the shell has
    <emphasis>three</emphasis> quoting conventions, which can interact.
    </para>
  </listitem>

  <listitem>
    <para>
    Scripts for one program can call other programs (e.g. a shell
    script calls <command>sed</command>), or build other scripts
    and then call them.  To work properly in the presence of
    metacharacters, the calling script needs to be aware of the other
    program's quoting convention; many scripts don't do this.
    </para>
  </listitem>

  <listitem>
    <para>
    The sets of metacharacters implemented by the various programs
    overlap, but only partially.  For example, <function>${HOME}</function>
    has the same meaning in the shell and &gmake;
    but <function>$(HOME)</function> does not.
    </para>
  </listitem>

  <listitem>
    <para>
    A similar situation exists with whitespace (space, tab and
    newline) characters, which are interpreted specially in the
    shell and &gmake;.
    </para>
  </listitem>

</itemizedlist>


<para>
If you're still reading this, there is some hope.  Sometimes you can
achieve what you want with intelligent use of backslash quoting; the
trick is knowing how many backquotes you need.  Sometimes a combination
of backslash and double-quote or single-quote quoting works.  Unfortunately
the consenquences of too much or too little quoting can be as bad as
the problems you were trying to avoid in the first place.
Really, <emphasis>the best course is to simply avoid using
metacharacters and whitespace</emphasis> when naming files or directories.
</para>

<para>
If you're still not convinced, here's a quick summary of metacharacter-related
failure modes when using the <command>autoconf</command> system.
</para>

<para>
First, a quick summary of how <command>autoconf</command> works.
The developer uses the <command>autoconf</command> program, which
runs <command>m4</command> to process the file <filename>configure.in</filename>
into a shell script named &configure;, which is then distributed with
the application source.  The builder runs the &configure; script, which
amongst many other things uses <command>awk</command> and
<command>sed</command> to process input data.  As it's final step,
&configure; creates two new shell scripts named
<filename>config.cache</filename> and <filename>config.status</filename>
and runs <filename>config.status</filename>.  The next time
&configure; is run, it runs <filename>config.cache</filename>
as it's first step.  The <filename>config.status</filename> script uses
<command>sed</command> to create various other files from
input templates, usually &Makefile; from &Makefilein; and
<filename>config.h</filename> from <filename>config.h.in</filename>.
Then the builder uses &gmake;, which uses the information in
&Makefile; to construct and run shell commands to
compile and link the source code.  Compilation usually uses information
in <filename>config.h</filename>.
</para>

<para>
At <emphasis>each and every one</emphasis> of these steps, stray
metacharacters or whitespace can cause damage ranging from the build
process failing with an error, to more dangerous and subtle problems
like new files being installed into incorrect directories or over
precious system files.
</para>

<para>
Here's a summary of how each character can cause failures
in the <command>autoconf</command> chain (for clarity, starting 
at the step where you run the &configure;
script).
</para>

<table frame=none>
  <title>Metacharacter-related failure modes of autoconf</title>
  <tgroup cols=2 colsep=0 rowsep=0>
    <thead>

      <row>
        <entry>Metacharacter(s)</entry>
        <entry>Failure modes</entry>
      </row>

    </thead>
    <tbody>

      <!-- Yes I am aware of the Pernicious Mixed Content problem -->
      
      <row>
        <entry>(space)</entry>
        <entry>
	<xref linkend="metachar-note-2">, <xref linkend="metachar-note-3">, <xref linkend="metachar-note-4">
	</entry>
      </row>

      <row>
        <entry>(tab)</entry>
        <entry>
	<xref linkend="metachar-note-2">, <xref linkend="metachar-note-3">, <xref linkend="metachar-note-4">
    	</entry>
      </row>

      <row>
        <entry>( ) (parentheses)</entry>
        <entry>
	<xref linkend="metachar-note-3">
	</entry>
      </row>

      <row>
        <entry>* (asterisk)</entry>
        <entry>
	<xref linkend="metachar-note-3">
	</entry>
      </row>

      <row>
        <entry>? (question mark)</entry>
        <entry>
	<xref linkend="metachar-note-3">
	</entry>
      </row>

      <row>
        <entry>[ ] (square brackets)</entry>
        <entry>
	<xref linkend="metachar-note-3">
	</entry>
      </row>

      <row>
        <entry>$ (dollar sign)</entry>
        <entry>
	<xref linkend="metachar-note-4">, <xref linkend="metachar-note-5">
	</entry>
      </row>

      <row>
        <entry>; (semicolon)</entry>
        <entry>
	<xref linkend="metachar-note-5">
	</entry>
      </row>

      <row>
        <entry>" (double quote)</entry>
        <entry>
	<xref linkend="metachar-note-6">, <xref linkend="metachar-note-3">
	</entry>
      </row>

      <row>
        <entry>' (single quote)</entry>
        <entry>
	<xref linkend="metachar-note-7">, <xref linkend="metachar-note-8">, <xref linkend="metachar-note-3">, <xref linkend="metachar-note-7">
	</entry>
      </row>

      <row>
        <entry>\ (backslash)</entry>
        <entry>
	<xref linkend="metachar-note-6">, <xref linkend="metachar-note-3">
	</entry>
      </row>

      <row>
        <entry># (hash mark)</entry>
        <entry>
	<xref linkend="metachar-note-4">
	</entry>
      </row>

      <row>
        <entry>! (exclamation mark)</entry>
        <entry>
	<xref linkend="metachar-note-9">
	</entry>
      </row>

      <row>
        <entry>&amp; (ampersand)</entry>
        <entry>
	<xref linkend="metachar-note-3">
	</entry>
      </row>

      <row>
        <entry>| (vertical bar)</entry>
        <entry>
	<xref linkend="metachar-note-3">
	</entry>
      </row>

      <row>
        <entry>` (backquote)</entry>
        <entry>
	<xref linkend="metachar-note-7">, <xref linkend="metachar-note-3">
	</entry>
      </row>

      <row>
        <entry>&lt; &gt; (less, greater)</entry>
        <entry>
	<xref linkend="metachar-note-3">
	</entry>
      </row>

      <row>
        <entry>% (percent sign)</entry>
        <entry>
	<xref linkend="metachar-note-4">, <xref linkend="metachar-note-5">
	</entry>
      </row>

    </tbody>
  </tgroup>
</table>


<variablelist>
  <title>Index to failure modes</title>

  <varlistentry>
    <term><anchor id="metachar-note-2" xreflabel="config.site">config.site</term>
    <listitem>
      <para>
      The &configure; script finishes correctly but undesired whitespace
      expansion causes confusing error messages when &configure; tries to
      load the site configuration file <filename>config.site</filename> using a
      path relative to the directory specified with <option>--prefix</option>.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><anchor id="metachar-note-3" xreflabel="shell">shell</term>
    <listitem>
      <para>
      The &configure; script works but &gmake; will probably fail due to
      unexpected expansion by the shell of metacharacters or whitespace in
      commands given to the shell by &gmake;.  This may be solved by adding
      quoting.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><anchor id="metachar-note-4" xreflabel="gmake runtime">gmake runtime</term>
    <listitem>
      <para>
      The &configure; script works but &gmake; will probably fail due to
      unexpected expansion by &gmake; of metacharacters or whitespace in
      commands given to the shell by &gmake;.  This may be solved by
      adding quoting.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><anchor id="metachar-note-5" xreflabel="gmake parsetime">gmake parsetime</term>
    <listitem>
      <para>
      The &configure; script works but &gmake; will probably fail due to
      parse errors in &Makefile; caused by expansion by &gmake; of variables
      whose values contain metacharacters or whitespace.  This may be solved
      by adding quoting.  The error is typically:
      </para>
      <programlisting>
Makefile:10: *** missing separator.  Stop.
      </programlisting>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><anchor id="metachar-note-6" xreflabel="C strings">C strings</term>
    <listitem>
      <para>
      The &configure; script works but the C compiler will generate syntax
      errors if metacharacters are used in a string literal in
      <filename>config.h</filename> or other C code.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><anchor id="metachar-note-7" xreflabel="balance">balance</term>
    <listitem>
      <para>
      The &configure; script will fail with shell syntax error if the quotes
      are unbalanced, i.e. do not occur in pairs.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><anchor id="metachar-note-8" xreflabel="lost">lost</term>
    <listitem>
      <para>
      The &configure; script works but the metacharacter is lost from values
      in created files such as &Makefile;. This may be solved by adding quoting.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><anchor id="metachar-note-9" xreflabel="interactive">interactive</term>
    <listitem>
      <para>
      The <command>autoconf</command> system works fine but the metacharacter needs
      to be quoted when used in an interactive shell session, for example if you
      use <command>ls</command> to look in a directory whose name contains the
      metacharacter.
      </para>
    </listitem>
  </varlistentry>

</variablelist>


<para>
If you're still not frightened of metacharacters, go buy a good book on
the UNIX shell and read it.  Alternatively, the
<ulink url="http://linuxdoc.org/LDP/abs/html/index.html">Advanced Bash-Scripting Guide</ulink>
is available online.  You will learn a powerful and useful tool.
</para>

</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="make-systems" xreflabel="Make Systems">
<title>Make Systems</title>


<para>
The name <emphasis>make system</emphasis> is used in this documentation
to refer to one of the various systems used to construct a
&Makefile; from another source file.  These systems are
intend to make the creation and maintenance of Makefiles simpler.
</para>

<para>
The important thing to understand about make systems is that the source
of a software project which uses one of these systems is delivered without a
Makefile.  This means that some extra command(s) need to be
performed before &gmake; can be run the first time.
</para>

<para>
For people unused to building free software, this represents extra
complexity right at the time when they are least equipped to handle
it.  Maketool tries to soften this impact by:
</para>

<itemizedlist>

  <listitem>
    <para>
    automatically detecting which (if any) make system is used by
    the software project;
    </para>
  </listitem>

  <listitem>
    <para>
    providing (in the <xref linkend="build-menu">) a command to
    update the Makefile, and various other commands related to
    the make system;
    </para>
  </listitem>

  <listitem>
    <para>
    automatically updating the Makefile every time a target is
    built (if the <xref linkend="general-enable-make-makefile"> checkbox is on).
    </para>
  </listitem>

</itemizedlist>

<para>
Maketool knows about all the popular make systems used with
free software today:
</para>

<itemizedlist>
  <listitem><para><xref linkend="automake"></para></listitem>
  <listitem><para><xref linkend="autoconf"></para></listitem>
  <listitem><para><xref linkend="imake"></para></listitem>
</itemizedlist>

</section> <!-- make-systems -->

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="automake" xreflabel="automake">
<title>automake</title>

<para>
This is the most powerful and high-end make system available today.  To
use automake, you only need to provide the briefest sketch of a
&Makefile;, in a file called &Makefileam;, and automake does the rest.
</para>

<para>
Automake requires use of the <xref linkend="autoconf">
system for discovering and recording configuration information.
See the <ulink url="info:automake">GNU automake documentation</ulink> for
more information.
</para>

<para>
When maketool detects that the current directory is using automake,
the following commands appear in the <xref linkend="build-menu">.
</para>

<variablelist>

  <varlistentry>
    <term><guibutton>Makefile</guibutton></term>
    <listitem>
      <para>
      Performs all the actions necessary to update the
      &Makefile; from whatever files it
      depends on.  This is usually all you ever need to do:
      it performs all the other commands listed below but in
      the correct order and only if they are necessary.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Run automake</guibutton></term>
    <listitem>
      <para>
      Runs the <command>automake -a</command> command to generate
      &Makefilein; from &Makefileam;.  This is useful when you are
      working on &Makefileam;.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Run autoconf</guibutton></term>
    <listitem>
      <para>
      Runs the <command>autoconf</command> command to generate
      &configure; from <filename>configure.in</filename>.
      This is useful when you are working on <filename>configure.in</filename>.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Remove config.cache</guibutton></term>
    <listitem>
      <para>
      Removes the <filename>config.cache</filename> file, which is
      used to cache information discovered by the &configure;
      script.  This is sometimes necessary when you are working on
      <filename>configure.in</filename>.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Run configure...</guibutton></term>
    <listitem>
      <para>
      Shows the <xref linkend="configure-window">, which allows
      you to run the &configure; script.  This script accepts your
      configuration choices, discovers various information about the
      operating system, and finally generates &Makefile; (and usually
      some other files, such as <filename>config.h</filename>).
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Run config.status</guibutton></term>
    <listitem>
      <para>
      Runs the <filename>config.status</filename> script, which
      is produced by the &configure; script and generates &Makefile; (and
      usually some other files, such as <filename>config.h</filename>).
      This is useful when you are working on &Makefileam; or
      <filename>config.h.in</filename>, because it is faster than running
      the &configure; script itself.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

</variablelist>


</section> <!-- automake -->

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="autoconf" xreflabel="autoconf">
<title>autoconf</title>


<para>
Autoconf is a system for discovering configuration information
about the operating system, and encoding that information in
various files.  It is used to avoid portability issues and to
provide a standard interface for selecting configurable options.
</para>

<para>
Typically, autoconf will be used to generate the &Makefile;
from a file called &Makefilein;, and
<filename>config.h</filename> from a file called
<filename>config.h.in</filename>.
</para>

<para>
However, autoconf is considerably more flexible than this and can
be used in other ways.  See the
<ulink url="info:autoconf">GNU autoconf documentation</ulink> for more
information.
</para>

<para>
When maketool detects that the current directory is using automake,
the following commands appear in the <xref linkend="build-menu">.
</para>

<variablelist>

  <varlistentry>
    <term><guibutton>Makefile</guibutton></term>
    <listitem>
      <para>
      Performs all the actions necessary to update the &Makefile; from
      whatever files it depends on.  This is usually all you ever need
      to do: it performs all the other commands listed below but in
      the correct order and only if they are necessary.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Run autoconf</guibutton></term>
    <listitem>
      <para>
      Runs the <command>autoconf</command> command to generate
      &configure; from <filename>configure.in</filename>.
      This is useful when you are working on <filename>configure.in</filename>.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
      <para>
      This command only appears if the current directory contains
      a <filename>configure.in</filename> file (sometimes software is
      distributed without this file, although that is not a good
      practice).
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Remove config.cache</guibutton></term>
    <listitem>
      <para>
      Removes the <filename>config.cache</filename> file, which is
      used to cache information discovered by the &configure;
      script.  This is sometimes necessary when you are working on
      <filename>configure.in</filename>.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Run configure...</guibutton></term>
    <listitem>
      <para>
      Shows the <xref linkend="configure-window">, which allows
      you to run the &configure; script.  This script accepts your
      configuration choices, discovers various information about the
      operating system, and finally generates &Makefile; (and usually
      some other files, such as <filename>config.h</filename>).
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Run config.status</guibutton></term>
    <listitem>
      <para>
      Runs the <filename>config.status</filename> script, which
      is produced by the &configure; script and generates &Makefile;
      (and usually some other  files, such as <filename>config.h</filename>).
      This is useful when you are working on &Makefileam; or
      <filename>config.h.in</filename>, because it is faster than
      running the &configure; script itself.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

</variablelist>


</section> <!-- autoconf -->

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="imake" xreflabel="imake">
<title>imake</title>

<para>
Imake is an old-fashioned make system used for building the
X Window System and some third-party XWindows and Motif
programs.
</para>

<para>
Most uses of imake are being replaced by autoconf, which does
the same job but more flexibly.   For example, the
&configure; script in autoconf has a <option>--help</option>
option which shows the user what options are available; there
is no equivalent in imake.  If your project uses imake, please
consider learning <xref linkend="autoconf">.
</para>

<para>
See the <ulink url="man:imake">imake documentation</ulink> for
more information.
</para>

<para>
When maketool detects that the current directory is using automake,
the following commands appear in the <xref linkend="build-menu">.
</para>

<variablelist>

  <varlistentry>
    <term><guibutton>Makefile</guibutton></term>
    <listitem>
      <para>
      Performs all the actions necessary to update the
      &Makefile; from whatever files it
      depends on.  This is usually all you ever need to do:
      it performs all the other commands listed below but in
      the correct order and only if they are necessary.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><guibutton>Run xmkmf</guibutton></term>
    <listitem>
      <para>
      Runs the <command>xmkmf</command> command to generate
      &Makefile; from &Imakefile;.
      </para>
      <para>
      The output appears in the <xref linkend="log-window">.
      </para>
    </listitem>
  </varlistentry>
  
</variablelist>


</section> <!-- imake -->

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->
<section id="standard-targets" xreflabel="Standard Targets">
<title>Standard Targets</title>

<para>
This section describes the standard Makefile targets which are
known by Maketool.  This information is derived from the
<ulink url="info:standards#Standard_Targets">GNU Makefile Standards</ulink>
document, which goes into more detail.
</para>

<para>
Quick Tip: usually the only targets you need to know are
<command>all</command>, <command>install</command>, and
<command>clean</command> (and use them in that order).
</para>

<variablelist>

  <varlistentry>
    <term><command>all</command></term>
    <listitem>
      <para>
      Compile any programs and libraries.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>check</command></term>
    <listitem>
      <para>
      Perform self-tests; to be used between using <command>all</command>
      and <command>install</command>.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>clean</command></term>
    <listitem>
      <para>
      Delete all files which are normally created by <command>all</command>.
      e.g. object files, programs, and libraries.  Usually used to
      save disk space or prepare for a complete rebuild.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>dist</command></term>
    <listitem>
      <para>
      Create a source tarball for distribution, e.g.
      <filename>maketool-0.6.2-src.tar.gz</filename>.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>distclean</command></term>
    <listitem>
      <para>
      Like <command>all</command> but also removes any files created
      since the source distribution was unpacked.  Usually used to
      prepare for rebuilding with a new configuration.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>dvi</command></term>
    <listitem>
      <para>
      Used when dealing with Texinfo documentation.  Free software is
      gradually transitioning from Texinfo to DocBook SGML.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>info</command></term>
    <listitem>
      <para>
      Used when dealing with Texinfo documentation.  Free software is
      gradually transitioning from Texinfo to DocBook SGML.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>install</command></term>
    <listitem>
      <para>
      Compile any programs and libraries and copy them into their installation
      directories (e.g. <filename>/usr/local/bin</filename>).  Some
      poorly-written Makefiles require you to use <command>all</command>
      first.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>installcheck</command></term>
    <listitem>
      <para>
      Perform self-tests; to be used after using <command>install</command>.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>installdirs</command></term>
    <listitem>
      <para>
      Create the installation diretories (e.g.
      <filename>/usr/local/bin</filename>) if they don't exist.  Usually
      happens as a side effect of <command>install</command> anyway.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>install-strip</command></term>
    <listitem>
      <para>
      Like <command>install</command> but also strip programs of debugging
      symbols after installation.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>maintainer-clean</command></term>
    <listitem>
      <para>
      Like <command>distclean</command> but cleans even more files.
      After a <command>maintainer-clean</command>, you can still build
      the software but may require all sorts of development tools that
      you might not have installed, such as <command>gperf</command>,
      <command>automake</command> etc.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>mostlyclean</command></term>
    <listitem>
      <para>
      Slightly weaker version of <command>clean</command>.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>reallyclean</command></term>
    <listitem>
      <para>
      Older name for <command>maintainer-clean</command>.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>TAGS</command></term>
    <listitem>
      <para>
      Update the <filename>TAGS</filename> file used by the
      <command>emacs</command> editor.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>tags</command></term>
    <listitem>
      <para>
      Same as <command>TAGS</command>.
      </para>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term><command>uninstall</command></term>
    <listitem>
      <para>
      Delete the installed copies from installation directories
      (e.g. <filename>/usr/local/bin</filename>).
      </para>
    </listitem>
  </varlistentry>

</variablelist>

<para>
Note that the family of "clean" targets form a strict sequence,
with each target deleting progressively more files:
<command>mostlyclean</command>,
<command>clean</command>,
<command>distclean</command>,
<command>maintainer-clean</command> (aka
<command>reallyclean</command>),
</para>


</section>

<!-- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -->

</article>
