diff options
Diffstat (limited to 'gsl-1.9/doc/autoconf.texi')
-rw-r--r-- | gsl-1.9/doc/autoconf.texi | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/gsl-1.9/doc/autoconf.texi b/gsl-1.9/doc/autoconf.texi new file mode 100644 index 0000000..8f8344a --- /dev/null +++ b/gsl-1.9/doc/autoconf.texi @@ -0,0 +1,132 @@ +@cindex autoconf, using with GSL + +For applications using @code{autoconf} the standard macro +@code{AC_CHECK_LIB} can be used to link with GSL automatically +from a @code{configure} script. The library itself depends on the +presence of a @sc{cblas} and math library as well, so these must also be +located before linking with the main @code{libgsl} file. The following +commands should be placed in the @file{configure.ac} file to perform +these tests, + +@example +AC_CHECK_LIB(m,main) +AC_CHECK_LIB(gslcblas,main) +AC_CHECK_LIB(gsl,main) +@end example + +@noindent +It is important to check for @code{libm} and @code{libgslcblas} before +@code{libgsl}, otherwise the tests will fail. Assuming the libraries +are found the output during the configure stage looks like this, + +@example +checking for main in -lm... yes +checking for main in -lgslcblas... yes +checking for main in -lgsl... yes +@end example + +@noindent +If the library is found then the tests will define the macros +@code{HAVE_LIBGSL}, @code{HAVE_LIBGSLCBLAS}, @code{HAVE_LIBM} and add +the options @code{-lgsl -lgslcblas -lm} to the variable @code{LIBS}. + +The tests above will find any version of the library. They are suitable +for general use, where the versions of the functions are not important. +An alternative macro is available in the file @file{gsl.m4} to test for +a specific version of the library. To use this macro simply add the +following line to your @file{configure.in} file instead of the tests +above: + +@example +AM_PATH_GSL(GSL_VERSION, + [action-if-found], + [action-if-not-found]) +@end example + +@noindent +The argument @code{GSL_VERSION} should be the two or three digit +@sc{major.minor} or @sc{major.minor.micro} version number of the release +you require. A suitable choice for @code{action-if-not-found} is, + +@example +AC_MSG_ERROR(could not find required version of GSL) +@end example + +@noindent +Then you can add the variables @code{GSL_LIBS} and @code{GSL_CFLAGS} to +your Makefile.am files to obtain the correct compiler flags. +@code{GSL_LIBS} is equal to the output of the @code{gsl-config --libs} +command and @code{GSL_CFLAGS} is equal to @code{gsl-config --cflags} +command. For example, + +@example +libfoo_la_LDFLAGS = -lfoo $(GSL_LIBS) -lgslcblas +@end example + +@noindent +Note that the macro @code{AM_PATH_GSL} needs to use the C compiler so it +should appear in the @file{configure.in} file before the macro +@code{AC_LANG_CPLUSPLUS} for programs that use C++. + +To test for @code{inline} the following test should be placed in your +@file{configure.in} file, + +@example +AC_C_INLINE + +if test "$ac_cv_c_inline" != no ; then + AC_DEFINE(HAVE_INLINE,1) + AC_SUBST(HAVE_INLINE) +fi +@end example + +@noindent +and the macro will then be defined in the compilation flags or by +including the file @file{config.h} before any library headers. + +The following autoconf test will check for @code{extern inline}, + +@smallexample +dnl Check for "extern inline", using a modified version +dnl of the test for AC_C_INLINE from acspecific.mt +dnl +AC_CACHE_CHECK([for extern inline], ac_cv_c_extern_inline, +[ac_cv_c_extern_inline=no +AC_TRY_COMPILE([extern $ac_cv_c_inline double foo(double x); +extern $ac_cv_c_inline double foo(double x) @{ return x+1.0; @}; +double foo (double x) @{ return x + 1.0; @};], +[ foo(1.0) ], +[ac_cv_c_extern_inline="yes"]) +]) + +if test "$ac_cv_c_extern_inline" != no ; then + AC_DEFINE(HAVE_INLINE,1) + AC_SUBST(HAVE_INLINE) +fi +@end smallexample + +The substitution of portability functions can be made automatically if +you use @code{autoconf}. For example, to test whether the BSD function +@code{hypot} is available you can include the following line in the +configure file @file{configure.in} for your application, + +@example +AC_CHECK_FUNCS(hypot) +@end example + +@noindent +and place the following macro definitions in the file +@file{config.h.in}, + +@example +/* Substitute gsl_hypot for missing system hypot */ + +#ifndef HAVE_HYPOT +#define hypot gsl_hypot +#endif +@end example + +@noindent +The application source files can then use the include command +@code{#include <config.h>} to substitute @code{gsl_hypot} for each +occurrence of @code{hypot} when @code{hypot} is not available. |