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 [ --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 [ --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 [ --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 *) CXXFLAGS="$lyx_opt";;
216 if test x$enable_debug = xyes ; then
217 CXXFLAGS="-g $CXXFLAGS"
220 if test x$enable_warnings = xyes ; then
222 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
223 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
224 3.1*) CXXFLAGS="$CXXFLAGS -W -Wall";;
225 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
227 if test $lyx_devel_version = yes ; then
231 *) CXXFLAGS="$CXXFLAGS -Winline";;
238 dnl NOT USED CURRENTLY*************************************
239 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
241 AC_DEFUN(LYX_CXX_RTTI,[
242 ### Check whether the compiler supports runtime type information
243 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
247 virtual int tag() { return 0; }
249 class derived1 : public rtti {
251 int tag() { return 1; }
253 class derived2 : public rtti {
255 int tag() { return 2; }
258 derived1 * foo1 = new derived1();
259 derived2 * foo2 = new derived2();
261 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
265 bar1 = dynamic_cast<derived1 *>(bar);
270 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
272 if test x$lyx_cv_rtti = xyes ; then
273 AC_DEFINE(HAVE_RTTI, 1,
274 [Define to 1 if your compiler supports runtime type information])
278 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
279 dnl understands the "explicit" directive.
280 AC_DEFUN(LYX_CXX_EXPLICIT,[
281 ### Check whether the compiler understands the keyword `explicit'
282 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
287 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
289 if test $lyx_cv_explicit = no ; then
290 AC_DEFINE(explicit,[ ],
291 [Define to nothing if your compiler does not understand the
292 'explicit' directive])
296 dnl NOT USED CURRENTLY*************************************
297 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
298 dnl has a working stl stack template
299 AC_DEFUN(LYX_CXX_STL_STACK,[
300 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
307 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
309 if test $lyx_cv_broken_stack = yes ; then
310 AC_DEFINE(BROKEN_STL_STACK, 1,
311 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
316 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
317 dnl count template, if not the old HP version is assumed.
318 AC_DEFUN(LYX_STD_COUNT,[
319 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
323 int countChar(char * b, char * e, char const c)
325 return count(b, e, c);
329 int i = countChar(a, a + 5, 'l');
330 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
332 if test $lyx_cv_std_count = yes ; then
333 AC_DEFINE(HAVE_STD_COUNT, 1,
334 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
338 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
339 dnl supports modern STL streams
340 AC_DEFUN(LYX_CXX_STL_MODERN_STREAMS,[
341 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
345 std::streambuf * test = std::cerr.rdbuf();
347 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
349 if test $lyx_cv_modern_streams = yes ; then
350 AC_DEFINE(MODERN_STL_STREAMS, 1,
351 [Define if you have modern standard-compliant STL streams])
355 dnl Usage: LYX_CXX_STL_STRING : checks whether the C++ compiler
356 dnl has a std::string that is usable for LyX. LyX does not require this
357 dnl std::string to be standard.
358 AC_DEFUN(LYX_CXX_STL_STRING,[
359 AC_REQUIRE([AC_PROG_CXX])
360 AC_MSG_CHECKING(whether the included std::string should be used)
361 AC_ARG_WITH(included-string,
362 [ --with-included-string use LyX string class instead of STL string],
363 [lyx_cv_with_included_string=$withval
364 AC_MSG_RESULT([$with_included_string])],
365 [AC_CACHE_CHECK([],lyx_cv_with_included_string,
370 // LyX has reduced its requirements on the basic_string
371 // implementation so that the basic_string supplied
372 // with gcc is usable. In particular this means that
373 // lyx does not use std::string::clear and not the
374 // strncmp version of std::string::compare. This is mainly
375 // done so that LyX can use precompiled C++ libraries that
376 // already uses the systems basic_string, e.g. gtk--
377 string a("hello there");
381 //int t = a.compare(a.length() - 1, 1, s);
384 lyx_cv_with_included_string=no
386 lyx_cv_with_included_string=yes
390 if test x$lyx_cv_with_included_string = xyes ; then
391 AC_DEFINE(USE_INCLUDED_STRING, 1,
392 [Define to use the lyxstring class bundled with LyX.])
393 lyx_flags="$lyx_flags included-string"
395 AM_CONDITIONAL(USE_LYXSTRING, test x$lyx_cv_with_included_string = xyes)
396 dnl AC_MSG_RESULT([$with_included_string])
400 dnl Usage: LYX_USE_INCLUDED_BOOST : select if the included boost should
402 AC_DEFUN(LYX_USE_INCLUDED_BOOST,[
403 AC_ARG_WITH(included-boost,
404 [ --with-included-boost use the boost lib supplied with LyX],
405 [lyx_cv_with_included_boost=$withval
406 AC_MSG_RESULT([$with_included_boost])],
407 [lyx_cv_with_included_boost=yes])
408 AM_CONDITIONAL(USE_INCLUDED_BOOST, test x$lyx_cv_with_included_boost = xyes)
411 dnl Usage: LYX_CXX_GOOD_STD_STRING : checks whether the C++ compiler
412 dnl has a std::string that is close to the standard. So close that
413 dnl methods not found in "unstandard" std::strings are present here.
414 AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[
415 AC_REQUIRE([AC_PROG_CXX])
416 AC_CACHE_CHECK([whether the systems std::string is really good],
417 [lyx_cv_std_string_good],
422 // From a std::string that is supposed to be close to the
423 // standard we require at least three things:
424 // - clear() and erase()
425 // - the strncmp of compare()
427 string a("hello there");
431 int t = a.compare(a.length() - 1, 1, s);
435 lyx_cv_std_string_good=yes
437 lyx_cv_std_string_good=no
441 if test x$lyx_cv_std_string_good = xyes ; then
442 AC_DEFINE(STD_STRING_IS_GOOD, 1,
443 [Define if the systems std::string is really good.])
448 dnl NOT USED CURRENTLY*************************************
450 AC_DEFUN(LYX_CXX_PARTIAL, [
451 AC_REQUIRE([AC_PROG_CXX])
452 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
453 [lyx_cv_cxx_partial_specialization],
456 template<class T, class K>
460 template<class T> class k<void,T> { };
465 lyx_cv_cxx_partial_specialization=yes
467 lyx_cv_cxx_partial_specialization=no
470 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
471 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
472 [Defined if your compiler supports partial specialization.])
477 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
478 dnl provides wrappers for C headers and use our alternate version otherwise.
479 AC_DEFUN(LYX_CXX_CHEADERS,[
480 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
490 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
491 if test $lyx_cv_cxx_cheaders = no ; then
492 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
495 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
496 dnl are already in the global namespace
497 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
498 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
499 lyx_cv_cxx_global_cstd,
505 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
506 if test x$lyx_cv_cxx_global_cstd = xyes; then
507 AC_DEFINE(CXX_GLOBAL_CSTD,1,
508 [Define if your C++ compiler puts C library functions in the global namespace])
512 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
513 dnl [default-yes-value])
514 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
515 dnl resulting directory name in 'dir-var-name'.
516 AC_DEFUN(LYX_WITH_DIR,[
517 AC_ARG_WITH($1,[ --with-$1 specify $2])
518 AC_MSG_CHECKING([for $2])
519 if test -z "$with_$3"; then
520 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
522 test "x$with_$3" = xyes && with_$3=$5
525 AC_MSG_RESULT($lyx_cv_$3)])
528 dnl Usage: LYX_LOOP_DIR(value,action)
529 dnl Executes action for values of variable `dir' in `values'. `values' can
530 dnl use ":" as a separator.
531 AC_DEFUN(LYX_LOOP_DIR,[
532 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
533 for dir in `eval "echo $1"`; do
534 if test ! "$dir" = NONE; then
535 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
543 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
545 AC_DEFUN(LYX_ADD_LIB_DIR,[
547 if test "`(uname) 2>/dev/null`" = SunOS &&
548 uname -r | grep '^5' >/dev/null; then
549 if test $ac_cv_prog_gxx = yes ; then
550 $1="${$1} -Wl[,]-R$2"
557 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
559 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
561 ### Check for a headers existence and location iff it exists
562 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
563 ## It almost works. I've tried a few variations but they give errors
564 ## of one sort or other: bad substitution or file not found etc. The
565 ## actual header _is_ found though and the cache variable is set however
566 ## the reported setting (on screen) is equal to $ac_safe for some unknown
568 ## Additionally, autoheader can't figure out what to use as the name in
569 ## the config.h.in file so we need to write our own entries there -- one for
570 ## each header in the form PATH_HEADER_NAME_H
572 AC_DEFUN(LYX_PATH_HEADER,
573 [ AC_CHECK_HEADER($1,[
574 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
575 ### the only remaining problem is getting the second parameter to this
576 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
577 ### of $ac_safe being printed.
578 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
579 [ cat > conftest.$ac_ext <<EOF
580 #line __oline__ "configure"
581 #include "confdefs.h"
585 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
586 grep $1 2>/dev/null | \
587 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
588 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
590 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
592 ### end of LYX_PATH_HEADER
594 ### Check which frontend we want to use. The default is XForms
596 AC_DEFUN(LYX_USE_FRONTEND,
597 [AC_MSG_CHECKING([what frontend should be used as main GUI])
598 AC_ARG_WITH(frontend,
599 [ --with-frontend=THIS Use THIS frontend as main GUI:
600 Possible values: xforms, qt],
601 [lyx_use_frontend="$withval"], [lyx_use_frontend="xforms"])
602 AC_MSG_RESULT($lyx_use_frontend)
604 AC_SUBST(FRONTEND_GUILIB)
605 AC_SUBST(FRONTEND_LDFLAGS)
606 AC_SUBST(FRONTEND_INCLUDES)
607 AC_SUBST(FRONTEND_LIBS)
612 ## ------------------------------------------------------------------------
613 ## Find a file (or one of more files in a list of dirs)
614 ## ------------------------------------------------------------------------
616 AC_DEFUN(AC_FIND_FILE,
623 if test -r "$i/$j"; then
631 dnl just a wrapper to clean up configure.in
632 AC_DEFUN(LYX_PROG_LIBTOOL,
634 AC_REQUIRE([AC_ENABLE_SHARED])
635 AC_REQUIRE([AC_ENABLE_STATIC])
636 dnl libtool is only for C, so I must force him
637 dnl to find the correct flags for C++
639 ac_save_cflags="$CFLAGS"
642 AM_PROG_LIBTOOL dnl for libraries
644 CFLAGS="$ac_save_cflags"