POVs done
This commit is contained in:
+507
@@ -1905,6 +1905,513 @@ As we can see to test the sanity of the executable produced by the build system,
|
|||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset CommandInset line
|
||||||
|
LatexCommand rule
|
||||||
|
offset "0.5ex"
|
||||||
|
width "100col%"
|
||||||
|
height "1pt"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
\begin_inset listings
|
||||||
|
lstparams "basicstyle={\footnotesize\ttfamily},breaklines=true"
|
||||||
|
inline false
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
bin_PROGRAMS = myprog
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
myprog_SOURCES = myprog.c
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
check_SCRIPTS = greptest.sh @1
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
TESTS = $(check_SCRIPTS) @2
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
greptest.sh: @3
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
echo './myprog | grep
|
||||||
|
\begin_inset Quotes eld
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
Hello from .*jupiter!
|
||||||
|
\begin_inset Quotes erd
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
' > greptest.sh
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
chmod +x greptest.sh
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
CLEANFILES = greptest.sh @4
|
||||||
|
\begin_inset Caption Standard
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
src/Makefile.am:
|
||||||
|
Additional code required to support the check target
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset CommandInset line
|
||||||
|
LatexCommand rule
|
||||||
|
offset "0.5ex"
|
||||||
|
width "100col%"
|
||||||
|
height "1pt"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
The
|
||||||
|
\family typewriter
|
||||||
|
check_SCRIPTS
|
||||||
|
\family default
|
||||||
|
(@1) is a PLV which refers to a script that is generated at build time.
|
||||||
|
This script is only generated when
|
||||||
|
\family typewriter
|
||||||
|
make check
|
||||||
|
\family default
|
||||||
|
command is executed.
|
||||||
|
Also,
|
||||||
|
we need to keep in mind that the generated script should be cleaned (or deleted) as they are not files which should be distributed.
|
||||||
|
So,
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
CLEANFILES(@4)
|
||||||
|
\family default
|
||||||
|
variable takes care about the cleaning part.
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
The
|
||||||
|
\family typewriter
|
||||||
|
TESTS
|
||||||
|
\family default
|
||||||
|
(@2) line is the important one in Listing 13.
|
||||||
|
It tells which targets should be executed when make check is executed and since the
|
||||||
|
\family typewriter
|
||||||
|
check_SCRIPTS
|
||||||
|
\family default
|
||||||
|
have complete list of these target,
|
||||||
|
hence it is referenced.
|
||||||
|
However,
|
||||||
|
since
|
||||||
|
\family typewriter
|
||||||
|
TESTS
|
||||||
|
\family default
|
||||||
|
variable ensures that appropriate rules are generated so that the test scripts are build and executed successfully.
|
||||||
|
Therefore,
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
check_SCRIPTS
|
||||||
|
\family default
|
||||||
|
is redundant and can be skipped by replacing it with the contents of it.
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
check_*
|
||||||
|
\family default
|
||||||
|
PLVs becomes important only when helper scripts needs to build which are not executed directly but are executed by script which are listed in
|
||||||
|
\family typewriter
|
||||||
|
TESTS
|
||||||
|
\family default
|
||||||
|
variable.
|
||||||
|
Note,
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
TESTS
|
||||||
|
\family default
|
||||||
|
is actually for executing the script and Automake always build the script before executing if it is already not build.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Section
|
||||||
|
Convenience Libraries:
|
||||||
|
Static libraries.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
\begin_inset CommandInset line
|
||||||
|
LatexCommand rule
|
||||||
|
offset "0.5ex"
|
||||||
|
width "100col%"
|
||||||
|
height "1pt"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
\begin_inset listings
|
||||||
|
lstparams "basicstyle={\footnotesize\ttfamily},breaklines=true"
|
||||||
|
inline false
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
noinst_LIBRARIES = libcommon.a
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
libcomman_a_SOURCES = common.h print.c
|
||||||
|
\begin_inset Caption Standard
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
common/Makefile.am:
|
||||||
|
To build the temporary library.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset CommandInset line
|
||||||
|
LatexCommand rule
|
||||||
|
offset "0.5ex"
|
||||||
|
width "100col%"
|
||||||
|
height "1pt"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
The first line defines what library should be build and as you have noticed,
|
||||||
|
one
|
||||||
|
\family typewriter
|
||||||
|
noinst
|
||||||
|
\family default
|
||||||
|
modifier is used so that the build library is not installed into the system directory after the project is build and installed.
|
||||||
|
The goal of such library is to compile common code in one static library and used in many different section of the projects.
|
||||||
|
Here,
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
libcommon.a
|
||||||
|
\family default
|
||||||
|
is like a archive file which is given to compiler for compilation of executable.
|
||||||
|
The only difference between
|
||||||
|
\family typewriter
|
||||||
|
.tar
|
||||||
|
\family default
|
||||||
|
and
|
||||||
|
\family typewriter
|
||||||
|
.a
|
||||||
|
\family default
|
||||||
|
files is that the compiler know which object files to use to compile the executable which is present inside the static library.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Subsection
|
||||||
|
Product Option Variables
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
In order for the source files which will be used to build the executable to find the relevant code from the static library and also find the correct corresponding header files,
|
||||||
|
we need to add some additional information to the
|
||||||
|
\family typewriter
|
||||||
|
Makefile.am
|
||||||
|
\family default
|
||||||
|
(more specifically Makemodule.am)of the
|
||||||
|
\family typewriter
|
||||||
|
src
|
||||||
|
\family default
|
||||||
|
directory.
|
||||||
|
\begin_inset CommandInset line
|
||||||
|
LatexCommand rule
|
||||||
|
offset "0.5ex"
|
||||||
|
width "100col%"
|
||||||
|
height "1pt"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Standard
|
||||||
|
\begin_inset listings
|
||||||
|
lstparams "basicstyle={\footnotesize\ttfamily},breaklines=true"
|
||||||
|
inline false
|
||||||
|
status open
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
bin_PROGRAMS = myprog
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
myprog_SOURCES = main.c
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
myprog_CPPFLAGS = -I$(top_srcdir)/common
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
myprog_LDADD = ../common/libcommon.a
|
||||||
|
\begin_inset Caption Standard
|
||||||
|
|
||||||
|
\begin_layout Plain Layout
|
||||||
|
src/Makefile.am:
|
||||||
|
Adding compiler and linker directives to Makefile.am files.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset CommandInset line
|
||||||
|
LatexCommand rule
|
||||||
|
offset "0.5ex"
|
||||||
|
width "100col%"
|
||||||
|
height "1pt"
|
||||||
|
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
The two new variable added here (
|
||||||
|
\family typewriter
|
||||||
|
myprog_CPPFLAGS
|
||||||
|
\family default
|
||||||
|
and
|
||||||
|
\family typewriter
|
||||||
|
myprog_LDADD
|
||||||
|
\family default
|
||||||
|
) are
|
||||||
|
\shape italic
|
||||||
|
product option variables (POVs)
|
||||||
|
\shape default
|
||||||
|
are used to specify product-specific options to tools that are used to build products from source code.
|
||||||
|
The
|
||||||
|
\family typewriter
|
||||||
|
myprog_CPPFLAGS
|
||||||
|
\family default
|
||||||
|
variable adds product-specific C-preprocessor flags to the compiler command line for all source files that are compiled for the
|
||||||
|
\family typewriter
|
||||||
|
myprog
|
||||||
|
\family default
|
||||||
|
program.
|
||||||
|
This add reference to the list of location that the compiler will look for header file when the source files are used for compilation.
|
||||||
|
The
|
||||||
|
\family typewriter
|
||||||
|
myprog_LDADD
|
||||||
|
\family default
|
||||||
|
variable is used to add libraries to the linker command line.
|
||||||
|
The path
|
||||||
|
\family typewriter
|
||||||
|
../common/libcommon.a
|
||||||
|
\family default
|
||||||
|
is added to the linker command line while building the
|
||||||
|
\family typewriter
|
||||||
|
myprog
|
||||||
|
\family default
|
||||||
|
product so that the relevant object files can be used to link and build the product.
|
||||||
|
The variables
|
||||||
|
\family typewriter
|
||||||
|
program_LDADD
|
||||||
|
\family default
|
||||||
|
and
|
||||||
|
\family typewriter
|
||||||
|
program_LIBADD
|
||||||
|
\family default
|
||||||
|
is only necessary for libraries that are built as part of our own package.
|
||||||
|
If our project requires libraries which are already a part of user's system,
|
||||||
|
then all we need is a macro call of
|
||||||
|
\family typewriter
|
||||||
|
AC_CHECK_LIB
|
||||||
|
\family default
|
||||||
|
or
|
||||||
|
\family typewriter
|
||||||
|
AC_SEARCH_LIB
|
||||||
|
\family default
|
||||||
|
in configure.ac file.
|
||||||
|
This will generate appropriate script in
|
||||||
|
\family typewriter
|
||||||
|
configure
|
||||||
|
\family default
|
||||||
|
that will add the references to these libraries in linker command via
|
||||||
|
\family typewriter
|
||||||
|
LIBS
|
||||||
|
\family default
|
||||||
|
variable.
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
The set of POVs supported by Automake are listed below:
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
product_CPPFLAGS
|
||||||
|
\family default
|
||||||
|
:
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
Use
|
||||||
|
\family typewriter
|
||||||
|
product_CPPFLAGS
|
||||||
|
\family default
|
||||||
|
to pass flags to the C preprocessor on compiler command line.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
product_CFLAGS
|
||||||
|
\family default
|
||||||
|
:
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
Same as above but for C-compiler flags.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
product_LDFLAGS
|
||||||
|
\family default
|
||||||
|
:
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
Use
|
||||||
|
\family typewriter
|
||||||
|
product_LDFLAGS
|
||||||
|
\family default
|
||||||
|
to pass global and order-independent shared library and program linker configuration flags and options to the linker,
|
||||||
|
including -static,
|
||||||
|
-version-info,
|
||||||
|
-release,
|
||||||
|
and so on.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
program_LDADD
|
||||||
|
\family default
|
||||||
|
:
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
Use
|
||||||
|
\family typewriter
|
||||||
|
program_LDADD
|
||||||
|
\family default
|
||||||
|
to add libtool objects (
|
||||||
|
\family typewriter
|
||||||
|
.lo
|
||||||
|
\family default
|
||||||
|
) or libraries (
|
||||||
|
\family typewriter
|
||||||
|
.la
|
||||||
|
\family default
|
||||||
|
) or non-Libtool objects (
|
||||||
|
\family typewriter
|
||||||
|
.o
|
||||||
|
\family default
|
||||||
|
) or archives (.
|
||||||
|
\family typewriter
|
||||||
|
a
|
||||||
|
\family default
|
||||||
|
) to the linker command line when linking a program.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
library_LIBADD
|
||||||
|
\family default
|
||||||
|
:
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
Use
|
||||||
|
\family typewriter
|
||||||
|
library_LIBADD
|
||||||
|
\family default
|
||||||
|
to add non-Libtool linker objects and archives to non-Libtool archives on the
|
||||||
|
\family typewriter
|
||||||
|
ar
|
||||||
|
\family default
|
||||||
|
utility command line.
|
||||||
|
The
|
||||||
|
\family typewriter
|
||||||
|
ar
|
||||||
|
\family default
|
||||||
|
utility will incorporate archives mentioned on the command line into the product archive,
|
||||||
|
so you can use this variable to gather multiple archives together into one.
|
||||||
|
\end_layout
|
||||||
|
|
||||||
|
\begin_layout Itemize
|
||||||
|
|
||||||
|
\family typewriter
|
||||||
|
ltlibrary_LIBADD
|
||||||
|
\family default
|
||||||
|
:
|
||||||
|
\begin_inset Newline newline
|
||||||
|
\end_inset
|
||||||
|
|
||||||
|
Use
|
||||||
|
\family typewriter
|
||||||
|
ltlibrary_LIBADD
|
||||||
|
\family default
|
||||||
|
to add Libtool linker objects (
|
||||||
|
\family typewriter
|
||||||
|
.lo
|
||||||
|
\family default
|
||||||
|
) and Libtool static or shared libraries (
|
||||||
|
\family typewriter
|
||||||
|
.la
|
||||||
|
\family default
|
||||||
|
) to a Libtool static or shared library.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\end_body
|
\end_body
|
||||||
|
|||||||
Reference in New Issue
Block a user