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])
49 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
50 dnl flag lyx_error to yes.
52 lyx_error_txt="$lyx_error_txt
58 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
59 dnl flag lyx_warning to yes.
60 AC_DEFUN(LYX_WARNING,[
61 lyx_warning_txt="$lyx_warning_txt
67 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
68 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
69 AC_DEFUN(LYX_LIB_ERROR,[
70 LYX_ERROR([Cannot find $1. Please check that the $2 library
71 is correctly installed on your system.])])
74 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
75 dnl has occured previously.
76 AC_DEFUN(LYX_CHECK_ERRORS,[
77 if test x$lyx_error = xyes; then
79 **** The following problems have been detected by configure.
80 **** Please check the messages below before running 'make'.
81 **** (see the section 'Problems' in the INSTALL file)
87 if test x$lyx_warning = xyes; then
89 === The following minor problems have been detected by configure.
90 === Please check the messages below before running 'make'.
91 === (see the section 'Problems' in the INSTALL file)
96 Configuration of LyX was successful.
97 Type 'make' to compile the program,
98 and then 'make install' to install it.
103 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
105 define(LYX_SEARCH_PROG,[dnl
106 for ac_prog in $2 ; do
107 # Extract the first word of "$ac_prog", so it can be a program name with args.
108 set dummy $ac_prog ; ac_word=$[2]
109 if test -z "[$]$1"; then
110 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
111 for ac_dir in $PATH; do
112 test -z "$ac_dir" && ac_dir=.
113 if test -f [$ac_dir/$ac_word]; then
121 if test -n "[$]$1"; then
127 test -n "[$]$1" && break
132 AC_DEFUN([LYX_PROG_CXX_WORKS],
134 cat >conftest.C <<EOF
136 // we require the mutable keyword
139 // we require namespace support
147 $CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
148 rm -f conftest.C conftest.o conftest.obj || true
152 AC_DEFUN(LYX_PROG_CXX,
153 [AC_MSG_CHECKING([for a good enough C++ compiler])
154 LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
156 if test -z "$CXX" ; then
157 AC_MSG_ERROR([Unable to find a good enough C++ compiler])
163 ### We might want to get or shut warnings.
164 AC_ARG_ENABLE(warnings,
165 AC_HELP_STRING([--enable-warnings],[tell the compiler to display more warnings]),,
166 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
171 if test x$enable_warnings = xyes ; then
172 lyx_flags="$lyx_flags warnings"
173 AC_DEFINE(WITH_WARNINGS, 1,
174 [Define this if you want to see the warning directives put here and
175 there by the developpers to get attention])
178 ### We might want to disable debug
180 AC_HELP_STRING([--enable-debug],[enable debug information]),,
181 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
187 ### set up optimization
188 AC_ARG_ENABLE(optimization,
189 AC_HELP_STRING([--enable-optimization[=value]],[enable compiler optimisation]),,
190 enable_optimization=yes;)
191 case $enable_optimization in
194 *) lyx_opt=${enable_optimization};;
197 # set the debug flags correctly.
198 if test x$GXX = xyes; then
199 dnl Useful for global version info
200 gxx_version=`${CXX} -dumpversion`
201 CXX_VERSION="($gxx_version)"
203 if test "$ac_test_CXXFLAGS" = set; then
204 CXXFLAGS="$ac_save_CXXFLAGS"
207 2.95.1) CXXFLAGS="$lyx_opt -fpermissive -ftemplate-depth-30";;
208 2.95.*) CXXFLAGS="$lyx_opt -Wno-non-template-friend -ftemplate-depth-30";;
209 2.96*) CXXFLAGS="$lyx_opt -fno-exceptions -ftemplate-depth-30 -Wno-non-template-friend";;
210 3.0*) CXXFLAGS="$lyx_opt";;
211 3.1*) CXXFLAGS="$lyx_opt -finline-limit=500 -fno-exceptions";;
212 3.2*) CXXFLAGS="$lyx_opt -fno-exceptions";;
213 3.3*) CXXFLAGS="$lyx_opt -fno-exceptions";;
214 3.4*) CXXFLAGS="$lyx_opt -fno-exceptions";;
215 *) CXXFLAGS="$lyx_opt";;
217 if test x$enable_debug = xyes ; then
218 CXXFLAGS="-g $CXXFLAGS"
221 if test x$enable_warnings = xyes ; then
223 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
224 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
225 3.1*) CXXFLAGS="$CXXFLAGS -W -Wall";;
226 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
232 dnl NOT USED CURRENTLY*************************************
233 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
235 AC_DEFUN(LYX_CXX_RTTI,[
236 ### Check whether the compiler supports runtime type information
237 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
241 virtual int tag() { return 0; }
243 class derived1 : public rtti {
245 int tag() { return 1; }
247 class derived2 : public rtti {
249 int tag() { return 2; }
252 derived1 * foo1 = new derived1();
253 derived2 * foo2 = new derived2();
255 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
259 bar1 = dynamic_cast<derived1 *>(bar);
264 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
266 if test x$lyx_cv_rtti = xyes ; then
267 AC_DEFINE(HAVE_RTTI, 1,
268 [Define to 1 if your compiler supports runtime type information])
272 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
273 dnl understands the "explicit" directive.
274 AC_DEFUN(LYX_CXX_EXPLICIT,[
275 ### Check whether the compiler understands the keyword `explicit'
276 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
281 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
283 if test $lyx_cv_explicit = no ; then
284 AC_DEFINE(explicit,[ ],
285 [Define to nothing if your compiler does not understand the
286 'explicit' directive])
290 dnl NOT USED CURRENTLY*************************************
291 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
292 dnl has a working stl stack template
293 AC_DEFUN(LYX_CXX_STL_STACK,[
294 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
301 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
303 if test $lyx_cv_broken_stack = yes ; then
304 AC_DEFINE(BROKEN_STL_STACK, 1,
305 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
310 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
311 dnl count template, if not the old HP version is assumed.
312 AC_DEFUN(LYX_STD_COUNT,[
313 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
317 int countChar(char * b, char * e, char const c)
319 return count(b, e, c);
323 int i = countChar(a, a + 5, 'l');
324 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
326 if test $lyx_cv_std_count = yes ; then
327 AC_DEFINE(HAVE_STD_COUNT, 1,
328 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
332 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
333 dnl supports modern STL streams
334 AC_DEFUN(LYX_CXX_STL_MODERN_STREAMS,[
335 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
339 std::streambuf * test = std::cerr.rdbuf();
341 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
343 if test $lyx_cv_modern_streams = yes ; then
344 AC_DEFINE(MODERN_STL_STREAMS, 1,
345 [Define if you have modern standard-compliant STL streams])
349 dnl Usage: LYX_CXX_STL_STRING : checks whether the C++ compiler
350 dnl has a std::string that is usable for LyX. LyX does not require this
351 dnl std::string to be standard.
352 AC_DEFUN(LYX_CXX_STL_STRING,[
353 AC_REQUIRE([AC_PROG_CXX])
354 AC_MSG_CHECKING(whether the included std::string should be used)
355 AC_ARG_WITH(included-string,
356 [ --with-included-string use LyX string class instead of STL string],
357 [lyx_cv_with_included_string=$withval
358 AC_MSG_RESULT([$with_included_string])],
359 [AC_CACHE_CHECK([],lyx_cv_with_included_string,
364 // LyX has reduced its requirements on the basic_string
365 // implementation so that the basic_string supplied
366 // with gcc is usable. In particular this means that
367 // lyx does not use std::string::clear and not the
368 // strncmp version of std::string::compare. This is mainly
369 // done so that LyX can use precompiled C++ libraries that
370 // already uses the systems basic_string, e.g. gtk--
371 string a("hello there");
375 //int t = a.compare(a.length() - 1, 1, s);
378 lyx_cv_with_included_string=no
380 lyx_cv_with_included_string=yes
384 if test x$lyx_cv_with_included_string = xyes ; then
385 AC_DEFINE(USE_INCLUDED_STRING, 1,
386 [Define to use the lyxstring class bundled with LyX.])
387 lyx_flags="$lyx_flags included-string"
389 AM_CONDITIONAL(USE_LYXSTRING, test x$lyx_cv_with_included_string = xyes)
390 dnl AC_MSG_RESULT([$with_included_string])
394 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
396 AC_DEFUN(LYX_USE_INCLUDED_BOOST,[
397 AC_ARG_WITH(included-boost,
398 [ --with-included-boost use the boost lib supplied with LyX],
399 [lyx_cv_with_included_boost=$withval
400 AC_MSG_RESULT([$with_included_boost])],
401 [lyx_cv_with_included_boost=yes])
402 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
405 dnl Usage: LYX_CXX_GOOD_STD_STRING : checks whether the C++ compiler
406 dnl has a std::string that is close to the standard. So close that
407 dnl methods not found in "unstandard" std::strings are present here.
408 AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[
409 AC_REQUIRE([AC_PROG_CXX])
410 AC_CACHE_CHECK([whether the systems std::string is really good],
411 [lyx_cv_std_string_good],
416 // From a std::string that is supposed to be close to the
417 // standard we require at least three things:
418 // - clear() and erase()
419 // - the strncmp of compare()
421 string a("hello there");
425 int t = a.compare(a.length() - 1, 1, s);
429 lyx_cv_std_string_good=yes
431 lyx_cv_std_string_good=no
435 if test x$lyx_cv_std_string_good = xyes ; then
436 AC_DEFINE(STD_STRING_IS_GOOD, 1,
437 [Define if the systems std::string is really good.])
442 dnl NOT USED CURRENTLY*************************************
444 AC_DEFUN(LYX_CXX_PARTIAL, [
445 AC_REQUIRE([AC_PROG_CXX])
446 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
447 [lyx_cv_cxx_partial_specialization],
450 template<class T, class K>
454 template<class T> class k<void,T> { };
459 lyx_cv_cxx_partial_specialization=yes
461 lyx_cv_cxx_partial_specialization=no
464 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
465 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
466 [Defined if your compiler supports partial specialization.])
471 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
472 dnl provides wrappers for C headers and use our alternate version otherwise.
473 AC_DEFUN(LYX_CXX_CHEADERS,[
474 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
484 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
485 if test $lyx_cv_cxx_cheaders = no ; then
486 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
489 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
490 dnl are already in the global namespace
491 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
492 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
493 lyx_cv_cxx_global_cstd,
499 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
500 if test x$lyx_cv_cxx_global_cstd = xyes; then
501 AC_DEFINE(CXX_GLOBAL_CSTD,1,
502 [Define if your C++ compiler puts C library functions in the global namespace])
506 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
507 dnl [default-yes-value])
508 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
509 dnl resulting directory name in 'dir-var-name'.
510 AC_DEFUN(LYX_WITH_DIR,[
511 AC_ARG_WITH($1,[ --with-$1 specify $2])
512 AC_MSG_CHECKING([for $2])
513 if test -z "$with_$3"; then
514 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
516 test "x$with_$3" = xyes && with_$3=$5
519 AC_MSG_RESULT($lyx_cv_$3)])
522 dnl Usage: LYX_LOOP_DIR(value,action)
523 dnl Executes action for values of variable `dir' in `values'. `values' can
524 dnl use ":" as a separator.
525 AC_DEFUN(LYX_LOOP_DIR,[
526 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
527 for dir in `eval "echo $1"`; do
528 if test ! "$dir" = NONE; then
529 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
537 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
539 AC_DEFUN(LYX_ADD_LIB_DIR,[
541 if test "`(uname) 2>/dev/null`" = SunOS &&
542 uname -r | grep '^5' >/dev/null; then
543 if test $ac_cv_prog_gxx = yes ; then
544 $1="${$1} -Wl[,]-R$2"
551 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
553 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
555 ### Check for a headers existence and location iff it exists
556 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
557 ## It almost works. I've tried a few variations but they give errors
558 ## of one sort or other: bad substitution or file not found etc. The
559 ## actual header _is_ found though and the cache variable is set however
560 ## the reported setting (on screen) is equal to $ac_safe for some unknown
562 ## Additionally, autoheader can't figure out what to use as the name in
563 ## the config.h.in file so we need to write our own entries there -- one for
564 ## each header in the form PATH_HEADER_NAME_H
566 AC_DEFUN(LYX_PATH_HEADER,
567 [ AC_CHECK_HEADER($1,[
568 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
569 ### the only remaining problem is getting the second parameter to this
570 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
571 ### of $ac_safe being printed.
572 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
573 [ cat > conftest.$ac_ext <<EOF
574 #line __oline__ "configure"
575 #include "confdefs.h"
579 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
580 grep $1 2>/dev/null | \
581 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
582 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
584 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
586 ### end of LYX_PATH_HEADER
588 ### Check which frontends we want to use. The default is XForms only
590 AC_DEFUN(LYX_USE_FRONTENDS,
591 [AC_MSG_CHECKING([what frontend should be used for the GUI])
592 AC_ARG_WITH(frontend,
593 [ --with-frontend=THIS Use THIS frontend as main GUI:
594 Possible values: xforms, qt],
595 [FRONTENDS="$withval"], [FRONTENDS="xforms"])
596 AC_MSG_RESULT($FRONTENDS)
598 AC_SUBST(FRONTENDS_SUBDIRS)
599 AC_SUBST(FRONTENDS_PROGS)
604 ## ------------------------------------------------------------------------
605 ## Find a file (or one of more files in a list of dirs)
606 ## ------------------------------------------------------------------------
608 AC_DEFUN(AC_FIND_FILE,
615 if test -r "$i/$j"; then
623 dnl just a wrapper to clean up configure.in
624 AC_DEFUN(LYX_PROG_LIBTOOL,
626 AC_REQUIRE([AC_ENABLE_SHARED])
627 AC_REQUIRE([AC_ENABLE_STATIC])
628 dnl libtool is only for C, so I must force him
629 dnl to find the correct flags for C++
631 ac_save_cflags="$CFLAGS"
634 AM_PROG_LIBTOOL dnl for libraries
636 CFLAGS="$ac_save_cflags"