Explorar el Código

+ Meer veranderingen aan fpcmake

michael hace 25 años
padre
commit
7c9658646c
Se han modificado 1 ficheros con 131 adiciones y 154 borrados
  1. 131 154
      docs/prog.tex

+ 131 - 154
docs/prog.tex

@@ -4438,7 +4438,7 @@ construct a \file{Makefile} from it. any previously existing
 \file{Makefile} will be erased. 
 
 % Makefile.fpc format.
-\section{Format of the \file{Makefile.fpc} configuration file}
+\section{Format of the configuration file}
 This section describes the rules that can be present in the file
 that is fed to \file{fpcmake}.
 
@@ -4554,9 +4554,10 @@ Specifies whether the installation rules will be shown. By default this is
 Specifies whether the \file{Makefile} objects will be shown, i.e. a list of
 all units and programs that will be built by \file{make}.
 \end{description}
+
 \subsection{Install}
 Contains instructions for installation of your units and programs. The
-following keywods are recognized:
+following keywords are recognized:
 \begin{description}
 \item[dirprefix] is the directory below wchich all installs are done.
 This corresponds to the \var{--prefix} argument to \gnu \file{configure}.
@@ -4581,8 +4582,9 @@ one library.
 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.
+(\linux only) a boolean value that tells the makefile that it should add 
+all library directories from the \file{ld.so.conf} file to the compiler
+command-line.
 \end{description}
 
 \subsection{Packages}
@@ -4756,13 +4758,12 @@ 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}
+\item[ppufiles] the ppufiles unit file dependency 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.
@@ -4771,27 +4772,28 @@ Distributed with \fpc.
 \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.
+\file{ppdep,ppufiles} and \file{ppumove} are distributed with the \fpc
+compiler.
 
-\section{Variables used by \file{makefile.fpc}}
+% 
+\section{Variables that affect the generated makefile}
+The makefile generated by \file{fpcmake} contains a lot of variables.
+Some of them are set in the makefile itself, others can be set and are taken
+into account when set. 
 
-Many variables affect the behaviour of the makefile.  The variables can be
-split in several groups:
-\begin{description}
-\item[Required environment variables]
-\item[Command-line directory variables]
-\item[Internal directory variables]
-\item[Target variables]
-\item[Compiler command-line variables]
-\item[Internal Compiler command-line variables]
-\end{description}
-Each group will be discussed separately in the subsequent.
+These variables can be split in several groups:
+\begin{itemize}
+\item Environment variables.
+\item Directory variables.
+\item Compiler command-line variables.
+\end{itemize}
+Each group will be discussed separately.
 
-\subsection{Required environment variables}
+\subsection{Environment variables}
 
-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.
+In principle, \var{fpcmake} 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 \file{fpcmake} will generate.
 
 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.
