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.
54 AC_PATH_PROG(wxconfig,wx-config)
56 dnl Check for C operation
59 AC_CHECK_SIZEOF(short, 2)
60 AC_CHECK_SIZEOF(int, 4)
61 AC_CHECK_SIZEOF(long, 4)
62 AC_CHECK_SIZEOF(float, 4)
63 AC_CHECK_SIZEOF(double, 8)
66 dnl Checks for libraries.
67 AC_CHECK_LIB(z, deflate, [ zlib="true" ], [ zlib="false" ; AC_MSG_WARN([zlib missing. Will need zlib for PNG support])])
69 AC_CHECK_LIB(curses, main, [curses=true], [curses=false])
70 AC_CHECK_LIB(ncurses, main, [ncurses=true], [ncurses=false])
71 AC_CHECK_LIB(readline, main, [readline=true;
72 AC_DEFINE([HAVE_READLINE],1,[Readline library])],
73 [readline=false], [-lcurses])
75 AC_CHECK_LIB(gtk-x11-2.0, main, [hasx11gtk2=true], [])
76 if test "x$hasx11gtk2" = "x" ; then
77 AC_MSG_NOTICE([Does not have X11 GTK2])
78 AC_DEFUN([AM_PATH_GLIB_2_0], [])
79 AC_DEFUN([AM_PATH_GTK_2_0], [])
81 if test "$hasx11gtk2" = "true" ; then
82 AM_PATH_GLIB_2_0(2.0.0,,AC_MSG_ERROR(You should get glib 2.0.0 or better.))
83 AM_PATH_GTK_2_0(2.0.0,havegtk_am=yes,havegtk_am=no)
84 CFLAGS="${CFLAGS} ${g76GTK_CFLAGS} ${GLIB_CFLAGS}"
87 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} ])
88 AC_CHECK_LIB(wx_mac_core-3.0, main, [wxwin=true; wx_mac=true; AC_DEFINE(HAVE_WXWINDOWS,1,[wxwindows library])])
89 AC_CHECK_LIB(fftw3, fftw_malloc, [fftw=true; AC_DEFINE(HAVE_FFTW,1,[FFTW library])], [fftw=false], [-L/usr/lib64 -L/usr/lib])
90 AC_CHECK_LIB(GL, main, [libgl=true], [libgl=false], [-L/usr/X11R6/lib -L/usr/X11R6/lib64])
91 AC_CHECK_LIB(pthread, main, [pthread=true], [pthread=false])
93 if test "$zlib" = "true" ; then
94 AC_CHECK_LIB(png, main, [png=true ; AC_DEFINE(HAVE_PNG,1,[PNG library])], [png=false], [-L/opt/local/lib -lz -lm])
97 dnl Checks for header files.
99 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)
101 dnl Checks for typedefs, structures, and compiler characteristics.
107 dnl Checks for library functions.
109 AC_CHECK_FUNCS(strtod strtol snprintf htonl usleep vsprintf vsnprintf basename setjmp setpriority time gettimeofday getenv)
110 AC_CHECK_FUNC(basename)
111 AC_CHECK_FUNC(setjmp)
112 AC_CHECK_FUNC(setpriority)
114 AC_CHECK_FUNC(gettimeofday)
115 AC_CHECK_FUNC(getopt, [ getopt=true ], [ getopt=false ])
117 if test "${OSTYPE}" = "cygwin" ; then
120 AC_CHECK_FUNC(getopt_long, [ getopt_long=true ], [ getopt_long=false ])
123 if test "${getopt_long}" = "false" ; then
124 my_includes="$my_includes -I../getopt"
125 AC_DEFINE(HAVE_GETOPT_LONG,1,[getopt_long library])
126 ctlibs_base="$ctlibs_base -lgetopt"
127 LDFLAGS="$LDFLAGS -L../getopt"
130 AM_CONDITIONAL(INCLUDED_GETOPT_LONG, test "$GETOPTLONG"="1")
134 i386|i486|i586|i686|x86|x86_64)
136 CFLAGS="$CFLAGS $CPUEXT_FLAGS $SIMD_FLAGS"
137 CXXFLAGS="$CXXFLAGS $CPUEXT_FLAGS $SIMD_FLAGS"
140 ARCH_OPTION="-fno-common -faltivec";;
141 armv1*|armv2*|armv3*|armv4*|armv5*|armv6*)
142 ARCH_OPTION="-ffast-math";;
144 ARCH_OPTION="-ffast-math -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4";;
146 # unknown architecture : use portable C version
149 CPPFLAGS="$CPPFLAGS $ARCH_OPTION"
150 CXXFLAGS="$CPPFLAGS $ARCH_OPTION"
152 if test "${readline}" = "true" ; then
153 ctlibs_base="$ctlibs_base -lreadline"
154 if test "${ncurses}" = "true"; then
155 ctlibs_base="$ctlibs_base -lncurses"
156 elif test "${curses}" = "true"; then
157 ctlibs_base="$ctlibs_base -lcurses"
161 dnl Check for debug mode
162 AC_MSG_CHECKING([debug])
164 [ --enable-debug Turn on debugging],
165 [case "${enableval}" in
172 *) AC_MSG_RESULT([bad value ${enableval} for --enable-debug])
175 [debug=false; AC_MSG_RESULT(no)])
176 AM_CONDITIONAL(DEBUG, test "$debug" = "true")
178 if test "$datadir" != "" ; then
179 CPPFLAGS="$CPPFLAGS -DDATADIR=\"\\\"$datadir\\\"\""
181 dnl CFLAGS="$CFLAGS -I/usr/local/include"
182 dnl LDFLAGS="$LDFLAGS -L/usr/local/lib"
184 if test "$debug" = "true" ; then
185 CFLAGS="$CFLAGS -g -O0 -DDEBUG"
186 AC_DEFINE(DEBUG,1,[turn on debugging])
188 CFLAGS="$CFLAGS -g -O4 -DNDEBUG -fomit-frame-pointer"
189 AC_DEFINE(NDEBUG,1,[no debugging])
192 if test "${pthread}" = "true" ; then
193 dnl CFLAGS="$CFLAGS -D_REENTRANT"
194 AC_DEFINE(HAVE_WXTHREADS,1,[have wxthreads library])
197 AC_MSG_CHECKING(sstream)
198 if [ test -f /usr/include/sstream || test -f /usr/include/g++/sstream ||
199 test -f /usr/include/g++-2/sstream || test -f /usr/include/g++-3/sstream ||
200 test -f /usr/include/gcc/darwin/3.1/g++-v3/sstream ]; then
201 AC_DEFINE(HAVE_SSTREAM,1,[sstream header])
208 CFLAGS="$CFLAGS -Wall"
209 AC_MSG_CHECKING(whether to enable verbose warnings)
210 AC_ARG_ENABLE(verbose-warnings,AS_HELP_STRING([--enable-verbose-warnings],[Enable verbose compiler warnings.]),
211 [ case "$enableval" in
214 CFLAGS="$CFLAGS -W -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wwrite-strings -Waggregate-return -Wmissing-prototypes -Wstrict-prototypes -pedantic -Wredundant-decls"
219 esac ], AC_MSG_RESULT(no)
222 AC_MSG_CHECKING(static executables)
223 AC_ARG_ENABLE(static,AS_HELP_STRING([--enable-static],[Enable static executables]),
224 [ case "$enableval" in
227 CFLAGS="$CFLAGS --static"
232 esac ], AC_MSG_RESULT(no)
235 dnl Checking if use OpenMP
236 AC_ARG_ENABLE([openmp], AS_HELP_STRING([--disable-openmp],[Disable use of OpenMP]))
237 AS_IF([test "x$enable_openmp" != "xno"], [
239 CFLAGS="$CFLAGS $OPENMP_CFLAGS"
240 CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
244 AC_ARG_WITH(lam,AS_HELP_STRING([--with-lam[=PATH]],[Set path of LAM MPI ]),
245 [ if test "$withval" != "no" ; then
250 if test "$withval" != "no" ; then
251 if test "$prefix" != "NONE" ; then
252 trylamdir="$trylamdir $prefix"
255 AC_MSG_CHECKING([for LAM MPI installation])
256 for testlamdir in "." $trylamdir /usr/local /usr/local/lam /usr /usr/lam /opt /opt/lam ; do
257 if test -x "$testlamdir/bin/hcp" ; then
258 if test "$testlamdir" != "/usr"; then
259 LDFLAGS="$LDFLAGS -L$testlamdir/lib"
260 CFLAGS="$CFLAGS -I$testlamdir/include"
262 CFLAGS="$CFLAGS -I$testlamdir/include/mpi2c++"
270 AC_MSG_RESULT($lamdir)
278 [ --with-ctn[=PATH] Set path of CTN DICOM library ],
279 [ if test "$withval" != "no" ; then
284 if test "$withval" = "no" -o "$withval" = "NONE" ; then
285 AC_MSG_CHECKING([for CTN DICOM installation])
286 AC_MSG_RESULT([disabled])
288 AC_MSG_CHECKING([for CTN DICOM installation])
289 for testctndir in $tryctndir/lib /usr/local/lib /usr/local/ctn/lib /usr/lib /usr/ctn/lib /usr/lib/ctn /opt/ctn/lib ; do
290 if test -f "$testctndir/libctn.a" ; then
291 LDFLAGS="$LDFLAGS -L$testctndir"
296 for testctndir in $tryctndir/include /usr/local/include /usr/local/ctn/include /usr/include /usr/include/ctn /usr/ctn/include /opt/ctn/include ; do
297 if test -f "$testctndir/ctn_os.h" ; then
298 CFLAGS="$CFLAGS -I$testctndir"
303 if test "$ctnlib" = "true" -a "$ctninclude" = "true" ; then
305 AC_DEFINE(HAVE_CTN_DICOM,1,[ctn dicom library])
313 AC_MSG_CHECKING([for CPU specification])
315 [ --with-mcpu[=CPU] Set name of CPU for gcc -mcpu])
317 if test "$withval" = "no" -o "$withval" = "yes" -o "$withval" = ""; then
320 AC_MSG_RESULT([$withval])
321 CFLAGS="$CFLAGS -mcpu=$withval"
324 AC_MSG_CHECKING([for web access])
325 dnl Set cgi-bin directory
326 AC_ARG_WITH(cgibin-dir, [ --with-cgibin-dir=PATH Set path of CGI binaries directory ],
327 [ cgibindir=$withval ; AC_SUBST(cgibindir) ] )
329 AC_ARG_WITH(cgibin-url, [ --with-cgibin-url=PATH Set URL path of CGI binaries ],
330 [ cgibinurl=$withval ; AC_SUBST(cgibinurl) ] )
332 AC_ARG_WITH(webdata-dir, [ --with-webdata-dir=PATH Set path of webdata],
333 [ webdatadir=$withval ; AC_SUBST(webdatadir) ] )
335 AC_ARG_WITH(webdata-url, [ --with-webdata-url=PATH Set URL path of webdata],
336 [ webdataurl=$withval ; AC_SUBST(webdataurl) ] )
338 AC_ARG_WITH(html-dir, [ --with-html-dir=PATH Set directory of html files],
339 [ html_%dir=$withval ; AC_SUBST(htmldir) ] )
341 if test "x$cgibindir" != "x" -o "x$cgibinurl" != "x" ; then
342 cgiprograms="ctsim.cgi ctsim.conf"
343 AC_SUBST(cgiprograms)
346 if test "x$html_dir" = "x" ; then
347 htmldata=simulate.html
350 AM_CONDITIONAL(USE_HTML, test "x$html_dir" = "x")
352 if test "x$cgibindir" != "x" -o "x$cgibinurl" != "x" -o "x$webdatadir" != "x" -o "x$webdataurl" != "x" -o "x$html_dir" != "x" ; then
356 if test "x$cgibindir" = "x" ; then
357 AC_MSG_ERROR([--with-cgibin-dir not set for web access])
358 elif test "x$cgibinurl" = "x" ; then
359 AC_MSG_ERROR([--with-cgibin-url not set for web access])
360 elif test "x$webdatadir" = "x" ; then
361 AC_MSG_ERROR([--with-webdata-dir not set for web access])
362 elif test "x$webdataurl" = "x" ; then
363 AC_MSG_ERROR([--with-webdata-url not set for web access])
364 elif test "x$html_dir" = "x" ; then
365 AC_MSG_ERROR([--with-html-dir not set for web access])
371 AM_CONDITIONAL(USE_LAM, test "x$lamdir" != "x")
375 dnl Following five are concatenated together into a linker specification.
377 AC_SUBST(X_TOOLKIT_LIBS)
379 AC_SUBST(X_BASIC_LIBS)
380 AC_SUBST(X_EXTRA_LIBS)
382 dnl Our Makefile.am files test the automake variable NO_X to determine
383 dnl whether X should be supported.
384 AM_CONDITIONAL(NO_X, test "x$with_x" = "xno")
386 my_includes="$my_includes -I../include -I.. -I/usr/local/include"
388 LDFLAGS="$LDFLAGS -L/usr/local/lib"
390 AC_MSG_CHECKING([for X])
391 if test "$with_x" != "no" && test "$wxwin" = "true"; then
392 AC_DEFINE(HAVE_X11,1,[X11 system])
393 LDFLAGS="$LDFLAGS -L../libctgraphics -L/usr/X11R6/lib -L/usr/X11R6/lib64"
394 my_includes="$my_includes -I/usr/X11R6/include -I/usr/include/X11"
395 ctlib_graphics="$ctlibs_base -lctgraphics"
397 ctlib_graphics="$ctlib_graphics $X_BASIC_LIBS $X_TOOLKIT_LIBS"
398 wx_cppflags="`$wxconfig --cppflags`"
399 if test "$libgl" = "true" ; then
400 dnl Removed "-lglut" for Mac OS X compilation
401 ctlib_graphics="$ctlib_graphics -lGL -lGLU"
402 if test "$wxwin" = "true" ; then
404 if test "$debug" = "true"; then
407 if test "x$wx_gtk" != "x" ; then
408 ctlib_graphics="$ctlib_graphics `$wxconfig $wxdebug --version=3.0 --libs std,gl` ${GTK_LIBS} ${GLIB_LIBS}"
410 elif test "x$wx_mac" != "x" ; then
411 ctlib_graphics="$ctlib_graphics `$wxconfig $wxdebug --version=3.0 --libs std,gl`"
415 if test "$wxwin" = "true" ; then
416 AC_DEFINE(HAVE_SGP,1,[use sgp library])
422 AM_CONDITIONAL(HAVE_SGP, test "$wxwin" = "true")
424 if test "$png" = "true" ; then
425 ctlibs_tools="$ctlibs_tools -lpng"
427 if test "$zlib" = "true" ; then
428 ctlibs_tools="$ctlibs_tools -lz"
430 if test "$fftw" = "true" ; then
431 ctlibs_tools="$ctlibs_tools -lfftw3"
433 if test "$ctn" = "true"; then
434 ctlibs_tools="$ctlibs_tools -lctn"
437 dnl Check for dmalloc
438 AC_CHECK_LIB(dmallocxx, main, [dmallocxx=true], [dmallocxx=false])
439 AC_MSG_CHECKING([for enable-dmalloc])
440 AC_ARG_ENABLE(dmalloc,
441 [ --enable-dmalloc Use dmalloc memory allocation],
442 [case "${enableval}" in
449 *) AC_MSG_RESULT([bad value ${enableval} for --enable-dmalloc])
452 [usedmalloc=false; AC_MSG_RESULT(no)])
454 if test "$dmallocxx" = "true" -a "$usedmalloc" = "true" ; then
455 ctlibs_tools="$ctlibs_tools -ldmallocxx"
456 AC_DEFINE(HAVE_DMALLOC,1,[dmalloc library])
457 AC_MSG_RESULT(Using dmalloc)
461 AC_CHECK_LIB(efence, main, [efence=true], [efence=false])
462 AC_MSG_CHECKING([for enable-efence])
463 AC_ARG_ENABLE(efence,
464 [--enable-efence],[Use ElectricFence memory allocation],
465 [case "${enableval}" in
472 *) AC_MSG_RESULT([bad value ${enableval} for --enable-efence])
475 [useefence=false; AC_MSG_RESULT(no)])
477 if test "$efence" = "true" -a "$useefence" = "true" ; then
478 ctlibs_tools="$ctlibs_tools -lefence"
479 AC_DEFINE(HAVE_EFENCE,1,[efence library])
480 AC_MSG_RESULT(Using efence)
483 if test "$wxwin" = "true" ; then
484 if test "$wx_gtk" = "true" -o "$wx_mac" = "true" ; then
485 wxcflags=`$wxconfig $wxdebug --cxxflags --version=3.0`
486 #wxlibs=`$wxconfig --libs`
488 wxcflags="-D__WXMSW__ -D__WIN32__ -D__GNUWIN32__"
489 wxlibs="-lwx -lglui -ljpeg -lxpm -lzlib -ltiff"
491 CFLAGS="$CFLAGS -I../include $wxcflags"
492 ctlib_graphics="$ctlib_graphics $wxlibs"
496 AM_CONDITIONAL(HAVE_WXWINDOWS, test "$wxwin"="true")
498 dnl Setting projet libraries and includes
499 LDFLAGS="$LDFLAGS -L../libctsupport -L../libctsim"
500 ctlibs="$ctlibs_base -lctsim $ctlib_graphics -lctsupport $ctlibs_tools"
503 if test "x$lamdir" != "x" ; then
504 lamprograms="ctsimtext-lam"
505 AC_SUBST(lamprograms)
512 AC_SUBST(my_includes)
513 AC_SUBST(wx_cppflags)
515 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])