1 dnl *****************************************************************************
2 dnl FILE IDENTIFICATION
4 dnl Purpose: Top-level routines of CTSim program
5 dnl Programmer: Kevin Rosenberg
6 dnl Date Started: July 2000
8 dnl This is part of the CTSim program
9 dnl Copyright (c) 1983-2009 Kevin Rosenberg
11 dnl This program is free software; you can redistribute it and/or modify
12 dnl it under the terms of the GNU General Public License (version 2) as
13 dnl published by the Free Software Foundation.
15 dnl This program is distributed in the hope that it will be useful,
16 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
17 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 dnl GNU General Public License for more details.
20 dnl You should have received a copy of the GNU General Public License
21 dnl along with this program; if not, write to the Free Software
22 dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 dnl****************************************************************************/
25 dnl Process this file with autoconf to produce a configure script.
27 dnl Must reset CDPATH so that bash's cd does not print to stdout
30 AC_INIT([CTSim], [6.0.0], [ctsim-users@kpe.io], [ctsim], [http://www.ctsim.org/])
31 AC_CONFIG_SRCDIR([src/ctsim.cpp])
32 AC_CONFIG_MACRO_DIR([scripts])
33 dnl permit auxiliary scripts directory (e.g. config.sub, config.guess, install-sh)
34 AC_CONFIG_AUX_DIR(scripts/)
39 AM_CONFIG_HEADER(config.h)
41 dnl Checks for programs.
51 AC_PATH_PROG(wxconfig,wx-config)
53 dnl Check for C operation
56 AC_CHECK_SIZEOF(short, 2)
57 AC_CHECK_SIZEOF(int, 4)
58 AC_CHECK_SIZEOF(long, 4)
59 AC_CHECK_SIZEOF(float, 4)
60 AC_CHECK_SIZEOF(double, 8)
63 dnl Checks for libraries.
64 AC_CHECK_LIB(z, deflate, [ zlib="true" ], [ zlib="false" ; AC_MSG_WARN([zlib missing. Will need zlib for PNG support])])
66 AC_CHECK_LIB(curses, main, [curses=true], [curses=false])
67 AC_CHECK_LIB(ncurses, main, [ncurses=true], [ncurses=false])
68 AC_CHECK_LIB(readline, main, [readline=true;
69 AC_DEFINE([HAVE_READLINE],1,[Readline library])],
70 [readline=false], [-lcurses])
72 AC_CHECK_LIB(gtk-x11-2.0, main, [hasx11gtk2=true], [])
73 if test "x$hasx11gtk2" = "x" ; then
74 AC_MSG_NOTICE([Does not have X11 GTK2])
75 AC_DEFUN([AM_PATH_GLIB_2_0], [])
76 AC_DEFUN([AM_PATH_GTK_2_0], [])
78 if test "$hasx11gtk2" = "true" ; then
79 AM_PATH_GLIB_2_0(2.0.0,,AC_MSG_ERROR(You should get glib 2.0.0 or better.))
80 AM_PATH_GTK_2_0(2.0.0,havegtk_am=yes,havegtk_am=no)
81 CFLAGS="${CFLAGS} ${g76GTK_CFLAGS} ${GLIB_CFLAGS}"
84 AC_CHECK_LIB(wx_gtk2u_core-3.0, main, [wxwin=true; wx_gtk=true; AC_DEFINE(HAVE_WXWINDOWS,1,[wxwindows library])], [], [-L/usr/lib64 -L/usr/lib ${GTK_LIBS} ${GLIB_LIBS} ])
85 AC_CHECK_LIB(wx_mac_core-3.0, main, [wxwin=true; wx_mac=true; AC_DEFINE(HAVE_WXWINDOWS,1,[wxwindows library])])
86 AC_CHECK_LIB(fftw3, fftw_malloc, [fftw=true; AC_DEFINE(HAVE_FFTW,1,[FFTW library])], [fftw=false], [-L/usr/lib64 -L/usr/lib])
87 AC_CHECK_LIB(GL, main, [libgl=true], [libgl=false], [-L/usr/X11R6/lib -L/usr/X11R6/lib64])
88 AC_CHECK_LIB(pthread, main, [pthread=true], [pthread=false])
90 if test "$zlib" = "true" ; then
91 AC_CHECK_LIB(png, main, [png=true ; AC_DEFINE(HAVE_PNG,1,[PNG library])], [png=false], [-L/opt/local/lib -lz -lm])
94 dnl Checks for header files.
96 AC_CHECK_HEADERS(fcntl.h unistd.h getopt.h sys/fcntl.h setjmp.h stdarg.h stddef.h sys/types.h sys/stat.h string.h ctype.h math.h stdio.h netinet/in.h inttypes.h sys/param.h stdint.h stdlib.h assert.h sys/time.h sys/resource.h sys/time.h readline.h readline/readline.h)
98 dnl Checks for typedefs, structures, and compiler characteristics.
104 dnl Checks for library functions.
106 AC_CHECK_FUNCS(strtod strtol snprintf htonl usleep vsprintf vsnprintf basename setjmp setpriority time gettimeofday getenv)
107 AC_CHECK_FUNC(basename)
108 AC_CHECK_FUNC(setjmp)
109 AC_CHECK_FUNC(setpriority)
111 AC_CHECK_FUNC(gettimeofday)
112 AC_CHECK_FUNC(getopt, [ getopt=true ], [ getopt=false ])
114 if test "${OSTYPE}" = "cygwin" ; then
117 AC_CHECK_FUNC(getopt_long, [ getopt_long=true ], [ getopt_long=false ])
120 if test "${getopt_long}" = "false" ; then
121 my_includes="$my_includes -I../getopt"
122 AC_DEFINE(HAVE_GETOPT_LONG,1,[getopt_long library])
123 ctlibs_base="$ctlibs_base -lgetopt"
124 LDFLAGS="$LDFLAGS -L../getopt"
127 AM_CONDITIONAL(INCLUDED_GETOPT_LONG, test "$GETOPTLONG"="1")
131 i386|i486|i586|i686|x86|x86_64)
133 CFLAGS="$CFLAGS $CPUEXT_FLAGS $SIMD_FLAGS"
134 CXXFLAGS="$CXXFLAGS $CPUEXT_FLAGS $SIMD_FLAGS"
137 ARCH_OPTION="-fno-common -faltivec";;
138 armv1*|armv2*|armv3*|armv4*|armv5*|armv6*)
139 ARCH_OPTION="-ffast-math";;
141 ARCH_OPTION="-ffast-math -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4";;
143 # unknown architecture : use portable C version
146 CPPFLAGS="$CPPFLAGS $ARCH_OPTION"
147 CXXFLAGS="$CPPFLAGS $ARCH_OPTION"
149 if test "${readline}" = "true" ; then
150 ctlibs_base="$ctlibs_base -lreadline"
151 if test "${ncurses}" = "true"; then
152 ctlibs_base="$ctlibs_base -lncurses"
153 elif test "${curses}" = "true"; then
154 ctlibs_base="$ctlibs_base -lcurses"
158 dnl Check for debug mode
159 AC_MSG_CHECKING([debug])
161 [ --enable-debug Turn on debugging],
162 [case "${enableval}" in
169 *) AC_MSG_RESULT([bad value ${enableval} for --enable-debug])
172 [debug=false; AC_MSG_RESULT(no)])
173 AM_CONDITIONAL(DEBUG, test "$debug" = "true")
175 if test "$datadir" != "" ; then
176 CPPFLAGS="$CPPFLAGS -DDATADIR=\"\\\"$datadir\\\"\""
178 dnl CFLAGS="$CFLAGS -I/usr/local/include"
179 dnl LDFLAGS="$LDFLAGS -L/usr/local/lib"
181 if test "$debug" = "true" ; then
182 CFLAGS="$CFLAGS -g -O0 -DDEBUG"
183 AC_DEFINE(DEBUG,1,[turn on debugging])
185 CFLAGS="$CFLAGS -O2 -DNDEBUG -fomit-frame-pointer"
186 AC_DEFINE(NDEBUG,1,[no debugging])
189 if test "${pthread}" = "true" ; then
190 dnl CFLAGS="$CFLAGS -D_REENTRANT"
191 AC_DEFINE(HAVE_WXTHREADS,1,[have wxthreads library])
194 AC_MSG_CHECKING(sstream)
195 if [ test -f /usr/include/sstream || test -f /usr/include/g++/sstream ||
196 test -f /usr/include/g++-2/sstream || test -f /usr/include/g++-3/sstream ||
197 test -f /usr/include/gcc/darwin/3.1/g++-v3/sstream ]; then
198 AC_DEFINE(HAVE_SSTREAM,1,[sstream header])
205 CFLAGS="$CFLAGS -Wall"
206 AC_MSG_CHECKING(whether to enable verbose warnings)
207 AC_ARG_ENABLE(verbose-warnings,
208 [ --enable-verbose-warnings
209 Enable verbose compiler warnings.],
210 [ case "$enableval" in
213 CFLAGS="$CFLAGS -W -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wwrite-strings -Waggregate-return -Wmissing-prototypes -Wstrict-prototypes -pedantic -Wredundant-decls"
218 esac ], AC_MSG_RESULT(no)
221 AC_MSG_CHECKING(static executables)
222 AC_ARG_ENABLE(static,
224 Enable static executables.],
225 [ case "$enableval" in
228 CFLAGS="$CFLAGS --static"
233 esac ], AC_MSG_RESULT(no)
236 dnl Checking if use OpenMP
237 AC_MSG_CHECKING(OpenMP)
238 AC_ARG_ENABLE(openmp,
240 Enable use of OpenMP.],
241 [ case "$enableval" in
245 CFLAGS="$CFLAGS $OPENMP_CFLAGS"
246 CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
251 esac ], AC_MSG_RESULT(no)
256 [ --with-lam[=PATH] Set path of LAM MPI ],
257 [ if test "$withval" != "no" ; then
262 if test "$withval" != "no" ; then
263 if test "$prefix" != "NONE" ; then
264 trylamdir="$trylamdir $prefix"
267 AC_MSG_CHECKING([for LAM MPI installation])
268 for testlamdir in "." $trylamdir /usr/local /usr/local/lam /usr /usr/lam /opt /opt/lam ; do
269 if test -x "$testlamdir/bin/hcp" ; then
270 if test "$testlamdir" != "/usr"; then
271 LDFLAGS="$LDFLAGS -L$testlamdir/lib"
272 CFLAGS="$CFLAGS -I$testlamdir/include"
274 CFLAGS="$CFLAGS -I$testlamdir/include/mpi2c++"
282 AC_MSG_RESULT($lamdir)
290 [ --with-ctn[=PATH] Set path of CTN DICOM library ],
291 [ if test "$withval" != "no" ; then
296 if test "$withval" = "no" -o "$withval" = "NONE" ; then
297 AC_MSG_CHECKING([for CTN DICOM installation])
298 AC_MSG_RESULT([disabled])
300 AC_MSG_CHECKING([for CTN DICOM installation])
301 for testctndir in $tryctndir/lib /usr/local/lib /usr/local/ctn/lib /usr/lib /usr/ctn/lib /usr/lib/ctn /opt/ctn/lib ; do
302 if test -f "$testctndir/libctn.a" ; then
303 LDFLAGS="$LDFLAGS -L$testctndir"
308 for testctndir in $tryctndir/include /usr/local/include /usr/local/ctn/include /usr/include /usr/include/ctn /usr/ctn/include /opt/ctn/include ; do
309 if test -f "$testctndir/ctn_os.h" ; then
310 CFLAGS="$CFLAGS -I$testctndir"
315 if test "$ctnlib" = "true" -a "$ctninclude" = "true" ; then
317 AC_DEFINE(HAVE_CTN_DICOM,1,[ctn dicom library])
325 AC_MSG_CHECKING([for CPU specification])
327 [ --with-mcpu[=CPU] Set name of CPU for gcc -mcpu])
329 if test "$withval" = "no" -o "$withval" = "yes" -o "$withval" = ""; then
332 AC_MSG_RESULT([$withval])
333 CFLAGS="$CFLAGS -mcpu=$withval"
336 AC_MSG_CHECKING([for web access])
337 dnl Set cgi-bin directory
338 AC_ARG_WITH(cgibin-dir, [ --with-cgibin-dir=PATH Set path of CGI binaries directory ],
339 [ cgibindir=$withval ; AC_SUBST(cgibindir) ] )
341 AC_ARG_WITH(cgibin-url, [ --with-cgibin-url=PATH Set URL path of CGI binaries ],
342 [ cgibinurl=$withval ; AC_SUBST(cgibinurl) ] )
344 AC_ARG_WITH(webdata-dir, [ --with-webdata-dir=PATH Set path of webdata],
345 [ webdatadir=$withval ; AC_SUBST(webdatadir) ] )
347 AC_ARG_WITH(webdata-url, [ --with-webdata-url=PATH Set URL path of webdata],
348 [ webdataurl=$withval ; AC_SUBST(webdataurl) ] )
350 AC_ARG_WITH(html-dir, [ --with-html-dir=PATH Set directory of html files],
351 [ html_%dir=$withval ; AC_SUBST(htmldir) ] )
353 if test "x$cgibindir" != "x" -o "x$cgibinurl" != "x" ; then
354 cgiprograms="ctsim.cgi ctsim.conf"
355 AC_SUBST(cgiprograms)
358 if test "x$html_dir" = "x" ; then
359 htmldata=simulate.html
362 AM_CONDITIONAL(USE_HTML, test "x$html_dir" = "x")
364 if test "x$cgibindir" != "x" -o "x$cgibinurl" != "x" -o "x$webdatadir" != "x" -o "x$webdataurl" != "x" -o "x$html_dir" != "x" ; then
368 if test "x$cgibindir" = "x" ; then
369 AC_MSG_ERROR([--with-cgibin-dir not set for web access])
370 elif test "x$cgibinurl" = "x" ; then
371 AC_MSG_ERROR([--with-cgibin-url not set for web access])
372 elif test "x$webdatadir" = "x" ; then
373 AC_MSG_ERROR([--with-webdata-dir not set for web access])
374 elif test "x$webdataurl" = "x" ; then
375 AC_MSG_ERROR([--with-webdata-url not set for web access])
376 elif test "x$html_dir" = "x" ; then
377 AC_MSG_ERROR([--with-html-dir not set for web access])
383 AM_CONDITIONAL(USE_LAM, test "x$lamdir" != "x")
387 dnl Following five are concatenated together into a linker specification.
389 AC_SUBST(X_TOOLKIT_LIBS)
391 AC_SUBST(X_BASIC_LIBS)
392 AC_SUBST(X_EXTRA_LIBS)
394 dnl Our Makefile.am files test the automake variable NO_X to determine
395 dnl whether X should be supported.
396 AM_CONDITIONAL(NO_X, test "x$with_x" = "xno")
398 my_includes="$my_includes -I../include -I.. -I/usr/local/include"
400 LDFLAGS="$LDFLAGS -L/usr/local/lib"
402 AC_MSG_CHECKING([for X])
403 if test "$with_x" != "no" && test "$wxwin" = "true"; then
404 AC_DEFINE(HAVE_X11,1,[X11 system])
405 LDFLAGS="$LDFLAGS -L../libctgraphics -L/usr/X11R6/lib -L/usr/X11R6/lib64"
406 my_includes="$my_includes -I/usr/X11R6/include -I/usr/include/X11"
407 ctlib_graphics="$ctlibs_base -lctgraphics"
409 ctlib_graphics="$ctlib_graphics $X_BASIC_LIBS $X_TOOLKIT_LIBS"
410 wx_cppflags="`$wxconfig --cppflags`"
411 if test "$libgl" = "true" ; then
412 dnl Removed "-lglut" for Mac OS X compilation
413 ctlib_graphics="$ctlib_graphics -lGL -lGLU"
414 if test "$wxwin" = "true" ; then
416 if test "$debug" = "true"; then
419 if test "x$wx_gtk" != "x" ; then
420 ctlib_graphics="$ctlib_graphics `$wxconfig $wxdebug --version=3.0 --libs std,gl` ${GTK_LIBS} ${GLIB_LIBS}"
422 elif test "x$wx_mac" != "x" ; then
423 ctlib_graphics="$ctlib_graphics `$wxconfig $wxdebug --version=3.0 --libs std,gl`"
427 if test "$wxwin" = "true" ; then
428 AC_DEFINE(HAVE_SGP,1,[use sgp library])
434 AM_CONDITIONAL(HAVE_SGP, test "$wxwin" = "true")
436 if test "$png" = "true" ; then
437 ctlibs_tools="$ctlibs_tools -lpng"
439 if test "$zlib" = "true" ; then
440 ctlibs_tools="$ctlibs_tools -lz"
442 if test "$fftw" = "true" ; then
443 ctlibs_tools="$ctlibs_tools -lfftw3"
445 if test "$ctn" = "true"; then
446 ctlibs_tools="$ctlibs_tools -lctn"
449 dnl Check for dmalloc
450 AC_CHECK_LIB(dmallocxx, main, [dmallocxx=true], [dmallocxx=false])
451 AC_MSG_CHECKING([for enable-dmalloc])
452 AC_ARG_ENABLE(dmalloc,
453 [ --enable-dmalloc Use dmalloc memory allocation],
454 [case "${enableval}" in
461 *) AC_MSG_RESULT([bad value ${enableval} for --enable-dmalloc])
464 [usedmalloc=false; AC_MSG_RESULT(no)])
466 if test "$dmallocxx" = "true" -a "$usedmalloc" = "true" ; then
467 ctlibs_tools="$ctlibs_tools -ldmallocxx"
468 AC_DEFINE(HAVE_DMALLOC,1,[dmalloc library])
469 AC_MSG_RESULT(Using dmalloc)
473 AC_CHECK_LIB(efence, main, [efence=true], [efence=false])
474 AC_MSG_CHECKING([for enable-efence])
475 AC_ARG_ENABLE(efence,
476 [ --enable-efence Use ElectricFence memory allocation],
477 [case "${enableval}" in
484 *) AC_MSG_RESULT([bad value ${enableval} for --enable-efence])
487 [useefence=false; AC_MSG_RESULT(no)])
489 if test "$efence" = "true" -a "$useefence" = "true" ; then
490 ctlibs_tools="$ctlibs_tools -lefence"
491 AC_DEFINE(HAVE_EFENCE,1,[efence library])
492 AC_MSG_RESULT(Using efence)
495 if test "$wxwin" = "true" ; then
496 if test "$wx_gtk" = "true" -o "$wx_mac" = "true" ; then
497 wxcflags=`$wxconfig $wxdebug --cxxflags --version=3.0`
498 #wxlibs=`$wxconfig --libs`
500 wxcflags="-D__WXMSW__ -D__WIN32__ -D__GNUWIN32__"
501 wxlibs="-lwx -lglui -ljpeg -lxpm -lzlib -ltiff"
503 CFLAGS="$CFLAGS -I../include $wxcflags"
504 ctlib_graphics="$ctlib_graphics $wxlibs"
508 AM_CONDITIONAL(HAVE_WXWINDOWS, test "$wxwin"="true")
510 dnl Setting projet libraries and includes
511 LDFLAGS="$LDFLAGS -L../libctsupport -L../libctsim"
512 ctlibs="$ctlibs_base -lctsim $ctlib_graphics -lctsupport $ctlibs_tools"
515 if test "x$lamdir" != "x" ; then
516 lamprograms="ctsimtext-lam"
517 AC_SUBST(lamprograms)
524 AC_SUBST(my_includes)
525 AC_SUBST(wx_cppflags)
527 AC_CONFIG_FILES([Makefile libctgraphics/Makefile libctsupport/Makefile libctsim/Makefile man/Makefile cgi-bin/ctsim.cgi cgi-bin/Makefile html/simulate.html html/Makefile include/Makefile getopt/Makefile tools/sample-ctsim.sh cgi-bin/ctsim.conf tools/Makefile src/Makefile helical/Makefile helical/sample-helical.sh])