@@ -4799,111 +4801,149 @@ 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}
+package on the \fpc ftp site.
+\subsection{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.
-
-
 \begin{description}
-
 \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
 directory in the list is prepended with \var{-Fl} and added to the
 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{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 Directory variables}
+\section{Variables set by \file{fpcmake}}
 
-These variables specify directories that are absolutely needed by
-the makefile to function.
+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
+setting them on the make commandline, or setting them in the \var{presettings}
+section. But most of them are correctly determined by the generated
+\file{Makefile} or set by your settings in the configuration file.
+
+The following sets of variables are defined:
+\begin{itemize}
+\item Directory variables.
+\item Program names.
+\item File extensions.
+\item Target files.
+\end{itemize}
+Each of these sets is discussed in the subsequent:
+
+\subsection{Directory variables}
+
+The following directories are defined by the makefile:
 
 \begin{description}
+\item[BASEDIR] is set to the current directory if the \file{pwd} command is
+available. If not, it is set to '.'.
+
+\item[BASEINSTALLDIR] is the base for all directories where units are
+installed. By default, On \linux, this is set to
+\mvar{PREFIXINSTALLDIR}\var{/lib/fpc/}\mvar{RELEASEVER}.\\ On other systems,
+it is set to \mvar{PREFIXINSTALLDIR}. You can also set it with the
+\var{basedir} variable in the \var{Install} section.
+
+\item[BININSTALLDIR] is set to \mvar{BASEINSTALLDIR}/\var{bin} on \linux,
+and\\ \mvar{BASEINSTALLDIR}/\var{bin}/\mvar{OS\_TARGET} on other systems. 
+This is the place where binaries are installed.
+
+\item[GCCLIBDIR] (\linux only) is set to the directory where \file{libgcc.a}
+is. If \var{needgcclib} is set to \var{True} in the \var{Libs} section, then 
+this directory is added to the compiler commandline with \var{-Fl}.
+
+\item[LIBINSTALLDIR] is set to \mvar{BASEINSTALLDIR} on \linux,\\
+ and \mvar{BASEINSTALLDIR}/\var{lib} on other systems.
+
 \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.
+compiler options. Set by the \var{incdir} keyword in the \var{Dirs} section.
+
 \item[NEEDLIBDIR] is a space-separated list of library paths. Each
 directory in the list is
 prepended with \var{-Fl} and added to the compiler options.
+Set by the \var{libdir} keyword in the \var{Dirs} section.
+
 \item[NEEDOBJDIR] is a list of object file directories, separated by
  spaces. Each directory in the list is prepended with \var{-Fo} and
 added to the compiler options.
+Set by the \var{objdir} keyword in the \var{Dirs} section.
+
 \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
 compiler options.
-\item[OSINC] this is a space-separated list of OS-dependent directories
-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
-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
-\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
- to \mvar{RTL}/\mvar{OS\_TARGET}.
-\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{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
+Set by the \var{unitdir} keyword in the \var{Dirs} section.
+
+\item[TARGETDIR] This directory is added as the output directory of
 the compiler, where all units and executables are written, i.e. it gets
-\var{-FE} prepended.
+\var{-FE} prepended. It is set by the \var{targtdir} keyword in the 
+\var{Dirs} section.
+
 \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
-\var{UNITDIR}. \var{UNITDIR} is added to the compiler unit path, with \var{-Fu}
-prepended.
-\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{UNIT} is also not set, it is set to \mvar{FPCDIR}\var{/rtl/}\mvar{OS\_TARGET}.
+\var{-FU} prepended.It is set by the \var{targtdir} keyword in the 
+\var{Dirs} section.
+
+\item[PREFIXINSTALLDIR] is set to \file{/usr} on \linux, \file{/pp} on \dos
+or \windowsnt. Set by the \var{dirprefix} keyword in the \var{Install}
+section.
+
+\item[UNITINSTALLDIR] is where units will be installed. This is set to\\
+\mvar{BASEINSTALLDIR}/\mvar{UNITPREFIX} \\
+on \linux. On other systems, it is set to \\
+\mvar{BASEINSTALLDIR}/\mvar{UNITPREFIX}/\mvar{OS\_TARGET}.
 \end{description}
 
 \subsection{Target variables}
 
 The second set of variables controls the targets that are constructed
-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.
+by the makefile. They are created by \file{fpcmake}, so you can use 
+them in your rules, but you shouldn't assign values to them yourself.
 
 \begin{description}
 \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. It is set by the
+\var{programs} keyword in the \var{Targets} section.
+
 \item[LOADEROBJECTS] is a list of space-separated names that identify
 loaders to be compiled. This is mainly used in the compiler's RTL sources.
+It is set by the \var{loaders} keyword in the \var{Targets} section.
+
 \item[UNITOBJECTS] This is a list of unit names that will be compiled. The
 makefile appends \mvar{PPUEXT} to each of these names to form the unit file
 name. The sourcename is formed by adding \mvar{PASEXT}.
-\item[ZIPNAME] is the name of the archive that will be created by the
-makefile.
-\item[ZIPTARGET] is the target that is built before the archive is made.
-this target is built first. If successful, the zip archive will be made.
-\end{description}
+It is set by the \var{units} keyword in the \var{Targets} section.
 
-\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:
+\item[ZIPNAME] is the name of the archive that will be created by the
+makefile. 
+It is set by the \var{zipname} keyword in the \var{Zip} section.
 
-\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[ZIPTARGET] is the target that is built before the archive is made.
+this target is built first. If successful, the zip archive will be made. 
+It is set by the \var{ziptarget} keyword in the \var{Zip} section.
 
-\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}
+\subsection{Compiler command-line variables}
 
 The following variables control the compiler command-line:
 \begin{description}
@@ -4914,86 +4954,27 @@ 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
-\var{YES}), this is the name of the static library to produce. Don't add
-\var{lib} to this, the compiler will do that.
+\item[LIBNAME] if a shared library is requested this is the name of the 
+shared library to produce. Don't add \var{lib} to this, the compiler will 
+do that.
+It is set by the \var{libname} keyword in the \var{Libs} section.
 
 \item[NEEDGCCLIB] if this variable is defined, then the path to \file{libgcc}
 is added to the library path.
