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
298 AC_DEFUN(LYX_CXX_STL_STRING,[
299 AC_ARG_WITH(included-string,
300 [ --with-included-string use LyX string class instead of STL string],,
301 [AC_CHECK_HEADER(std/bastring.h,
302 [with_included_string=yes],
303 [with_included_string=no])])
304 if test x$with_included_string = xyes ; then
305 AC_DEFINE(USE_INCLUDED_STRING, 1,
306 [Define to use the LString class bundled with LyX])
307 lyx_flags="$lyx_flags included-string"
312 AC_DEFUN(LYX_CXX_MUTABLE, [
313 AC_REQUIRE([LYX_PROG_CXX])
314 AC_MSG_CHECKING(if C++ compiler supports mutable)
320 void foo() const { c=0; }
325 AC_DEFINE(HAVE_MUTABLE, 1,
326 [Defined if you compiler supports 'mutable'.])
330 AC_MSG_RESULT([$ac_mutable])
335 AC_DEFUN(LYX_CXX_PARTIAL, [
336 AC_REQUIRE([LYX_PROG_CXX])
337 AC_MSG_CHECKING(if C++ compiler supports partial specialization)
340 template<class T, class K>
344 template<class T> class k<void,T> { };
349 ac_partial_specialization=yes
350 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
351 [Defined if your compiler supports partial specialization.])
353 ac_partial_specialization=no
355 AC_MSG_RESULT([$ac_partial_specialization])
358 dnl Usage: LYX_CXX_NAMESPACES : checks whether the C++ compiler
359 dnl has a correct namespace handling and define CXX_WORKING_NAMESPACES
360 dnl if true. This macro does not do a thourough test, but it should be
361 dnl good enough to suit our needs.
362 AC_DEFUN(LYX_CXX_NAMESPACES,[
363 AC_CACHE_CHECK(for correct namespaces support,lyx_cv_cxx_namespace,
370 ],lyx_cv_cxx_namespace=yes,lyx_cv_cxx_namespace=no)
372 if test $lyx_cv_cxx_namespace = yes ; then
373 AC_DEFINE(CXX_WORKING_NAMESPACES, 1,
374 [Define if your C++ compiler has correct support for namespaces])
378 dnl Usage LYX_PATH_XPM: Checks for xpm library and header
379 AC_DEFUN(LYX_PATH_XPM,[
380 ### Check for Xpm library
381 AC_CHECK_LIB(Xpm, XpmCreateBufferFromImage,LYX_LIBS="-lXpm $LYX_LIBS",
382 [LYX_LIB_ERROR(libXpm,Xpm)], $LYX_LIBS)
384 ### Check for Xpm headers
385 lyx_cv_xpm_h_location="<xpm.h>"
386 AC_CHECK_HEADER(X11/xpm.h,[
387 ac_cv_header_xpm_h=yes
388 lyx_cv_xpm_h_location="<X11/xpm.h>"],[
389 AC_CHECK_HEADER(xpm.h,[],[
390 LYX_LIB_ERROR(xpm.h,Xpm)])])
391 AC_DEFINE_UNQUOTED(XPM_H_LOCATION,$lyx_cv_xpm_h_location)
393 ### Test for the header version
394 if test $ac_cv_header_xpm_h = yes; then
395 AC_CACHE_CHECK([xpm header version],lyx_cv_xpmversion,
396 [ cat > conftest.$ac_ext <<EOF
397 #line __oline__ "configure"
398 #include "confdefs.h"
400 #include XPM_H_LOCATION
401 "%%%"lyx_cv_xpmv=XpmVersion;lyx_cv_xpmr=XpmRevision"%%%"
403 eval `(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
404 grep '^"%%%"' 2>/dev/null | \
405 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
406 case "$lyx_cv_xpmr" in
408 [0-9]) lyxxpmr_alpha=`echo $lyx_cv_xpmr |tr 123456789 abcdefghi`
409 lyxxpmv_alpha=" (aka 3.$lyx_cv_xpmv$lyxxpmr_alpha)";;
413 lyx_cv_xpmversion="$lyx_cv_xpmv.$lyx_cv_xpmr$lyxxpmv_alpha"
415 case "$lyx_cv_xpmr" in
417 [789]|[0-9][0-9]*) ;;
419 *) LYX_WARNING([Version $lyx_cv_xpmversion of the Xpm library is a bit old.
420 If you experience strange crashes with LyX, try to upgrade
421 to at least version 4.7 (aka 3.4g).
422 If you have installed a newer version of the library, check whether you
423 have an old xpm.h header file in your include path.]);;
428 dnl Usage LYX_PATH_XFORMS: Checks for xforms library and flags
429 AC_DEFUN(LYX_PATH_XFORMS,[
430 ### Check for xforms library
431 AC_CHECK_LIB(forms, fl_initialize, LYX_LIBS="-lforms $LYX_LIBS",
432 [AC_CHECK_LIB(xforms, fl_initialize, LYX_LIBS="-lxforms $LYX_LIBS",
433 [LYX_LIB_ERROR(libforms or libxforms,xforms)], $LYX_LIBS)], $LYX_LIBS)
435 ### Check for xforms headers
436 lyx_cv_forms_h_location="<forms.h>"
437 AC_CHECK_HEADER(X11/forms.h,[
438 ac_cv_header_forms_h=yes
439 lyx_cv_forms_h_location="<X11/forms.h>"],[
440 AC_CHECK_HEADER(forms.h,[],[
441 LYX_LIB_ERROR(forms.h,forms)])])
442 AC_DEFINE_UNQUOTED(FORMS_H_LOCATION,$lyx_cv_forms_h_location)
443 if test $ac_cv_header_forms_h = yes; then
444 AC_CACHE_CHECK([xforms header version],lyx_cv_xfversion,
445 [ cat > conftest.$ac_ext <<EOF
446 #line __oline__ "configure"
447 #include "confdefs.h"
449 #include FORMS_H_LOCATION
450 #if ! defined(FL_INCLUDE_VERSION)
453 "%%%"FL_VERSION.FL_REVISION"%%%"
456 lyx_cv_xfversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
457 grep '^"%%%"' 2>/dev/null | \
458 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
460 case "$lyx_cv_xfversion" in
461 "(unknown)"|0.82|0.83|0.84|0.85)
463 Version $lyx_cv_xfversion of xforms is not compatible with LyX.
464 This version of LyX works best with version 0.88[,] although it
465 supports also versions 0.81[,] 0.86 and 0.87.) ;;
468 While LyX is compatible with version $lyx_cv_xfversion of xforms[,]
469 it is recommended that you upgrade to version 0.88.) ;;
471 0.89) LYX_WARNING(dnl
472 LyX should work ok with version $lyx_cv_xfversion of xforms[,] but
473 it is an unproven version and might still have some bugs. If you
474 have problems[,] please use version 0.88 instead.) ;;
476 Version $lyx_cv_xfversion of xforms might not be compatible with LyX[,]
477 since it is newer than 0.88. You might have slight problems with it.);;
482 dnl Usage: LYX_HPUX Checks for HP-UX and update CXXFLAGS accordingly
484 [#It seems that HPUX requires using -fpcc-struct-return with gcc.
485 AC_CACHE_CHECK(for HP-UX,ac_cv_hpux,[
486 os=`uname -s | tr '[A-Z]' '[a-z]'`
488 test "$os" = hp-ux && ac_cv_hpux=yes])
489 if test "$ac_cv_hpux" = yes; then
490 test "x$GXX" = xyes && CXXFLAGS="$CXXFLAGS -fpcc-struct-return"
494 dnl Usage: LYX_SUNOS4 Checks for SunOS 4.x and sets the flag lyx_broken_headers
497 [#The headers are not correct under SunOS4
498 AC_CACHE_CHECK(for SunOS 4.x,ac_cv_sunos4,[
500 os=`uname -a | sed -e 's/^\([^ ]*\) [^ ]* \([0-9]\)\..*/\1\2/'`
501 changequote([, ]) dnl
503 test "$os" = SunOS4 && ac_cv_sunos4=yes])
504 if test "$ac_cv_sunos4" = yes; then
505 test "x$GXX" = xyes && lyx_broken_headers=yes
509 dnl Usage: LYX_SCO Checks for SCO and sets the flag lyx_broken_headers
512 [AC_CACHE_CHECK(for SCO 3.2v4,ac_cv_sco,[
514 if test `uname -s` != "SCO_SV"; then
515 lyx_machine_rel=`uname -m`:`uname -r`
516 if test $lyx_machine_rel = i386:3.2 || test $lyx_machine_rel = i486:3.2;
518 if test -f /usr/options/cb.name; then
520 elif /bin/uname -X 2>/dev/null >/dev/null ; then
525 if test "$ac_cv_sco" = yes; then
526 test "x$GXX" = xyes && lyx_broken_headers=yes
530 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
531 dnl [default-yes-value])
532 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
533 dnl resulting directory name in 'dir-var-name'.
534 AC_DEFUN(LYX_WITH_DIR,[
535 AC_ARG_WITH($1,[ --with-$1 specify $2])
536 AC_MSG_CHECKING([for $2])
537 if test -z "$with_$3"; then
538 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
540 test "x$with_$3" = xyes && with_$3=$5
543 AC_MSG_RESULT($lyx_cv_$3)])
546 dnl Usage: LYX_LOOP_DIR(value,action)
547 dnl Executes action for values of variable `dir' in `values'. `values' can
548 dnl use ":" as a separator.
549 AC_DEFUN(LYX_LOOP_DIR,[
550 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
551 for dir in `eval "echo $1"`; do
552 if test ! "$dir" = NONE; then
553 test ! -d "$dir" && AC_ERROR([\"$dir\" is not a directory])
561 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
563 AC_DEFUN(LYX_ADD_LIB_DIR,[
565 if test "`(uname) 2>/dev/null`" = SunOS &&
566 uname -r | grep '^5' >/dev/null; then
567 if test $ac_cv_prog_gxx = yes ; then
568 $1="${$1} -Wl[,]-R$2"
575 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
577 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
580 dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)]
581 dnl if the cache file is inconsistent with the current host,
582 dnl target and build system types, execute CMD or print a default
584 AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [
585 AC_REQUIRE([AC_CANONICAL_SYSTEM])
586 AC_MSG_CHECKING([config.cache system type])
587 if { test x"${ac_cv_host_system_type+set}" = x"set" &&
588 test x"$ac_cv_host_system_type" != x"$host"; } ||
589 { test x"${ac_cv_build_system_type+set}" = x"set" &&
590 test x"$ac_cv_build_system_type" != x"$build"; } ||
591 { test x"${ac_cv_target_system_type+set}" = x"set" &&
592 test x"$ac_cv_target_system_type" != x"$target"; }; then
593 AC_MSG_RESULT([different])
595 [AC_MSG_ERROR(["you must remove config.cache and restart configure"])])
597 AC_MSG_RESULT([same])
599 ac_cv_host_system_type="$host"
600 ac_cv_build_system_type="$build"
601 ac_cv_target_system_type="$target"
604 dnl We use this until autoconf fixes its version.
605 AC_DEFUN(LYX_FUNC_SELECT_ARGTYPES,
606 [AC_MSG_CHECKING([types of arguments for select()])
607 AC_CACHE_VAL(ac_cv_func_select_arg234,dnl
608 [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl
609 [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl
610 [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do
611 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
613 [#ifdef HAVE_SYS_TYPES_H
614 #include <sys/types.h>
616 #ifdef HAVE_SYS_TIME_H
617 #include <sys/time.h>
619 #ifdef HAVE_SYS_SELECT_H
620 #include <sys/select.h>
622 #ifdef HAVE_SYS_SOCKET_H
623 #include <sys/socket.h>
625 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
626 [ac_not_found=no ; break 3],ac_not_found=yes)
633 if test "$ac_not_found" = yes; then
634 ac_cv_func_select_arg1=int
635 ac_cv_func_select_arg234='int *'
636 ac_cv_func_select_arg5='struct timeval *'
638 AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5])
639 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1)
640 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234))
641 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5))