Browse Source

Adapted makefile.fpc

michael 25 years ago
parent
commit
758b2753c2
1 changed files with 360 additions and 133 deletions
  1. 360 133
      docs/prog.tex

+ 360 - 133
docs/prog.tex

@@ -640,6 +640,36 @@ switch \var{-Sm}.
 
 
 By default, macros are not allowed.
 By default, macros are not allowed.
 
 
+\subsection{\var{\$MAXFPUREGISTERS} : Maximum number of FPU registers for variables}
+
+The \var{\{\$MAXFPUREGISTERS XXX\}} directive tells the compiler how much floating point
+variables can be kept in the floating point processor registers. This switch is ignored
+unless the \var{-Or} (use register variables) optimization is used.
+
+Since version 0.99.14, the \fpc compiler supports floating point register variables;
+the content of these variables is not stored on the stack, but is kept in the
+floating point processor stack.
+
+This is quite tricky because the Intel FPU stack is limited to 8 entries.
+The compiler uses a heuristic algorithm to determine how much variables should be
+put onto the stack: in leaf procedures it is limited to 3 and in non leaf
+procedures to 1. But in case of a deep call tree or, even worse, a recursive
+procedure this can still lead to a FPU stack overflow, so the user can tell
+the compiler how much (floating point) variables should be kept in registers.
+
+The directive accepts the following arguments:
+
+\begin{description}
+\item [N] where \var{N} is the maximum number of FPU registers to use.
+Currently this can be in the range 0 to 7.
+\item[Normal] restores the heuristic and standard behavior.
+\item[Default] restores the heuristic and standard behaviour.
+\end{description}
+
+\begin{remark}
+The directive is valid untill the end of the current procedure.
+\end{remark}
+
 \subsection{\var{\$MESSAGE} : Generate info message}
 \subsection{\var{\$MESSAGE} : Generate info message}
 
 
 If the generation of info is turned on, through the \var{-vi} command-line
 If the generation of info is turned on, through the \var{-vi} command-line
