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_GET_VERSION Sets "lyx_version" to the version of LyX being
8 dnl built, displays it and sets variable "lyx_devel" to yes or no depending
9 dnl whether the version is a development release or not.
10 AC_DEFUN(LYX_GET_VERSION,[
12 VERSION=`grep '#define *LYX_VERSION' $1 |
13 sed -e 's/^.*"\(.*\)"$/\1/' 2>/dev/null`
14 echo "configuring LyX version $VERSION"
15 if echo "$VERSION" | grep 'cvs' >/dev/null ; then
17 echo "WARNING: This is a development version. Expect bugs."
21 if echo "$VERSION" | grep 'pre' > /dev/null ; then
23 echo "WARNING: This is a prerelease. Be careful and backup your documents."
28 PACKAGE=lyx${program_suffix}
29 AC_SUBST(lyx_devel_version)
30 if test $lyx_devel_version = yes ; then
31 AC_DEFINE(DEVEL_VERSION, 1, Define if you are building a development version of LyX)
34 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
35 dnl flag lyx_error to yes.
37 lyx_error_txt="$lyx_error_txt
43 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
44 dnl flag lyx_warning to yes.
45 AC_DEFUN(LYX_WARNING,[
46 lyx_warning_txt="$lyx_warning_txt
52 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
53 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
54 AC_DEFUN(LYX_LIB_ERROR,[
55 LYX_ERROR([Cannot find $1. Please check that the $2 library
56 is correctly installed on your system.])])
59 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
60 dnl has occured previously.
61 AC_DEFUN(LYX_CHECK_ERRORS,[
62 if test x$lyx_error = xyes; then
64 **** The following problems have been detected by configure.
65 **** Please check the messages below before running 'make'.
66 **** (see the section 'Problems' in the INSTALL file)
69 deleting cache $cache_file
74 if test x$lyx_warning = xyes; then
76 === The following minor problems have been detected by configure.
77 === Please check the messages below before running 'make'.
78 === (see the section 'Problems' in the INSTALL file)
83 Configuration of LyX was successful.
84 Type 'make' to compile the program,
85 and then 'make install' to install it.
90 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
92 define(LYX_SEARCH_PROG,[dnl
93 for ac_prog in $2 ; do
94 # Extract the first word of "$ac_prog", so it can be a program name with args.
95 set dummy $ac_prog ; ac_word=$[2]
96 if test -z "[$]$1"; then
97 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
98 for ac_dir in $PATH; do
99 test -z "$ac_dir" && ac_dir=.
100 if test -f [$ac_dir/$ac_word]; then
108 if test -n "[$]$1"; then
114 test -n "[$]$1" && break
119 AC_DEFUN(LYX_PROG_CXX_WORKS,
122 AC_TRY_COMPILER([class foo { int bar; }; int main(){return(0);}], ac_cv_prog_cxx_works, ac_cv_prog_cxx_cross)
124 if test $ac_cv_prog_cxx_works = no; then
127 cross_compiling=$ac_cv_prog_cxx_cross
131 AC_DEFUN(LYX_PROG_CXX,
132 [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
133 AC_MSG_CHECKING([for a working C++ compiler])
134 LYX_SEARCH_PROG(CXX, $CCC g++ gcc c++ CC cxx xlC cc++, LYX_PROG_CXX_WORKS)
136 if test -z "$CXX" ; then
137 AC_ERROR([Unable to find a working C++ compiler])
143 AC_MSG_CHECKING([whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler])
144 AC_MSG_RESULT($cross_compiling)
148 dnl We might want to get or shut warnings.
149 AC_ARG_WITH(warnings,
150 [ --with-warnings tell the compiler to display more warnings],,
151 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
156 if test x$with_warnings = xyes ; then
157 lyx_flags="$lyx_flags warnings"
158 AC_DEFINE(WITH_WARNINGS, 1,
159 [Define this if you want to see the warning directives put here and
160 there by the developpers to get attention])
163 # optimize less for development versions
164 if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
170 # set the debug flags correctly.
171 if test $ac_cv_prog_gxx = yes; then
173 dnl Check whether -g works, even if CXXFLAGS is set, in case the package
174 dnl plays around with CXXFLAGS (such as to build both debugging and
175 dnl normal versions of a library), tasteless as that idea is.
176 ac_test_CXXFLAGS="${CXXFLAGS+set}"
177 ac_save_CXXFLAGS="$CXXFLAGS"
179 dnl Check the version of g++
180 gxx_version=`${CXX} --version`
183 if test "$ac_test_CXXFLAGS" = set; then
184 CXXFLAGS="$ac_save_CXXFLAGS"
185 elif test $ac_cv_prog_cxx_g = yes; then
187 2.95.1) CXXFLAGS="-g $lyx_opt -fpermissive -fno-rtti -fno-exceptions";;
188 2.95.*) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
189 2.96*) CXXFLAGS="-g $lyx_opt -fno-exceptions";;
190 2.97*) CXXFLAGS="-g $lyx_opt -fvtable-thunks -fno-builtin -ffunction-sections -fdata-sections";;
191 *2.91.*) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
192 *) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
197 if test x$with_warnings = xyes ; then
199 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
200 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
201 2.97*) CXXFLAGS="$CXXFLAGS -W -Wall";;
202 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
204 if test $lyx_devel_version = yes ; then
208 2.97*) CXXFLAGS="$CXXFLAGS -Wconversion -Winline";;
216 test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
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,
288 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
290 if test $lyx_cv_broken_stack = yes ; then
291 AC_DEFINE(BROKEN_STL_STACK, 1,
292 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
297 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
298 dnl count template, if not the old HP version is assumed.
299 AC_DEFUN(LYX_STD_COUNT,[
300 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
304 int countChar(char * b, char * e, char const c)
306 return count(b, e, c);
310 int i = countChar(a, a + 5, 'l');
311 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
313 if test $lyx_cv_std_count = yes ; then
314 AC_DEFINE(HAVE_STD_COUNT, 1,
315 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
319 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
320 dnl supports modern STL streams
321 AC_DEFUN(LYX_CXX_STL_MODERN_STREAMS,[
322 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
326 std::streambuf * test = std::cerr.rdbuf();
328 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
330 if test $lyx_cv_modern_streams = yes ; then
331 AC_DEFINE(MODERN_STL_STREAMS, 1,
332 [Define if you have modern standard-compliant STL streams])
336 dnl Usage: LYX_CXX_STL_STRING : checks whether the C++ compiler
337 dnl has a std::string that is usable for LyX. LyX does not require this
338 dnl std::string to be standard.
339 AC_DEFUN(LYX_CXX_STL_STRING,[
340 AC_REQUIRE([LYX_PROG_CXX])
341 AC_MSG_CHECKING(whether the included std::string should be used)
342 AC_ARG_WITH(included-string,
343 [ --with-included-string use LyX string class instead of STL string],
344 [lyx_cv_with_included_string=$withval],
345 [AC_CACHE_CHECK([],lyx_cv_with_included_string,
350 // LyX has reduced its requirements on the basic_string
351 // implementation so that the basic_string supplied
352 // with gcc is usable. In particular this means that
353 // lyx does not use std::string::clear and not the
354 // strncmp version of std::string::compare. This is mainly
355 // done so that LyX can use precompiled C++ libraries that
356 // already uses the systems basic_string, e.g. gtk--
357 string a("hello there");
361 //int t = a.compare(a.length() - 1, 1, s);
364 lyx_cv_with_included_string=no
366 lyx_cv_with_included_string=yes
370 if test x$lyx_cv_with_included_string = xyes ; then
371 AC_DEFINE(USE_INCLUDED_STRING, 1,
372 [Define to use the lyxstring class bundled with LyX.])
373 lyx_flags="$lyx_flags included-string"
375 AM_CONDITIONAL(USE_LYXSTRING, test x$lyx_cv_with_included_string = xyes)
376 dnl AC_MSG_RESULT([$with_included_string])
380 dnl Usage: LYX_CXX_GOOD_STD_STRING : checks whether the C++ compiler
381 dnl has a std::string that is close to the standard. So close that
382 dnl methods not found in "unstandard" std::strings are present here.
383 AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[
384 AC_REQUIRE([LYX_PROG_CXX])
385 AC_CACHE_CHECK([whether the systems std::string is really good],
386 [lyx_cv_std_string_good],
391 // From a std::string that is supposed to be close to the
392 // standard we require at least three things:
393 // - clear() and erase()
394 // - the strncmp of compare()
396 string a("hello there");
400 int t = a.compare(a.length() - 1, 1, s);
404 lyx_cv_std_string_good=yes
406 lyx_cv_std_string_good=no
410 if test x$lyx_cv_std_string_good = xyes ; then
411 AC_DEFINE(STD_STRING_IS_GOOD, 1,
412 [Define if the systems std::string is really good.])
417 dnl Usage: LYX_REGEX : checks if the header regex.h is available
418 dnl if it is not available the automake variable USE_REGEX will be
419 dnl defined and the regex.h and regex.c that we provide will be used.
421 AC_CHECK_HEADERS(regex.h, lyx_regex=no, lyx_regex=yes)
422 AM_CONDITIONAL(USE_REGEX, test x$lyx_regex = xyes)
427 AC_DEFUN(LYX_CXX_MUTABLE, [
428 AC_REQUIRE([LYX_PROG_CXX])
429 AC_CACHE_CHECK([if C++ compiler supports mutable],
436 void foo() const { c=0; }
440 lyx_cv_cxx_mutable=yes
442 lyx_cv_cxx_mutable=no
445 if test $lyx_cv_cxx_mutable = yes ; then
446 AC_DEFINE(HAVE_MUTABLE, 1,
447 [Defined if your compiler suports 'mutable'.])
453 AC_DEFUN(LYX_CXX_PARTIAL, [
454 AC_REQUIRE([LYX_PROG_CXX])
455 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
456 [lyx_cv_cxx_partial_specialization],
459 template<class T, class K>
463 template<class T> class k<void,T> { };
468 lyx_cv_cxx_partial_specialization=yes
470 lyx_cv_cxx_partial_specialization=no
473 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
474 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
475 [Defined if your compiler supports partial specialization.])
480 dnl Usage: LYX_CXX_NAMESPACES : checks whether the C++ compiler
481 dnl has a correct namespace handling and define CXX_WORKING_NAMESPACES
482 dnl if true. This macro does not do a thourough test, but it should be
483 dnl good enough to suit our needs.
484 AC_DEFUN(LYX_CXX_NAMESPACES,[
485 AC_CACHE_CHECK(for correct namespaces support,lyx_cv_cxx_namespace,
493 ],lyx_cv_cxx_namespace=yes,lyx_cv_cxx_namespace=no)
495 if test x$lyx_cv_cxx_namespace = xyes ; then
496 AC_DEFINE(CXX_WORKING_NAMESPACES, 1,
497 [Define if your C++ compiler has correct support for namespaces])
502 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
503 dnl provides wrappers for C headers and use our alternate version otherwise.
504 AC_DEFUN(LYX_CXX_CHEADERS,[
505 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
515 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
516 if test $lyx_cv_cxx_cheaders = no ; then
517 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
520 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
521 dnl are already in the global namespace
522 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
523 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
524 lyx_cv_cxx_global_cstd,
530 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
531 if test x$lyx_cv_cxx_global_cstd = xyes; then
532 AC_DEFINE(CXX_GLOBAL_CSTD,1,
533 [Define if your C++ compiler puts C library functions in the global namespace])
537 dnl Usage LYX_PATH_XPM: Checks for xpm library and header
538 AC_DEFUN(LYX_PATH_XPM,[
539 ### Check for Xpm library
540 AC_CHECK_LIB(Xpm, XpmCreateBufferFromImage,LYX_LIBS="-lXpm $LYX_LIBS",
541 [LYX_LIB_ERROR(libXpm,Xpm)], $LYX_LIBS)
543 ### Check for Xpm headers
544 lyx_cv_xpm_h_location="<xpm.h>"
545 AC_CHECK_HEADER(X11/xpm.h,[
546 ac_cv_header_xpm_h=yes
547 lyx_cv_xpm_h_location="<X11/xpm.h>"],[
548 AC_CHECK_HEADER(xpm.h,[],[
549 LYX_LIB_ERROR(xpm.h,Xpm)])])
550 AC_DEFINE_UNQUOTED(XPM_H_LOCATION,$lyx_cv_xpm_h_location)
552 ### Test for the header version
553 if test $ac_cv_header_xpm_h = yes; then
554 AC_CACHE_CHECK([xpm header version],lyx_cv_xpmversion,
555 [ cat > conftest.$ac_ext <<EOF
556 #line __oline__ "configure"
557 #include "confdefs.h"
559 #include XPM_H_LOCATION
560 "%%%"lyx_cv_xpmv=XpmVersion;lyx_cv_xpmr=XpmRevision"%%%"
562 eval `(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
563 grep '^"%%%"' 2>/dev/null | \
564 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
565 case "$lyx_cv_xpmr" in
567 [0-9]) lyxxpmr_alpha=`echo $lyx_cv_xpmr |tr 123456789 abcdefghi`
568 lyxxpmv_alpha=" (aka 3.$lyx_cv_xpmv$lyxxpmr_alpha)";;
572 lyx_cv_xpmversion="$lyx_cv_xpmv.$lyx_cv_xpmr$lyxxpmv_alpha"
574 case "$lyx_cv_xpmr" in
576 [789]|[0-9][0-9]*) ;;
578 *) LYX_WARNING([Version $lyx_cv_xpmversion of the Xpm library is a bit old.
579 If you experience strange crashes with LyX, try to upgrade
580 to at least version 4.7 (aka 3.4g).
581 If you have installed a newer version of the library, check whether you
582 have an old xpm.h header file in your include path.]);;
587 dnl Usage LYX_PATH_XFORMS: Checks for xforms library and flags
588 AC_DEFUN(LYX_PATH_XFORMS,[
589 ### Check for xforms library
590 AC_CHECK_LIB(forms, fl_initialize, LYX_LIBS="-lforms $LYX_LIBS",
591 [AC_CHECK_LIB(xforms, fl_initialize, LYX_LIBS="-lxforms $LYX_LIBS",
592 [LYX_LIB_ERROR(libforms or libxforms,xforms)], $LYX_LIBS)], $LYX_LIBS)
594 ### Check for xforms headers
595 lyx_cv_forms_h_location="<forms.h>"
596 AC_CHECK_HEADER(X11/forms.h,[
597 ac_cv_header_forms_h=yes
598 lyx_cv_forms_h_location="<X11/forms.h>"],[
599 AC_CHECK_HEADER(forms.h,[],[
600 LYX_LIB_ERROR(forms.h,forms)])])
601 AC_DEFINE_UNQUOTED(FORMS_H_LOCATION,$lyx_cv_forms_h_location)
602 if test $ac_cv_header_forms_h = yes; then
603 AC_CACHE_CHECK([xforms header version],lyx_cv_xfversion,
604 [ cat > conftest.$ac_ext <<EOF
605 #line __oline__ "configure"
606 #include "confdefs.h"
608 #include FORMS_H_LOCATION
609 #if ! defined(FL_INCLUDE_VERSION)
612 "%%%"FL_VERSION.FL_REVISION.FL_FIXLEVEL"%%%"
615 lyx_cv_xfversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
616 grep '^"%%%"' 2>/dev/null | \
617 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
619 case "$lyx_cv_xfversion" in
620 "(unknown)"|0.8[1-7]*)
622 Version $lyx_cv_xfversion of xforms is not compatible with LyX.
623 This version of LyX works best with versions 0.88 (recommended) and later.) ;;
625 0.89*) LYX_WARNING(dnl
626 LyX should work ok with version $lyx_cv_xfversion of xforms[,] but
627 it is an unproven version and might still have some bugs. If you
628 have problems[,] please use version 0.88 instead.) ;;
630 Version $lyx_cv_xfversion of xforms might not be compatible with LyX[,]
631 since it is newer than 0.88. You might have slight problems with it.);;
636 dnl Usage: LYX_HPUX Checks for HP-UX and update CXXFLAGS accordingly
638 [#It seems that HPUX requires using -fpcc-struct-return with gcc.
639 AC_CACHE_CHECK(for HP-UX,ac_cv_hpux,[
640 os=`uname -s | tr '[A-Z]' '[a-z]'`
642 test "$os" = hp-ux && ac_cv_hpux=yes])
643 if test "$ac_cv_hpux" = yes; then
644 test "x$GXX" = xyes && CXXFLAGS="$CXXFLAGS -fpcc-struct-return"
648 dnl Usage: LYX_SUNOS4 Checks for SunOS 4.x and sets the flag lyx_broken_headers
651 [#The headers are not correct under SunOS4
652 AC_CACHE_CHECK(for SunOS 4.x,ac_cv_sunos4,[
654 os=`uname -a | sed -e 's/^\([^ ]*\) [^ ]* \([0-9]\)\..*/\1\2/'`
655 changequote([, ]) dnl
657 test "$os" = SunOS4 && ac_cv_sunos4=yes])
658 if test "$ac_cv_sunos4" = yes; then
659 test "x$GXX" = xyes && lyx_broken_headers=yes
663 dnl Usage: LYX_SCO Checks for SCO and sets the flag lyx_broken_headers
666 [AC_CACHE_CHECK(for SCO 3.2v4,ac_cv_sco,[
668 if test `uname -s` != "SCO_SV"; then
669 lyx_machine_rel=`uname -m`:`uname -r`
670 if test $lyx_machine_rel = i386:3.2 || test $lyx_machine_rel = i486:3.2;
672 if test -f /usr/options/cb.name; then
674 elif /bin/uname -X 2>/dev/null >/dev/null ; then
679 if test "$ac_cv_sco" = yes; then
680 test "x$GXX" = xyes && lyx_broken_headers=yes
683 dnl Usage: LYX_FUNC_PUTENV_ARGTYPE
684 dnl Checks whether putenv() takes 'char const *' or 'char *' as
685 dnl argument. This is needed because Solaris 7 (wrongly?) uses 'char *',
686 dnl while everybody else uses the former...
687 AC_DEFUN(LYX_FUNC_PUTENV_ARGTYPE,
688 [AC_MSG_CHECKING([type of argument for putenv()])
689 AC_CACHE_VAL(lyx_cv_func_putenv_arg,dnl
691 [#include <cstdlib>],
692 [char const * foo = "bar";
694 [lyx_cv_func_putenv_arg='char const *'],[lyx_cv_func_putenv_arg='char *'])])
695 AC_MSG_RESULT($lyx_cv_func_putenv_arg)
696 AC_DEFINE_UNQUOTED(PUTENV_TYPE_ARG,$lyx_cv_func_putenv_arg,dnl
697 [Define to the type of the argument of putenv(). Needed on Solaris 7.])])
700 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
701 dnl [default-yes-value])
702 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
703 dnl resulting directory name in 'dir-var-name'.
704 AC_DEFUN(LYX_WITH_DIR,[
705 AC_ARG_WITH($1,[ --with-$1 specify $2])
706 AC_MSG_CHECKING([for $2])
707 if test -z "$with_$3"; then
708 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
710 test "x$with_$3" = xyes && with_$3=$5
713 AC_MSG_RESULT($lyx_cv_$3)])
716 dnl Usage: LYX_LOOP_DIR(value,action)
717 dnl Executes action for values of variable `dir' in `values'. `values' can
718 dnl use ":" as a separator.
719 AC_DEFUN(LYX_LOOP_DIR,[
720 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
721 for dir in `eval "echo $1"`; do
722 if test ! "$dir" = NONE; then
723 test ! -d "$dir" && AC_ERROR([\"$dir\" is not a directory])
731 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
733 AC_DEFUN(LYX_ADD_LIB_DIR,[
735 if test "`(uname) 2>/dev/null`" = SunOS &&
736 uname -r | grep '^5' >/dev/null; then
737 if test $ac_cv_prog_gxx = yes ; then
738 $1="${$1} -Wl[,]-R$2"
745 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
747 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
749 ### Check which libsigc++ we're using and make sure any external one works
750 ### Check for libsigc++ library
751 AC_DEFUN(LYX_WITH_SIGC,
752 [AC_MSG_CHECKING(whether the included libsigc++ should be used)
753 AC_ARG_WITH([included-libsigc],
754 [ --without-included-libsigc
755 Use the libsigc++ installed on the system],
756 [lyx_use_included_libsigc=$withval],
757 [lyx_use_included_libsigc=yes])
758 AC_MSG_RESULT([$lyx_use_included_libsigc])
759 if test x$lyx_use_included_libsigc = xno; then
760 ### Check for libsigc++
761 ## can't use AC_SUBST right here!
766 [Cannot find libsigc++ library or headers at least as recent as 0.8.7.
767 Check your installation. Have you installed the development package?])
770 ### Use the included libsigc++
771 ### sigc-config hasn't been created yet so we can't just do the same as above
772 ### unless of course someone gets keen and merges the sigc++ configure.in
773 ### with this one. We don't really gain much by doing that though except
774 ### a considerably smaller dist and more difficult maintenance.
775 ### It'd also mean we'd have the equivalent of config/gettext.m4
776 lyx_flags="$lyx_flags included-libsigc"
777 SIGC_LIBS="\`\${top_builddir}/sigc++/sigc-config --libs-names | sed -e 's/-lsigc//'\`"
778 # Libsigc++ always installs into a subdirectory called sigc++. Therefore we
779 # have to always use #include <sigc++/signal_system.h> in our code.
780 # Remember if you decide to do anything to the sigc++ code to do your mods on
781 # the makeLyXsigc.sh script in development/tools using a current cvs checkout
782 # of libsigc++. A tarball distribution doesn't have everything in it that we
784 # We need both these -I entries to build when builddir != srcdir
785 if test "x$src_dir" = "x." ; then
786 SIGC_CFLAGS="-I\${top_srcdir}"
788 SIGC_CFLAGS="-I\${top_builddir} -I\${top_srcdir}"
790 INCLUDED_SIGC="\${top_builddir}/sigc++/libsigc.la"
791 ## can't substitute these here like this otherwise all remaining tests fail
792 ## instead we SUBST directly into the Makefiles
793 ##LIBS="$LIBS \$SIGC_LIBS"
794 ##CPPFLAGS="$CPPFLAGS \$SIGC_CFLAGS"
796 AC_SUBST(SIGC_CFLAGS)
798 AC_SUBST(INCLUDED_SIGC)
801 ### Check for a headers existence and location iff it exists
802 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
803 ## It almost works. I've tried a few variations but they give errors
804 ## of one sort or other: bad substitution or file not found etc. The
805 ## actual header _is_ found though and the cache variable is set however
806 ## the reported setting (on screen) is equal to $ac_safe for some unknown
808 ## Additionally, autoheader can't figure out what to use as the name in
809 ## the config.h.in file so we need to write our own entries there -- one for
810 ## each header in the form PATH_HEADER_NAME_H
812 AC_DEFUN(LYX_PATH_HEADER,
813 [ AC_CHECK_HEADER($1,[
814 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
815 ### the only remaining problem is getting the second parameter to this
816 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
817 ### of $ac_safe being printed.
818 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
819 [ cat > conftest.$ac_ext <<EOF
820 #line __oline__ "configure"
821 #include "confdefs.h"
825 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
826 grep $1 2>/dev/null | \
827 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
828 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
830 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path)])
832 ### end of LYX_PATH_HEADER
834 ### Check for stl_string_fwd.h existence and location if it exists
835 AC_DEFUN(LYX_STL_STRING_FWD,
836 [ AC_CHECK_HEADER(stl_string_fwd.h,[
837 AC_CACHE_CHECK([path to stl_string_fwd.h],lyx_cv_path_stl_string_fwd_h,
838 [ cat > conftest.$ac_ext <<EOF
839 #line __oline__ "configure"
840 #include "confdefs.h"
842 #include <stl_string_fwd.h>
844 lyx_cv_path_stl_string_fwd_h=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
845 grep 'stl_string_fwd.h' 2>/dev/null | \
846 sed -e 's/.*\(".*stl_string_fwd.h"\).*/\1/' -e "1q"`
848 AC_DEFINE_UNQUOTED(STL_STRING_FWD_H_LOCATION,$lyx_cv_path_stl_string_fwd_h,
849 [define this to the location of stl_string_fwd.h to be used with #include,
850 NOTE: Do not set it to <stl_string_fwd.h> as that will find the LyX
851 supplied version of the header.
852 e.g. <../include/stl_string_fwd.h> or better yet use an absolute path])])
856 dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)]
857 dnl if the cache file is inconsistent with the current host,
858 dnl target and build system types, execute CMD or print a default
860 AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [
861 AC_REQUIRE([AC_CANONICAL_SYSTEM])
862 AC_MSG_CHECKING([config.cache system type])
863 if { test x"${ac_cv_host_system_type+set}" = x"set" &&
864 test x"$ac_cv_host_system_type" != x"$host"; } ||
865 { test x"${ac_cv_build_system_type+set}" = x"set" &&
866 test x"$ac_cv_build_system_type" != x"$build"; } ||
867 { test x"${ac_cv_target_system_type+set}" = x"set" &&
868 test x"$ac_cv_target_system_type" != x"$target"; }; then
869 AC_MSG_RESULT([different])
871 [AC_MSG_ERROR(["you must remove config.cache and restart configure"])])
873 AC_MSG_RESULT([same])
875 ac_cv_host_system_type="$host"
876 ac_cv_build_system_type="$build"
877 ac_cv_target_system_type="$target"
880 dnl We use this until autoconf fixes its version.
881 AC_DEFUN(LYX_FUNC_SELECT_ARGTYPES,
882 [AC_MSG_CHECKING([types of arguments for select()])
883 AC_CACHE_VAL(ac_cv_func_select_arg234,dnl
884 [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl
885 [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl
886 [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do
887 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
889 [#ifdef HAVE_SYS_TYPES_H
890 #include <sys/types.h>
892 #ifdef HAVE_SYS_TIME_H
893 #include <sys/time.h>
895 #ifdef HAVE_SYS_SELECT_H
896 #include <sys/select.h>
898 #ifdef HAVE_SYS_SOCKET_H
899 #include <sys/socket.h>
901 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
902 [ac_not_found=no ; break 3],ac_not_found=yes)
909 if test "$ac_not_found" = yes; then
910 ac_cv_func_select_arg1=int
911 ac_cv_func_select_arg234='int *'
912 ac_cv_func_select_arg5='struct timeval *'
914 AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5])
915 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1)
916 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234))
917 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5))
920 ### Check which frontend we want to use. The default is XForms
922 AC_DEFUN(LYX_USE_FRONTEND,
923 [AC_MSG_CHECKING(what frontend should be used as main GUI)
924 AC_ARG_WITH(frontend,
925 [ --with-frontend[=value] Use THIS frontend as main GUI:
926 Possible values: xforms,kde,gnome],
927 [lyx_use_frontend="$withval"], [lyx_use_frontend="xforms"])
928 AC_MSG_RESULT($lyx_use_frontend)
929 lyx_flags="$lyx_flags frontend-$lyx_use_frontend"
931 AC_SUBST(FRONTEND_GUILIB)
932 AC_SUBST(FRONTEND_LDFLAGS)
933 AC_SUBST(FRONTEND_INCLUDES)
934 AC_SUBST(FRONTEND_LIBS)
938 dnl Check things are declared in headers to avoid errors or warnings.
939 dnl Called like LYX_CHECK_DECL(function, headerfile)
940 dnl Defines HAVE_DECL_{FUNCTION}
941 AC_DEFUN(LYX_CHECK_DECL,
942 [AC_MSG_CHECKING(if $1 is declared by header $2)
943 tr_func=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
945 tr_hdr=`echo $2 | tr . _`
946 AC_CACHE_VAL([lyx_cv_declare_${tr_hdr}_$1],
947 [AC_EGREP_HEADER($1, $2, [eval "lyx_cv_declare_${tr_hdr}_$1=yes"], [eval "lyx_cv_declare_${tr_hdr}_$1=no"])])
948 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then
949 AC_DEFINE_UNQUOTED(HAVE_DECL_${tr_func})
955 dnl This is the multiple headers version of the LYX_CHECK_DECL macro above.
956 dnl Called like LYX_CHECK_DECL_HDRS(function, file1 file2 file3)
957 AC_DEFUN(LYX_CHECK_DECL_HDRS,
960 tr_hdr=`echo $I | tr . _`
961 if test "${got}" = "no"; then
962 LYX_CHECK_DECL($1, $I)
964 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then