+It is set by the \var{needgcclib} keyword in the \var{Libs} section.
 
 \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.
+It is set by the \var{needotherlib} keyword in the \var{Libs} section.
 
 \item[OS\_TARGET] What platform you want to compile for. Added to the
 compiler command-line with a \var{-T} prepended.
 
-\item[SMARTLINK] if \var{SMARTLINK} is set to \var{YES} then the compiler
-will output smartlinked units if \var{LIBTYPE} is not set to \var{shared}.
+%\item[SMARTLINK] if \var{SMARTLINK} is set to \var{YES} then the compiler
+%will output smartlinked units if \var{LIBTYPE} is not set to \var{shared}.
 
 \end{description}
 
-\section{Variables set by \file{fpcmake}}
-
-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
-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:
-\begin{description}
-\item[Directory variables]
-\item[Program names]
-\item[File extensions]
-item[Target files]
-\end{description}
-Each of these sets is discussed in the subsequent:
-\subsection{Directory variables}
-
-The following directories are defined by the makefile:
-
-\begin{description}
-\item[BASEDIR] is set to the current directory if the \file{pwd} command is
-available. If not, it is set to '.'.
-
-\item[BASEINSTALLDIR] is the base for all directories where units are
-installed. On \linux, this is set to
-\mvar{PREFIXINSTALLDIR}\var{/lib/fpc/}\mvar{RELEASEVER}.\\ On other systems,
-it is set to \mvar{PREFIXINSTALLDIR}
-
-\item[BININSTALLDIR] is set to \mvar{BASEINSTALLDIR}/\var{bin} on \linux,
-and\\
-\mvar{BASEINSTALLDIR}/\var{bin}/\mvar{OS\_TARGET} on other systems. This is
-the place where binaries are installed.
-
-\item[GCCLIBDIR] (\linux only) is set to the directory where \file{libgcc.a}
-is.
-
-\item[LIBINSTALLDIR] is set to \mvar{BASEINSTALLDIR} on \linux,\\
- and \mvar{BASEINSTALLDIR}/\var{lib} on other systems.
-
-\item[OTHERLIBDIR] (\linux only) is set to the full set of paths in \file{/etc/ld.so.conf}
-
-\item[PREFIXINSTALLDIR] is set to \file{/usr} on \linux, \file{/pp} on \dos
-or \windowsnt.
-
-\item[SHARED\_LIBINSTALLDIR] is where shared libraries are
-installed. This equals \mvar{PREFIXINSTALLDIR}/\var{lib} on \linux, and
-\var{SHARED\_UNITINSTALLDIR} on other systems.
-
-\item[SHARED\_UNITINSTALLDIR] is where units from libraries are
-installed. This equals \mvar{UNITINSTALLDIR}/\var{shared}
-
-\item[STATIC\_LIBINSTALLDIR] is where static libraries will be
-installed. By default, it equals \mvar{STATIC\_UNITINSTALLDIR}.
-
-\item[STATIC\_UNITINSTALLDIR] is where static, smartlinked units will be
-installed. It equals \mvar{UNITINSTALLDIR}/\var{static}.
-
-\item[UNITINSTALLDIR] is where units will be installed. This is set to\\
-\mvar{BASEINSTALLDIR}/\mvar{UNITPREFIX} \\
-on \linux. On other systems, it is set to \\
-\mvar{BASEINSTALLDIR}/\mvar{UNITPREFIX}/\mvar{OS\_TARGET}.
-\end{description}
 
 \subsection{Program names}
 