@@ -4375,41 +4405,252 @@ consequences of this is that the type \var{Integer} is redefined as
 % Appendix E
 % Appendix E
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
-\chapter{Using \file{makefile.fpc}}
+\chapter{Using \file{fpcmake}}
 \label{ch:makefile}
 \label{ch:makefile}
 \newcommand{\mvar}[1]{\var{\$(#1)}}
 \newcommand{\mvar}[1]{\var{\$(#1)}}
-
 \section{Introduction}
 \section{Introduction}
-\fpc comes with a special makefile, \file{makefile.fpc}, which can be
-included in any makefile you use to compile with \fpc. There is a template
-\file{Makefile} provided also. All sources from the \fpc team are compiled
-with this system.
+\fpc comes with a special makefile tool, \file{fpcmake}, which can be
+used to construct a \file{Makefile} for use with \gnu \file{make}.
+All sources from the \fpc team are compiled with this system.
+
+\file{fpcmake} uses a file \file{Makefile.fpc} and constructs a file
+\file{Makefile} from it, based on the settings in \file{Makefile.fpc}.
+
+The following sections explain what settings can be set in \file{Makefile.fpc},
+what variables are set by \var{fpcmake}, what variables it expects to be set,
+and what targets it defines. After that, some settings in the resulting
+\file{Makefile} are explained.
+
+\section{Usage}
+\file {fpcmake} reads a \file{Makefile.fpc} and converts it to a 
+\file{Makefile} suitable for reading by \gnu \file{make}
+to compile your projects. It is similar in functionality to GNU 
+\file{configure} or \var{Imake} for making X projects.
+
+\file{fpcmake} accepts filenames of makefile description files
+as it's command-line arguments. For each of these files it will
+create a \file{Makefile} in the same directory where the file is
+located, overwriting any other existing file.
+
+If no options are given, it just attempts to read the file 
+\file{Makefile.fpc} in the current directory and tries to
+construct a \file{Makefile} from it. any previously existing
+\file{Makefile} will be erased. 
+
+\section{Format of the \file{Makefile.fpc} configuration file}
+This section describes the rules that can be present in the file
+that is fed to \file{fpcmake}.
+
+\file{Makefile.fpc} is a plain ASCII file that contains a number
+of sections as in a \windows \file{.ini}-file.
+
+The following sections are recognized (in alphabetical order):
+
+\subsection{Clean}
+Specifies rules for cleaning the directory of units and programs. 
+The following entries are recognized:
+\begin{description}
+\item[units] names of all units that should be removed when cleaning.
+Don't specify extensions, the makefile will append these by itself.
+\item[files] names of files that should be removed. Specify full filenames.
+\end{description}
+
+\subsection{Defaults}
+The \var{defaults} section contains some default settings. The following keywords
+are recognized:
 
 
-These files are installed in the following directories:
+\subsection{Dirs}
+
+\subsection{Info}
+
+\subsection{Install}
+Contains instructions for installation of your units and programs. The
+following keywods are recognized:
 \begin{description}
 \begin{description}
-\item[linux]
-\item[Dos or Windows]
+\item[dirprefix] is the directory below wchich all installs are done.
+This corresponds to the \var{--prefix} argument to \gnu \file{configure}.
+It is used for the installation of programs and units. By default, this is 
+\file{/usr} on \linux, and \file{/pp} on all other platforms.
+\item[dirbase]
+The directory that is used as the base directory for the installation of
+units. Default this is \var{dirprefix} appended with \var{/lib/fpc/FPC\_VERSION}
+for \linux or simply the \var{dirprefix} on other platforms.
 \end{description}
 \end{description}
+Units will be installed in the subdirectory  \file{units/\$(OS\_TARGET)}
+of the \var{dirbase} entry.
 
 
-The template \file{Makefile} searches for the \file{makefile.fpc} in  the
-following places :
-\begin{enumerate}
-\item The {\em file} pointed to by the \var{FPCMAKE} environment variable.
-\item The directory pointed to by the \var{FPCDIR} envinonment variable.
-\item The directory pointed to by the \var{DEFAULTFPCDIR} make variable.
-\item The current directory.
-\end{enumerate}
-Thus, setting \var{FPCMAKE} or \var{FPCDIR} as an environment string will
-ensure that \file{makefile.fpc} is always found, and will be read by all
-makefiles, derived from the template.
+\subsection{Libs}
+This section specifies what units should be merged into a library, and what
+external libraries are needed. It can contain the following keywords:
+\begin{description}
+\item[libname] the name of the library that should be created.
+\item[libunits] a comma-separated list of units that should be moved into
+one library.
+\item[needgcclib] a boolean value that specifies whether the \file{gcc}
+library is needed. This will make sure that the path to the GCC library
+is inserted in the library search path.
+\item[needotherlib]
+a boolean value that tells the makefile that other library directories will 
+be needed.
+\end{description}
+
+\subsection{Packages}
+Which packages must be used. This section can contain the following keywords:
+\begin{description}
+\item[packages]
+A comma-separated list of packages that are needed to compile the targets.
+Valid for all platforms. In order to differentiate between platforms, you
+can prepend the keyword \var{packages} with the OS you are compiling for,
+e.g.  \var{linuxpackages} if you want the makefile to use the listed
+packages on linux only.
+\item[fcl] This is a boolean value (0 or 1) that indicates whether the FCL is used.
+\item[rtl]
+This is a boolean value (0 or 1) that indicates whether the RTL should be
+recompiled.
+\end{description}
+
+\subsection{Postsettings}
+Anything that is in this section will be inserted as-is in the makefile
+\textit{after} the makefile rules that are generated by fpcmake, but 
+\textit{before} the general configuration rules.
+In this section, you cannot use variables that are defined by fpcmake rules, but you
+can define additional rules and configuration variables.
+
+\subsection{Presettings}
+Anything that is in this section will be inserted as-is in the makefile
+\textit{before} the makefile target rules that are generated by fpcmake.
+This means that you cannot use any variables that are normally defined by
+fpcmake rules.
+
+\subsection{Rules}
+In this section you can insert dependency rules and any other targets 
+you wish to have. Do not insert 'default rules' here.
+
+\subsection{Sections}
+Here you can specify which 'rule sections' should be included in the
+\file{Makefile}. 
+The sections consist of a series of boolean keywords; each keyword decies
+whether a particular section will be written to the makefile. By default,
+all sections are written.
+ 
+You can have the following boolean keywords in this section.
+\begin{description}
+\item[none]
+If this is set to true, then no sections are written.
+\item[units]
+If set to \var{False}, \file{fpcmake} omits the rules for compiling units.
+\item[exes]
+If set to \var{False}, \file{fpcmake} omits the rules for compiling executables.
+\item[loaders]
+If set to \var{False}, \file{fpcmake} omits the rules for assembling assembler files.
+\item[examples]
+If set to \var{False}, \file{fpcmake} omits the rules for compiling examples.
+\item[package]
+If set to \var{False}, \file{fpcmake} omits the rules for making packages.
+\item[compile]
+If set to \var{False}, \file{fpcmake} omits the generic rules for compiling pascal files.
+\item[depend]
+If set to \var{False}, \file{fpcmake} omits the dependency rules.
+\item[install]
+If set to \var{False}, \file{fpcmake} omits the rules for installing everything.
+\item[sourceinstall]
+If set to \var{False}, \file{fpcmake} omits the rules for installing the sources.
+\item[zipinstall]
+If set to \var{False}, \file{fpcmake} omits the rules for installing archives.
+\item[clean]
+If set to \var{False}, \file{fpcmake} omits the rules for cleaning the directories.
+\item[libs]
+If set to \var{False}, \file{fpcmake} omits the rules for making libraries.
+\item[command]
+If set to \var{False}, \file{fpcmake} omits the rules for composing the command-line based on the various
+variables.
+\item[exts]
+If set to \var{False}, \file{fpcmake} omits the rules for making libraries.
+\item[dirs]
+If set to \var{False}, \file{fpcmake} omits the rules for running make in subdirectories..
+\item[tools]
+If set to \var{False}, \file{fpcmake} omits the rules for running some tools as the erchiver, UPX and zip.
+\item[info]
+If set to \var{False}, \file{fpcmake} omits the rules for generating information.
+\end{description}
+
+\subsection{Targets}
+In this section you can define the various targets. The following keywords
+can be used there:
+\begin{description}
+\item[dirs]
+A space separated list of directories where make should also be run.
+\item[examples]
+A space separated list of example programs that need to be compiled when
+the user asks to compile the examples. Do not specify an extension, 
+the extension will be appended.
+\item[loaders]
+A space separated list of names of assembler files that must be assembled.
+Don't specify the extension, the extension will be appended.
+\item[programs]
+A space separated list of program names that need to be compiled. Do not
+specify an extension, the extension will be appended.
+\item[rst] a list of \file{rst} files that needs to be converted to \file{.po}
+files for use with \gnu \file{gettext} and internationalization routines.
+\item[units]
+A space separated list of unit names that need to be compiled. Do not
+specify an extension, just the name of the unit as it would appear un a 
+\var{uses} clause is sufficient.
+\end{description}
+
+\subsection{Tools}
+In this section you can specify which tools are needed. Definitions to
+use each of the listed tools will be inserted in the makefile, depending
+on the setting in this section.
+
+Each keyword is a boolean keyword; you can switch the use of a tool on or
+off with it.
 
 
-The following sections explain what variables are set by \var{makefile.fpc},
-what variables it expects to be set, and what targets it defines. After
-that, some settings in the template makefile are explained.
+The following keywords are recognised:
+\begin{description}
+\item[toolppdep]
+Use \file{ppdep}, the dependency tool. \var{True} by default.
+\item[toolppumove]
+Use \file{ppumove}, the Free Pascal unit mover. \var{True} by default.
+\item[toolppufiles]
+Use the \file{ppufile} tool to determine dependencies of unit files.
+\var{True} by default.
+\item[toolsed]
+Use \file{sed} the stream line editor. \var{False} by default.
+\item[tooldata2inc]
+Use the \file{data2inc} tool to create include files from data files.
+\var{False} by default.
+\item[tooldiff]
+Use the \gnu \file{diff} tool. \var{False} by default.
+\item[toolcmp]
+Use the \file{cmp} file comparer tool. \var{False} by default.
+\item[toolupx]
+Use the \file{upx} executable packer.\var{True} by default.
+\item[tooldate]
+use the \file{date} date displaying tool. \var{True} by default.
+\item[toolzip]
+Use the \file{zip} file archiver. This is used by the zip targets.
+\var{True} by default.
+\end{description}
 
 
-\section{Programs needed to use the makefile}
+\subsection{Zip}
+This section can be used to make zip files from the compiled units and
+programs. By default all compiled units are zipped. The zip behaviour can
+be influenced with the presettings and postsettings sections.
 
 
-The following programs are needed by the makefile to function correctly:
+The following keywords can be used in this unit:
+\begin{description}
+\item[zipname]
+this file is the name of the zip file that will be produced.
+\item[ziptarget]
+is the name of a makefile target that will be executed before the zip is
+made. By default this is the  \var{install} target.
+\end{description}
+
+\section{Programs needed to use the generated makefile}
+
+The following programs are needed by the generated \file{Makefile}
+to function correctly:
 \begin{description}
 \begin{description}
 \item[cp] a copy program.
 \item[cp] a copy program.
 \item[date] a program that prints the date.
 \item[date] a program that prints the date.
@@ -4422,98 +4663,130 @@ These are standard programs on linux systems, with the possible exception of
 \file{make}. For \dos or \windowsnt, they can be found in the
 \file{make}. For \dos or \windowsnt, they can be found in the
 file \file{gnuutils.zip} on the \fpc FTP site.
 file \file{gnuutils.zip} on the \fpc FTP site.
 
 
+The following programs are optionally needed if you use some special targets.
+Which ones you need are controlled by the settings in the \var{tools} section.
+
+\begin{description}
+\item[cmp] a \dos and \windowsnt file comparer. Used if \var{toolcmp} is \var{True}.
+\item[diff] a file comparer. Used if \var{tooldiff} is \var{True}.
+\item[ppdep] the ppdep depency lister. Used if \var{toolppdep} is \var{True}.
+Distributed with \fpc.
+\item[ppfiles] the ppufiles unit file depency lister. Used if \var{toolppufiles}
+is \var{True}. Distributed with \fpc.
+\item[ppumove] the \fpc unit mover. Used if \var{toolppumove} is \var{True}.
+Distributed with \fpc.
+\item[sed] the \file{sed} program. Used if \var{toolsed} is \var{True}.
+\item[upx] the UPX executable packer. Used if \var{toolupx} is \var{True}.
+\item[zip] the zip archiver program. Used if \var{toolzip} is \var{True}.
+\end{description}
+All of these can also be found on the \fpc FTP site for \dos and \windowsnt.
+
 \section{Variables used by \file{makefile.fpc}}
 \section{Variables used by \file{makefile.fpc}}
 
 
 Many variables affect the behaviour of the makefile.  The variables can be
 Many variables affect the behaviour of the makefile.  The variables can be
 split in several groups:
 split in several groups:
 \begin{description}
 \begin{description}
-\item[Required variables]
-\item[Directory variables]
+\item[Required environment variables]
+\item[Command-line directory variables]
+\item[Internal directory variables]
 \item[Target variables]
 \item[Target variables]
 \item[Compiler command-line variables]
 \item[Compiler command-line variables]
+\item[Internal Compiler command-line variables]
 \end{description}
 \end{description}
 Each group will be discussed separately in the subsequent.
 Each group will be discussed separately in the subsequent.
 
 
-\subsection{Required variables}
+\subsection{Required environment variables}
 
 
-In principle, the \var{makefile.fpc} only expects one variable to be set:
-\begin{description}
-\item[FPCDIR] This is the base directory of \fpc sources. The makefile
-expects to find a directory \file{rtl} below this directory.
-\end{description}
+In principle, \var{fcmake} doesn't expect any environment variable to be set.
+Optionally, you can set the variable
+\var{FPCMAKEINI} which should contain the name of a file with the basic
+rules that fpcmake will generate.
 
 
-\subsection{Directory variables}
+By default, \file{fpcmake} has a compiled-in copy of \file{fpcmake.ini},
+which contains the basic rules, so there should be no need to set this variable.
+You can set it however, if you wish to change the way in which fpcmake works and
+creates rules.
+
+The initial \file{fpcmake.ini} file can be found in the \file{utils} source
+package on the \fpc web site.
+
+\subsection{Command-line Directory variables}
+
+The first set of variables controls the directories that are
+recognised in the makefile. They should not be set in the
+\file{Makefile.fpc} file, but can be specified on the commandline.
 
 
-The first set of variables controls the directories used in the makefile:
 
 
 \begin{description}
 \begin{description}
-\item[INC] this is a list of directories, separated by spaces, that will
-be added as include directories to the compiler command-line.
+
+\item[INCDIR] this is a list of directories, separated by spaces, that will
+be added as include directories to the compiler command-line.  Each
+directory in the list is prepended with \var{-I} and added to the
+compiler options.
 
 
 \item[LIBDIR] is a list of library paths, separated by spaces. Each
 \item[LIBDIR] is a list of library paths, separated by spaces. Each
 directory in the list is prepended with \var{-Fl} and added to the
 directory in the list is prepended with \var{-Fl} and added to the
 compiler options.
 compiler options.
 
 
+\item[OBJDIR] is a list of object file directories, separated by spaces, that is
+added to the object files path, i.e. Each directory in the list is prepended with
+\var{-Fo}.
+
+\end{description}
+
+\subsection{Internal Directory variables}
+
+These variables specify directories that are absolutely needed by
+the makefile to function.
+
+\begin{description}
+\item[NEEDINCDIR] is a space-separated list of library paths. Each
+directory in the list is prepended with \var{-Fl} and added to the
+compiler options.
 \item[NEEDLIBDIR] is a space-separated list of library paths. Each
 \item[NEEDLIBDIR] is a space-separated list of library paths. Each
 directory in the list is
 directory in the list is
 prepended with \var{-Fl} and added to the compiler options.
 prepended with \var{-Fl} and added to the compiler options.
-
 \item[NEEDOBJDIR] is a list of object file directories, separated by
 \item[NEEDOBJDIR] is a list of object file directories, separated by
  spaces. Each directory in the list is prepended with \var{-Fo} and
  spaces. Each directory in the list is prepended with \var{-Fo} and
 added to the compiler options.
 added to the compiler options.
-
 \item[NEEDUNITDIR] is a list of unit directories, separated by spaces.
 \item[NEEDUNITDIR] is a list of unit directories, separated by spaces.
 Each directory in the list is prepended with \var{-Fu} and is added to the
 Each directory in the list is prepended with \var{-Fu} and is added to the
 compiler options.
 compiler options.
-
-\item[OBJDIR] is a list of object file directories, separated by spaces, that is
-added to the object files path, i.e. Each directory in the list is prepended with
-\var{-Fo}.
-
 \item[OSINC] this is a space-separated list of OS-dependent directories
 \item[OSINC] this is a space-separated list of OS-dependent directories
 that will be added as include directories to the compiler command line.
 that will be added as include directories to the compiler command line.
-
+\item[OTHERLIBDIR] is a list of library paths, separated by spaces. Each
+directory in the list is prepended with \var{-Fl} and added to the
+compiler options. This variable is meant to be set in the \file{Makefile.fpc}
 \item[PROCINC] is a space-separated list of processor-dependent directories
 \item[PROCINC] is a space-separated list of processor-dependent directories
 that will be added as include directories to the compiler command-line.
 that will be added as include directories to the compiler command-line.
-
 \item[RTL] If \var{RTLDIR} is not set, \var{RTL} is used to construct
 \item[RTL] If \var{RTLDIR} is not set, \var{RTL} is used to construct
 \var{RTLDIR}, after which \var{RTLDIR} is added to the compiler unit
 \var{RTLDIR}, after which \var{RTLDIR} is added to the compiler unit
 path, with \var{-Fu} prepended. If \var{RTLDIR} is not set, it is set
 path, with \var{-Fu} prepended. If \var{RTLDIR} is not set, it is set
  to \mvar{RTL}/\mvar{OS\_TARGET}.
  to \mvar{RTL}/\mvar{OS\_TARGET}.
-
 \item[RTLDIR] Directory where the \var{RTL} unit sources are.
 \item[RTLDIR] Directory where the \var{RTL} unit sources are.
 If \var{RTLDIR} is not set, it is set to \mvar{RTL}/\mvar{OS\_TARGET}. \\
 If \var{RTLDIR} is not set, it is set to \mvar{RTL}/\mvar{OS\_TARGET}. \\
 If \var{RTL} is also not set, it is set to \mvar{FPCDIR}\var{/rtl/}\mvar{OS\_TARGET}.
 If \var{RTL} is also not set, it is set to \mvar{FPCDIR}\var{/rtl/}\mvar{OS\_TARGET}.
-
-
 \item[TARGETDIR] If set, this directory is added as the output directory of
 \item[TARGETDIR] If set, this directory is added as the output directory of
 the compiler, where all units and executables are written, i.e. it gets
 the compiler, where all units and executables are written, i.e. it gets
 \var{-FE} prepended.
 \var{-FE} prepended.
-
+\item[TARGETUNITDIR] If set, this directory is added as the output directory of
+the compiler, where all units and executables are written, i.e. it gets
+\var{-FU} prepended.
 \item[UNIT] If \var{UNITDIR} is not set, \var{UNIT} is used to construct
 \item[UNIT] If \var{UNITDIR} is not set, \var{UNIT} is used to construct
 \var{UNITDIR}. \var{UNITDIR} is added to the compiler unit path, with \var{-Fu}
 \var{UNITDIR}. \var{UNITDIR} is added to the compiler unit path, with \var{-Fu}
 prepended.
 prepended.
-
 \item[UNITDIR] Directory where the \var{RTL} compiled units are.
 \item[UNITDIR] Directory where the \var{RTL} compiled units are.
 If \var{UNITDIR} is not set, it is set to \mvar{UNIT}/\mvar{OS\_TARGET}. \\
 If \var{UNITDIR} is not set, it is set to \mvar{UNIT}/\mvar{OS\_TARGET}. \\
 If \var{UNIT} is also not set, it is set to \mvar{FPCDIR}\var{/rtl/}\mvar{OS\_TARGET}.
 If \var{UNIT} is also not set, it is set to \mvar{FPCDIR}\var{/rtl/}\mvar{OS\_TARGET}.
-
-\item[UNITS] The content of this variable are appended to the
-\var{BASEINSTALLDIR} variable to install the units.
-
-\item[UNITTARGETDIR] If set, this directory is added as the output directory of
-the compiler, where all units are written, i.e. it gets
-\var{-FU} prepended. This overrides \var{TARGETDIR}.
 \end{description}
 \end{description}
 
 
 \subsection{Target variables}
 \subsection{Target variables}
 
 
 The second set of variables controls the targets that are constructed
 The second set of variables controls the targets that are constructed
-by the makefile:
+by the makefile. They are created by FPCMAKE, so you can use them in your rules,
+but you shouldn't assign values to them yourself.
 
 
 \begin{description}
 \begin{description}
-\item[DEFAULTUNITS] If defined, only units will be made by the makefile. If
-not defined, then executables are made also.
 \item[EXEOBJECTS] This is a list of executable names that will be compiled.
 \item[EXEOBJECTS] This is a list of executable names that will be compiled.
 the makefile appends \mvar{EXEEXT} to these names.
 the makefile appends \mvar{EXEEXT} to these names.
 \item[LOADEROBJECTS] is a list of space-separated names that identify
 \item[LOADEROBJECTS] is a list of space-separated names that identify
@@ -4527,37 +4800,39 @@ makefile.
 this target is built first. If successful, the zip archive will be made.
 this target is built first. If successful, the zip archive will be made.
 \end{description}
 \end{description}
 
 
-\subsection{Compiler command-line variables}
+\subsection{Compiler command-line variables }
+The following variable can be set on the \file{make} command-line,
+they will be recognised and integrated in the compiler command-line:
+
+\begin{description}
+\item[OPT] Any options that you want to pass to the compiler. The contents
+of \var{OPT} is simply added to the compiler command-line.
+
+\item[OPTDEF] Are optional defines, added to the command-line of the
+compiler. They do not get \var{-d} prepended.
+\end{description}
+
+\subsection{Internal Compiler command-line variables}
 
 
 The following variables control the compiler command-line:
 The following variables control the compiler command-line:
 \begin{description}
 \begin{description}
-\item[CFGFILE] if this variable is set, it will be used as the name of the
-config file to be used by the compiler.
 
 
-\item[CPU] the CPU type is added as a define to the compiler command line.
-Automatically determined by the makefile.
+\item[CPU\_SOURCE] the target CPU type is added as a define to the compiler
+command line. This is determined by the Makefile itself.
+
+\item[CPU\_TARGET] the target CPU type is added as a define to the compiler
+command line. This is determined by the Makefile itself.
 
 
 \item[LIBNAME] if smartlinking is requested (i.e. \var{SMARTLINK} is set to
 \item[LIBNAME] if smartlinking is requested (i.e. \var{SMARTLINK} is set to
 \var{YES}), this is the name of the static library to produce. Don't add
 \var{YES}), this is the name of the static library to produce. Don't add
 \var{lib} to this, the compiler will do that.
 \var{lib} to this, the compiler will do that.
 
 
-\item[LIBTYPE] if set to \var{shared}, then the compiler will emit a shared
-library, with name \var{LIBNAME}.If \var{LIBTYPE} is set to \var{static},
-the compiler will emit a static, smartlinked library,
-
 \item[NEEDGCCLIB] if this variable is defined, then the path to \file{libgcc}
 \item[NEEDGCCLIB] if this variable is defined, then the path to \file{libgcc}
 is added to the library path.
 is added to the library path.
 
 
 \item[NEEDOTHERLIB] (\linux only) If this is defined, then the makefile will
 \item[NEEDOTHERLIB] (\linux only) If this is defined, then the makefile will
 append all directories that appear in \var{/etc/ld.so.conf} to the library path.
 append all directories that appear in \var{/etc/ld.so.conf} to the library path.
 
 
-
-\item[OPT] Any options that you want to pass to the compiler. The contents
-of \var{OPT} is simply added to the compiler command-line.
-
-\item[OPTDEF] Are optional defines, added to the command-line of the
-compiler. They do not get \var{-d} prepended.
-
 \item[OS\_TARGET] What platform you want to compile for. Added to the
 \item[OS\_TARGET] What platform you want to compile for. Added to the
 compiler command-line with a \var{-T} prepended.
 compiler command-line with a \var{-T} prepended.
 
 
@@ -4566,12 +4841,13 @@ will output smartlinked units if \var{LIBTYPE} is not set to \var{shared}.
 
 
 \end{description}
 \end{description}
 
 
-\section{Variables set by \file{makefile.fpc}}
+\section{Variables set by \file{fpcmake}}
 
 
-All of the following variables are only set by \var{makefile.fpc}, if
+All of the following variables are only set by \file{fpcmake}, if
 they aren't already defined. This means that you can override them by
 they aren't already defined. This means that you can override them by
-setting them on the make command line, or setting them in the makefile you
-use, BEFORE \file{makefile.fpc} is included.
+setting them on the make command line, or setting them in the \var{presettings}
+section. But most of them are correctly determined by the generated
+\file{Makefile}.
 The following sets of variables are defined:
 The following sets of variables are defined:
 \begin{description}
 \begin{description}
 \item[Directory variables]
 \item[Directory variables]
@@ -4640,6 +4916,8 @@ The following variables are program names, used in makefile targets.
 \item[DATE] a program to display the date.
 \item[DATE] a program to display the date.
 \item[DIFF] a program to produce diff files.
 \item[DIFF] a program to produce diff files.
 \item[ECHO] an echo program.
 \item[ECHO] an echo program.
+\item[FPC] the Free Pascal compiler executable. Default set to
+\var{ppc386.exe}
 \item[INSTALL] a program to install files. Default set to \file{install -m
 \item[INSTALL] a program to install files. Default set to \file{install -m
 644} on linux.
 644} on linux.
 \item[INSTALLEXE] a program to install executable files. Default set to \file{install -m
 \item[INSTALLEXE] a program to install executable files. Default set to \file{install -m
@@ -4658,7 +4936,7 @@ compilation, if the \var{-s} option was detected among the options.
 \item[SED] a stream-line editor program. Default set to \file{sed}.
 \item[SED] a stream-line editor program. Default set to \file{sed}.
 \item[UPX] an executable packer to compress your executables into
 \item[UPX] an executable packer to compress your executables into
 self-extracting compressed executables.
 self-extracting compressed executables.
-\item[ZIPEXE] a zip program to compress files. zip targets are made with
+\item[ZIPPROG] a zip program to compress files. zip targets are made with
 this program
 this program
 \end{description}
 \end{description}
 
 
@@ -4770,57 +5048,6 @@ the makefile, the compiler version, target OS, CPU.
 \item[fpc\_toolsinfo] lists all defined tools.
 \item[fpc\_toolsinfo] lists all defined tools.
 \end{description}
 \end{description}
 
 
-\section{Using the provided template}
-
-The template makefile that comes with \fpc does nothing other than
-offering you some variables to be set for the \file{makefile.fpc}.
-After that it loads the \var{makefile.fpc} in the indicated places.
-
-Finally it declares a set of default targets:
-\begin{description}
-\item[all]  calls fpc\_all.
-\item[clean]  calls fpc\_clean.
-\item[install]  calls fpc\_install.
-\item[info]  calls fpc\_info.
-\item[staticlib]  calls fpc\_staticlib.
-\item[sharedlib]  calls fpc\_sharedlib.
-\item[libsclean]  calls fpc\_libsclean.
-\item[staticinstall]  calls fpc\_staticinstall.
-\item[sharedinstall]  calls fpc\_sharedinstall.
-\item[libinstall]  calls fpc\_libinstall.
-\end{description}
-
-You can override each of these targets to suit your setup.
-
-If you just have to compile some units and programs, you only need to set
-the following variables:
-\begin{description}
-\item[UNITOBJECTS] names of units you wish to be built.
-\item[EXEOBJECTS] names of executables you wish to be built.
-\end{description}
-
-You may want to set some of the following variables:
-\begin{description}
-\item[INC,PROCINC or OSINC] To indicate where include files can be found.
-\item[NEEDOPT] additional options added to the compile command.
-\item[NEEDUNITDIR] space-separated list of directories where units that you
-need are located.
-\item[TARGETDIR,UNITTARGETDIR] where do you want executables and units to
-be written. Be aware that setting this variable may interfere with
-\var{make}, since it will not find the target files.
-\item[DEFAULTUNITS] if you define this variable (to whatever value you want)
-then the \var{all} target will by default only make the units.
-\end{description}
-
-You may also set any of the variables that appear in the previous sections,
-to override default behaviour of the makefile.
-
-After having set these variables, you can run 'make info' to see whether all
-variables are set to you satisfaction. If the \file{makefile.fpc} is not
-found, this command will inform you of this.
-
-After that, a simple 'make all' will make all units and executables.
-
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Appendix F
 % Appendix F
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%