1 dnl Some useful functions for LyXs configure.in -*- sh -*-
2 dnl Author: Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr)
3 dnl Lars Gullik Bjønnes (larsbj@lyx.org)
4 dnl Allan Rae (rae@lyx.org)
7 dnl Usage LYX_CHECK_VERSION Displays version of LyX being built and
8 dnl sets variables "lyx_devel_version" and "lyx_prerelease"
9 AC_DEFUN(LYX_CHECK_VERSION,[
11 echo "configuring LyX version $VERSION"
12 if echo "$VERSION" | grep 'cvs' >/dev/null ; then
14 echo "WARNING: This is a development version. Expect bugs."
18 if echo "$VERSION" | grep 'pre' > /dev/null ; then
20 echo "WARNING: This is a prerelease. Be careful and backup your documents."
25 AC_SUBST(lyx_devel_version)
26 if test $lyx_devel_version = yes ; then
27 AC_DEFINE(DEVEL_VERSION, 1, Define if you are building a development version of LyX)
31 dnl Define the option to set a LyX version on installed executables and directories
34 AC_DEFUN(LYX_VERSION_SUFFIX,[
35 AC_MSG_CHECKING([for install target ... ])
36 AC_ARG_WITH(version-suffix,
37 [ --with-version-suffix[=<version>] install lyx files as lyx<version>],
38 [if test "x$withval" = "xyes";
41 ac_configure_args=`echo $ac_configure_args | sed "s,--with-version-suffix,--with-version-suffix=$withval,"`
44 program_suffix=$withval],
46 AC_MSG_RESULT([$lyxname])
50 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
51 dnl flag lyx_error to yes.
53 lyx_error_txt="$lyx_error_txt
59 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
60 dnl flag lyx_warning to yes.
61 AC_DEFUN(LYX_WARNING,[
62 lyx_warning_txt="$lyx_warning_txt
68 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
69 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
70 AC_DEFUN(LYX_LIB_ERROR,[
71 LYX_ERROR([Cannot find $1. Please check that the $2 library
72 is correctly installed on your system.])])
75 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
76 dnl has occured previously.
77 AC_DEFUN(LYX_CHECK_ERRORS,[
78 if test x$lyx_error = xyes; then
80 **** The following problems have been detected by configure.
81 **** Please check the messages below before running 'make'.
82 **** (see the section 'Problems' in the INSTALL file)
88 if test x$lyx_warning = xyes; then
90 === The following minor problems have been detected by configure.
91 === Please check the messages below before running 'make'.
92 === (see the section 'Problems' in the INSTALL file)
97 Configuration of LyX was successful.
98 Type 'make' to compile the program,
99 and then 'make install' to install it.
104 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
106 define(LYX_SEARCH_PROG,[dnl
107 for ac_prog in $2 ; do
108 # Extract the first word of "$ac_prog", so it can be a program name with args.
109 set dummy $ac_prog ; ac_word=$[2]
110 if test -z "[$]$1"; then
111 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
112 for ac_dir in $PATH; do
113 test -z "$ac_dir" && ac_dir=.
114 if test -f [$ac_dir/$ac_word]; then
122 if test -n "[$]$1"; then
128 test -n "[$]$1" && break
133 AC_DEFUN([LYX_PROG_CXX_WORKS],
135 cat >conftest.C <<EOF
137 // we require the mutable keyword
140 // we require namespace support
148 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
149 rm -f conftest.C conftest.o conftest.obj || true
153 AC_DEFUN(LYX_PROG_CXX,
154 [AC_MSG_CHECKING([for a good enough C++ compiler])
155 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
157 if test -z "$CXX" ; then
158 AC_MSG_ERROR([Unable to find a good enough C++ compiler])
164 ### We might want to get or shut warnings.
165 AC_ARG_ENABLE(warnings,
166 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
167 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
172 if test x$enable_warnings = xyes ; then
173 lyx_flags="$lyx_flags warnings"
174 AC_DEFINE(WITH_WARNINGS, 1,
175 [Define this if you want to see the warning directives put here and
176 there by the developpers to get attention])
179 ### We might want to disable debug
181 AC_HELP_STRING([--enable-debug],[enable debug information]),,
182 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
188 ### set up optimization
189 AC_ARG_ENABLE(optimization,
190 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
191 enable_optimization=yes;)
192 case $enable_optimization in
195 *) lyx_opt=${enable_optimization};;
198 # set the debug flags correctly.
199 if test x$GXX = xyes; then
200 dnl Useful for global version info
201 gxx_version=`${CXX} -dumpversion`
202 CXX_VERSION="($gxx_version)"
204 if test "$ac_test_CXXFLAGS" = set; then
205 CXXFLAGS="$ac_save_CXXFLAGS"
208 2.95.1) CXXFLAGS="$lyx_opt -fpermissive -ftemplate-depth-30";;
209 2.95.*) CXXFLAGS="$lyx_opt -Wno-non-template-friend -ftemplate-depth-30";;
210 2.96*) CXXFLAGS="$lyx_opt -fno-exceptions -ftemplate-depth-30 -Wno-non-template-friend";;
211 3.0*) CXXFLAGS="$lyx_opt";;
212 3.1*) CXXFLAGS="$lyx_opt -finline-limit=500 -fno-exceptions";;
213 3.2*) CXXFLAGS="$lyx_opt -fno-exceptions";;
214 3.3*) CXXFLAGS="$lyx_opt -fno-exceptions";;
215 3.4*) CXXFLAGS="$lyx_opt -fno-exceptions";;
216 *) CXXFLAGS="$lyx_opt";;
218 if test x$enable_debug = xyes ; then
219 CXXFLAGS="-g $CXXFLAGS"
222 if test x$enable_warnings = xyes ; then
224 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
225 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
226 3.1*) CXXFLAGS="$CXXFLAGS -W -Wall";;
227 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
233 dnl NOT USED CURRENTLY*************************************
234 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
236 AC_DEFUN(LYX_CXX_RTTI,[
237 ### Check whether the compiler supports runtime type information
238 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
242 virtual int tag() { return 0; }
244 class derived1 : public rtti {
246 int tag() { return 1; }
248 class derived2 : public rtti {
250 int tag() { return 2; }
253 derived1 * foo1 = new derived1();
254 derived2 * foo2 = new derived2();
256 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
260 bar1 = dynamic_cast<derived1 *>(bar);
265 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
267 if test x$lyx_cv_rtti = xyes ; then
268 AC_DEFINE(HAVE_RTTI, 1,
269 [Define to 1 if your compiler supports runtime type information])
273 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
274 dnl understands the "explicit" directive.
275 AC_DEFUN(LYX_CXX_EXPLICIT,[
276 ### Check whether the compiler understands the keyword `explicit'
277 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
282 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
284 if test $lyx_cv_explicit = no ; then
285 AC_DEFINE(explicit,[ ],
286 [Define to nothing if your compiler does not understand the
287 'explicit' directive])
291 dnl NOT USED CURRENTLY*************************************
292 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
293 dnl has a working stl stack template
294 AC_DEFUN(LYX_CXX_STL_STACK,[
295 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
302 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
304 if test $lyx_cv_broken_stack = yes ; then
305 AC_DEFINE(BROKEN_STL_STACK, 1,
306 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
311 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
312 dnl count template, if not the old HP version is assumed.
313 AC_DEFUN(LYX_STD_COUNT,[
314 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
318 int countChar(char * b, char * e, char const c)
320 return count(b, e, c);
324 int i = countChar(a, a + 5, 'l');
325 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
327 if test $lyx_cv_std_count = yes ; then
328 AC_DEFINE(HAVE_STD_COUNT, 1,
329 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
333 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
334 dnl supports modern STL streams
335 AC_DEFUN(LYX_CXX_STL_MODERN_STREAMS,[
336 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
340 std::streambuf * test = std::cerr.rdbuf();
342 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
344 if test $lyx_cv_modern_streams = yes ; then
345 AC_DEFINE(MODERN_STL_STREAMS, 1,
346 [Define if you have modern standard-compliant STL streams])
350 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
352 AC_DEFUN(LYX_USE_INCLUDED_BOOST,[
353 AC_ARG_WITH(included-boost,
354 [ --with-included-boost use the boost lib supplied with LyX],
355 [lyx_cv_with_included_boost=$withval
356 AC_MSG_RESULT([$with_included_boost])],
357 [lyx_cv_with_included_boost=yes])
358 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
362 dnl NOT USED CURRENTLY*************************************
364 AC_DEFUN(LYX_CXX_PARTIAL, [
365 AC_REQUIRE([AC_PROG_CXX])
366 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
367 [lyx_cv_cxx_partial_specialization],
370 template<class T, class K>
374 template<class T> class k<void,T> { };
379 lyx_cv_cxx_partial_specialization=yes
381 lyx_cv_cxx_partial_specialization=no
384 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
385 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
386 [Defined if your compiler supports partial specialization.])
391 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
392 dnl provides wrappers for C headers and use our alternate version otherwise.
393 AC_DEFUN(LYX_CXX_CHEADERS,[
394 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
404 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
405 if test $lyx_cv_cxx_cheaders = no ; then
406 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
410 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
411 dnl are already in the global namespace
412 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
413 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
414 lyx_cv_cxx_global_cstd,
420 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
421 if test x$lyx_cv_cxx_global_cstd = xyes; then
422 AC_DEFINE(CXX_GLOBAL_CSTD,1,
423 [Define if your C++ compiler puts C library functions in the global namespace])
428 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
429 dnl [default-yes-value])
430 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
431 dnl resulting directory name in 'dir-var-name'.
432 AC_DEFUN(LYX_WITH_DIR,[
433 AC_ARG_WITH($1,[ --with-$1 specify $2])
434 AC_MSG_CHECKING([for $2])
435 if test -z "$with_$3"; then
436 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
438 test "x$with_$3" = xyes && with_$3=$5
441 AC_MSG_RESULT($lyx_cv_$3)])
444 dnl Usage: LYX_LOOP_DIR(value,action)
445 dnl Executes action for values of variable `dir' in `values'. `values' can
446 dnl use ":" as a separator.
447 AC_DEFUN(LYX_LOOP_DIR,[
448 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
449 for dir in `eval "echo $1"`; do
450 if test ! "$dir" = NONE; then
451 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
459 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
461 AC_DEFUN(LYX_ADD_LIB_DIR,[
463 if test "`(uname) 2>/dev/null`" = SunOS &&
464 uname -r | grep '^5' >/dev/null; then
465 if test $ac_cv_prog_gxx = yes ; then
466 $1="${$1} -Wl[,]-R$2"
473 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
475 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
477 ### Check for a headers existence and location iff it exists
478 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
479 ## It almost works. I've tried a few variations but they give errors
480 ## of one sort or other: bad substitution or file not found etc. The
481 ## actual header _is_ found though and the cache variable is set however
482 ## the reported setting (on screen) is equal to $ac_safe for some unknown
484 ## Additionally, autoheader can't figure out what to use as the name in
485 ## the config.h.in file so we need to write our own entries there -- one for
486 ## each header in the form PATH_HEADER_NAME_H
488 AC_DEFUN(LYX_PATH_HEADER,
489 [ AC_CHECK_HEADER($1,[
490 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
491 ### the only remaining problem is getting the second parameter to this
492 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
493 ### of $ac_safe being printed.
494 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
495 [ cat > conftest.$ac_ext <<EOF
496 #line __oline__ "configure"
497 #include "confdefs.h"
501 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
502 grep $1 2>/dev/null | \
503 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
504 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
506 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
508 ### end of LYX_PATH_HEADER
510 ### Check which frontends we want to use. The default is XForms only
512 AC_DEFUN(LYX_USE_FRONTENDS,
513 [AC_MSG_CHECKING([what frontend should be used for the GUI])
514 AC_ARG_WITH(frontend,
515 [ --with-frontend=THIS Use THIS frontend as main GUI:
516 Possible values: xforms, qt],
517 [FRONTENDS="$withval"], [FRONTENDS="xforms"])
518 AC_MSG_RESULT($FRONTENDS)
520 AC_SUBST(FRONTENDS_SUBDIRS)
521 AC_SUBST(FRONTENDS_PROGS)
526 ## ------------------------------------------------------------------------
527 ## Find a file (or one of more files in a list of dirs)
528 ## ------------------------------------------------------------------------
530 AC_DEFUN(AC_FIND_FILE,
537 if test -r "$i/$j"; then
545 dnl just a wrapper to clean up configure.in
546 AC_DEFUN(LYX_PROG_LIBTOOL,
548 AC_REQUIRE([AC_ENABLE_SHARED])
549 AC_REQUIRE([AC_ENABLE_STATIC])
550 dnl libtool is only for C, so I must force him
551 dnl to find the correct flags for C++
553 ac_save_cflags="$CFLAGS"
556 AM_PROG_LIBTOOL dnl for libraries
558 CFLAGS="$ac_save_cflags"