@@ -5056,7 +5037,6 @@ the first \var{UNITOBJECTS} files.
 \subsection{Target files}
 
 The following variables are defined to make targets and rules easier:
-
 \begin{description}
 \item[COMPILER] is the complete compiler commandline, with all options
 added, after all \file{Makefile} variables have been examined.
@@ -5067,14 +5047,14 @@ makefile.
 by the makefile.
 \item[LOADEROFILES] is a list of object files that will be made from the
 loader assembler files. This is mainly for use in the compiler's RTL sources.
-\item[UNITFILES] a list of unit files that will be made. This is just
+\item[UNITPPUFILES] a list of unit files that will be made. This is just
 the list of unit objects, with the correct unit extension appended.
 \item[UNITOFILES] a list of unit object files that will be made.
 This is just the list of unit objects, with the correct object file
 extension appended.
 \end{description}
 
-\section{Rules and targets created by \file{makefile.fpc}}
+\section{Rules and targets created by \file{fpcmake}}
 
 The \var{makefile.fpc} defines a series of targets, which can be called by
 your own targets. They have names that resemble default names (such as
@@ -5098,8 +5078,8 @@ loaders. If \var{DEFAULTUNITS} is defined, executables are excluded from the
 targets.
 \item[fpc\_exes] target to make all executables in \var{EXEOBJECTS}.
 \item[fpc\_loaders] target to make all files in \var{LOADEROBJECTS}.
-\item[fpc\_sharedlib] target that makes all units as dynamic libraries.
-\item[fpc\_staticlib] target that makes all units as smartlinked units.
+\item[fpc\_shared] target that makes all units as dynamic libraries.
+\item[fpc\_smart] target that makes all units as smartlinked units.
 \item[fpc\_units] target to make all units in \var{UNITOBJECTS}.
 \end{description}
 
@@ -5108,8 +5088,6 @@ targets.
 The following cleaning targets are defined:
 \begin{description}
 \item[fpc\_clean] cleans all files that result when \var{fpc\_all} was made.
-\item[fpc\_libsclean] is the same as \var{fpc\_clean}, but also removes any
-shared or dynamic libraries that may have been built.
 \item[fpc\_cleanall] is the same as both previous target commands, but also
 deletes all object, unit and assembler files that are present.
 \end{description}
@@ -5118,14 +5096,13 @@ deletes all object, unit and assembler files that are present.
 
 The following archiving targets are defined:
 \begin{description}
-\item[fpc\_zipinstalladd] will add to a (possibibly existing) archive file (it's
-name is taken from \mvar{ZIPNAME}.
-\item[fpc\_zipinstall] is the same, only the archive is cleared first.
+\item[fpc\_zipinstall] will create an archive file (it's
+name is taken from \mvar{ZIPNAME}) from the compiled units.
+\item[fpc\_zipsourceinstall] will create an archive file (it's
+name is taken from \mvar{ZIPNAME}), from the sources.
 \end{description}
 The zip is made uzing the \var{ZIPEXE} program. Under \linux, a
 \file{.tar.gz} file is created.
-
-
 \subsection{Informative rules}
 
 The following targets produce information about the makefile: