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)
35 dnl Define the option to set a LyX version on installed executables and directories
38 AC_DEFUN(LYX_VERSION_SUFFIX,[
39 AC_MSG_CHECKING([for install target ... ])
40 AC_ARG_WITH(lyx-version,
41 [ --with-lyx-version[=<version>] install lyx files as lyx-<suffix>],
42 [if test "x$withval" = "xyes";
45 ac_configure_args=`echo $ac_configure_args | sed "s,--with-lyx-version,--with-lyx-version=$withval,"`
47 lyxname="lyx-$withval"
48 program_suffix=-$withval],
50 AC_MSG_RESULT([$lyxname])
53 dnl Usage: LYX_ERROR(message) Displays the warning "message" and sets the
54 dnl flag lyx_error to yes.
56 lyx_error_txt="$lyx_error_txt
62 dnl Usage: LYX_WARNING(message) Displays the warning "message" and sets the
63 dnl flag lyx_warning to yes.
64 AC_DEFUN(LYX_WARNING,[
65 lyx_warning_txt="$lyx_warning_txt
71 dnl Usage: LYX_LIB_ERROR(file,library) Displays an error message indication
72 dnl that 'file' cannot be found because 'lib' may be uncorrectly installed.
73 AC_DEFUN(LYX_LIB_ERROR,[
74 LYX_ERROR([Cannot find $1. Please check that the $2 library
75 is correctly installed on your system.])])
78 dnl Usage: LYX_CHECK_ERRORS Displays a warning message if a LYX_ERROR
79 dnl has occured previously.
80 AC_DEFUN(LYX_CHECK_ERRORS,[
81 if test x$lyx_error = xyes; then
83 **** The following problems have been detected by configure.
84 **** Please check the messages below before running 'make'.
85 **** (see the section 'Problems' in the INSTALL file)
88 deleting cache $cache_file
93 if test x$lyx_warning = xyes; then
95 === The following minor problems have been detected by configure.
96 === Please check the messages below before running 'make'.
97 === (see the section 'Problems' in the INSTALL file)
102 Configuration of LyX was successful.
103 Type 'make' to compile the program,
104 and then 'make install' to install it.
109 dnl LYX_SEARCH_PROG(VARIABLE-NAME,PROGRAMS-LIST,ACTION-IF-FOUND)
111 define(LYX_SEARCH_PROG,[dnl
112 for ac_prog in $2 ; do
113 # Extract the first word of "$ac_prog", so it can be a program name with args.
114 set dummy $ac_prog ; ac_word=$[2]
115 if test -z "[$]$1"; then
116 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
117 for ac_dir in $PATH; do
118 test -z "$ac_dir" && ac_dir=.
119 if test -f [$ac_dir/$ac_word]; then
127 if test -n "[$]$1"; then
133 test -n "[$]$1" && break
138 AC_DEFUN(LYX_PROG_CXX_WORKS,
141 AC_TRY_COMPILER([class foo { int bar; }; int main(){return(0);}], ac_cv_prog_cxx_works, ac_cv_prog_cxx_cross)
143 if test $ac_cv_prog_cxx_works = no; then
146 cross_compiling=$ac_cv_prog_cxx_cross
150 AC_DEFUN(LYX_PROG_CXX,
151 [AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl
152 AC_MSG_CHECKING([for a working C++ compiler])
153 LYX_SEARCH_PROG(CXX, $CCC g++ gcc c++ CC cxx xlC cc++, LYX_PROG_CXX_WORKS)
155 if test -z "$CXX" ; then
156 AC_ERROR([Unable to find a working C++ compiler])
162 AC_MSG_CHECKING([whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler])
163 AC_MSG_RESULT($cross_compiling)
167 dnl We might want to get or shut warnings.
168 AC_ARG_WITH(warnings,
169 [ --with-warnings tell the compiler to display more warnings],,
170 [ if test $lyx_devel_version = yes -o $lyx_prerelease = yes && test $ac_cv_prog_gxx = yes ; then
175 if test x$with_warnings = xyes ; then
176 lyx_flags="$lyx_flags warnings"
177 AC_DEFINE(WITH_WARNINGS, 1,
178 [Define this if you want to see the warning directives put here and
179 there by the developpers to get attention])
182 # optimize less for development versions
183 if test $lyx_devel_version = yes -o $lyx_prerelease = yes ; then
189 # set the debug flags correctly.
190 if test $ac_cv_prog_gxx = yes; then
192 dnl Check whether -g works, even if CXXFLAGS is set, in case the package
193 dnl plays around with CXXFLAGS (such as to build both debugging and
194 dnl normal versions of a library), tasteless as that idea is.
195 ac_test_CXXFLAGS="${CXXFLAGS+set}"
196 ac_save_CXXFLAGS="$CXXFLAGS"
198 dnl Check the version of g++
199 gxx_version=`${CXX} --version`
202 if test "$ac_test_CXXFLAGS" = set; then
203 CXXFLAGS="$ac_save_CXXFLAGS"
204 elif test $ac_cv_prog_cxx_g = yes; then
206 2.95.1) CXXFLAGS="-g $lyx_opt -fpermissive -fno-rtti -fno-exceptions";;
207 2.95.2) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
208 2.95.*) CXXFLAGS="-g $lyx_opt -fno-exceptions";;
209 2.96*) CXXFLAGS="-g $lyx_opt -fno-exceptions";;
210 2.97*) CXXFLAGS="-g $lyx_opt -fvtable-thunks -fno-builtin -ffunction-sections -fdata-sections"
211 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE=1";;
212 3.0*) CXXFLAGS="-g $lyx_opt -fvtable-thunks -fno-builtin -ffunction-sections -fdata-sections";;
213 *2.91.*) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
214 *) CXXFLAGS="-g $lyx_opt -fno-rtti -fno-exceptions";;
219 if test x$with_warnings = xyes ; then
221 2.95.*) CXXFLAGS="$CXXFLAGS -W -Wall";;
222 2.96*) CXXFLAGS="$CXXFLAGS -W -Wall";;
223 2.97*) CXXFLAGS="$CXXFLAGS -W -Wall";;
224 *) CXXFLAGS="$CXXFLAGS -W -Wall";;
226 if test $lyx_devel_version = yes ; then
230 2.97*) CXXFLAGS="$CXXFLAGS -Wconversion -Winline";;
238 test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
243 dnl Usage: LYX_CXX_RTTI : checks whether the C++ compiler
245 AC_DEFUN(LYX_CXX_RTTI,[
246 ### Check whether the compiler supports runtime type information
247 AC_CACHE_CHECK(whether the C++ compiler supports RTTI,lyx_cv_rtti,
251 virtual int tag() { return 0; }
253 class derived1 : public rtti {
255 int tag() { return 1; }
257 class derived2 : public rtti {
259 int tag() { return 2; }
262 derived1 * foo1 = new derived1();
263 derived2 * foo2 = new derived2();
265 derived1 * bar1 = dynamic_cast<derived1 *>(bar);
269 bar1 = dynamic_cast<derived1 *>(bar);
274 ],lyx_cv_rtti=yes,lyx_cv_rtti=no,lyx_cv_rtti=no)
276 if test x$lyx_cv_rtti = xyes ; then
277 AC_DEFINE(HAVE_RTTI, 1,
278 [Define to 1 if your compiler supports runtime type information])
282 dnl Usage: LYX_CXX_EXPLICIT : checks whether the C++ compiler
283 dnl understands the "explicit" directive.
284 AC_DEFUN(LYX_CXX_EXPLICIT,[
285 ### Check whether the compiler understands the keyword `explicit'
286 AC_CACHE_CHECK(whether the C++ compiler understands explicit,lyx_cv_explicit,
291 };],,lyx_cv_explicit=yes,lyx_cv_explicit=no)
293 if test $lyx_cv_explicit = no ; then
294 AC_DEFINE(explicit,[ ],
295 [Define to nothing if your compiler does not understand the
296 'explicit' directive])
300 dnl Usage: LYX_CXX_STL_STACK : checks whether the C++ compiler
301 dnl has a working stl stack template
302 AC_DEFUN(LYX_CXX_STL_STACK,[
303 AC_CACHE_CHECK(for broken STL stack template,lyx_cv_broken_stack,
310 ],lyx_cv_broken_stack=no,lyx_cv_broken_stack=yes)
312 if test $lyx_cv_broken_stack = yes ; then
313 AC_DEFINE(BROKEN_STL_STACK, 1,
314 [Define if you have the STL from libg++ 2.7.x, where stack<> is not defined
319 dnl Usage: LYX_STD_COUNT : checks wherer the C++ library have a conforming
320 dnl count template, if not the old HP version is assumed.
321 AC_DEFUN(LYX_STD_COUNT,[
322 AC_CACHE_CHECK(for conforming std::count,lyx_cv_std_count,
326 int countChar(char * b, char * e, char const c)
328 return count(b, e, c);
332 int i = countChar(a, a + 5, 'l');
333 ],lyx_cv_std_count=yes,lyx_cv_std_count=no)
335 if test $lyx_cv_std_count = yes ; then
336 AC_DEFINE(HAVE_STD_COUNT, 1,
337 [Define if you have a conforming std::count template, otherwise HP version of count template is assumed.])
341 dnl Usage: LYX_CXX_STL_MODERN_STREAMS : checks whether the C++ compiler
342 dnl supports modern STL streams
343 AC_DEFUN(LYX_CXX_STL_MODERN_STREAMS,[
344 AC_CACHE_CHECK(for modern STL streams,lyx_cv_modern_streams,
348 std::streambuf * test = std::cerr.rdbuf();
350 ],lyx_cv_modern_streams=yes,lyx_cv_modern_streams=no)
352 if test $lyx_cv_modern_streams = yes ; then
353 AC_DEFINE(MODERN_STL_STREAMS, 1,
354 [Define if you have modern standard-compliant STL streams])
358 dnl Usage: LYX_CXX_STL_STRING : checks whether the C++ compiler
359 dnl has a std::string that is usable for LyX. LyX does not require this
360 dnl std::string to be standard.
361 AC_DEFUN(LYX_CXX_STL_STRING,[
362 AC_REQUIRE([LYX_PROG_CXX])
363 AC_MSG_CHECKING(whether the included std::string should be used)
364 AC_ARG_WITH(included-string,
365 [ --with-included-string use LyX string class instead of STL string],
366 [lyx_cv_with_included_string=$withval],
367 [AC_CACHE_CHECK([],lyx_cv_with_included_string,
372 // LyX has reduced its requirements on the basic_string
373 // implementation so that the basic_string supplied
374 // with gcc is usable. In particular this means that
375 // lyx does not use std::string::clear and not the
376 // strncmp version of std::string::compare. This is mainly
377 // done so that LyX can use precompiled C++ libraries that
378 // already uses the systems basic_string, e.g. gtk--
379 string a("hello there");
383 //int t = a.compare(a.length() - 1, 1, s);
386 lyx_cv_with_included_string=no
388 lyx_cv_with_included_string=yes
392 if test x$lyx_cv_with_included_string = xyes ; then
393 AC_DEFINE(USE_INCLUDED_STRING, 1,
394 [Define to use the lyxstring class bundled with LyX.])
395 lyx_flags="$lyx_flags included-string"
397 AM_CONDITIONAL(USE_LYXSTRING, test x$lyx_cv_with_included_string = xyes)
398 dnl AC_MSG_RESULT([$with_included_string])
402 dnl Usage: LYX_CXX_GOOD_STD_STRING : checks whether the C++ compiler
403 dnl has a std::string that is close to the standard. So close that
404 dnl methods not found in "unstandard" std::strings are present here.
405 AC_DEFUN(LYX_CXX_GOOD_STD_STRING,[
406 AC_REQUIRE([LYX_PROG_CXX])
407 AC_CACHE_CHECK([whether the systems std::string is really good],
408 [lyx_cv_std_string_good],
413 // From a std::string that is supposed to be close to the
414 // standard we require at least three things:
415 // - clear() and erase()
416 // - the strncmp of compare()
418 string a("hello there");
422 int t = a.compare(a.length() - 1, 1, s);
426 lyx_cv_std_string_good=yes
428 lyx_cv_std_string_good=no
432 if test x$lyx_cv_std_string_good = xyes ; then
433 AC_DEFINE(STD_STRING_IS_GOOD, 1,
434 [Define if the systems std::string is really good.])
439 dnl Usage: LYX_REGEX : checks if the header regex.h is available
440 dnl if it is not available the automake variable USE_REGEX will be
441 dnl defined and the regex.h and regex.c that we provide will be used.
443 AC_CHECK_HEADERS(regex.h, lyx_regex=no, lyx_regex=yes)
444 AM_CONDITIONAL(USE_REGEX, test x$lyx_regex = xyes)
449 AC_DEFUN(LYX_CXX_MUTABLE, [
450 AC_REQUIRE([LYX_PROG_CXX])
451 AC_CACHE_CHECK([if C++ compiler supports mutable],
458 void foo() const { c=0; }
462 lyx_cv_cxx_mutable=yes
464 lyx_cv_cxx_mutable=no
467 if test $lyx_cv_cxx_mutable = yes ; then
468 AC_DEFINE(HAVE_MUTABLE, 1,
469 [Defined if your compiler suports 'mutable'.])
475 AC_DEFUN(LYX_CXX_PARTIAL, [
476 AC_REQUIRE([LYX_PROG_CXX])
477 AC_CACHE_CHECK([if C++ compiler supports partial specialization],
478 [lyx_cv_cxx_partial_specialization],
481 template<class T, class K>
485 template<class T> class k<void,T> { };
490 lyx_cv_cxx_partial_specialization=yes
492 lyx_cv_cxx_partial_specialization=no
495 if test x$lyx_cv_cxx_partial_specialization = xyes ; then
496 AC_DEFINE(HAVE_PARTIAL_SPECIALIZATION, 1,
497 [Defined if your compiler supports partial specialization.])
502 dnl Usage: LYX_CXX_NAMESPACES : checks whether the C++ compiler
503 dnl has a correct namespace handling and define CXX_WORKING_NAMESPACES
504 dnl if true. This macro does not do a thourough test, but it should be
505 dnl good enough to suit our needs.
506 AC_DEFUN(LYX_CXX_NAMESPACES,[
507 AC_CACHE_CHECK(for correct namespaces support,lyx_cv_cxx_namespace,
515 ],lyx_cv_cxx_namespace=yes,lyx_cv_cxx_namespace=no)
517 if test x$lyx_cv_cxx_namespace = xyes ; then
518 AC_DEFINE(CXX_WORKING_NAMESPACES, 1,
519 [Define if your C++ compiler has correct support for namespaces])
524 dnl Usage: LYX_CXX_CHEADERS : checks whether the C++ compiler
525 dnl provides wrappers for C headers and use our alternate version otherwise.
526 AC_DEFUN(LYX_CXX_CHEADERS,[
527 AC_CACHE_CHECK(for C headers wrappers,lyx_cv_cxx_cheaders,
537 #include <ctime>],[lyx_cv_cxx_cheaders=yes],[lyx_cv_cxx_cheaders=no])])
538 if test $lyx_cv_cxx_cheaders = no ; then
539 LYX_ADD_INC_DIR(lyx_cppflags,\$(top_srcdir)/src/cheaders)
542 dnl Usage: LYX_CXX_GLOBAL_CSTD: checks whether C library functions
543 dnl are already in the global namespace
544 AC_DEFUN(LYX_CXX_GLOBAL_CSTD,[
545 AC_CACHE_CHECK(whether C library functions are already in the global namespace,
546 lyx_cv_cxx_global_cstd,
552 ],[lyx_cv_cxx_global_cstd=no],[lyx_cv_cxx_global_cstd=yes])])
553 if test x$lyx_cv_cxx_global_cstd = xyes; then
554 AC_DEFINE(CXX_GLOBAL_CSTD,1,
555 [Define if your C++ compiler puts C library functions in the global namespace])
559 dnl Usage LYX_PATH_XPM: Checks for xpm library and header
560 AC_DEFUN(LYX_PATH_XPM,[
561 ### Check for Xpm library
562 AC_CHECK_LIB(Xpm, XpmCreateBufferFromImage,LYX_LIBS="-lXpm $LYX_LIBS",
563 [LYX_LIB_ERROR(libXpm,Xpm)], $LYX_LIBS)
565 ### Check for Xpm headers
566 lyx_cv_xpm_h_location="<xpm.h>"
567 AC_CHECK_HEADER(X11/xpm.h,[
568 ac_cv_header_xpm_h=yes
569 lyx_cv_xpm_h_location="<X11/xpm.h>"],[
570 AC_CHECK_HEADER(xpm.h,[],[
571 LYX_LIB_ERROR(xpm.h,Xpm)])])
572 AC_DEFINE_UNQUOTED(XPM_H_LOCATION,$lyx_cv_xpm_h_location)
574 ### Test for the header version
575 if test $ac_cv_header_xpm_h = yes; then
576 AC_CACHE_CHECK([xpm header version],lyx_cv_xpmversion,
577 [ cat > conftest.$ac_ext <<EOF
578 #line __oline__ "configure"
579 #include "confdefs.h"
581 #include XPM_H_LOCATION
582 "%%%"lyx_cv_xpmv=XpmVersion;lyx_cv_xpmr=XpmRevision"%%%"
584 eval `(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
585 grep '^"%%%"' 2>/dev/null | \
586 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
587 case "$lyx_cv_xpmr" in
589 [0-9]) lyxxpmr_alpha=`echo $lyx_cv_xpmr |tr 123456789 abcdefghi`
590 lyxxpmv_alpha=" (aka 3.$lyx_cv_xpmv$lyxxpmr_alpha)";;
594 lyx_cv_xpmversion="$lyx_cv_xpmv.$lyx_cv_xpmr$lyxxpmv_alpha"
596 case "$lyx_cv_xpmr" in
598 [789]|[0-9][0-9]*) ;;
600 *) LYX_WARNING([Version $lyx_cv_xpmversion of the Xpm library is a bit old.
601 If you experience strange crashes with LyX, try to upgrade
602 to at least version 4.7 (aka 3.4g).
603 If you have installed a newer version of the library, check whether you
604 have an old xpm.h header file in your include path.]);;
609 dnl Usage LYX_PATH_XFORMS: Checks for xforms library and flags
610 AC_DEFUN(LYX_PATH_XFORMS,[
611 ### Check for xforms library
612 AC_CHECK_LIB(forms, fl_initialize, LYX_LIBS="-lforms $LYX_LIBS",
613 [AC_CHECK_LIB(xforms, fl_initialize, LYX_LIBS="-lxforms $LYX_LIBS",
614 [LYX_LIB_ERROR(libforms or libxforms,xforms)], $LYX_LIBS)], $LYX_LIBS)
616 ### Check for xforms headers
617 lyx_cv_forms_h_location="<forms.h>"
618 AC_CHECK_HEADER(X11/forms.h,[
619 ac_cv_header_forms_h=yes
620 lyx_cv_forms_h_location="<X11/forms.h>"],[
621 AC_CHECK_HEADER(forms.h,[],[
622 LYX_LIB_ERROR(forms.h,forms)])])
623 AC_DEFINE_UNQUOTED(FORMS_H_LOCATION,$lyx_cv_forms_h_location)
624 if test $ac_cv_header_forms_h = yes; then
625 AC_CACHE_CHECK([xforms header version],lyx_cv_xfversion,
626 [ cat > conftest.$ac_ext <<EOF
627 #line __oline__ "configure"
628 #include "confdefs.h"
630 #include FORMS_H_LOCATION
631 #if ! defined(FL_INCLUDE_VERSION)
634 "%%%"FL_VERSION.FL_REVISION.FL_FIXLEVEL"%%%"
637 lyx_cv_xfversion=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
638 grep '^"%%%"' 2>/dev/null | \
639 sed -e 's/^"%%%"\(.*\)"%%%"/\1/' -e 's/ //g'`
641 case "$lyx_cv_xfversion" in
642 "(unknown)"|0.8[1-7]*)
644 Version $lyx_cv_xfversion of xforms is not compatible with LyX.
645 This version of LyX works best with versions 0.88 (recommended) and later.) ;;
647 0.89*) LYX_WARNING(dnl
648 LyX should work ok with version $lyx_cv_xfversion of xforms[,] but
649 it is an unproven version and might still have some bugs. If you
650 have problems[,] please use version 0.88 instead.) ;;
652 Version $lyx_cv_xfversion of xforms might not be compatible with LyX[,]
653 since it is newer than 0.88. You might have slight problems with it.);;
658 dnl Usage: LYX_HPUX Checks for HP-UX and update CXXFLAGS accordingly
660 [#It seems that HPUX requires using -fpcc-struct-return with gcc.
661 AC_CACHE_CHECK(for HP-UX,ac_cv_hpux,[
662 os=`uname -s | tr '[A-Z]' '[a-z]'`
664 test "$os" = hp-ux && ac_cv_hpux=yes])
665 if test "$ac_cv_hpux" = yes; then
666 test "x$GXX" = xyes && CXXFLAGS="$CXXFLAGS -fpcc-struct-return"
670 dnl Usage: LYX_SUNOS4 Checks for SunOS 4.x and sets the flag lyx_broken_headers
673 [#The headers are not correct under SunOS4
674 AC_CACHE_CHECK(for SunOS 4.x,ac_cv_sunos4,[
676 os=`uname -a | sed -e 's/^\([^ ]*\) [^ ]* \([0-9]\)\..*/\1\2/'`
677 changequote([, ]) dnl
679 test "$os" = SunOS4 && ac_cv_sunos4=yes])
680 if test "$ac_cv_sunos4" = yes; then
681 test "x$GXX" = xyes && lyx_broken_headers=yes
685 dnl Usage: LYX_SCO Checks for SCO and sets the flag lyx_broken_headers
688 [AC_CACHE_CHECK(for SCO 3.2v4,ac_cv_sco,[
690 if test `uname -s` != "SCO_SV"; then
691 lyx_machine_rel=`uname -m`:`uname -r`
692 if test $lyx_machine_rel = i386:3.2 || test $lyx_machine_rel = i486:3.2;
694 if test -f /usr/options/cb.name; then
696 elif /bin/uname -X 2>/dev/null >/dev/null ; then
701 if test "$ac_cv_sco" = yes; then
702 test "x$GXX" = xyes && lyx_broken_headers=yes
705 dnl Usage: LYX_FUNC_PUTENV_ARGTYPE
706 dnl Checks whether putenv() takes 'char const *' or 'char *' as
707 dnl argument. This is needed because Solaris 7 (wrongly?) uses 'char *',
708 dnl while everybody else uses the former...
709 AC_DEFUN(LYX_FUNC_PUTENV_ARGTYPE,
710 [AC_MSG_CHECKING([type of argument for putenv()])
711 AC_CACHE_VAL(lyx_cv_func_putenv_arg,dnl
713 [#include <cstdlib>],
714 [char const * foo = "bar";
716 [lyx_cv_func_putenv_arg='char const *'],[lyx_cv_func_putenv_arg='char *'])])
717 AC_MSG_RESULT($lyx_cv_func_putenv_arg)
718 AC_DEFINE_UNQUOTED(PUTENV_TYPE_ARG,$lyx_cv_func_putenv_arg,dnl
719 [Define to the type of the argument of putenv(). Needed on Solaris 7.])])
722 dnl Usage: LYX_WITH_DIR(dir-name,desc,dir-var-name,default-value,
723 dnl [default-yes-value])
724 dnl Adds a --with-'dir-name' option (described by 'desc') and puts the
725 dnl resulting directory name in 'dir-var-name'.
726 AC_DEFUN(LYX_WITH_DIR,[
727 AC_ARG_WITH($1,[ --with-$1 specify $2])
728 AC_MSG_CHECKING([for $2])
729 if test -z "$with_$3"; then
730 AC_CACHE_VAL(lyx_cv_$3, lyx_cv_$3=$4)
732 test "x$with_$3" = xyes && with_$3=$5
735 AC_MSG_RESULT($lyx_cv_$3)])
738 dnl Usage: LYX_LOOP_DIR(value,action)
739 dnl Executes action for values of variable `dir' in `values'. `values' can
740 dnl use ":" as a separator.
741 AC_DEFUN(LYX_LOOP_DIR,[
742 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
743 for dir in `eval "echo $1"`; do
744 if test ! "$dir" = NONE; then
745 test ! -d "$dir" && AC_ERROR([\"$dir\" is not a directory])
753 dnl Usage: LYX_ADD_LIB_DIR(var-name,dir) Adds a -L directive to variable
755 AC_DEFUN(LYX_ADD_LIB_DIR,[
757 if test "`(uname) 2>/dev/null`" = SunOS &&
758 uname -r | grep '^5' >/dev/null; then
759 if test $ac_cv_prog_gxx = yes ; then
760 $1="${$1} -Wl[,]-R$2"
767 dnl Usage: LYX_ADD_INC_DIR(var-name,dir) Adds a -I directive to variable
769 AC_DEFUN(LYX_ADD_INC_DIR,[$1="${$1} -I$2 "])
771 ### Check which libsigc++ we're using and make sure any external one works
772 ### Check for libsigc++ library
773 AC_DEFUN(LYX_WITH_SIGC,
774 [AC_MSG_CHECKING(whether the included libsigc++ should be used)
775 AC_ARG_WITH([included-libsigc],
776 [ --without-included-libsigc
777 Use the libsigc++ installed on the system],
778 [lyx_use_included_libsigc=$withval],
779 [lyx_use_included_libsigc=yes])
780 AC_MSG_RESULT([$lyx_use_included_libsigc])
781 if test x$lyx_use_included_libsigc = xno; then
782 ### Check for libsigc++
783 ## can't use AC_SUBST right here!
788 [Cannot find libsigc++ library or headers at least as recent as 0.8.7.
789 Check your installation. Have you installed the development package?])
792 ### Use the included libsigc++
793 ### sigc-config hasn't been created yet so we can't just do the same as above
794 ### unless of course someone gets keen and merges the sigc++ configure.in
795 ### with this one. We don't really gain much by doing that though except
796 ### a considerably smaller dist and more difficult maintenance.
797 ### It'd also mean we'd have the equivalent of config/gettext.m4
798 lyx_flags="$lyx_flags included-libsigc"
799 SIGC_LIBS="\`\${top_builddir}/sigc++/sigc-config --libs-names | sed -e 's/-lsigc//'\`"
800 # Libsigc++ always installs into a subdirectory called sigc++. Therefore we
801 # have to always use #include <sigc++/signal_system.h> in our code.
802 # Remember if you decide to do anything to the sigc++ code to do your mods on
803 # the makeLyXsigc.sh script in development/tools using a current cvs checkout
804 # of libsigc++. A tarball distribution doesn't have everything in it that we
806 # We need both these -I entries to build when builddir != srcdir
807 if test "x$src_dir" = "x." ; then
808 SIGC_CFLAGS="-I\${top_srcdir}"
810 SIGC_CFLAGS="-I\${top_builddir} -I\${top_srcdir}"
812 INCLUDED_SIGC="\${top_builddir}/sigc++/libsigc.la"
813 ## can't substitute these here like this otherwise all remaining tests fail
814 ## instead we SUBST directly into the Makefiles
815 ##LIBS="$LIBS \$SIGC_LIBS"
816 ##CPPFLAGS="$CPPFLAGS \$SIGC_CFLAGS"
818 AC_SUBST(SIGC_CFLAGS)
820 AC_SUBST(INCLUDED_SIGC)
823 ### Check for a headers existence and location iff it exists
824 ## This is supposed to be a generalised version of LYX_STL_STRING_FWD
825 ## It almost works. I've tried a few variations but they give errors
826 ## of one sort or other: bad substitution or file not found etc. The
827 ## actual header _is_ found though and the cache variable is set however
828 ## the reported setting (on screen) is equal to $ac_safe for some unknown
830 ## Additionally, autoheader can't figure out what to use as the name in
831 ## the config.h.in file so we need to write our own entries there -- one for
832 ## each header in the form PATH_HEADER_NAME_H
834 AC_DEFUN(LYX_PATH_HEADER,
835 [ AC_CHECK_HEADER($1,[
836 ac_tr_safe=PATH_`echo $ac_safe | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
837 ### the only remaining problem is getting the second parameter to this
838 ### AC_CACHE_CACHE to print correctly. Currently it just results in value
839 ### of $ac_safe being printed.
840 AC_CACHE_CHECK([path to $1],[lyx_cv_path2_$ac_safe],
841 [ cat > conftest.$ac_ext <<EOF
842 #line __oline__ "configure"
843 #include "confdefs.h"
847 lyx_path_header_path=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
848 grep $1 2>/dev/null | \
849 sed -e 's/.*\(".*$1"\).*/\1/' -e "1q"`
850 eval "lyx_cv_path2_${ac_safe}=\$lyx_path_header_path"
852 AC_DEFINE_UNQUOTED($ac_tr_safe, $lyx_path_header_path)])
854 ### end of LYX_PATH_HEADER
856 ### Check for stl_string_fwd.h existence and location if it exists
857 AC_DEFUN(LYX_STL_STRING_FWD,
858 [ AC_CHECK_HEADER(stl_string_fwd.h,[
859 AC_CACHE_CHECK([path to stl_string_fwd.h],lyx_cv_path_stl_string_fwd_h,
860 [ cat > conftest.$ac_ext <<EOF
861 #line __oline__ "configure"
862 #include "confdefs.h"
864 #include <stl_string_fwd.h>
866 lyx_cv_path_stl_string_fwd_h=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | \
867 grep 'stl_string_fwd.h' 2>/dev/null | \
868 sed -e 's/.*\(".*stl_string_fwd.h"\).*/\1/' -e "1q"`
870 AC_DEFINE_UNQUOTED(STL_STRING_FWD_H_LOCATION,$lyx_cv_path_stl_string_fwd_h,
871 [define this to the location of stl_string_fwd.h to be used with #include,
872 NOTE: Do not set it to <stl_string_fwd.h> as that will find the LyX
873 supplied version of the header.
874 e.g. <../include/stl_string_fwd.h> or better yet use an absolute path])])
878 dnl AC_VALIDATE_CACHE_SYSTEM_TYPE[(cmd)]
879 dnl if the cache file is inconsistent with the current host,
880 dnl target and build system types, execute CMD or print a default
882 AC_DEFUN(AC_VALIDATE_CACHE_SYSTEM_TYPE, [
883 AC_REQUIRE([AC_CANONICAL_SYSTEM])
884 AC_MSG_CHECKING([config.cache system type])
885 if { test x"${ac_cv_host_system_type+set}" = x"set" &&
886 test x"$ac_cv_host_system_type" != x"$host"; } ||
887 { test x"${ac_cv_build_system_type+set}" = x"set" &&
888 test x"$ac_cv_build_system_type" != x"$build"; } ||
889 { test x"${ac_cv_target_system_type+set}" = x"set" &&
890 test x"$ac_cv_target_system_type" != x"$target"; }; then
891 AC_MSG_RESULT([different])
893 [AC_MSG_ERROR(["you must remove config.cache and restart configure"])])
895 AC_MSG_RESULT([same])
897 ac_cv_host_system_type="$host"
898 ac_cv_build_system_type="$build"
899 ac_cv_target_system_type="$target"
902 dnl We use this until autoconf fixes its version.
903 AC_DEFUN(LYX_FUNC_SELECT_ARGTYPES,
904 [AC_MSG_CHECKING([types of arguments for select()])
905 AC_CACHE_VAL(ac_cv_func_select_arg234,dnl
906 [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl
907 [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl
908 [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do
909 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
911 [#ifdef HAVE_SYS_TYPES_H
912 #include <sys/types.h>
914 #ifdef HAVE_SYS_TIME_H
915 #include <sys/time.h>
917 #ifdef HAVE_SYS_SELECT_H
918 #include <sys/select.h>
920 #ifdef HAVE_SYS_SOCKET_H
921 #include <sys/socket.h>
923 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
924 [ac_not_found=no ; break 3],ac_not_found=yes)
931 if test "$ac_not_found" = yes; then
932 ac_cv_func_select_arg1=int
933 ac_cv_func_select_arg234='int *'
934 ac_cv_func_select_arg5='struct timeval *'
936 AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5])
937 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1)
938 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234))
939 AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5))
942 ### Check which frontend we want to use. The default is XForms
944 AC_DEFUN(LYX_USE_FRONTEND,
945 [AC_MSG_CHECKING(what frontend should be used as main GUI)
946 AC_ARG_WITH(frontend,
947 [ --with-frontend[=value] Use THIS frontend as main GUI:
948 Possible values: xforms,kde,gnome],
949 [lyx_use_frontend="$withval"], [lyx_use_frontend="xforms"])
950 AC_MSG_RESULT($lyx_use_frontend)
951 lyx_flags="$lyx_flags frontend-$lyx_use_frontend"
953 AC_SUBST(FRONTEND_GUILIB)
954 AC_SUBST(FRONTEND_LDFLAGS)
955 AC_SUBST(FRONTEND_INCLUDES)
956 AC_SUBST(FRONTEND_LIBS)
960 dnl Check things are declared in headers to avoid errors or warnings.
961 dnl Called like LYX_CHECK_DECL(function, headerfile)
962 dnl Defines HAVE_DECL_{FUNCTION}
963 AC_DEFUN(LYX_CHECK_DECL,
964 [AC_MSG_CHECKING(if $1 is declared by header $2)
965 tr_func=`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
967 tr_hdr=`echo $2 | tr . _`
968 AC_CACHE_VAL([lyx_cv_declare_${tr_hdr}_$1],
969 [AC_EGREP_HEADER($1, $2, [eval "lyx_cv_declare_${tr_hdr}_$1=yes"], [eval "lyx_cv_declare_${tr_hdr}_$1=no"])])
970 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then
971 AC_DEFINE_UNQUOTED(HAVE_DECL_${tr_func})
977 dnl This is the multiple headers version of the LYX_CHECK_DECL macro above.
978 dnl Called like LYX_CHECK_DECL_HDRS(function, file1 file2 file3)
979 AC_DEFUN(LYX_CHECK_DECL_HDRS,
982 tr_hdr=`echo $I | tr . _`
983 if test "${got}" = "no"; then
984 LYX_CHECK_DECL($1, $I)
986 if eval "test \"\${lyx_cv_declare_${tr_hdr}_$1}\" = \"yes\""; then