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 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE=1";;
192 *2.91.*) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
193 *) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
198 if test x$with_warnings = xyes ; then
200 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
201 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
202 2.97*) CXXFLAGS="$CXXFLAGS -W -Wall";;
203 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
205 if test $lyx_devel_version = yes ; then
209 2.97*) CXXFLAGS="$CXXFLAGS -Wconversion -Winline";;
217 test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
222 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
224 AC_DEFUN(LYX_CXX_RTTI,[
225 ### Check whether the compiler supports runtime type information
226 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
230 virtual int tag() { return 0; }
232 class derived1 : public rtti {
234 int tag() { return 1; }
236 class derived2 : public rtti {
238 int tag() { return 2; }
241 derived1 * foo1 = new derived1();
242 derived2 * foo2 = new derived2();
244 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
248 bar1 = dynamic_cast<derived1 *>(bar);
253 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
255 if test x$lyx_cv_rtti = xyes ; then
256 AC_DEFINE(HAVE_RTTI, 1,
257 [Define to 1 if your compiler supports runtime type information])
261 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
262 dnl understands the "explicit" directive.
263 AC_DEFUN(LYX_CXX_EXPLICIT,[
264 ### Check whether the compiler understands the keyword `explicit'
265 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
270 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
272 if test $lyx_cv_explicit = no ; then
273 AC_DEFINE(explicit,[ ],
274 [Define to nothing if your compiler does not understand the
275 'explicit' directive])
279 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
280 dnl has a working stl stack template
281 AC_DEFUN(LYX_CXX_STL_STACK,[
282 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
289 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
291 if test $lyx_cv_broken_stack = yes ; then
292 AC_DEFINE(BROKEN_STL_STACK, 1,
293 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
298 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
299 dnl count template, if not the old HP version is assumed.
300 AC_DEFUN(LYX_STD_COUNT,[
301 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
305 int countChar(char * b, char * e, char const c)
307 return count(b, e, c);
311 int i = countChar(a, a + 5, 'l');
312 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
314 if test $lyx_cv_std_count = yes ; then
315 AC_DEFINE(HAVE_STD_COUNT, 1,
316 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
320 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
321 dnl supports modern STL streams
322 AC_DEFUN(LYX_CXX_STL_MODERN_STREAMS,[
323 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
327 std::streambuf * test = std::cerr.rdbuf();
329 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
331 if test $lyx_cv_modern_streams = yes ; then
332 AC_DEFINE(MODERN_STL_STREAMS, 1,
333 [Define if you have modern standard-compliant STL streams])
337 dnl Usage: LYX_CXX_STL_STRING : checks whether the C++ compiler
338 dnl has a std::string that is usable for LyX. LyX does not require this
339 dnl std::string to be standard.
340 AC_DEFUN(LYX_CXX_STL_STRING,[
341 AC_REQUIRE([LYX_PROG_CXX])
342 AC_MSG_CHECKING(whether the included std::string should be used)
343 AC_ARG_WITH(included-string,
344 [ --with-included-string use LyX string class instead of STL string],
345 [lyx_cv_with_included_string=$withval],
346 [AC_CACHE_CHECK([],lyx_cv_with_included_string,
351 // LyX has reduced its requirements on the basic_string
352 // implementation so that the basic_string supplied
353 // with gcc is usable. In particular this means that
354 // lyx does not use std::string::clear and not the
355 // strncmp version of std::string::compare. This is mainly
356 // done so that LyX can use precompiled C++ libraries that
357 // already uses the systems basic_string, e.g. gtk--
358 string a("hello there");
362 //int t = a.compare(a.length() - 1, 1, s);
365 lyx_cv_with_included_string=no
367 lyx_cv_with_included_string=yes
371 if test x$lyx_cv_with_included_string = xyes ; then
372 AC_DEFINE(USE_INCLUDED_STRING, 1,
373 [Define to use the lyxstring class bundled with LyX.])
374 lyx_flags="$lyx_flags included-string"
376 AM_CONDITIONAL(USE_LYXSTRING, test x$lyx_cv_with_included_string = xyes)
377 dnl AC_MSG_RESULT([$with_included_string])
381 dnl Usage: LYX_CXX_GOOD_STD_STRING : checks whether the C++ compiler
382 dnl has a std::string that is close to the standard. So close that
383 dnl methods not found in "unstandard" std::strings are present here.
384 AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[
385 AC_REQUIRE([LYX_PROG_CXX])
386 AC_CACHE_CHECK([whether the systems std::string is really good],
387 [lyx_cv_std_string_good],
392 // From a std::string that is supposed to be close to the
393 // standard we require at least three things:
394 // - clear() and erase()
395 // - the strncmp of compare()
397 string a("hello there");
401 int t = a.compare(a.length() - 1, 1, s);
405 lyx_cv_std_string_good=yes
407 lyx_cv_std_string_good=no
411 if test x$lyx_cv_std_string_good = xyes ; then
412 AC_DEFINE(STD_STRING_IS_GOOD, 1,
413 [Define if the systems std::string is really good.])
418 dnl Usage: LYX_REGEX : checks if the header regex.h is available
419 dnl if it is not available the automake variable USE_REGEX will be
420 dnl defined and the regex.h and regex.c that we provide will be used.
422 AC_CHECK_HEADERS(regex.h, lyx_regex=no, lyx_regex=yes)
423 AM_CONDITIONAL(USE_REGEX, test x$lyx_regex = xyes)
428 AC_DEFUN(LYX_CXX_MUTABLE, [
429 AC_REQUIRE([LYX_PROG_CXX])
430 AC_CACHE_CHECK([if C++ compiler supports mutable],
437 void foo() const { c=0; }
441 lyx_cv_cxx_mutable=yes
443 lyx_cv_cxx_mutable=no
446 if test $lyx_cv_cxx_mutable = yes ; then
447 AC_DEFINE(HAVE_MUTABLE, 1,
448 [Defined if your compiler suports 'mutable'.])
454 AC_DEFUN(LYX_CXX_PARTIAL, [
455 AC_REQUIRE([LYX_PROG_CXX])
456 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
457 [lyx_cv_cxx_partial_specialization],
460 template<class T, class K>
464 template<class T> class k<void,T> { };
469 lyx_cv_cxx_partial_specialization=yes
471 lyx_cv_cxx_partial_specialization=no
474 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
475 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
476 [Defined if your compiler supports partial specialization.])
481 dnl Usage: LYX_CXX_NAMESPACES : checks whether the C++ compiler
482 dnl has a correct namespace handling and define CXX_WORKING_NAMESPACES
483 dnl if true. This macro does not do a thourough test, but it should be
484 dnl good enough to suit our needs.
485 AC_DEFUN(LYX_CXX_NAMESPACES,[
486 AC_CACHE_CHECK(for correct namespaces support,lyx_cv_cxx_namespace,
494 ],lyx_cv_cxx_namespace=yes,lyx_cv_cxx_namespace=no)
496 if test x$lyx_cv_cxx_namespace = xyes ; then
497 AC_DEFINE(CXX_WORKING_NAMESPACES, 1,
498 [Define if your C++ compiler has correct support for namespaces])
503 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
504 dnl provides wrappers for C headers and use our alternate version otherwise.
505 AC_DEFUN(LYX_CXX_CHEADERS,[
506 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
516 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
517 if test $lyx_cv_cxx_cheaders = no ; then
518 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
521 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
522 dnl are already in the global namespace
523 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
524 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
525 lyx_cv_cxx_global_cstd,
531 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
532 if test x$lyx_cv_cxx_global_cstd = xyes; then
533 AC_DEFINE(CXX_GLOBAL_CSTD,1,
534 [Define if your C++ compiler puts C library functions in the global namespace])
538 dnl Usage LYX_PATH_XPM: Checks for xpm library and header
539 AC_DEFUN(LYX_PATH_XPM,[
540 ### Check for Xpm library
541 AC_CHECK_LIB(Xpm, XpmCreateBufferFromImage,LYX_LIBS="-lXpm $LYX_LIBS",
542 [LYX_LIB_ERROR(libXpm,Xpm)], $LYX_LIBS)
544 ### Check for Xpm headers
545 lyx_cv_xpm_h_location="<xpm.h>"
546 AC_CHECK_HEADER(X11/xpm.h,[
547 ac_cv_header_xpm_h=yes
548 lyx_cv_xpm_h_location="<X11/xpm.h>"],[
549 AC_CHECK_HEADER(xpm.h,[],[
550 LYX_LIB_ERROR(xpm.h,Xpm)])])
551 AC_DEFINE_UNQUOTED(XPM_H_LOCATION,$lyx_cv_xpm_h_location)
553 ### Test for the header version
554 if test $ac_cv_header_xpm_h = yes; then
555 AC_CACHE_CHECK([xpm header version],lyx_cv_xpmversion,
556 [ cat > conftest.$ac_ext <<EOF
557 #line __oline__ "configure"
558 #include "confdefs.h"
560 #include XPM_H_LOCATION
561 "%%%"lyx_cv_xpmv=XpmVersion;lyx_cv_xpmr=XpmRevision"%%%"
563 eval `(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
564 grep '^"%%%"' 2>/dev/null | \
565 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
566 case "$lyx_cv_xpmr" in
568 [0-9]) lyxxpmr_alpha=`echo $lyx_cv_xpmr |tr 123456789 abcdefghi`
569 lyxxpmv_alpha=" (aka 3.$lyx_cv_xpmv$lyxxpmr_alpha)";;
573 lyx_cv_xpmversion="$lyx_cv_xpmv.$lyx_cv_xpmr$lyxxpmv_alpha"
575 case "$lyx_cv_xpmr" in
577 [789]|[0-9][0-9]*) ;;
579 *) LYX_WARNING([Version $lyx_cv_xpmversion of the Xpm library is a bit old.
580 If you experience strange crashes with LyX, try to upgrade
581 to at least version 4.7 (aka 3.4g).
582 If you have installed a newer version of the library, check whether you
583 have an old xpm.h header file in your include path.]);;
588 dnl Usage LYX_PATH_XFORMS: Checks for xforms library and flags
589 AC_DEFUN(LYX_PATH_XFORMS,[
590 ### Check for xforms library
591 AC_CHECK_LIB(forms, fl_initialize, LYX_LIBS="-lforms $LYX_LIBS",
592 [AC_CHECK_LIB(xforms, fl_initialize, LYX_LIBS="-lxforms $LYX_LIBS",
593 [LYX_LIB_ERROR(libforms or libxforms,xforms)], $LYX_LIBS)], $LYX_LIBS)
595 ### Check for xforms headers
596 lyx_cv_forms_h_location="<forms.h>"
597 AC_CHECK_HEADER(X11/forms.h,[
598 ac_cv_header_forms_h=yes
599 lyx_cv_forms_h_location="<X11/forms.h>"],[
600 AC_CHECK_HEADER(forms.h,[],[
601 LYX_LIB_ERROR(forms.h,forms)])])
602 AC_DEFINE_UNQUOTED(FORMS_H_LOCATION,$lyx_cv_forms_h_location)
603 if test $ac_cv_header_forms_h = yes; then
604 AC_CACHE_CHECK([xforms header version],lyx_cv_xfversion,
605 [ cat > conftest.$ac_ext <<EOF
606 #line __oline__ "configure"
607 #include "confdefs.h"
609 #include FORMS_H_LOCATION
610 #if ! defined(FL_INCLUDE_VERSION)
613 "%%%"FL_VERSION.FL_REVISION.FL_FIXLEVEL"%%%"
616 lyx_cv_xfversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
617 grep '^"%%%"' 2>/dev/null | \
618 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
620 case "$lyx_cv_xfversion" in
621 "(unknown)"|0.8[1-7]*)
623 Version $lyx_cv_xfversion of xforms is not compatible with LyX.
624 This version of LyX works best with versions 0.88 (recommended) and later.) ;;
626 0.89*) LYX_WARNING(dnl
627 LyX should work ok with version $lyx_cv_xfversion of xforms[,] but
628 it is an unproven version and might still have some bugs. If you
629 have problems[,] please use version 0.88 instead.) ;;
631 Version $lyx_cv_xfversion of xforms might not be compatible with LyX[,]
632 since it is newer than 0.88. You might have slight problems with it.);;
637 dnl Usage: LYX_HPUX Checks for HP-UX and update CXXFLAGS accordingly
639 [#It seems that HPUX requires using -fpcc-struct-return with gcc.
640 AC_CACHE_CHECK(for HP-UX,ac_cv_hpux,[
641 os=`uname -s | tr '[A-Z]' '[a-z]'`
643 test "$os" = hp-ux && ac_cv_hpux=yes])
644 if test "$ac_cv_hpux" = yes; then
645 test "x$GXX" = xyes && CXXFLAGS="$CXXFLAGS -fpcc-struct-return"
649 dnl Usage: LYX_SUNOS4 Checks for SunOS 4.x and sets the flag lyx_broken_headers
652 [#The headers are not correct under SunOS4
653 AC_CACHE_CHECK(for SunOS 4.x,ac_cv_sunos4,[
655 os=`uname -a | sed -e 's/^\([^ ]*\) [^ ]* \([0-9]\)\..*/\1\2/'`
656 changequote([, ]) dnl
658 test "$os" = SunOS4 && ac_cv_sunos4=yes])
659 if test "$ac_cv_sunos4" = yes; then
660 test "x$GXX" = xyes && lyx_broken_headers=yes
664 dnl Usage: LYX_SCO Checks for SCO and sets the flag lyx_broken_headers
667 [AC_CACHE_CHECK(for SCO 3.2v4,ac_cv_sco,[
669 if test `uname -s` != "SCO_SV"; then
670 lyx_machine_rel=`uname -m`:`uname -r`
671 if test $lyx_machine_rel = i386:3.2 || test $lyx_machine_rel = i486:3.2;
673 if test -f /usr/options/cb.name; then
675 elif /bin/uname -X 2>/dev/null >/dev/null ; then
680 if test "$ac_cv_sco" = yes; then
681 test "x$GXX" = xyes && lyx_broken_headers=yes
684 dnl Usage: LYX_FUNC_PUTENV_ARGTYPE
685 dnl Checks whether putenv() takes 'char const *' or 'char *' as
686 dnl argument. This is needed because Solaris 7 (wrongly?) uses 'char *',
687 dnl while everybody else uses the former...
688 AC_DEFUN(LYX_FUNC_PUTENV_ARGTYPE,
689 [AC_MSG_CHECKING([type of argument for putenv()])
690 AC_CACHE_VAL(lyx_cv_func_putenv_arg,dnl
692 [#include <cstdlib>],
693 [char const * foo = "bar";
695 [lyx_cv_func_putenv_arg='char const *'],[lyx_cv_func_putenv_arg='char *'])])
696 AC_MSG_RESULT($lyx_cv_func_putenv_arg)
697 AC_DEFINE_UNQUOTED(PUTENV_TYPE_ARG,$lyx_cv_func_putenv_arg,dnl
698 [Define to the type of the argument of putenv(). Needed on Solaris 7.])])
701 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
702 dnl [default-yes-value])
703 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
704 dnl resulting directory name in 'dir-var-name'.
705 AC_DEFUN(LYX_WITH_DIR,[
706 AC_ARG_WITH($1,[ --with-$1 specify $2])
707 AC_MSG_CHECKING([for $2])
708 if test -z "$with_$3"; then
709 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
711 test "x$with_$3" = xyes && with_$3=$5
714 AC_MSG_RESULT($lyx_cv_$3)])
717 dnl Usage: LYX_LOOP_DIR(value,action)
718 dnl Executes action for values of variable `dir' in `values'. `values' can
719 dnl use ":" as a separator.
720 AC_DEFUN(LYX_LOOP_DIR,[
721 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
722 for dir in `eval "echo $1"`; do
723 if test ! "$dir" = NONE; then
724 test ! -d "$dir" && AC_ERROR([\"$dir\" is not a directory])
732 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
734 AC_DEFUN(LYX_ADD_LIB_DIR,[
736 if test "`(uname) 2>/dev/null`" = SunOS &&
737 uname -r | grep '^5' >/dev/null; then
738 if test $ac_cv_prog_gxx = yes ; then
739 $1="${$1} -Wl[,]-R$2"
746 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
748 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
750 ### Check which libsigc++ we're using and make sure any external one works
751 ### Check for libsigc++ library
752 AC_DEFUN(LYX_WITH_SIGC,
753 [AC_MSG_CHECKING(whether the included libsigc++ should be used)
754 AC_ARG_WITH([included-libsigc],
755 [ --without-included-libsigc
756 Use the libsigc++ installed on the system],
757 [lyx_use_included_libsigc=$withval],
758 [lyx_use_included_libsigc=yes])
759 AC_MSG_RESULT([$lyx_use_included_libsigc])
760 if test x$lyx_use_included_libsigc = xno; then
761 ### Check for libsigc++
762 ## can't use AC_SUBST right here!
767 [Cannot find libsigc++ library or headers at least as recent as 0.8.7.
768 Check your installation. Have you installed the development package?])
771 ### Use the included libsigc++
772 ### sigc-config hasn't been created yet so we can't just do the same as above
773 ### unless of course someone gets keen and merges the sigc++ configure.in
774 ### with this one. We don't really gain much by doing that though except
775 ### a considerably smaller dist and more difficult maintenance.
776 ### It'd also mean we'd have the equivalent of config/gettext.m4
777 lyx_flags="$lyx_flags included-libsigc"
778 SIGC_LIBS="\`\${top_builddir}/sigc++/sigc-config --libs-names | sed -e 's/-lsigc//'\`"
779 # Libsigc++ always installs into a subdirectory called sigc++. Therefore we
780 # have to always use #include <sigc++/signal_system.h> in our code.
781 # Remember if you decide to do anything to the sigc++ code to do your mods on
782 # the makeLyXsigc.sh script in development/tools using a current cvs checkout
783 # of libsigc++. A tarball distribution doesn't have everything in it that we
785 # We need both these -I entries to build when builddir != srcdir
786 if test "x$src_dir" = "x." ; then
787 SIGC_CFLAGS="-I\${top_srcdir}"
789 SIGC_CFLAGS="-I\${top_builddir} -I\${top_srcdir}"
791 INCLUDED_SIGC="\${top_builddir}/sigc++/libsigc.la"
792 ## can't substitute these here like this otherwise all remaining tests fail
793 ## instead we SUBST directly into the Makefiles
794 ##LIBS="$LIBS \$SIGC_LIBS"
795 ##CPPFLAGS="$CPPFLAGS \$SIGC_CFLAGS"
797 AC_SUBST(SIGC_CFLAGS)
799 AC_SUBST(INCLUDED_SIGC)
802 ### Check for a headers existence and location iff it exists
803 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
804 ## It almost works. I've tried a few variations but they give errors
805 ## of one sort or other: bad substitution or file not found etc. The
806 ## actual header _is_ found though and the cache variable is set however
807 ## the reported setting (on screen) is equal to $ac_safe for some unknown
809 ## Additionally, autoheader can't figure out what to use as the name in
810 ## the config.h.in file so we need to write our own entries there -- one for
811 ## each header in the form PATH_HEADER_NAME_H
813 AC_DEFUN(LYX_PATH_HEADER,
814 [ AC_CHECK_HEADER($1,[
815 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
816 ### the only remaining problem is getting the second parameter to this
817 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
818 ### of $ac_safe being printed.
819 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
820 [ cat > conftest.$ac_ext <<EOF
821 #line __oline__ "configure"
822 #include "confdefs.h"
826 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
827 grep $1 2>/dev/null | \
828 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
829 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
831 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path)])
833 ### end of LYX_PATH_HEADER
835 ### Check for stl_string_fwd.h existence and location if it exists
836 AC_DEFUN(LYX_STL_STRING_FWD,
837 [ AC_CHECK_HEADER(stl_string_fwd.h,[
838 AC_CACHE_CHECK([path to stl_string_fwd.h],lyx_cv_path_stl_string_fwd_h,
839 [ cat > conftest.$ac_ext <<EOF
840 #line __oline__ "configure"
841 #include "confdefs.h"
843 #include <stl_string_fwd.h>
845 lyx_cv_path_stl_string_fwd_h=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
846 grep 'stl_string_fwd.h' 2>/dev/null | \
847 sed -e 's/.*\(".*stl_string_fwd.h"\).*/\1/' -e "1q"`
849 AC_DEFINE_UNQUOTED(STL_STRING_FWD_H_LOCATION,$lyx_cv_path_stl_string_fwd_h,
850 [define this to the location of stl_string_fwd.h to be used with #include,
851 NOTE: Do not set it to <stl_string_fwd.h> as that will find the LyX
852 supplied version of the header.
853 e.g. <../include/stl_string_fwd.h> or better yet use an absolute path])])
857 dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)]
858 dnl if the cache file is inconsistent with the current host,
859 dnl target and build system types, execute CMD or print a default
861 AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [
862 AC_REQUIRE([AC_CANONICAL_SYSTEM])
863 AC_MSG_CHECKING([config.cache system type])
864 if { test x"${ac_cv_host_system_type+set}" = x"set" &&
865 test x"$ac_cv_host_system_type" != x"$host"; } ||
866 { test x"${ac_cv_build_system_type+set}" = x"set" &&
867 test x"$ac_cv_build_system_type" != x"$build"; } ||
868 { test x"${ac_cv_target_system_type+set}" = x"set" &&
869 test x"$ac_cv_target_system_type" != x"$target"; }; then
870 AC_MSG_RESULT([different])
872 [AC_MSG_ERROR(["you must remove config.cache and restart configure"])])
874 AC_MSG_RESULT([same])
876 ac_cv_host_system_type="$host"
877 ac_cv_build_system_type="$build"
878 ac_cv_target_system_type="$target"
881 dnl We use this until autoconf fixes its version.
882 AC_DEFUN(LYX_FUNC_SELECT_ARGTYPES,
883 [AC_MSG_CHECKING([types of arguments for select()])
884 AC_CACHE_VAL(ac_cv_func_select_arg234,dnl
885 [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl
886 [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl
887 [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do
888 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
890 [#ifdef HAVE_SYS_TYPES_H
891 #include <sys/types.h>
893 #ifdef HAVE_SYS_TIME_H
894 #include <sys/time.h>
896 #ifdef HAVE_SYS_SELECT_H
897 #include <sys/select.h>
899 #ifdef HAVE_SYS_SOCKET_H
900 #include <sys/socket.h>
902 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
903 [ac_not_found=no ; break 3],ac_not_found=yes)
910 if test "$ac_not_found" = yes; then
911 ac_cv_func_select_arg1=int
912 ac_cv_func_select_arg234='int *'
913 ac_cv_func_select_arg5='struct timeval *'
915 AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5])
916 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1)
917 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234))
918 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5))
921 ### Check which frontend we want to use. The default is XForms
923 AC_DEFUN(LYX_USE_FRONTEND,
924 [AC_MSG_CHECKING(what frontend should be used as main GUI)
925 AC_ARG_WITH(frontend,
926 [ --with-frontend[=value] Use THIS frontend as main GUI:
927 Possible values: xforms,kde,gnome],
928 [lyx_use_frontend="$withval"], [lyx_use_frontend="xforms"])
929 AC_MSG_RESULT($lyx_use_frontend)
930 lyx_flags="$lyx_flags frontend-$lyx_use_frontend"
932 AC_SUBST(FRONTEND_GUILIB)
933 AC_SUBST(FRONTEND_LDFLAGS)
934 AC_SUBST(FRONTEND_INCLUDES)
935 AC_SUBST(FRONTEND_LIBS)
939 dnl Check things are declared in headers to avoid errors or warnings.
940 dnl Called like LYX_CHECK_DECL(function, headerfile)
941 dnl Defines HAVE_DECL_{FUNCTION}
942 AC_DEFUN(LYX_CHECK_DECL,
943 [AC_MSG_CHECKING(if $1 is declared by header $2)
944 tr_func=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
946 tr_hdr=`echo $2 | tr . _`
947 AC_CACHE_VAL([lyx_cv_declare_${tr_hdr}_$1],
948 [AC_EGREP_HEADER($1, $2, [eval "lyx_cv_declare_${tr_hdr}_$1=yes"], [eval "lyx_cv_declare_${tr_hdr}_$1=no"])])
949 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then
950 AC_DEFINE_UNQUOTED(HAVE_DECL_${tr_func})
956 dnl This is the multiple headers version of the LYX_CHECK_DECL macro above.
957 dnl Called like LYX_CHECK_DECL_HDRS(function, file1 file2 file3)
958 AC_DEFUN(LYX_CHECK_DECL_HDRS,
961 tr_hdr=`echo $I | tr . _`
962 if test "${got}" = "no"; then
963 LYX_CHECK_DECL($1, $I)
965 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then