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,
211 [ --enable-verbose-warnings
212 Enable verbose compiler warnings.],
213 [ case "$enableval" in
216 CFLAGS="$CFLAGS -W -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-align -Wwrite-strings -Waggregate-return -Wmissing-prototypes -Wstrict-prototypes -pedantic -Wredundant-decls"
221 esac ], AC_MSG_RESULT(no)
224 AC_MSG_CHECKING(static executables)
225 AC_ARG_ENABLE(static,
227 Enable static executables.],
228 [ case "$enableval" in
231 CFLAGS="$CFLAGS --static"
236 esac ], AC_MSG_RESULT(no)
239 dnl Checking if use OpenMP
240 AC_MSG_CHECKING(OpenMP)
241 AC_ARG_ENABLE(openmp,
243 Enable use of OpenMP.],
244 [ case "$enableval" in
248 CFLAGS="$CFLAGS $OPENMP_CFLAGS"
249 CXXFLAGS="$CXXFLAGS $OPENMP_CXXFLAGS"
254 esac ], AC_MSG_RESULT(no)
259 [ --with-lam[=PATH] Set path of LAM MPI ],
260 [ if test "$withval" != "no" ; then
265 if test "$withval" != "no" ; then
266 if test "$prefix" != "NONE" ; then
267 trylamdir="$trylamdir $prefix"
270 AC_MSG_CHECKING([for LAM MPI installation])
271 for testlamdir in "." $trylamdir /usr/local /usr/local/lam /usr /usr/lam /opt /opt/lam ; do
272 if test -x "$testlamdir/bin/hcp" ; then
273 if test "$testlamdir" != "/usr"; then
274 LDFLAGS="$LDFLAGS -L$testlamdir/lib"
275 CFLAGS="$CFLAGS -I$testlamdir/include"
277 CFLAGS="$CFLAGS -I$testlamdir/include/mpi2c++"
285 AC_MSG_RESULT($lamdir)
293 [ --with-ctn[=PATH] Set path of CTN DICOM library ],
294 [ if test "$withval" != "no" ; then
299 if test "$withval" = "no" -o "$withval" = "NONE" ; then
300 AC_MSG_CHECKING([for CTN DICOM installation])
301 AC_MSG_RESULT([disabled])
303 AC_MSG_CHECKING([for CTN DICOM installation])
304 for testctndir in $tryctndir/lib /usr/local/lib /usr/local/ctn/lib /usr/lib /usr/ctn/lib /usr/lib/ctn /opt/ctn/lib ; do
305 if test -f "$testctndir/libctn.a" ; then
306 LDFLAGS="$LDFLAGS -L$testctndir"
311 for testctndir in $tryctndir/include /usr/local/include /usr/local/ctn/include /usr/include /usr/include/ctn /usr/ctn/include /opt/ctn/include ; do
312 if test -f "$testctndir/ctn_os.h" ; then
313 CFLAGS="$CFLAGS -I$testctndir"
318 if test "$ctnlib" = "true" -a "$ctninclude" = "true" ; then
320 AC_DEFINE(HAVE_CTN_DICOM,1,[ctn dicom library])
328 AC_MSG_CHECKING([for CPU specification])
330 [ --with-mcpu[=CPU] Set name of CPU for gcc -mcpu])
332 if test "$withval" = "no" -o "$withval" = "yes" -o "$withval" = ""; then
335 AC_MSG_RESULT([$withval])
336 CFLAGS="$CFLAGS -mcpu=$withval"
339 AC_MSG_CHECKING([for web access])
340 dnl Set cgi-bin directory
341 AC_ARG_WITH(cgibin-dir, [ --with-cgibin-dir=PATH Set path of CGI binaries directory ],
342 [ cgibindir=$withval ; AC_SUBST(cgibindir) ] )
344 AC_ARG_WITH(cgibin-url, [ --with-cgibin-url=PATH Set URL path of CGI binaries ],
345 [ cgibinurl=$withval ; AC_SUBST(cgibinurl) ] )
347 AC_ARG_WITH(webdata-dir, [ --with-webdata-dir=PATH Set path of webdata],
348 [ webdatadir=$withval ; AC_SUBST(webdatadir) ] )
350 AC_ARG_WITH(webdata-url, [ --with-webdata-url=PATH Set URL path of webdata],
351 [ webdataurl=$withval ; AC_SUBST(webdataurl) ] )
353 AC_ARG_WITH(html-dir, [ --with-html-dir=PATH Set directory of html files],
354 [ html_%dir=$withval ; AC_SUBST(htmldir) ] )
356 if test "x$cgibindir" != "x" -o "x$cgibinurl" != "x" ; then
357 cgiprograms="ctsim.cgi ctsim.conf"
358 AC_SUBST(cgiprograms)
361 if test "x$html_dir" = "x" ; then
362 htmldata=simulate.html
365 AM_CONDITIONAL(USE_HTML, test "x$html_dir" = "x")
367 if test "x$cgibindir" != "x" -o "x$cgibinurl" != "x" -o "x$webdatadir" != "x" -o "x$webdataurl" != "x" -o "x$html_dir" != "x" ; then
371 if test "x$cgibindir" = "x" ; then
372 AC_MSG_ERROR([--with-cgibin-dir not set for web access])
373 elif test "x$cgibinurl" = "x" ; then
374 AC_MSG_ERROR([--with-cgibin-url not set for web access])
375 elif test "x$webdatadir" = "x" ; then
376 AC_MSG_ERROR([--with-webdata-dir not set for web access])
377 elif test "x$webdataurl" = "x" ; then
378 AC_MSG_ERROR([--with-webdata-url not set for web access])
379 elif test "x$html_dir" = "x" ; then
380 AC_MSG_ERROR([--with-html-dir not set for web access])
386 AM_CONDITIONAL(USE_LAM, test "x$lamdir" != "x")
390 dnl Following five are concatenated together into a linker specification.
392 AC_SUBST(X_TOOLKIT_LIBS)
394 AC_SUBST(X_BASIC_LIBS)
395 AC_SUBST(X_EXTRA_LIBS)
397 dnl Our Makefile.am files test the automake variable NO_X to determine
398 dnl whether X should be supported.
399 AM_CONDITIONAL(NO_X, test "x$with_x" = "xno")
401 my_includes="$my_includes -I../include -I.. -I/usr/local/include"
403 LDFLAGS="$LDFLAGS -L/usr/local/lib"
405 AC_MSG_CHECKING([for X])
406 if test "$with_x" != "no" && test "$wxwin" = "true"; then
407 AC_DEFINE(HAVE_X11,1,[X11 system])
408 LDFLAGS="$LDFLAGS -L../libctgraphics -L/usr/X11R6/lib -L/usr/X11R6/lib64"
409 my_includes="$my_includes -I/usr/X11R6/include -I/usr/include/X11"
410 ctlib_graphics="$ctlibs_base -lctgraphics"
412 ctlib_graphics="$ctlib_graphics $X_BASIC_LIBS $X_TOOLKIT_LIBS"
413 wx_cppflags="`$wxconfig --cppflags`"
414 if test "$libgl" = "true" ; then
415 dnl Removed "-lglut" for Mac OS X compilation
416 ctlib_graphics="$ctlib_graphics -lGL -lGLU"
417 if test "$wxwin" = "true" ; then
419 if test "$debug" = "true"; then
422 if test "x$wx_gtk" != "x" ; then
423 ctlib_graphics="$ctlib_graphics `$wxconfig $wxdebug --version=3.0 --libs std,gl` ${GTK_LIBS} ${GLIB_LIBS}"
425 elif test "x$wx_mac" != "x" ; then
426 ctlib_graphics="$ctlib_graphics `$wxconfig $wxdebug --version=3.0 --libs std,gl`"
430 if test "$wxwin" = "true" ; then
431 AC_DEFINE(HAVE_SGP,1,[use sgp library])
437 AM_CONDITIONAL(HAVE_SGP, test "$wxwin" = "true")
439 if test "$png" = "true" ; then
440 ctlibs_tools="$ctlibs_tools -lpng"
442 if test "$zlib" = "true" ; then
443 ctlibs_tools="$ctlibs_tools -lz"
445 if test "$fftw" = "true" ; then
446 ctlibs_tools="$ctlibs_tools -lfftw3"
448 if test "$ctn" = "true"; then
449 ctlibs_tools="$ctlibs_tools -lctn"
452 dnl Check for dmalloc
453 AC_CHECK_LIB(dmallocxx, main, [dmallocxx=true], [dmallocxx=false])
454 AC_MSG_CHECKING([for enable-dmalloc])
455 AC_ARG_ENABLE(dmalloc,
456 [ --enable-dmalloc Use dmalloc memory allocation],
457 [case "${enableval}" in
464 *) AC_MSG_RESULT([bad value ${enableval} for --enable-dmalloc])
467 [usedmalloc=false; AC_MSG_RESULT(no)])
469 if test "$dmallocxx" = "true" -a "$usedmalloc" = "true" ; then
470 ctlibs_tools="$ctlibs_tools -ldmallocxx"
471 AC_DEFINE(HAVE_DMALLOC,1,[dmalloc library])
472 AC_MSG_RESULT(Using dmalloc)
476 AC_CHECK_LIB(efence, main, [efence=true], [efence=false])
477 AC_MSG_CHECKING([for enable-efence])
478 AC_ARG_ENABLE(efence,
479 [ --enable-efence Use ElectricFence memory allocation],
480 [case "${enableval}" in
487 *) AC_MSG_RESULT([bad value ${enableval} for --enable-efence])
490 [useefence=false; AC_MSG_RESULT(no)])
492 if test "$efence" = "true" -a "$useefence" = "true" ; then
493 ctlibs_tools="$ctlibs_tools -lefence"
494 AC_DEFINE(HAVE_EFENCE,1,[efence library])
495 AC_MSG_RESULT(Using efence)
498 if test "$wxwin" = "true" ; then
499 if test "$wx_gtk" = "true" -o "$wx_mac" = "true" ; then
500 wxcflags=`$wxconfig $wxdebug --cxxflags --version=3.0`
501 #wxlibs=`$wxconfig --libs`
503 wxcflags="-D__WXMSW__ -D__WIN32__ -D__GNUWIN32__"
504 wxlibs="-lwx -lglui -ljpeg -lxpm -lzlib -ltiff"
506 CFLAGS="$CFLAGS -I../include $wxcflags"
507 ctlib_graphics="$ctlib_graphics $wxlibs"
511 AM_CONDITIONAL(HAVE_WXWINDOWS, test "$wxwin"="true")
513 dnl Setting projet libraries and includes
514 LDFLAGS="$LDFLAGS -L../libctsupport -L../libctsim"
515 ctlibs="$ctlibs_base -lctsim $ctlib_graphics -lctsupport $ctlibs_tools"
518 if test "x$lamdir" != "x" ; then
519 lamprograms="ctsimtext-lam"
520 AC_SUBST(lamprograms)
527 AC_SUBST(my_includes)
528 AC_SUBST(wx_cppflags)
530 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])