summaryrefslogtreecommitdiff
path: root/gsl-1.9/doc/autoconf.texi
diff options
context:
space:
mode:
Diffstat (limited to 'gsl-1.9/doc/autoconf.texi')
-rw-r--r--gsl-1.9/doc/autoconf.texi132
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.