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_CXX_GOOD_STD_STRING : checks whether the C++ compiler
401 dnl has a std::string that is close to the standard. So close that
402 dnl methods not found in "unstandard" std::strings are present here.
403 AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[
404 AC_REQUIRE([AC_PROG_CXX])
405 AC_CACHE_CHECK([whether the systems std::string is really good],
406 [lyx_cv_std_string_good],
411 // From a std::string that is supposed to be close to the
412 // standard we require at least three things:
413 // - clear() and erase()
414 // - the strncmp of compare()
416 string a("hello there");
420 int t = a.compare(a.length() - 1, 1, s);
424 lyx_cv_std_string_good=yes
426 lyx_cv_std_string_good=no
430 if test x$lyx_cv_std_string_good = xyes ; then
431 AC_DEFINE(STD_STRING_IS_GOOD, 1,
432 [Define if the systems std::string is really good.])
437 dnl NOT USED CURRENTLY*************************************
439 AC_DEFUN(LYX_CXX_PARTIAL, [
440 AC_REQUIRE([AC_PROG_CXX])
441 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
442 [lyx_cv_cxx_partial_specialization],
445 template<class T, class K>
449 template<class T> class k<void,T> { };
454 lyx_cv_cxx_partial_specialization=yes
456 lyx_cv_cxx_partial_specialization=no
459 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
460 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
461 [Defined if your compiler supports partial specialization.])
466 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
467 dnl provides wrappers for C headers and use our alternate version otherwise.
468 AC_DEFUN(LYX_CXX_CHEADERS,[
469 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
479 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
480 if test $lyx_cv_cxx_cheaders = no ; then
481 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
484 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
485 dnl are already in the global namespace
486 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
487 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
488 lyx_cv_cxx_global_cstd,
494 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
495 if test x$lyx_cv_cxx_global_cstd = xyes; then
496 AC_DEFINE(CXX_GLOBAL_CSTD,1,
497 [Define if your C++ compiler puts C library functions in the global namespace])
501 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
502 dnl [default-yes-value])
503 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
504 dnl resulting directory name in 'dir-var-name'.
505 AC_DEFUN(LYX_WITH_DIR,[
506 AC_ARG_WITH($1,[ --with-$1 specify $2])
507 AC_MSG_CHECKING([for $2])
508 if test -z "$with_$3"; then
509 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
511 test "x$with_$3" = xyes && with_$3=$5
514 AC_MSG_RESULT($lyx_cv_$3)])
517 dnl Usage: LYX_LOOP_DIR(value,action)
518 dnl Executes action for values of variable `dir' in `values'. `values' can
519 dnl use ":" as a separator.
520 AC_DEFUN(LYX_LOOP_DIR,[
521 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
522 for dir in `eval "echo $1"`; do
523 if test ! "$dir" = NONE; then
524 test ! -d "$dir" && AC_MSG_ERROR([\"$dir\" is not a directory])
532 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
534 AC_DEFUN(LYX_ADD_LIB_DIR,[
536 if test "`(uname) 2>/dev/null`" = SunOS &&
537 uname -r | grep '^5' >/dev/null; then
538 if test $ac_cv_prog_gxx = yes ; then
539 $1="${$1} -Wl[,]-R$2"
546 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
548 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
550 ### Check for a headers existence and location iff it exists
551 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
552 ## It almost works. I've tried a few variations but they give errors
553 ## of one sort or other: bad substitution or file not found etc. The
554 ## actual header _is_ found though and the cache variable is set however
555 ## the reported setting (on screen) is equal to $ac_safe for some unknown
557 ## Additionally, autoheader can't figure out what to use as the name in
558 ## the config.h.in file so we need to write our own entries there -- one for
559 ## each header in the form PATH_HEADER_NAME_H
561 AC_DEFUN(LYX_PATH_HEADER,
562 [ AC_CHECK_HEADER($1,[
563 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
564 ### the only remaining problem is getting the second parameter to this
565 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
566 ### of $ac_safe being printed.
567 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
568 [ cat > conftest.$ac_ext <<EOF
569 #line __oline__ "configure"
570 #include "confdefs.h"
574 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
575 grep $1 2>/dev/null | \
576 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
577 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
579 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path, [dummy])])
581 ### end of LYX_PATH_HEADER
583 ### Check which frontend we want to use. The default is XForms
585 AC_DEFUN(LYX_USE_FRONTEND,
586 [AC_MSG_CHECKING([what frontend should be used as main GUI])
587 AC_ARG_WITH(frontend,
588 [ --with-frontend=THIS Use THIS frontend as main GUI:
589 Possible values: xforms, qt],
590 [lyx_use_frontend="$withval"], [lyx_use_frontend="xforms"])
591 AC_MSG_RESULT($lyx_use_frontend)
593 AC_SUBST(FRONTEND_GUILIB)
594 AC_SUBST(FRONTEND_LDFLAGS)
595 AC_SUBST(FRONTEND_INCLUDES)
596 AC_SUBST(FRONTEND_LIBS)
601 ## ------------------------------------------------------------------------
602 ## Find a file (or one of more files in a list of dirs)
603 ## ------------------------------------------------------------------------
605 AC_DEFUN(AC_FIND_FILE,
612 if test -r "$i/$j"; then
620 dnl just a wrapper to clean up configure.in
621 AC_DEFUN(LYX_PROG_LIBTOOL,
623 AC_REQUIRE([AC_ENABLE_SHARED])
624 AC_REQUIRE([AC_ENABLE_STATIC])
625 dnl libtool is only for C, so I must force him
626 dnl to find the correct flags for C++
628 ac_save_cflags="$CFLAGS"
631 AM_PROG_LIBTOOL dnl for libraries
633 CFLAGS="$ac_save_cflags"