configure.in 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. dnl Process this file with autoconf to produce a configure script.
  2. AC_INIT(avram,0.13.0,[email protected])
  3. dnl Every other copy of the package version number gets its value from here
  4. AM_INIT_AUTOMAKE(avram, 0.13.0)
  5. AM_CONFIG_HEADER(config.h)
  6. AC_SUBST(VERSION)
  7. ISODATE=`date +%Y-%m-%d`
  8. AC_SUBST(ISODATE)
  9. dnl Checks for programs.
  10. AC_PROG_INSTALL
  11. AC_PROG_CC
  12. AC_PROG_MAKE_SET
  13. AM_PROG_CC_C_O
  14. dnl Checks for header files.
  15. AC_HEADER_STDC
  16. AC_CHECK_HEADERS(
  17. ctype.h fcntl.h strings.h time.h sys/file.h sys/time.h unistd.h math.h,,
  18. [AC_MSG_ERROR(missing one of ctype.h fcntl.h strings.h time.h sys/file.h sys/time.h unistd.h math.h)])
  19. AC_CHECK_HEADER(
  20. argz.h,
  21. [AC_DEFINE([HAVE_ARGZ_H],1,[if you have the argz library])],
  22. [AC_MSG_WARN(no argz.h so AVMINPUTS unsupported)])
  23. AC_CHECK_HEADER(
  24. fenv.h,
  25. [AC_DEFINE([HAVE_FENV],1,[if you have floating point math])],
  26. [AC_MSG_WARN(no fenv.h so floating math unsupported)])
  27. AC_CHECK_HEADER(
  28. complex.h,
  29. [AC_DEFINE([HAVE_COMPLEX],1,[if you have complex math])],
  30. [AC_MSG_WARN(no complex.h so complex math unsupported)])
  31. AC_CHECK_HEADER(
  32. setjmp.h,
  33. [AC_DEFINE([HAVE_SETJMP],1,[Define if you have setjmp functions])],
  34. [AC_MSG_WARN(setjmp not detected for memory management)])
  35. AC_CHECK_HEADER(
  36. malloc.h,
  37. [AC_CHECK_DECLS(
  38. __malloc_hook,
  39. [AC_CHECK_DECLS(
  40. __realloc_hook,
  41. [AC_CHECK_DECLS(
  42. __free_hook,
  43. [AC_DEFINE([HAVE_MALLOC],1,[Define if you have the standard malloc.h header])],
  44. [AC_MSG_WARN(__free_hook not detected for memory management)],
  45. [#include<malloc.h>])],
  46. [AC_MSG_WARN(__realloc_hook not detected for memory management)],
  47. [#include<malloc.h>])],
  48. [AC_MSG_WARN(__malloc_hook not detected for memory management)],
  49. [#include<malloc.h>])],
  50. [AC_MSG_WARN(malloc.h header not detected for memory management)])
  51. dnl Checks for typedefs, structures, and compiler characteristics.
  52. dnl AC_CANONICAL_HOST
  53. AC_C_CONST
  54. AC_TYPE_SIZE_T
  55. dnl Checks for library functions.
  56. AC_CHECK_FUNCS(
  57. strdup strstr,,
  58. [AC_MSG_ERROR(missing either strdup or strstr)])
  59. AC_CHECK_FUNCS(ctime_r,,[AC_MSG_WARN(no ctime_r so using non-reentrant ctime)])
  60. AC_CHECK_FUNCS(strerror,,[AC_MSG_WARN(no strerror so error messages truncated)])
  61. AC_REPLACE_FUNCS(memmove)
  62. dnl checks for libraries
  63. AM_PATH_LIBGCRYPT(
  64. ,
  65. [AC_DEFINE([HAVE_GCRYPT],1,[Define if you have libgcrypt]) LIBS="$LIBGCRYPT_LIBS $LIBS"],
  66. [AC_MSG_WARN(no gcrypt so remote execution disabled)])
  67. dnl allow for a non-root installation
  68. LDFLAGS="$LDFLAGS -L$HOME/lib"
  69. CPPFLAGS="$CPPFLAGS -I$HOME/include"
  70. CPPFLAGS="$CPPFLAGS -I/usr/local/include"
  71. LDFLAGS="$LDFLAGS -L/usr/local/lib $LIBLTDL"
  72. dnl LDFLAGS="$LDFLAGS -L$HOME/lib $LIBLTDL"
  73. dnl CPPFLAGS="$CPPFLAGS -I$HOME/include $LTDLINCL"
  74. dnl is there a macro to check for a list of headers atomically?
  75. AC_CHECK_LIB(
  76. gslcblas,
  77. cblas_xerbla,
  78. LIBS="-lgslcblas "$LIBS; [AC_CHECK_LIB(
  79. gsl,
  80. gsl_sf_bessel_J0,
  81. [AC_CHECK_HEADER(
  82. gsl/gsl_deriv.h,
  83. [AC_CHECK_HEADER(
  84. gsl/gsl_sum.h,
  85. [AC_CHECK_HEADER(
  86. gsl/gsl_integration.h,
  87. [AC_CHECK_HEADER(
  88. gsl/gsl_math.h,
  89. [AC_CHECK_HEADER(
  90. gsl/gsl_sf_bessel.h,
  91. [AC_CHECK_HEADER(
  92. gsl/gsl_errno.h,
  93. [AC_DEFINE([HAVE_GSL],1,[Define if you have the GNU Scientific library]) LIBS="-lgsl "$LIBS],
  94. [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
  95. [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
  96. [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
  97. [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
  98. [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
  99. [AC_MSG_WARN(no gsl headers so numerical analysis functions disabled)])],
  100. [])],
  101. [AC_MSG_WARN(no gsl cblas library so numerical functions disabled)],
  102. [])
  103. AC_CHECK_LIB(
  104. glpk,
  105. glp_create_index,
  106. [AC_CHECK_HEADER(
  107. glpk.h,
  108. [AC_DEFINE([HAVE_GLPK],1,[Define if you have the GNU linear programming kit]) LIBS="-lglpk "$LIBS],
  109. [AC_MSG_WARN(no glpk.h so linear programming functions disabled)])],
  110. [AC_MSG_WARN(no glpk lib so linear programming disabled)])
  111. AC_CHECK_LIB(
  112. colamd,
  113. symamd,
  114. LIBS="-lcolamd "$LIBS; [AC_CHECK_LIB(
  115. lpsolve55,
  116. make_lp,
  117. [AC_CHECK_HEADER(
  118. lpsolve/lp_lib.h,
  119. [AC_DEFINE([HAVE_LPSOLVE],1,[Define if you have lpsolve]) LIBS="-llpsolve55 "$LIBS],
  120. [AC_MSG_WARN(no lp_lib.h so linear programming functions disabled)])],
  121. [AC_MSG_WARN(no lpsolve55 lib so linear programming disabled)])],
  122. [AC_MSG_WARN(no libltdl so lpsolve disabled)])
  123. AC_CHECK_LIB(
  124. mpfr,
  125. mpfr_add,
  126. [AC_CHECK_HEADER(
  127. mpfr.h,
  128. AC_DEFINE([HAVE_MPFR],1,[Define if you have the mpfr arbitrary precision library]) LIBS="-lmpfr "$LIBS,
  129. [AC_MSG_WARN(no mpfr.h header so arbitrary precision math disabled)])],
  130. [AC_MSG_WARN(no mpfr library so arbitrary precision math disabled)])
  131. dnl the gmp header file isn't needed
  132. AC_CHECK_LIB(
  133. gmp,
  134. __gmp_randinit_default,
  135. [AC_DEFINE([HAVE_GMP],1,[Define if you have GNU multiple precision library]) LIBS="-lgmp "$LIBS],
  136. [AC_MSG_WARN(no libgmp so arbitrary precision math partly disabled)])
  137. dnl umfpak requires blas and amd libraries already defined or else the check for it won't work
  138. AC_CHECK_LIB(
  139. blas,
  140. dscal_,
  141. [AC_CHECK_LIB(
  142. amd,
  143. amd_free,
  144. LIBS="-lblas -lamd "$LIBS; [AC_CHECK_LIB(
  145. umfpack,
  146. umfpack_di_free_numeric,
  147. [AC_CHECK_HEADER(
  148. suitesparse/umfpack.h,
  149. [AC_DEFINE([HAVE_UMF],1,[Define if you have the ufsparse libraries]) LIBS="-lumfpack "$LIBS],
  150. [AC_MSG_WARN(no umfpack.h header so sparse matrices disabled)])],
  151. [AC_MSG_WARN(no umfpack library so sparse matrices disabled)],
  152. [])],
  153. [AC_MSG_WARN(no amd library so sparse matrices disabled)],
  154. [])],
  155. [AC_MSG_WARN(no blas so sparse matrices disabled)],
  156. [])
  157. dnl lapack has no header file so only the library is checked
  158. dnl harminv is checked only if lapack is present
  159. AC_CHECK_LIB(
  160. lapack,
  161. dgesvx_,
  162. [AC_DEFINE([HAVE_LAPACK],1,[Define if you have the lapack library]) LIBS="-llapack "$LIBS; AC_CHECK_LIB(
  163. harminv,
  164. harminv_solve,
  165. AC_DEFINE([HAVE_HARMINV],1,[Define if you have the harminv library]) LIBS="-lharminv "$LIBS,
  166. [AC_MSG_WARN(no harminv library so harmonic inversiondisabled)],
  167. [])],
  168. [AC_MSG_WARN(no lapack so some linear algebra functions disabled)],
  169. [])
  170. AC_CHECK_LIB(
  171. fftw3,
  172. fftw_plan_dft_1d,
  173. [AC_CHECK_HEADER(
  174. fftw3.h,
  175. [AC_DEFINE([HAVE_FFTW],1,[Define if you have the fftw library]) LIBS=$LIBS" -lfftw3"],
  176. [AC_MSG_WARN(no fftw.h header so fourier transforms disabled)])],
  177. [AC_MSG_WARN(no fftw library so fourier transforms disabled)],
  178. [])
  179. dnl minpack.h might be a Debian addition
  180. AC_CHECK_LIB(
  181. minpack,
  182. hybrd_,
  183. [AC_CHECK_HEADER(
  184. minpack.h,
  185. [AC_DEFINE([HAVE_MINPACK],1,[Define if you have the minpack library]) LIBS="-lminpack "$LIBS],
  186. [AC_MSG_WARN(no minpack.h header so non-linear optimization disabled)])],
  187. [AC_MSG_WARN(no minpack library so non-linear optimization disabled)],
  188. [])
  189. AC_CHECK_LIB(
  190. sundials_kinsol,
  191. KINCreate,
  192. [AC_CHECK_LIB(
  193. sundials_nvecserial,
  194. N_VNew_Serial,
  195. CPPFLAGS="$CPPFLAGS -I/usr/include/sundials -I/usr/include/kinsol -I/usr/include/nvector"; [AC_CHECK_HEADER(
  196. sundials_types.h,
  197. [AC_CHECK_HEADER(
  198. sundials_math.h,
  199. [AC_CHECK_HEADER(
  200. sundials_nvector.h,
  201. dnl [AC_CHECK_HEADER(
  202. dnl sundials_smalldense.h,
  203. [AC_CHECK_HEADER(
  204. kinsol.h,
  205. [AC_CHECK_HEADER(
  206. kinsol_dense.h,
  207. [AC_CHECK_HEADER(
  208. kinsol_spgmr.h,
  209. [AC_CHECK_HEADER(
  210. kinsol_spbcgs.h,
  211. [AC_CHECK_HEADER(
  212. kinsol_sptfqmr.h,
  213. [AC_CHECK_HEADER(
  214. kinsol_spils.h,
  215. [AC_CHECK_HEADER(
  216. nvector_serial.h,
  217. [AC_DEFINE(
  218. [HAVE_KINSOL],
  219. 1,
  220. [Define for sundials]) LIBS="-lsundials_kinsol -lsundials_nvecserial "$LIBS],
  221. [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  222. [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  223. [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  224. [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  225. [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  226. [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  227. [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  228. dnl [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  229. [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  230. [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  231. [AC_MSG_WARN(no kinsol headers so non-linear optimization disabled)])],
  232. [AC_MSG_WARN(no kinsol library so non-linear optimization disabled)],
  233. [])],
  234. [AC_MSG_WARN(no kinsol library so non-linear optimization disabled)],
  235. [])
  236. dnl checking for the Rmath header requires MATHLIB_STANDALONE to be defined or it won't work
  237. AC_CHECK_LIB(
  238. Rmath,
  239. bessel_i,
  240. CPPFLAGS="$CPPFLAGS -DMATHLIB_STANDALONE"; [AC_CHECK_HEADER(
  241. Rmath.h,
  242. [AC_DEFINE([HAVE_RMATH],1,[Define if you have the GNU R math library]) LIBS="-lRmath -lm "$LIBS],
  243. [AC_MSG_WARN(no Rmath.h header so statistical functions disabled)])],
  244. [AC_MSG_WARN(no Rmath library so statistical functions disabled)],
  245. [])
  246. dnl is there a right way to detect and link a shared library whose filename ends with .so.something?
  247. AC_CHECK_FILE(
  248. /usr/lib/libexpect.so.5,
  249. EXPATH=" /usr/lib/libexpect.so.5",
  250. [AC_CHECK_FILE(
  251. /usr/local/lib/libexpect.so.5,
  252. EXPATH=" /usr/local/lib/libexpect.so.5",
  253. [AC_CHECK_FILE(
  254. $HOME/lib/libexpect.so.5,
  255. EXPATH=" $HOME/lib/libexpect.so.5",
  256. [AC_CHECK_FILE(
  257. /lib/libexpect.so.5,
  258. EXPATH=" /lib/libexpect.so.5",
  259. [AC_CHECK_FILE(
  260. /usr/lib/libexpect.so,
  261. EXPATH=" /usr/lib/libexpect.so",
  262. [AC_CHECK_FILE(
  263. /usr/local/lib/libexpect.so,
  264. EXPATH=" /usr/local/lib/libexpect.so",
  265. [AC_CHECK_FILE(
  266. $HOME/lib/libexpect.so,
  267. EXPATH=" $HOME/lib/libexpect.so",
  268. [AC_CHECK_FILE(
  269. /lib/libexpect.so,
  270. EXPATH=" /lib/libexpect.so",
  271. [AC_CHECK_FILE(
  272. /usr/lib/libexpect5.43.so,
  273. EXPATH=" /usr/lib/libexpect5.43.so",
  274. [AC_CHECK_FILE(
  275. /usr/local/lib/libexpect5.43.so,
  276. EXPATH=" /usr/local/lib/libexpect5.43.so",
  277. [AC_CHECK_FILE(
  278. $HOME/lib/libexpect5.43.so,
  279. EXPATH=" $HOME/lib/libexpect5.43.so",
  280. [AC_CHECK_FILE(
  281. /lib/libexpect5.43.so,
  282. EXPATH=" /lib/libexpect5.43.so",
  283. [AC_CHECK_FILE(
  284. /lib/libexpect5.44.so,
  285. EXPATH=" /lib/libexpect5.44.so",
  286. [])])])])])])])])])])])])])
  287. AC_CHECK_LIB(
  288. util,
  289. openpty,
  290. [AC_CHECK_HEADER(
  291. tcl8.4/expect.h,
  292. AC_DEFINE([HAVE_EXPECT],1,[Define if you have libexpect]) LIBS="-lutil -ltcl8.4"$EXPATH" "$LIBS,
  293. [AC_CHECK_LIB(
  294. util,
  295. openpty,
  296. [AC_CHECK_HEADER(
  297. tcl8.5/expect.h,
  298. AC_DEFINE([HAVE_EXPECT],1,[Define if you have libexpect]) LIBS="-lutil -ltcl8.5"$EXPATH" "$LIBS,
  299. [AC_MSG_WARN(no libexpect so --interactive is disabled)])],
  300. [AC_MSG_WARN(no openpty in libutil so --interactive is disabled)])])],
  301. [AC_MSG_WARN(no openpty in libutil so --interactive is disabled)])
  302. dnl CPPFLAGS="$CPPFLAGS -pedantic -Wall"
  303. CFLAGS="-O3 -mtune=native -march=native"
  304. AC_OUTPUT(Makefile avram.lsm avram.spec avm/Makefile src/Makefile doc/Makefile)