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)
6 dnl Usage LYX_GET_VERSION Sets "lyx_version" to the version of LyX being
7 dnl built, displays it and sets variable "lyx_devel" to yes or no depending
8 dnl whether the version is a development release or not.
9 AC_DEFUN(LYX_GET_VERSION,[
11 # Get LyX version from $1 and guess wether is is stable or experimental.
12 VERSION=`grep '#define *LYX_VERSION' $1 |
13 sed -e 's/^.*"\([0-9.]*\)[^0-9.].*$/\1/' 2>/dev/null`
14 echo "configuring LyX version $VERSION"
15 if echo "$VERSION" | grep '[0-9]*\.[0-9]*[13579]\.[0-9]*' >/dev/null ; then
17 echo "WARNING: This is a development version. Expect bugs."
22 PACKAGE=lyx${program_suffix}
23 AC_SUBST(lyx_devel_version)
24 if test $lyx_devel_version = yes ; then
25 AC_DEFINE(DEVEL_VERSION, 1, Define if you are building a development version of LyX)
28 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
29 dnl flag lyx_error to yes.
31 lyx_error_txt="$lyx_error_txt
37 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
38 dnl flag lyx_warning to yes.
39 AC_DEFUN(LYX_WARNING,[
40 lyx_warning_txt="$lyx_warning_txt
46 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
47 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
48 AC_DEFUN(LYX_LIB_ERROR,[
49 LYX_ERROR([Cannot find $1. Please check that the $2 library
50 is correctly installed on your system.])])
53 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
54 dnl has occured previously.
55 AC_DEFUN(LYX_CHECK_ERRORS,[
56 if test x$lyx_error = xyes; then
58 **** The following problems have been detected by configure.
59 **** Please check the messages below before running 'make'.
60 **** (see the section 'Problems' in the INSTALL file)
63 deleting cache $cache_file
68 if test x$lyx_warning = xyes; then
70 === The following minor problems have been detected by configure.
71 === Please check the messages below before running 'make'.
72 === (see the section 'Problems' in the INSTALL file)
77 Configuration of LyX was successful.
78 Type 'make' to compile the program,
79 and then 'make install' to install it.
84 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
86 define(LYX_SEARCH_PROG,[dnl
87 for ac_prog in $2 ; do
88 # Extract the first word of "$ac_prog", so it can be a program name with args.
89 set dummy $ac_prog ; ac_word=$[2]
90 if test -z "[$]$1"; then
91 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
92 for ac_dir in $PATH; do
93 test -z "$ac_dir" && ac_dir=.
94 if test -f [$ac_dir/$ac_word]; then
102 if test -n "[$]$1"; then
108 test -n "[$]$1" && break
113 AC_DEFUN(LYX_PROG_CXX_WORKS,
116 AC_TRY_COMPILER([class foo { int bar; }; int main(){return(0);}], ac_cv_prog_cxx_works, ac_cv_prog_cxx_cross)
118 if test $ac_cv_prog_cxx_works = no; then
121 cross_compiling=$ac_cv_prog_cxx_cross
125 AC_DEFUN(LYX_PROG_CXX,
126 [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
127 AC_MSG_CHECKING([for a working C++ compiler])
128 LYX_SEARCH_PROG(CXX, $CCC g++ gcc c++ CC cxx xlC cc++, LYX_PROG_CXX_WORKS)
130 if test -z "$CXX" ; then
131 AC_ERROR([Unable to find a working C++ compiler])
137 AC_MSG_CHECKING([whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler])
138 AC_MSG_RESULT($cross_compiling)
142 dnl We might want to get or shut warnings.
143 AC_ARG_WITH(warnings,
144 [ --with-warnings tell GNU C++ to display more warnings],,
145 [if test $lyx_devel_version = yes && test $ac_cv_prog_gxx = yes ; then
150 if test "x$with_warnings" = xyes ; then
151 lyx_flags="$lyx_flags warnings"
152 AC_DEFINE(WITH_WARNINGS, 1,
153 [Define this if you want to see the warning directives put here and
154 there by the developpers to get attention])
157 # optimize less for development versions
158 if test "$lyx_devel_version" = yes ; then
164 # set the debug flags correctly.
165 if test $ac_cv_prog_gxx = yes; then
167 dnl Check whether -g works, even if CXXFLAGS is set, in case the package
168 dnl plays around with CXXFLAGS (such as to build both debugging and
169 dnl normal versions of a library), tasteless as that idea is.
170 ac_test_CXXFLAGS="${CXXFLAGS+set}"
171 ac_save_CXXFLAGS="$CXXFLAGS"
173 dnl Check the version of g++
174 gxx_version=`g++ --version`
177 if test "$ac_test_CXXFLAGS" = set; then
178 CXXFLAGS="$ac_save_CXXFLAGS"
179 elif test $ac_cv_prog_cxx_g = yes; then
181 2.7*) CXXFLAGS="$lyx_opt";;
182 *) CXXFLAGS="-g $lyx_opt -fno-exceptions -fno-rtti";;
187 if test $with_warnings = yes ; then
188 CXXFLAGS="$CXXFLAGS -ansi -Wall"
189 # a small hack to avoid problems with headers
190 echo '#undef __STRICT_ANSI__' >>confdefs.h
194 test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
198 dnl We do not use this one anymore.
199 dnl AC_DEFUN(LYX_GXX_STRENGTH_REDUCE,[
200 dnl #check for the strength reduction bug of gcc
201 dnl if test x$GXX = xyes && test $cross_compiling = no ; then
202 dnl AC_CACHE_CHECK( "for gcc strength-reduce bug", ac_cv_c_gcc_strength_bug,
205 dnl static int Array[[3]];
206 dnl unsigned int B = 3;
208 dnl for(i=0; i<B; i++) Array[[i]] = i - 3;
209 dnl exit( Array[[1]] != -2 );
211 dnl ac_cv_c_gcc_strength_bug="no",
212 dnl ac_cv_c_gcc_strength_bug="yes",
213 dnl ac_cv_c_gcc_strength_bug="yes") )
214 dnl if test "$ac_cv_c_gcc_strength_bug" = "yes"
216 dnl CXXFLAGS="$CXXFLAGS -fno-strength-reduce"
221 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
223 AC_DEFUN(LYX_CXX_RTTI,[
224 ### Check whether the compiler supports runtime type information
225 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
229 virtual int tag() { return 0; }
231 class derived1 : public rtti {
233 int tag() { return 1; }
235 class derived2 : public rtti {
237 int tag() { return 2; }
240 derived1 * foo1 = new derived1();
241 derived2 * foo2 = new derived2();
243 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
247 bar1 = dynamic_cast<derived1 *>(bar);
252 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
254 if test x$lyx_cv_rtti = xyes ; then
255 AC_DEFINE(HAVE_RTTI, 1,
256 [Define to 1 if your compiler supports runtime type information])
260 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
261 dnl understands the "explicit" directive.
262 AC_DEFUN(LYX_CXX_EXPLICIT,[
263 ### Check whether the compiler understands the keyword `explicit'
264 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
269 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
271 if test $lyx_cv_explicit = no ; then
272 AC_DEFINE(explicit,[ ],
273 [Define to nothing if your compiler does not understand the
274 'explicit' directive])
278 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
279 dnl has a working stl stack template
280 AC_DEFUN(LYX_CXX_STL_STACK,[
281 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
287 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
289 if test $lyx_cv_broken_stack = yes ; then
290 AC_DEFINE(BROKEN_STL_STACK, 1,
291 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
296 dnl Usage: LYX_CXX_STL_STRING : checks whether the C++ compiler
297 dnl has a working stl string container, the check is really stupid
298 dnl and could need some improvement.
299 AC_DEFUN(LYX_CXX_STL_STRING,[
300 AC_REQUIRE([LYX_PROG_CXX])
301 AC_MSG_CHECKING(Use the included std::string)
302 AC_ARG_WITH(included-string,[
303 --with-included-string use LyX string class instead of STL string
305 with_included_string=$withval
310 string a("hello there");
315 with_included_string=no
317 with_included_string=yes
318 AC_DEFINE(USE_INCLUDED_STRING, 1,
319 [Define to use the lyxstring class bundled with LyX.])
320 lyx_flags="$lyx_flags included-string"
323 AM_CONDITIONAL(USE_LYXSTRING, test x$with_included_string = xyes)
324 AC_MSG_RESULT([$with_included_string])
329 AC_DEFUN(LYX_CXX_MUTABLE, [
330 AC_REQUIRE([LYX_PROG_CXX])
331 AC_MSG_CHECKING(if C++ compiler supports mutable)
337 void foo() const { c=0; }
342 AC_DEFINE(HAVE_MUTABLE, 1,
343 [Defined if you compiler supports 'mutable'.])
347 AC_MSG_RESULT([$ac_mutable])
352 AC_DEFUN(LYX_CXX_PARTIAL, [
353 AC_REQUIRE([LYX_PROG_CXX])
354 AC_MSG_CHECKING(if C++ compiler supports partial specialization)
357 template<class T, class K>
361 template<class T> class k<void,T> { };
366 ac_partial_specialization=yes
367 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
368 [Defined if your compiler supports partial specialization.])
370 ac_partial_specialization=no
372 AC_MSG_RESULT([$ac_partial_specialization])
375 dnl Usage: LYX_CXX_NAMESPACES : checks whether the C++ compiler
376 dnl has a correct namespace handling and define CXX_WORKING_NAMESPACES
377 dnl if true. This macro does not do a thourough test, but it should be
378 dnl good enough to suit our needs.
379 AC_DEFUN(LYX_CXX_NAMESPACES,[
380 AC_CACHE_CHECK(for correct namespaces support,lyx_cv_cxx_namespace,
387 ],lyx_cv_cxx_namespace=yes,lyx_cv_cxx_namespace=no)
389 if test $lyx_cv_cxx_namespace = yes ; then
390 AC_DEFINE(CXX_WORKING_NAMESPACES, 1,
391 [Define if your C++ compiler has correct support for namespaces])
394 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
395 dnl provides wrappers for C headers and use our alternate version otherwise.
396 AC_DEFUN(LYX_CXX_CHEADERS,[
397 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
406 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
407 if test $lyx_cv_cxx_cheaders = no ; then
408 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
412 dnl Usage LYX_PATH_XPM: Checks for xpm library and header
413 AC_DEFUN(LYX_PATH_XPM,[
414 ### Check for Xpm library
415 AC_CHECK_LIB(Xpm, XpmCreateBufferFromImage,LYX_LIBS="-lXpm $LYX_LIBS",
416 [LYX_LIB_ERROR(libXpm,Xpm)], $LYX_LIBS)
418 ### Check for Xpm headers
419 lyx_cv_xpm_h_location="<xpm.h>"
420 AC_CHECK_HEADER(X11/xpm.h,[
421 ac_cv_header_xpm_h=yes
422 lyx_cv_xpm_h_location="<X11/xpm.h>"],[
423 AC_CHECK_HEADER(xpm.h,[],[
424 LYX_LIB_ERROR(xpm.h,Xpm)])])
425 AC_DEFINE_UNQUOTED(XPM_H_LOCATION,$lyx_cv_xpm_h_location)
427 ### Test for the header version
428 if test $ac_cv_header_xpm_h = yes; then
429 AC_CACHE_CHECK([xpm header version],lyx_cv_xpmversion,
430 [ cat > conftest.$ac_ext <<EOF
431 #line __oline__ "configure"
432 #include "confdefs.h"
434 #include XPM_H_LOCATION
435 "%%%"lyx_cv_xpmv=XpmVersion;lyx_cv_xpmr=XpmRevision"%%%"
437 eval `(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
438 grep '^"%%%"' 2>/dev/null | \
439 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
440 case "$lyx_cv_xpmr" in
442 [0-9]) lyxxpmr_alpha=`echo $lyx_cv_xpmr |tr 123456789 abcdefghi`
443 lyxxpmv_alpha=" (aka 3.$lyx_cv_xpmv$lyxxpmr_alpha)";;
447 lyx_cv_xpmversion="$lyx_cv_xpmv.$lyx_cv_xpmr$lyxxpmv_alpha"
449 case "$lyx_cv_xpmr" in
451 [789]|[0-9][0-9]*) ;;
453 *) LYX_WARNING([Version $lyx_cv_xpmversion of the Xpm library is a bit old.
454 If you experience strange crashes with LyX, try to upgrade
455 to at least version 4.7 (aka 3.4g).
456 If you have installed a newer version of the library, check whether you
457 have an old xpm.h header file in your include path.]);;
462 dnl Usage LYX_PATH_XFORMS: Checks for xforms library and flags
463 AC_DEFUN(LYX_PATH_XFORMS,[
464 ### Check for xforms library
465 AC_CHECK_LIB(forms, fl_initialize, LYX_LIBS="-lforms $LYX_LIBS",
466 [AC_CHECK_LIB(xforms, fl_initialize, LYX_LIBS="-lxforms $LYX_LIBS",
467 [LYX_LIB_ERROR(libforms or libxforms,xforms)], $LYX_LIBS)], $LYX_LIBS)
469 ### Check for xforms headers
470 lyx_cv_forms_h_location="<forms.h>"
471 AC_CHECK_HEADER(X11/forms.h,[
472 ac_cv_header_forms_h=yes
473 lyx_cv_forms_h_location="<X11/forms.h>"],[
474 AC_CHECK_HEADER(forms.h,[],[
475 LYX_LIB_ERROR(forms.h,forms)])])
476 AC_DEFINE_UNQUOTED(FORMS_H_LOCATION,$lyx_cv_forms_h_location)
477 if test $ac_cv_header_forms_h = yes; then
478 AC_CACHE_CHECK([xforms header version],lyx_cv_xfversion,
479 [ cat > conftest.$ac_ext <<EOF
480 #line __oline__ "configure"
481 #include "confdefs.h"
483 #include FORMS_H_LOCATION
484 #if ! defined(FL_INCLUDE_VERSION)
487 "%%%"FL_VERSION.FL_REVISION"%%%"
490 lyx_cv_xfversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
491 grep '^"%%%"' 2>/dev/null | \
492 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
494 case "$lyx_cv_xfversion" in
495 "(unknown)"|0.82|0.83|0.84|0.85)
497 Version $lyx_cv_xfversion of xforms is not compatible with LyX.
498 This version of LyX works best with version 0.88[,] although it
499 supports also versions 0.81[,] 0.86 and 0.87.) ;;
502 While LyX is compatible with version $lyx_cv_xfversion of xforms[,]
503 it is recommended that you upgrade to version 0.88.) ;;
505 0.89) LYX_WARNING(dnl
506 LyX should work ok with version $lyx_cv_xfversion of xforms[,] but
507 it is an unproven version and might still have some bugs. If you
508 have problems[,] please use version 0.88 instead.) ;;
510 Version $lyx_cv_xfversion of xforms might not be compatible with LyX[,]
511 since it is newer than 0.88. You might have slight problems with it.);;
516 dnl Usage: LYX_HPUX Checks for HP-UX and update CXXFLAGS accordingly
518 [#It seems that HPUX requires using -fpcc-struct-return with gcc.
519 AC_CACHE_CHECK(for HP-UX,ac_cv_hpux,[
520 os=`uname -s | tr '[A-Z]' '[a-z]'`
522 test "$os" = hp-ux && ac_cv_hpux=yes])
523 if test "$ac_cv_hpux" = yes; then
524 test "x$GXX" = xyes && CXXFLAGS="$CXXFLAGS -fpcc-struct-return"
528 dnl Usage: LYX_SUNOS4 Checks for SunOS 4.x and sets the flag lyx_broken_headers
531 [#The headers are not correct under SunOS4
532 AC_CACHE_CHECK(for SunOS 4.x,ac_cv_sunos4,[
534 os=`uname -a | sed -e 's/^\([^ ]*\) [^ ]* \([0-9]\)\..*/\1\2/'`
535 changequote([, ]) dnl
537 test "$os" = SunOS4 && ac_cv_sunos4=yes])
538 if test "$ac_cv_sunos4" = yes; then
539 test "x$GXX" = xyes && lyx_broken_headers=yes
543 dnl Usage: LYX_SCO Checks for SCO and sets the flag lyx_broken_headers
546 [AC_CACHE_CHECK(for SCO 3.2v4,ac_cv_sco,[
548 if test `uname -s` != "SCO_SV"; then
549 lyx_machine_rel=`uname -m`:`uname -r`
550 if test $lyx_machine_rel = i386:3.2 || test $lyx_machine_rel = i486:3.2;
552 if test -f /usr/options/cb.name; then
554 elif /bin/uname -X 2>/dev/null >/dev/null ; then
559 if test "$ac_cv_sco" = yes; then
560 test "x$GXX" = xyes && lyx_broken_headers=yes
564 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
565 dnl [default-yes-value])
566 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
567 dnl resulting directory name in 'dir-var-name'.
568 AC_DEFUN(LYX_WITH_DIR,[
569 AC_ARG_WITH($1,[ --with-$1 specify $2])
570 AC_MSG_CHECKING([for $2])
571 if test -z "$with_$3"; then
572 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
574 test "x$with_$3" = xyes && with_$3=$5
577 AC_MSG_RESULT($lyx_cv_$3)])
580 dnl Usage: LYX_LOOP_DIR(value,action)
581 dnl Executes action for values of variable `dir' in `values'. `values' can
582 dnl use ":" as a separator.
583 AC_DEFUN(LYX_LOOP_DIR,[
584 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
585 for dir in `eval "echo $1"`; do
586 if test ! "$dir" = NONE; then
587 test ! -d "$dir" && AC_ERROR([\"$dir\" is not a directory])
595 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
597 AC_DEFUN(LYX_ADD_LIB_DIR,[
599 if test "`(uname) 2>/dev/null`" = SunOS &&
600 uname -r | grep '^5' >/dev/null; then
601 if test $ac_cv_prog_gxx = yes ; then
602 $1="${$1} -Wl[,]-R$2"
609 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
611 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
614 dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)]
615 dnl if the cache file is inconsistent with the current host,
616 dnl target and build system types, execute CMD or print a default
618 AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [
619 AC_REQUIRE([AC_CANONICAL_SYSTEM])
620 AC_MSG_CHECKING([config.cache system type])
621 if { test x"${ac_cv_host_system_type+set}" = x"set" &&
622 test x"$ac_cv_host_system_type" != x"$host"; } ||
623 { test x"${ac_cv_build_system_type+set}" = x"set" &&
624 test x"$ac_cv_build_system_type" != x"$build"; } ||
625 { test x"${ac_cv_target_system_type+set}" = x"set" &&
626 test x"$ac_cv_target_system_type" != x"$target"; }; then
627 AC_MSG_RESULT([different])
629 [AC_MSG_ERROR(["you must remove config.cache and restart configure"])])
631 AC_MSG_RESULT([same])
633 ac_cv_host_system_type="$host"
634 ac_cv_build_system_type="$build"
635 ac_cv_target_system_type="$target"
638 dnl We use this until autoconf fixes its version.
639 AC_DEFUN(LYX_FUNC_SELECT_ARGTYPES,
640 [AC_MSG_CHECKING([types of arguments for select()])
641 AC_CACHE_VAL(ac_cv_func_select_arg234,dnl
642 [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl
643 [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl
644 [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do
645 for ac_cv_func_select_arg1 in 'int' 'size_t' 'unsigned long' 'unsigned'; do for ac_cv_func_select_arg5 in 'struct timeval *' 'const struct timeval *'; do
647 [#ifdef HAVE_SYS_TYPES_H
648 #include <sys/types.h>
650 #ifdef HAVE_SYS_TIME_H
651 #include <sys/time.h>
653 #ifdef HAVE_SYS_SELECT_H
654 #include <sys/select.h>
656 #ifdef HAVE_SYS_SOCKET_H
657 #include <sys/socket.h>
659 extern int select ($ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg234,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5);],,dnl
660 [ac_not_found=no ; break 3],ac_not_found=yes)
667 if test "$ac_not_found" = yes; then
668 ac_cv_func_select_arg1=int
669 ac_cv_func_select_arg234='int *'
670 ac_cv_func_select_arg5='struct timeval *'
672 AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5])
673 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1)
674 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234))
675 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5))