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.
52 AC_DEFUN([LYX_ERROR],[
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};;
200 # set the debug flags correctly.
201 if test x$GXX = xyes; then
202 dnl Useful for global version info
203 gxx_version=`${CXX} -dumpversion`
204 CXX_VERSION="($gxx_version)"
206 if test "$ac_test_CXXFLAGS" = set; then
207 CXXFLAGS="$ac_save_CXXFLAGS"
210 2.95.1) CXXFLAGS="$lyx_opt -fpermissive -ftemplate-depth-30";;
211 2.95.*) CXXFLAGS="$lyx_opt -Wno-non-template-friend -ftemplate-depth-30";;
212 2.96*) CXXFLAGS="$lyx_opt -fno-exceptions -ftemplate-depth-30 -Wno-non-template-friend";;
213 3.0*) CXXFLAGS="$lyx_opt";;
214 3.1*) CXXFLAGS="$lyx_opt -finline-limit=500 -fno-exceptions";;
215 3.2*) CXXFLAGS="$lyx_opt -fno-exceptions";;
216 3.3*) CXXFLAGS="$lyx_opt -fno-exceptions";;
218 CXXFLAGS="$lyx_opt -fno-exceptions"
220 *) CXXFLAGS="$lyx_opt";;
222 if test x$enable_debug = xyes ; then
224 3.4*|3.5*) CXXFLAGS="-g $CXXFLAGS"
225 AC_DEFINE(_GLIBCXX_DEBUG, 1, [libstdc++ debug mode])
226 AC_DEFINE(_GLIBCXX_DEBUG_PEDANTIC, 1, [libstdc++ pedantic debug mode])
228 *) CXXFLAGS="-g $CXXFLAGS";;
232 if test x$enable_warnings = xyes ; then
234 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
235 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
236 3.1*) CXXFLAGS="$CXXFLAGS -W -Wall";;
237 3.2*) CXXFLAGS="$CXXFLAGS -W -Wall";;
238 3.3*) CXXFLAGS="$CXXFLAGS -W -Wall";;
239 *) CXXFLAGS="$CXXFLAGS -Wextra -Wall";;
243 AM_CONDITIONAL(LYX_BUILD_PCH, test "$lyx_pch_comp" = yes)
247 dnl NOT USED CURRENTLY*************************************
248 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
250 AC_DEFUN([LYX_CXX_RTTI],[
251 ### Check whether the compiler supports runtime type information
252 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
256 virtual int tag() { return 0; }
258 class derived1 : public rtti {
260 int tag() { return 1; }
262 class derived2 : public rtti {
264 int tag() { return 2; }
267 derived1 * foo1 = new derived1();
268 derived2 * foo2 = new derived2();
270 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
274 bar1 = dynamic_cast<derived1 *>(bar);
279 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
281 if test x$lyx_cv_rtti = xyes ; then
282 AC_DEFINE(HAVE_RTTI, 1,
283 [Define to 1 if your compiler supports runtime type information])
287 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
288 dnl understands the "explicit" directive.
289 AC_DEFUN([LYX_CXX_EXPLICIT],[
290 ### Check whether the compiler understands the keyword `explicit'
291 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
296 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
298 if test $lyx_cv_explicit = no ; then
299 AC_DEFINE(explicit,[ ],
300 [Define to nothing if your compiler does not understand the
301 'explicit' directive])
305 dnl NOT USED CURRENTLY*************************************
306 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
307 dnl has a working stl stack template
308 AC_DEFUN([LYX_CXX_STL_STACK],[
309 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
316 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
318 if test $lyx_cv_broken_stack = yes ; then
319 AC_DEFINE(BROKEN_STL_STACK, 1,
320 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
325 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
326 dnl count template, if not the old HP version is assumed.
327 AC_DEFUN([LYX_STD_COUNT],[
328 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
332 int countChar(char * b, char * e, char const c)
334 return count(b, e, c);
338 int i = countChar(a, a + 5, 'l');
339 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
341 if test $lyx_cv_std_count = yes ; then
342 AC_DEFINE(HAVE_STD_COUNT, 1,
343 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
347 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
348 dnl supports modern STL streams
349 AC_DEFUN([LYX_CXX_STL_MODERN_STREAMS],[
350 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
354 std::streambuf * test = std::cerr.rdbuf();
356 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
358 if test $lyx_cv_modern_streams = yes ; then
359 AC_DEFINE(MODERN_STL_STREAMS, 1,
360 [Define if you have modern standard-compliant STL streams])
364 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
366 AC_DEFUN([LYX_USE_INCLUDED_BOOST],[
367 AC_ARG_WITH(included-boost,
368 [ --with-included-boost use the boost lib supplied with LyX],
369 [lyx_cv_with_included_boost=$withval
370 AC_MSG_RESULT([$with_included_boost])],
371 [lyx_cv_with_included_boost=yes])
372 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
376 dnl NOT USED CURRENTLY*************************************
378 AC_DEFUN([LYX_CXX_PARTIAL], [
379 AC_REQUIRE([AC_PROG_CXX])
380 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
381 [lyx_cv_cxx_partial_specialization],
384 template<class T, class K>
388 template<class T> class k<void,T> { };
393 lyx_cv_cxx_partial_specialization=yes
395 lyx_cv_cxx_partial_specialization=no
398 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
399 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
400 [Defined if your compiler supports partial specialization.])
405 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
406 dnl provides wrappers for C headers and use our alternate version otherwise.
407 AC_DEFUN([LYX_CXX_CHEADERS],[
408 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
418 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
419 if test $lyx_cv_cxx_cheaders = no ; then
420 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
424 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
425 dnl are already in the global namespace
426 AC_DEFUN([LYX_CXX_GLOBAL_CSTD],[
427 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
428 lyx_cv_cxx_global_cstd,
434 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
435 if test x$lyx_cv_cxx_global_cstd = xyes; then
436 AC_DEFINE(CXX_GLOBAL_CSTD,1,
437 [Define if your C++ compiler puts C library functions in the global namespace])
442 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
443 dnl [default-yes-value])
444 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
445 dnl resulting directory name in 'dir-var-name'.
446 AC_DEFUN([LYX_WITH_DIR],[
447 AC_ARG_WITH($1,[ --with-$1 specify $2])
448 AC_MSG_CHECKING([for $2])
449 if test -z "$with_$3"; then
450 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
452 test "x$with_$3" = xyes && with_$3=$5
455 AC_MSG_RESULT($lyx_cv_$3)])
458 dnl Usage: LYX_LOOP_DIR(value,action)
459 dnl Executes action for values of variable `dir' in `values'. `values' can
460 dnl use ":" as a separator.
461 AC_DEFUN([LYX_LOOP_DIR],[
462 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
463 for dir in `eval "echo $1"`; do
464 if test ! "$dir" = NONE; then
465 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
473 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
475 AC_DEFUN([LYX_ADD_LIB_DIR],[
477 if test "`(uname) 2>/dev/null`" = SunOS &&
478 uname -r | grep '^5' >/dev/null; then
479 if test $ac_cv_prog_gxx = yes ; then
480 $1="${$1} -Wl[,]-R$2"
487 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
489 AC_DEFUN([LYX_ADD_INC_DIR],[$1="${$1} -I$2 "])
491 ### Check for a headers existence and location iff it exists
492 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
493 ## It almost works. I've tried a few variations but they give errors
494 ## of one sort or other: bad substitution or file not found etc. The
495 ## actual header _is_ found though and the cache variable is set however
496 ## the reported setting (on screen) is equal to $ac_safe for some unknown
498 ## Additionally, autoheader can't figure out what to use as the name in
499 ## the config.h.in file so we need to write our own entries there -- one for
500 ## each header in the form PATH_HEADER_NAME_H
502 AC_DEFUN([LYX_PATH_HEADER],
503 [ AC_CHECK_HEADER($1,[
504 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
505 ### the only remaining problem is getting the second parameter to this
506 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
507 ### of $ac_safe being printed.
508 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
509 [ cat > conftest.$ac_ext <<EOF
510 #line __oline__ "configure"
511 #include "confdefs.h"
515 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
516 grep $1 2>/dev/null | \
517 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
518 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
520 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
522 ### end of LYX_PATH_HEADER
524 ### Check which frontends we want to use. The default is XForms only
526 AC_DEFUN([LYX_USE_FRONTENDS],
527 [AC_MSG_CHECKING([what frontend should be used for the GUI])
528 AC_ARG_WITH(frontend,
529 [ --with-frontend=THIS Use THIS frontend as main GUI:
530 Possible values: xforms, qt, gtk(EXPERIMENTAL)],
531 [FRONTENDS="$withval"], [FRONTENDS="xforms"])
532 AC_MSG_RESULT($FRONTENDS)
534 AC_SUBST(FRONTENDS_SUBDIRS)
535 AC_SUBST(FRONTENDS_PROGS)
540 ## ------------------------------------------------------------------------
541 ## Find a file (or one of more files in a list of dirs)
542 ## ------------------------------------------------------------------------
544 AC_DEFUN([AC_FIND_FILE],
551 if test -r "$i/$j"; then
559 dnl just a wrapper to clean up configure.in
560 AC_DEFUN([LYX_PROG_LIBTOOL],
562 AC_REQUIRE([AC_ENABLE_SHARED])
563 AC_REQUIRE([AC_ENABLE_STATIC])
564 dnl libtool is only for C, so I must force him
565 dnl to find the correct flags for C++
567 ac_save_cflags="$CFLAGS"
570 AM_PROG_LIBTOOL dnl for libraries
572 CFLAGS="$ac_save_cflags"