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.2) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
189 2.95.*) CXXFLAGS="-g $lyx_opt -fno-exceptions";;
190 2.96*) CXXFLAGS="-g $lyx_opt -fno-exceptions";;
191 2.97*) CXXFLAGS="-g $lyx_opt -fvtable-thunks -fno-builtin -ffunction-sections -fdata-sections"
192 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE=1";;
193 3.0*) CXXFLAGS="-g $lyx_opt -fvtable-thunks -fno-builtin -ffunction-sections -fdata-sections";;
194 *2.91.*) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
195 *) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
200 if test x$with_warnings = xyes ; then
202 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
203 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
204 2.97*) CXXFLAGS="$CXXFLAGS -W -Wall";;
205 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
207 if test $lyx_devel_version = yes ; then
211 2.97*) CXXFLAGS="$CXXFLAGS -Wconversion -Winline";;
219 test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
224 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
226 AC_DEFUN(LYX_CXX_RTTI,[
227 ### Check whether the compiler supports runtime type information
228 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
232 virtual int tag() { return 0; }
234 class derived1 : public rtti {
236 int tag() { return 1; }
238 class derived2 : public rtti {
240 int tag() { return 2; }
243 derived1 * foo1 = new derived1();
244 derived2 * foo2 = new derived2();
246 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
250 bar1 = dynamic_cast<derived1 *>(bar);
255 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
257 if test x$lyx_cv_rtti = xyes ; then
258 AC_DEFINE(HAVE_RTTI, 1,
259 [Define to 1 if your compiler supports runtime type information])
263 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
264 dnl understands the "explicit" directive.
265 AC_DEFUN(LYX_CXX_EXPLICIT,[
266 ### Check whether the compiler understands the keyword `explicit'
267 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
272 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
274 if test $lyx_cv_explicit = no ; then
275 AC_DEFINE(explicit,[ ],
276 [Define to nothing if your compiler does not understand the
277 'explicit' directive])
281 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
282 dnl has a working stl stack template
283 AC_DEFUN(LYX_CXX_STL_STACK,[
284 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
291 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
293 if test $lyx_cv_broken_stack = yes ; then
294 AC_DEFINE(BROKEN_STL_STACK, 1,
295 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
300 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
301 dnl count template, if not the old HP version is assumed.
302 AC_DEFUN(LYX_STD_COUNT,[
303 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
307 int countChar(char * b, char * e, char const c)
309 return count(b, e, c);
313 int i = countChar(a, a + 5, 'l');
314 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
316 if test $lyx_cv_std_count = yes ; then
317 AC_DEFINE(HAVE_STD_COUNT, 1,
318 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
322 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
323 dnl supports modern STL streams
324 AC_DEFUN(LYX_CXX_STL_MODERN_STREAMS,[
325 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
329 std::streambuf * test = std::cerr.rdbuf();
331 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
333 if test $lyx_cv_modern_streams = yes ; then
334 AC_DEFINE(MODERN_STL_STREAMS, 1,
335 [Define if you have modern standard-compliant STL streams])
339 dnl Usage: LYX_CXX_STL_STRING : checks whether the C++ compiler
340 dnl has a std::string that is usable for LyX. LyX does not require this
341 dnl std::string to be standard.
342 AC_DEFUN(LYX_CXX_STL_STRING,[
343 AC_REQUIRE([LYX_PROG_CXX])
344 AC_MSG_CHECKING(whether the included std::string should be used)
345 AC_ARG_WITH(included-string,
346 [ --with-included-string use LyX string class instead of STL string],
347 [lyx_cv_with_included_string=$withval],
348 [AC_CACHE_CHECK([],lyx_cv_with_included_string,
353 // LyX has reduced its requirements on the basic_string
354 // implementation so that the basic_string supplied
355 // with gcc is usable. In particular this means that
356 // lyx does not use std::string::clear and not the
357 // strncmp version of std::string::compare. This is mainly
358 // done so that LyX can use precompiled C++ libraries that
359 // already uses the systems basic_string, e.g. gtk--
360 string a("hello there");
364 //int t = a.compare(a.length() - 1, 1, s);
367 lyx_cv_with_included_string=no
369 lyx_cv_with_included_string=yes
373 if test x$lyx_cv_with_included_string = xyes ; then
374 AC_DEFINE(USE_INCLUDED_STRING, 1,
375 [Define to use the lyxstring class bundled with LyX.])
376 lyx_flags="$lyx_flags included-string"
378 AM_CONDITIONAL(USE_LYXSTRING, test x$lyx_cv_with_included_string = xyes)
379 dnl AC_MSG_RESULT([$with_included_string])
383 dnl Usage: LYX_CXX_GOOD_STD_STRING : checks whether the C++ compiler
384 dnl has a std::string that is close to the standard. So close that
385 dnl methods not found in "unstandard" std::strings are present here.
386 AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[
387 AC_REQUIRE([LYX_PROG_CXX])
388 AC_CACHE_CHECK([whether the systems std::string is really good],
389 [lyx_cv_std_string_good],
394 // From a std::string that is supposed to be close to the
395 // standard we require at least three things:
396 // - clear() and erase()
397 // - the strncmp of compare()
399 string a("hello there");
403 int t = a.compare(a.length() - 1, 1, s);
407 lyx_cv_std_string_good=yes
409 lyx_cv_std_string_good=no
413 if test x$lyx_cv_std_string_good = xyes ; then
414 AC_DEFINE(STD_STRING_IS_GOOD, 1,
415 [Define if the systems std::string is really good.])
420 dnl Usage: LYX_REGEX : checks if the header regex.h is available
421 dnl if it is not available the automake variable USE_REGEX will be
422 dnl defined and the regex.h and regex.c that we provide will be used.
424 AC_CHECK_HEADERS(regex.h, lyx_regex=no, lyx_regex=yes)
425 AM_CONDITIONAL(USE_REGEX, test x$lyx_regex = xyes)
430 AC_DEFUN(LYX_CXX_MUTABLE, [
431 AC_REQUIRE([LYX_PROG_CXX])
432 AC_CACHE_CHECK([if C++ compiler supports mutable],
439 void foo() const { c=0; }
443 lyx_cv_cxx_mutable=yes
445 lyx_cv_cxx_mutable=no
448 if test $lyx_cv_cxx_mutable = yes ; then
449 AC_DEFINE(HAVE_MUTABLE, 1,
450 [Defined if your compiler suports 'mutable'.])
456 AC_DEFUN(LYX_CXX_PARTIAL, [
457 AC_REQUIRE([LYX_PROG_CXX])
458 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
459 [lyx_cv_cxx_partial_specialization],
462 template<class T, class K>
466 template<class T> class k<void,T> { };
471 lyx_cv_cxx_partial_specialization=yes
473 lyx_cv_cxx_partial_specialization=no
476 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
477 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
478 [Defined if your compiler supports partial specialization.])
483 dnl Usage: LYX_CXX_NAMESPACES : checks whether the C++ compiler
484 dnl has a correct namespace handling and define CXX_WORKING_NAMESPACES
485 dnl if true. This macro does not do a thourough test, but it should be
486 dnl good enough to suit our needs.
487 AC_DEFUN(LYX_CXX_NAMESPACES,[
488 AC_CACHE_CHECK(for correct namespaces support,lyx_cv_cxx_namespace,
496 ],lyx_cv_cxx_namespace=yes,lyx_cv_cxx_namespace=no)
498 if test x$lyx_cv_cxx_namespace = xyes ; then
499 AC_DEFINE(CXX_WORKING_NAMESPACES, 1,
500 [Define if your C++ compiler has correct support for namespaces])
505 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
506 dnl provides wrappers for C headers and use our alternate version otherwise.
507 AC_DEFUN(LYX_CXX_CHEADERS,[
508 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
518 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
519 if test $lyx_cv_cxx_cheaders = no ; then
520 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
523 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
524 dnl are already in the global namespace
525 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
526 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
527 lyx_cv_cxx_global_cstd,
533 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
534 if test x$lyx_cv_cxx_global_cstd = xyes; then
535 AC_DEFINE(CXX_GLOBAL_CSTD,1,
536 [Define if your C++ compiler puts C library functions in the global namespace])
540 dnl Usage LYX_PATH_XPM: Checks for xpm library and header
541 AC_DEFUN(LYX_PATH_XPM,[
542 ### Check for Xpm library
543 AC_CHECK_LIB(Xpm, XpmCreateBufferFromImage,LYX_LIBS="-lXpm $LYX_LIBS",
544 [LYX_LIB_ERROR(libXpm,Xpm)], $LYX_LIBS)
546 ### Check for Xpm headers
547 lyx_cv_xpm_h_location="<xpm.h>"
548 AC_CHECK_HEADER(X11/xpm.h,[
549 ac_cv_header_xpm_h=yes
550 lyx_cv_xpm_h_location="<X11/xpm.h>"],[
551 AC_CHECK_HEADER(xpm.h,[],[
552 LYX_LIB_ERROR(xpm.h,Xpm)])])
553 AC_DEFINE_UNQUOTED(XPM_H_LOCATION,$lyx_cv_xpm_h_location)
555 ### Test for the header version
556 if test $ac_cv_header_xpm_h = yes; then
557 AC_CACHE_CHECK([xpm header version],lyx_cv_xpmversion,
558 [ cat > conftest.$ac_ext <<EOF
559 #line __oline__ "configure"
560 #include "confdefs.h"
562 #include XPM_H_LOCATION
563 "%%%"lyx_cv_xpmv=XpmVersion;lyx_cv_xpmr=XpmRevision"%%%"
565 eval `(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
566 grep '^"%%%"' 2>/dev/null | \
567 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
568 case "$lyx_cv_xpmr" in
570 [0-9]) lyxxpmr_alpha=`echo $lyx_cv_xpmr |tr 123456789 abcdefghi`
571 lyxxpmv_alpha=" (aka 3.$lyx_cv_xpmv$lyxxpmr_alpha)";;
575 lyx_cv_xpmversion="$lyx_cv_xpmv.$lyx_cv_xpmr$lyxxpmv_alpha"
577 case "$lyx_cv_xpmr" in
579 [789]|[0-9][0-9]*) ;;
581 *) LYX_WARNING([Version $lyx_cv_xpmversion of the Xpm library is a bit old.
582 If you experience strange crashes with LyX, try to upgrade
583 to at least version 4.7 (aka 3.4g).
584 If you have installed a newer version of the library, check whether you
585 have an old xpm.h header file in your include path.]);;
590 dnl Usage LYX_PATH_XFORMS: Checks for xforms library and flags
591 AC_DEFUN(LYX_PATH_XFORMS,[
592 ### Check for xforms library
593 AC_CHECK_LIB(forms, fl_initialize, LYX_LIBS="-lforms $LYX_LIBS",
594 [AC_CHECK_LIB(xforms, fl_initialize, LYX_LIBS="-lxforms $LYX_LIBS",
595 [LYX_LIB_ERROR(libforms or libxforms,xforms)], $LYX_LIBS)], $LYX_LIBS)
597 ### Check for xforms headers
598 lyx_cv_forms_h_location="<forms.h>"
599 AC_CHECK_HEADER(X11/forms.h,[
600 ac_cv_header_forms_h=yes
601 lyx_cv_forms_h_location="<X11/forms.h>"],[
602 AC_CHECK_HEADER(forms.h,[],[
603 LYX_LIB_ERROR(forms.h,forms)])])
604 AC_DEFINE_UNQUOTED(FORMS_H_LOCATION,$lyx_cv_forms_h_location)
605 if test $ac_cv_header_forms_h = yes; then
606 AC_CACHE_CHECK([xforms header version],lyx_cv_xfversion,
607 [ cat > conftest.$ac_ext <<EOF
608 #line __oline__ "configure"
609 #include "confdefs.h"
611 #include FORMS_H_LOCATION
612 #if ! defined(FL_INCLUDE_VERSION)
615 "%%%"FL_VERSION.FL_REVISION.FL_FIXLEVEL"%%%"
618 lyx_cv_xfversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
619 grep '^"%%%"' 2>/dev/null | \
620 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
622 case "$lyx_cv_xfversion" in
623 "(unknown)"|0.8[1-7]*)
625 Version $lyx_cv_xfversion of xforms is not compatible with LyX.
626 This version of LyX works best with versions 0.88 (recommended) and later.) ;;
628 0.89*) LYX_WARNING(dnl
629 LyX should work ok with version $lyx_cv_xfversion of xforms[,] but
630 it is an unproven version and might still have some bugs. If you
631 have problems[,] please use version 0.88 instead.) ;;
633 Version $lyx_cv_xfversion of xforms might not be compatible with LyX[,]
634 since it is newer than 0.88. You might have slight problems with it.);;
639 dnl Usage: LYX_HPUX Checks for HP-UX and update CXXFLAGS accordingly
641 [#It seems that HPUX requires using -fpcc-struct-return with gcc.
642 AC_CACHE_CHECK(for HP-UX,ac_cv_hpux,[
643 os=`uname -s | tr '[A-Z]' '[a-z]'`
645 test "$os" = hp-ux && ac_cv_hpux=yes])
646 if test "$ac_cv_hpux" = yes; then
647 test "x$GXX" = xyes && CXXFLAGS="$CXXFLAGS -fpcc-struct-return"
651 dnl Usage: LYX_SUNOS4 Checks for SunOS 4.x and sets the flag lyx_broken_headers
654 [#The headers are not correct under SunOS4
655 AC_CACHE_CHECK(for SunOS 4.x,ac_cv_sunos4,[
657 os=`uname -a | sed -e 's/^\([^ ]*\) [^ ]* \([0-9]\)\..*/\1\2/'`
658 changequote([, ]) dnl
660 test "$os" = SunOS4 && ac_cv_sunos4=yes])
661 if test "$ac_cv_sunos4" = yes; then
662 test "x$GXX" = xyes && lyx_broken_headers=yes
666 dnl Usage: LYX_SCO Checks for SCO and sets the flag lyx_broken_headers
669 [AC_CACHE_CHECK(for SCO 3.2v4,ac_cv_sco,[
671 if test `uname -s` != "SCO_SV"; then
672 lyx_machine_rel=`uname -m`:`uname -r`
673 if test $lyx_machine_rel = i386:3.2 || test $lyx_machine_rel = i486:3.2;
675 if test -f /usr/options/cb.name; then
677 elif /bin/uname -X 2>/dev/null >/dev/null ; then
682 if test "$ac_cv_sco" = yes; then
683 test "x$GXX" = xyes && lyx_broken_headers=yes
686 dnl Usage: LYX_FUNC_PUTENV_ARGTYPE
687 dnl Checks whether putenv() takes 'char const *' or 'char *' as
688 dnl argument. This is needed because Solaris 7 (wrongly?) uses 'char *',
689 dnl while everybody else uses the former...
690 AC_DEFUN(LYX_FUNC_PUTENV_ARGTYPE,
691 [AC_MSG_CHECKING([type of argument for putenv()])
692 AC_CACHE_VAL(lyx_cv_func_putenv_arg,dnl
694 [#include <cstdlib>],
695 [char const * foo = "bar";
697 [lyx_cv_func_putenv_arg='char const *'],[lyx_cv_func_putenv_arg='char *'])])
698 AC_MSG_RESULT($lyx_cv_func_putenv_arg)
699 AC_DEFINE_UNQUOTED(PUTENV_TYPE_ARG,$lyx_cv_func_putenv_arg,dnl
700 [Define to the type of the argument of putenv(). Needed on Solaris 7.])])
703 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
704 dnl [default-yes-value])
705 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
706 dnl resulting directory name in 'dir-var-name'.
707 AC_DEFUN(LYX_WITH_DIR,[
708 AC_ARG_WITH($1,[ --with-$1 specify $2])
709 AC_MSG_CHECKING([for $2])
710 if test -z "$with_$3"; then
711 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
713 test "x$with_$3" = xyes && with_$3=$5
716 AC_MSG_RESULT($lyx_cv_$3)])
719 dnl Usage: LYX_LOOP_DIR(value,action)
720 dnl Executes action for values of variable `dir' in `values'. `values' can
721 dnl use ":" as a separator.
722 AC_DEFUN(LYX_LOOP_DIR,[
723 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
724 for dir in `eval "echo $1"`; do
725 if test ! "$dir" = NONE; then
726 test ! -d "$dir" && AC_ERROR([\"$dir\" is not a directory])
734 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
736 AC_DEFUN(LYX_ADD_LIB_DIR,[
738 if test "`(uname) 2>/dev/null`" = SunOS &&
739 uname -r | grep '^5' >/dev/null; then
740 if test $ac_cv_prog_gxx = yes ; then
741 $1="${$1} -Wl[,]-R$2"
748 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
750 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
752 ### Check which libsigc++ we're using and make sure any external one works
753 ### Check for libsigc++ library
754 AC_DEFUN(LYX_WITH_SIGC,
755 [AC_MSG_CHECKING(whether the included libsigc++ should be used)
756 AC_ARG_WITH([included-libsigc],
757 [ --without-included-libsigc
758 Use the libsigc++ installed on the system],
759 [lyx_use_included_libsigc=$withval],
760 [lyx_use_included_libsigc=yes])
761 AC_MSG_RESULT([$lyx_use_included_libsigc])
762 if test x$lyx_use_included_libsigc = xno; then
763 ### Check for libsigc++
764 ## can't use AC_SUBST right here!
769 [Cannot find libsigc++ library or headers at least as recent as 0.8.7.
770 Check your installation. Have you installed the development package?])
773 ### Use the included libsigc++
774 ### sigc-config hasn't been created yet so we can't just do the same as above
775 ### unless of course someone gets keen and merges the sigc++ configure.in
776 ### with this one. We don't really gain much by doing that though except
777 ### a considerably smaller dist and more difficult maintenance.
778 ### It'd also mean we'd have the equivalent of config/gettext.m4
779 lyx_flags="$lyx_flags included-libsigc"
780 SIGC_LIBS="\`\${top_builddir}/sigc++/sigc-config --libs-names | sed -e 's/-lsigc//'\`"
781 # Libsigc++ always installs into a subdirectory called sigc++. Therefore we
782 # have to always use #include <sigc++/signal_system.h> in our code.
783 # Remember if you decide to do anything to the sigc++ code to do your mods on
784 # the makeLyXsigc.sh script in development/tools using a current cvs checkout
785 # of libsigc++. A tarball distribution doesn't have everything in it that we
787 # We need both these -I entries to build when builddir != srcdir
788 if test "x$src_dir" = "x." ; then
789 SIGC_CFLAGS="-I\${top_srcdir}"
791 SIGC_CFLAGS="-I\${top_builddir} -I\${top_srcdir}"
793 INCLUDED_SIGC="\${top_builddir}/sigc++/libsigc.la"
794 ## can't substitute these here like this otherwise all remaining tests fail
795 ## instead we SUBST directly into the Makefiles
796 ##LIBS="$LIBS \$SIGC_LIBS"
797 ##CPPFLAGS="$CPPFLAGS \$SIGC_CFLAGS"
799 AC_SUBST(SIGC_CFLAGS)
801 AC_SUBST(INCLUDED_SIGC)
804 ### Check for a headers existence and location iff it exists
805 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
806 ## It almost works. I've tried a few variations but they give errors
807 ## of one sort or other: bad substitution or file not found etc. The
808 ## actual header _is_ found though and the cache variable is set however
809 ## the reported setting (on screen) is equal to $ac_safe for some unknown
811 ## Additionally, autoheader can't figure out what to use as the name in
812 ## the config.h.in file so we need to write our own entries there -- one for
813 ## each header in the form PATH_HEADER_NAME_H
815 AC_DEFUN(LYX_PATH_HEADER,
816 [ AC_CHECK_HEADER($1,[
817 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
818 ### the only remaining problem is getting the second parameter to this
819 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
820 ### of $ac_safe being printed.
821 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
822 [ cat > conftest.$ac_ext <<EOF
823 #line __oline__ "configure"
824 #include "confdefs.h"
828 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
829 grep $1 2>/dev/null | \
830 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
831 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
833 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path)])
835 ### end of LYX_PATH_HEADER
837 ### Check for stl_string_fwd.h existence and location if it exists
838 AC_DEFUN(LYX_STL_STRING_FWD,
839 [ AC_CHECK_HEADER(stl_string_fwd.h,[
840 AC_CACHE_CHECK([path to stl_string_fwd.h],lyx_cv_path_stl_string_fwd_h,
841 [ cat > conftest.$ac_ext <<EOF
842 #line __oline__ "configure"
843 #include "confdefs.h"
845 #include <stl_string_fwd.h>
847 lyx_cv_path_stl_string_fwd_h=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
848 grep 'stl_string_fwd.h' 2>/dev/null | \
849 sed -e 's/.*\(".*stl_string_fwd.h"\).*/\1/' -e "1q"`
851 AC_DEFINE_UNQUOTED(STL_STRING_FWD_H_LOCATION,$lyx_cv_path_stl_string_fwd_h,
852 [define this to the location of stl_string_fwd.h to be used with #include,
853 NOTE: Do not set it to <stl_string_fwd.h> as that will find the LyX
854 supplied version of the header.
855 e.g. <../include/stl_string_fwd.h> or better yet use an absolute path])])
859 dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)]
860 dnl if the cache file is inconsistent with the current host,
861 dnl target and build system types, execute CMD or print a default
863 AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [
864 AC_REQUIRE([AC_CANONICAL_SYSTEM])
865 AC_MSG_CHECKING([config.cache system type])
866 if { test x"${ac_cv_host_system_type+set}" = x"set" &&
867 test x"$ac_cv_host_system_type" != x"$host"; } ||
868 { test x"${ac_cv_build_system_type+set}" = x"set" &&
869 test x"$ac_cv_build_system_type" != x"$build"; } ||
870 { test x"${ac_cv_target_system_type+set}" = x"set" &&
871 test x"$ac_cv_target_system_type" != x"$target"; }; then
872 AC_MSG_RESULT([different])
874 [AC_MSG_ERROR(["you must remove config.cache and restart configure"])])
876 AC_MSG_RESULT([same])
878 ac_cv_host_system_type="$host"
879 ac_cv_build_system_type="$build"
880 ac_cv_target_system_type="$target"
883 dnl We use this until autoconf fixes its version.
884 AC_DEFUN(LYX_FUNC_SELECT_ARGTYPES,
885 [AC_MSG_CHECKING([types of arguments for select()])
886 AC_CACHE_VAL(ac_cv_func_select_arg234,dnl
887 [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl
888 [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl
889 [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do
890 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
892 [#ifdef HAVE_SYS_TYPES_H
893 #include <sys/types.h>
895 #ifdef HAVE_SYS_TIME_H
896 #include <sys/time.h>
898 #ifdef HAVE_SYS_SELECT_H
899 #include <sys/select.h>
901 #ifdef HAVE_SYS_SOCKET_H
902 #include <sys/socket.h>
904 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
905 [ac_not_found=no ; break 3],ac_not_found=yes)
912 if test "$ac_not_found" = yes; then
913 ac_cv_func_select_arg1=int
914 ac_cv_func_select_arg234='int *'
915 ac_cv_func_select_arg5='struct timeval *'
917 AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5])
918 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1)
919 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234))
920 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5))
923 ### Check which frontend we want to use. The default is XForms
925 AC_DEFUN(LYX_USE_FRONTEND,
926 [AC_MSG_CHECKING(what frontend should be used as main GUI)
927 AC_ARG_WITH(frontend,
928 [ --with-frontend[=value] Use THIS frontend as main GUI:
929 Possible values: xforms,kde,gnome],
930 [lyx_use_frontend="$withval"], [lyx_use_frontend="xforms"])
931 AC_MSG_RESULT($lyx_use_frontend)
932 lyx_flags="$lyx_flags frontend-$lyx_use_frontend"
934 AC_SUBST(FRONTEND_GUILIB)
935 AC_SUBST(FRONTEND_LDFLAGS)
936 AC_SUBST(FRONTEND_INCLUDES)
937 AC_SUBST(FRONTEND_LIBS)
941 dnl Check things are declared in headers to avoid errors or warnings.
942 dnl Called like LYX_CHECK_DECL(function, headerfile)
943 dnl Defines HAVE_DECL_{FUNCTION}
944 AC_DEFUN(LYX_CHECK_DECL,
945 [AC_MSG_CHECKING(if $1 is declared by header $2)
946 tr_func=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
948 tr_hdr=`echo $2 | tr . _`
949 AC_CACHE_VAL([lyx_cv_declare_${tr_hdr}_$1],
950 [AC_EGREP_HEADER($1, $2, [eval "lyx_cv_declare_${tr_hdr}_$1=yes"], [eval "lyx_cv_declare_${tr_hdr}_$1=no"])])
951 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then
952 AC_DEFINE_UNQUOTED(HAVE_DECL_${tr_func})
958 dnl This is the multiple headers version of the LYX_CHECK_DECL macro above.
959 dnl Called like LYX_CHECK_DECL_HDRS(function, file1 file2 file3)
960 AC_DEFUN(LYX_CHECK_DECL_HDRS,
963 tr_hdr=`echo $I | tr . _`
964 if test "${got}" = "no"; then
965 LYX_CHECK_DECL($1, $I)
967 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then